conjugate_grad_2d.m

来自「此共轭梯度算法是基于matlab7.0的用于最优化问题中」· M 代码 · 共 48 行

M
48
字号
%%共轭梯度法
%************************************************************************%
%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
f=subs(f,{xi,yi},x),count
%*************************************************************************%
function [ff f_x f_y]=fun_x(x_i,y_i,xx)
ff=(x_i-4)^2-(y_i+7)^2+2;
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 + =
减小字号Ctrl + -
显示快捷键?