📄 cgm.txt
字号:
以函数
f=1-(1/(sqrt(2*pi)))*(exp((-(xi-3)^2+yi^2)/2)+0.6*exp((-(xi+3)^2+yi^2)/2));
为例 求解最小值
function f=conjugate_gradient(x0,eps)
x=x0;
syms xi yi a
f=1-(1/(sqrt(2*pi)))*(exp((-(xi-3)^2+yi^2)/2)+0.6*exp((-(xi+3)^2+yi^2)/2));
fx=diff(f,xi);
fy=diff(f,yi);
fx=subs(fx,{xi,yi},x0);
fy=subs(fy,{xi,yi},x0);
fi=[fx,fy];%求得初始的梯度
n=0;
while double(sqrt(fx^2+fy^2))>eps
s=-fi;
if n<=0
s=-fi;
else
s=s1;
end%初始的搜索方向
x=x+a*s;
f=subs(f,{xi,yi},x);
f1=diff(f);
f1=solve(f1);%精确的线性搜索
if f1~=0
ai=double(f1);
else
break
x,n
end
x=subs(x,a,ai);
f=1-(1/(sqrt(2*pi)))*(exp((-(xi-3)^2+yi^2)/2)+0.6*exp((-(xi+3)^2+yi^2)/2));
fxi=diff(f,xi);
fyi=diff(f,yi);
fxi=subs(fxi,{xi,yi},x);
fyi=subs(fyi,{xi,yi},x);
fii=[fxi,fyi];
d=(fxi^2+fyi^2)/(fx^2+fy^2);
s1=-fii+d*s; %搜索方向
n=n+1; %搜索次数
fx=fxi;
fy=fyi;
end
x,n
%请输入:conjugate_gradient([0,0],10^(-6))后运行
f=(1.5-xi*(1-yi))^2+(2.25-xi*(1-yi^2))^2+(2.625-xi*(1-yi^3))^2
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -