%最速下降法
%输入目标函数fx,初始值x0
function [xbest,fbest,lamada,k,aaeps] = desc(fx,x0)
maxk=20; %最大迭代次数
k = 0; %初始化迭代次数
epslion = 10^(-5); %精度
syms x1 x2 lama;
d = -jacobian(fx); %搜索方向
aa = subs(norm(d),[x1,x2],x0); %求梯度的模
while (k<maxk)
%终止条件:小于精度则输出,否则继续迭代
while (aa>epslion)
dd = subs(d,[x1,x2],x0);
xa = x0+lama*dd; %步长变量为lama
ff = subs(fx,[x1,x2],xa);
flama = diff(ff,lama); %对lama求导
lamada = solve(flama==0,lama); %求驻点,得到lamada
x0 = x0+lamada*dd; %迭代后的值
aa = subs(norm(d),[x1,x2],x0); %求梯度的模
k = k+1;
end
end
xbest = x0;
fbest = subs(fx,[x1,x2],xbest);
aaeps = aa;
disp([xbest,fbest,lamada,k,aaeps])
最速下降法MATLAB
最新推荐文章于 2024-04-23 02:26:39 发布