Newton迭代法

f ( x ) f(x) f(x) [ a , b ] [a,b] [a,b]中有二阶连续导数,且满足条件:

(1) f ( a ) ⋅ f ( b ) < 0 ; f(a) \cdot f(b)<0; f(a)f(b)<0;
(2) f ′ ( x ) 在 ( a , b ) 保号 ; f^{\prime}(x)在(a,b)保号; f(x)(a,b)保号;
(3) f ′ ′ ( x ) 在 ( a , b ) 保号 ; f^{''}(x)在(a,b)保号; f′′(x)(a,b)保号;

x 0 x_0 x0是a和b满足:
f ( x 0 ) ⋅ f ′ ′ ( x 0 ) > 0 f(x_0) \cdot f^{''}(x_0)>0 f(x0)f′′(x0)>0

的那一个点,则以 x 0 x_0 x0为初值的 N e w t o n Newton Newton迭代过程:
x k + 1 = x k − f ( x k ) f ′ ( x k ) , k = 1 , 2 , ⋯ x_{k+1}=x_{k}-\frac{f(x_{k})}{f^{\prime}(x_{k})},k=1,2,\cdots xk+1=xkf(xk)f(xk)k=1,2,

产生的序列 x n {x_n} xn单调收敛于方程
f ( x ) = 0 f(x)=0 f(x)=0
[ a , b ] [a,b] [a,b]中唯一解。

clear
% f: 表示要求解根的函数
syms x;
% f =sin(x) - x/2;
% f=x^3+3*x-5
f=exp(-x)-x



df=diff(f, x, 1);

% x0: 初始估计值
x0 = 0.5;

% maxIterations: 最大迭代次数
% tolerance: 容忍误差
x0 = 1;
maxIterations = 100;
tolerance = 1e-6;

% 初始化迭代次数和当前的近似根
iterations = 0;
root = x0;

% 开始迭代
while iterations < maxIterations
    % 计算当前迭代的函数值和导数值
   fval=double(subs(f, x, root));
   dfval=double(subs(df, x, root));
    
    % 使用Newton迭代公式更新根的值
    root = root - fval / dfval;
    
    % 检查是否满足容忍误差
    if abs(fval) < tolerance
        break;
    end
    
    iterations = iterations + 1;
end

fprintf('Root: %.6f\n', root);
fprintf('Iterations: %d\n', iterations);

% disp(root);%matlab默认为四位数字
% disp(iterations);
  • 25
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值