共轭梯度法matlab实例 下载本文

内容发布更新时间 : 2024/5/6 13:38:57星期一 下面是文章的全部内容请认真阅读。

clearall;closeall;clc; symsx1x2t;

f=2*x1^2+x2^2-x1*x2;

f_grad=[diff(f,x1);diff(f,x2)]; X0=[1;1]; n=10;

epsonal=0.01; fx=inline(f);

fx_grad=inline(f_grad); X=X0;

fx0=fx(X(1),X(2));

fx0_grad=fx_grad(X(1),X(2)); while 1

if fx0_grad.'*fx0_grad<=epsonal break; end

P0=-fx0_grad; k=0; while 1 Xk=X+t*P0;

fx1=fx(Xk(1),Xk(2));

[tk,y]=equation_extremum(fx1,t,-1,5,epsonal); Xk=X+tk*P0;

fx0_k=fx(Xk(1),Xk(2));

fx0_grad_k=fx_grad(Xk(1),Xk(2)); if fx0_grad_k.'*fx0_grad_k<=epsonal fx0_grad=fx0_grad_k; break; end

if k+1==n

X=X; else

lamdak=fx0_grad_k.'*fx0_grad_k/(fx_grad(X(1),X(2)).'*fx_grad(X(1),X(2))); P0=-fx0_grad_k+lamdak*P0; X=Xk; k=k+1; end end end Xk fx0_k

运行结果: Xk =

1.0e-03 *

0.0486 0.5350 fx0_k =

2.6495e-07