📄 speeddesc.m
字号:
%最速下降法
clear;
syms x1 x2;
fun=fun1;
x0=[0;0];%设置初点
x=x0;
Dfx=[diff(fun,x1);diff(fun,x2)];
dfx=subs(Dfx,[x1 x2],x);
e=1e-6;%设置精度
num=0;%迭代次数
fx=subs(fun,[x1 x2],x);
d=-dfx;
d_fan=sqrt(d'*d);
%开始用最速下降法迭代求最优点
while(d_fan>e)
alpha=1;
sigma=0.5;
rho=0.5;
%开始用Armijo型线搜索方法求步长,并取σ=0.5,ρ=0.5
while(subs(fun,[x1 x2],x+alpha*d)>(subs(fun,[x1 x2],x)+sigma*alpha*dfx'*d))
alpha=rho*alpha;
end
x=x+alpha*d;
fx=subs(fun,[x1 x2],x);
dfx=subs(Dfx,[x1 x2],x);
d=-dfx;
d_fan=sqrt(d'*d);
num=num+1;
end
fprintf('\n最速下降法\n结果:\n优化精度为ε=%d\n初指点x0=[%d %d]\n最优点x=[ %d %d ] \n最优值fx=%d \n||d||=%d \n迭代次数k=%d\n',e,x0(1),x0(2),x(1),x(2),fx,d_fan,num);
[x,y]=meshgrid(-3:0.1:3,-3:0.1:3);
z=(x.^2-y+1).^2+(x-cos(pi/2*y)).^2;
meshc(x,y,z);
xlabel('x1');
ylabel('x2');
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -