牛顿法
原理:
注意:牛顿法对初值比较敏感,若初值给的不合适,系统很有可能会出现不收敛的情况。
主函数:
syms x
h=x^3+x^2-1;
x=newton_eq(h,1,1000) %1是迭代初值 1000是迭代次数
子函数:
function result=newton_eq(h,x,n) %n是迭代次数
f=matlabFunction(h); %把H转化为句柄
f1=matlabFunction(diff(h)); %对h求导转为句柄
X(1)=x; %迭代的过程存写在大写的X中
i=2;
while 1;
X(i)=X(i-1)-f(X(i-1))/f1(X(i-1));
if abs(f(X(i)))<1e-6
result=X(i);
return;
end
if i>n
result=X(i);
return;
end
i=i+1;
end
牛顿下山法
原理:
主函数:
syms x
h=x^3+x^2-1;
x=newton_eq(h,1,1000) %1是迭代初值 1000是迭代次数
子函数:
functionresult=newton_eq(h,x,n) %n是迭代次数
f=matlabFunction(h); %把H转化为句柄
f1=matlabFunction(diff(h)); %对h求导转为句柄
X(1)=x; %迭代的过程存写在大写的X中
i=2;
lamda=1;
while 1;
X(i)=X(i-1)-lamda*f(X(i-1))/f1(X(i-1));
if abs(f(X(i)))<1e-6
result=X(i);
return;
end
if abs(f(X(i))) lamda=1; else lamda=lamda/2; end if i>n result=X(i); return; end i=i+1; end