无约束优化--共轭梯度法例题matlab代码

题目:用共轭梯度法求下列函数的极小点:

f(x)=4x_{1}^{2}+4x_{2}^{2}-4x_{1}x_{2}-12x_{2},取初始点x^{0}=(-0.5,1)^{T}

%% 共轭梯度法
x=[];
x(1,:)=[-0.5,1];
% y=4*x1^2+4*x2^2-4*x1*x2-12*x2;
average=[];
gard_y=[];%梯度
beta=[];
d=[];
for i=1:2
    x1=x(i,1);
    x2=x(i,2);
    gard_y(i,1)=8*x1-4*x2;
    gard_y(i,2)=8*x2-4*x1-12;
    if i==1
        d(i,:)=(-1)*gard_y(i,:);
    else
        t1=gard_y(i-1,1);
        t2=gard_y(i-1,2);
        t3=gard_y(i,1);
        t4=gard_y(i,2);
        beta(i-1)=(t3^2+t4^2)/(t1^2+t2^2);  %仅针对二维
        d(i,:)=(-1)*gard_y(i,:)+beta(i-1)*d(i-1,:);
    end
    d_com=d(i,:);
    
    [x_next,aver]=compute(d_com,x1,x2);
    x(i+1,:)=x_next;
    average(i)=aver;
end

function [x_next,aver]=compute(d,x1,x2)
syms x;
X1=d(1)*x+x1;
X2=d(2)*x+x2;
f=4*X1^2+4*X2^2-4*X1*X2-12*X2;
s = solve(f,x); % f为符号函数,当不采用包含等式==的方程时,默认求根,否则求方程的解
aver=mean(s);
x_next=[x1+aver*d(1),x2+aver*d(2)];
end

共轭梯度法具有二次终止性,经过有限次迭代即可达到最优,本题经过两次迭代即得到最优。

两次一维精确搜索得到的步长\alpha分别为:0.1635、0.1275

第二次迭代得到的\beta ^{^{0}}为:0.3328

两次迭代得到方向d分别为:\left ( 8,2 \right )^{T}\left ( 1.5089,5.2811 \right )^{T}

两次迭代得到x分别为:\left ( 0.8077,1.3269 \right )^{T}\left (1,2 \right )^{T}

感觉作为一个课后作业,手算实在太复杂,尤其是求第二次迭代的步长\alpha^{1},差点以为做错了,因此编程确认过程的正确性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值