牛顿迭代法-matlab实现

牛顿迭代法-matlab实现

牛顿迭代法简介:

牛顿迭代法又称为切线法,简单来说就是不断求切线与x轴的交点,来逐渐接近解的迭代过程。方法使用函数f(x)的泰勒级数的前面几项来寻找方程f(x) = 0的根。具体迭代的方法可以看度娘的解释,或者相关的教材。今天来介绍下简单的matlab的实现。

代码实现:

使用了三个.m文件来实现,分别是原函数(需要迭代的函数)文件、牛顿迭代函数文件、和实现的主文件。

1.原函数的输入:

function y = newton(x)
y = exp(-x/4)*(2-x)-1;%任意函数
end
%function的自定义函数用来保存咱们要进行牛顿迭代的函数

2.牛顿迭代函数:

 把你要进行牛顿迭代的函数进行变化,变成牛顿迭代函数。先要了解牛顿迭代函数的基本格式,

牛顿迭代公式:

              **𝝋 (𝒙) = 𝒙 − 𝒇 𝒙 𝒇′** 

代码:`

function y = newton1(x)
syms a;
f = a - (newton(a)./diff(newton(a)));
y = subs(f,x);%牛顿迭代公式
end
%如果直接用y和x来实现的话,在掉用原函数的时候就算出了具体数值,公式中的求导就会变为0,
无法求解,所以先用f,a来代替y和x,最后再进行替换,实现牛顿迭代公式。

3.主程序(进行牛顿迭代)

代码:

x = input('x=');%开始迭代最初的x
eps = input('eps=');%定义所要求解的精度
syms x1;%定义两Xk+1和Xk的差,一次来限制精度的要求
x1=100;
syms xa;
xa=x;
syms xb;%记录上一个x和下一个x
while x1>eps
    xb = xa;
    xa = newton1(xb);
    x1 = abs(xa-xb);%得到▲x 
end
disp('该函数符合规定精度的解是:');
double(xa)
xa即为所求的值

总结:

代码用来限制精度的方面只是简单的用前后两次的x进行做差来限制,还有很多不足,有时候是不成立的,像这两次的x误差很小,但是第三个x的时候开始发散,那xa所求的就不是正确答案,牛顿迭代法也有很多的限制,例如开始迭代的x如果取得不好也无法实现迭代过程,求最开始的迭代x值,可以结合二分法迭代来解决,进一步缩小有根区间,在进行牛顿迭代,代码可能还有很多不足和错误,欢迎大家指正。

评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值