jidaidianzi.m

来自「黄金分割法」· M 代码 · 共 35 行

M
35
字号
% mg0523073    梅益君
%求min(x1^2+x2^2)    条件:1-x1-x2<=0,

x1=1;                                                    %定义x1初始值
x2=1;                                                    %定义x2初始值
ck=10;                                                   %给出罚参数的初始值
n1=100000;                                                %给出罚函数法最大迭代次数
n2=100000;                                                %梯度下降法最大迭代次数
a=1.0e-7;                                                %罚函数法误差界
b=1.0e-7;                                                %梯度下降法误差界
step=0.0004;                                             %梯度下降法步长
for i=1:n1
    pc=ck*(max(1-x1-x2,0))^2;                            %构造罚函数
    fc=x1^2+x2^2+pc;                                     %构造增广目标函数
    for j=1:n2     
        if pc==0                                         %计算梯度(最大为0)
           daofcx1=2*x1;                                 %x1的偏导
           daofcx2=2*x2;                                 %x2的偏导                
        else
           daofcx1=2*x1-ck*2*(1-x1-x2);                  %计算梯度(最小为0)
           daofcx2=2*x2-ck*2*(1-x1-x2);
        end
        if (abs(daofcx1)<b)&(abs(daofcx2)<b)             %梯度值满足条件,则结束迭代
            break;                                        
        end
        x1=x1+step;                                      %调整x1,x2,为下次迭代做准备
        x2=x2+step;
    end
    if (max(1-x1-x2,0))^2<a                              %x1,x2满足条件
        break;                                           %结束迭代
    end
    ck=ck*10;                                            %调整罚参数
end
x1                                                       %输出结果x1,x2
x2

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?