matlab中共轭梯度法求二元二次函数最小值_[转载]共轭梯度法求二次凸函数的最小值(matlab代码)...

%共轭梯度法求二次凸函数的最小值(FR法)

%此代码不适用于求一般函数的最小值

function [minf]=myCGM

syms x1 x2;

f=fun([x1;x2]);%函数表达式

A=[4 2;2 2];%矩阵A即为上面函数的二次型中的参数A

x0=[0 0]';%初始点

mu=10^(-5);%最小误差

gradf=gradient(f);%函数的梯度

g0=subs(gradf,[x1;x2],x0);%在点x0处的梯度值

if g0'*g0

minf=subs(f,[x1;x2],x0);%函数的最小值

return;

end

d0=-g0;%搜索方向

alpha=-(g0'*d0)/(d0'*A*d0);%步长

xk=x0+alpha*d0;%下一点

gk=subs(gradf,[x1;x2],xk);%梯度值

beta=gk'*gk/(g0'*g0);%求搜索方向时的系数

dk=-gk+beta*d0;%下一个方向

x0=xk;%更新点

g0=gk;%更新所在点的梯度

d0=dk;%更新方向

while g0'*g0>mu

alpha=-(g0'*d0)/(d0'*A*d0);%步长

xk=x0+alpha*d0;%下一点

gk=subs(gradf,[x1;x2],xk);%梯度值

beta=gk'*gk/(g0'*g0);%求搜索方向时的系数

dk=-gk+beta*d0;%下一搜索方向

x0=xk;%更新点

g0=gk;%更新所在点的梯度

d0=dk;%更新方向

end

minf=subs(f,[x1;x2],xk);%函数的最小值

end

function y=fun(X)%函数

x1=X(1);

x2=X(2);

y=x1-x2+2*x1^2+2*x1*x2+x2^2-4;%可用二次型的形式表示

end

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值