首先你的两个代码的计算缺清过程和方法以及步骤是一致的。
只不过第二个将k==N放在循环内部判断是没有必要指银的。
放唯扮宴在while外面,可以节省点计算量。
如果你要求结果精度高一些的话,你调用:
x=nanewton1(fname,dfname,x0,e,N)
时e要小一些,比如说取1e-6这样。
另外:
if nargin<4
e=1e-4 %这个值也下调几个量级,作为缺省的精度。
end
牛顿迭和棚代法matlab实现如下:function [x_star,index,it] = Newton(fun,x,ep,it_max)
%求解非线性方程的牛顿法
%第一个分量是函数值,第二个分量是导数值
% x为初始点
% ep为精度,当 | x(k)-x(k-1) |<ep时,终止计算,缺省值为1e-5
% it_max为最大迭代次数,缺省虚答值为100
% x_star为当迭代成功时,输出方程的根
% 当迭代失败,输出最后的迭代值
% index为指标变量,当index=1时,表明迭代成功
% 当index=0时,表明迭代失败唤誉则(迭代次数>=it_max)
% it为迭代次数
if nargin<4 it_max=100end
if nargin<3 ep=1e-5end
index=0k=1
while k<it_max
x1=xf=feval(fun,x)
x=x-f(1)/f(2)
if abs(x-x1)<ep
index=1break
end
k=k+1
end
x_star=xit=k
程序示例如下:
fun=inline('[x^3-x-1,3*x^2-1]')
[x_star,index,it] = Newton(fun,1.5)
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)