📄 conjugate_grad_2d.m
字号:
%%共轭梯度法
%************************************************************************%
%input this:
%conjugate_grad_2d([2,2],0.05)
%************************************************************************%
function f=conjugate_grad_2d(x,t)
x0=x;
t0=t;
syms xi yi a
[f fx fy]=fun_x(xi,yi,x0); %
fi=[fx fy];
count=0;
while double(sqrt(fx^2+fy^2))>t0
s=-fi;
if count<=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,f=subs(f,{xi,yi},x),count
end
x=subs(x,a,ai);
[f fxi fyi]=fun_x(xi,yi,x); %
fii=[fxi fyi];
d=(fxi^2+fyi^2)/(fx^2+fy^2);
s1=-fii+d*s;
count=count+1;
fx=fxi;
fy=fyi;
end
x,f=subs(f,{xi,yi},x),count
%*************************************************************************%
function [ff f_x f_y]=fun_x(x_i,y_i,xx)
ff=x_i^2+2*y_i^2-4*x_i-2*x_i*y_i;
f_x=diff(ff,x_i); %对x求偏导
f_y=diff(ff,y_i); %对y求偏导
f_x=subs(f_x,{x_i,y_i},xx);
f_y=subs(f_y,{x_i,y_i},xx);
%*************************************************************************%
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -