最速下降法求解无约束最优解问题

用最速下降法求函数f\left ( x_{1},x_{2} \right )= x_{1}^{2}+4x_{2}^{2}的极小值,迭代两次,计算各迭代点的函数值、梯度及其模,设初始点X^{\left (0 \right )}=\left ( 1,1 \right )^{T}

以下代码在求解的时候并没有严格按照题目中要求的迭代两次进行计算,而是设置了最大容许误差e,当迭代过程中g的范数小于e时候停止迭代,最终迭代了五次,如果按照题目中仅迭代两次的话误差就会稍微大一些。

clc
clear all
close all

% 定义允许误差e = 0.1
e = 0.1;
Q = [2 0;0 8];
X = [1,1]';


%% 最速下降法求解极小值
iloop1 = 1;
while(1)
    g = [2,8]'.* X;
    gArray(:,iloop1) = g;
    gNorm = norm(g);
    gNormVector(iloop1) = gNorm;
    Xarray(:,iloop1) = X ;
    fx = 0.5*X'*Q*X;
    fxVector(iloop1) = fx;
    X = X-(g'*g/(g'*Q*g))*g;
    iloop1 = iloop1 + 1;
    if (gNorm < e)
        break
    end
end

%% 绘制示意图
% 原函数fx图形
figure
[x1,x2] = meshgrid(-1:0.01:1,-1:0.01:1);
FX = x1.^2 + 4*x2.^2;
surfc(x1,x2,FX,'LineStyle','none')
hold on
plot3(Xarray(1,:),Xarray(2,:),fxVector,'-r')
hold off

%% 显示结果
fprintf('迭代变量坐标X\n')
disp(Xarray)
fprintf('迭代路径的函数值\n')
disp(fxVector)
fprintf('迭代点处的梯度\n')
disp(gArray)
fprintf('梯度的模\n')
disp(gNormVector)


绘制的示意图

寻优路径示意图
寻优路径三维示意图

运算结果

迭代变量坐标X
    1.0000    0.7385    0.1108    0.0818    0.0123    0.0091
    1.0000   -0.0462    0.1108   -0.0051    0.0123   -0.0006

迭代路径的函数值
    5.0000    0.5538    0.0613    0.0068    0.0008    0.0001

迭代点处的梯度
    2.0000    1.4769    0.2215    0.1636    0.0245    0.0181
    8.0000   -0.3692    0.8862   -0.0409    0.0982   -0.0045

梯度的模
    8.2462    1.5224    0.9134    0.1686    0.1012    0.0187

根据计算结果来看,最终程序的迭代停止在了(0.0181,-0.0045)处,与解析解的极小值点(0,0)非常接近,函数值0.0001也与解析解的极小值点处函数0相差很小,可以认为满足了实际应用的需求。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值