【编程】牛顿迭代法的Matlab编程实现——Matlab数值分析应用(二)

好了,这次该说到牛顿法了,牛顿法是求非线性方程根的又一种有效方法,实际上它的得来是在x处进行Taylor展开,其几何意义为通过对目标曲线进行不断求切线来得到近似解。
Matlab编程实现这个功能也不是很困难。

具体的牛顿公式大家还是看课本,这里Pavel给出M函数的内容,大家上机实践一下吧!

function [pl,err,k,y]=newton(f,df,p0,delta,max1)
%f是非线性函数
%df是f的微商
%p0是初始值
%delta是给定允许误差
%max1是迭代的最大次数
%p1是牛顿法求得的方程的近似解
%err是p0的误差估计
%k是迭代次数
%y=f(p1)
p0,feval(‘f’,p0)
for k=1:max1
p1=p0-feval(‘f’,p0)/feval(‘df’,p0);
err=abs(p1-p0);
p0=p1;
p1,err,k,y=feval(‘f’,p1)
if(err<delta)|(y==0),
break,end
p1,err,k,y=feval(‘f’,p1)
end

例如,求

例如,要求f(x)=x3-3x+2=0的近似值,给定一个初始值,p=1.2,误差界为10-6,首先在Matlab命令窗口中输入
先在命令窗口中输入:

>>fplot(’[x^3-3*x+2,0]‘,[-2.5 2.5]);grid;

得到一个输出图形,再用一个f.m的文件定义一个函数f(x)=x3-3x+2=0,

function y=f(x)

y=x^3-3*x+2;

再用一个名为df的文件定义函数的微商df(x)=3x2-3:

function y=df(x)

y=3*x^2-3;

最后在Matlab窗口中输入:

>>newton(‘f’,’df’,1.2,10^(-6),10)

回车便得到了该方程的解

程序有什么问题可以给Pavel留言报错,不过Pavel自己测试的没错。

祝你好运!

——————————————————————————————————————

注意!文章已更新!

由于文章中的程序在一些同学那里可以正常运行,另一些同学那里出现报错,于是Pavel又找了一个版本的算法实现,你可以两个都测试一下,选能用的使用。由于文章写于一年前,暂时也没条件进行程序调试,所以一些同学的问题没法做出回答,还请谅解!

下载地址:牛顿迭代法M文件下载