⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 conjugate_grad_2d.m

📁 此算法采用matlab7.0环境下编写的代码
💻 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 + -