牛頓法與牛頓下山法(切線法)
牛頓法
原理:
注意:牛頓法對初值比較敏感,若初值給的不合適,系統很有可能會出現不收斂的情況。
主函式:
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)))<abs(f(X(i-1)))
lamda=1;
else
lamda=lamda/2;
end
if i>n
result=X(i);
return;
end
i=i+1;
end