非线性方程的数值解法——Newton法

非线性方程的数值解法——Newton法

考虑非线性方程:
f ( x ) = 0 f(x)=0 f(x)=0
设f(x)在x_k处可微,则可在x_k处泰勒展开为:
0 = f ( x ) = f ( x k ) + f ′ ( x k ) ( x − x k ) + o ( x − x k ) 2 0=f(x)=f(x_k)+f'(x_k)(x-x_k)+o(x-x_k)^2 0=f(x)=f(xk)+f(xk)(xxk)+o(xxk)2
当x在x_k的某个邻域时,可以忽略无穷小量o。
这样在x_k附近,原方程可以用下面的线性方程替代:
f ( x k ) + f ′ ( x k ) ( x − x k ) = 0 f(x_k)+f'(x_k)(x-x_k)=0 f(xk)+f(xk)(xxk)=0
则下一个迭代点为:
x k + 1 = x k − f ( x k ) f ′ ( x k ) x_{k+1} = x_k-\frac{f(x_k)}{f'(x_k)} xk+1=xkf(xk)f(xk)
这就是Newton法的迭代公式。

几何意义:
在这里插入图片描述
matlab程序:
用迭代公式计算根

function [x,k] = newton(fun,dfun,x0,e)
% Inputs  - fun,dfun 要求零点的函数及其导数
          - x0       根的初始值
          - e        容忍误差
% Outputs -x         根
          -k         迭代次数
          
x = x0 - fun(x0)/dfun(x0);
k = 1;  % 迭代次数
while abs(x-x0)>e
    x0 = x;
    x = x0 - fun(x0)/dfun(x0);
    k = k+1
end

x0 = 2;  % 初始值
e = 10^-8;  % 精度
fun = inline('x^3-2*x-5','x');
dfun = inline('3*x^2-2','x');

[x,k] = newton(fun,dfun,x0,e);

迭代次数k=4,比二分法要快,精度也高。

参考文献:
《数值计算方法》

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值