⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 jidaidianzi1.m

📁 黄金分割法
💻 M
字号:
% mg0523075   莫畅峰
%求min(x1^2+x2^2),约束条件1-x1-x2<=0,
%梯度下降法
x1=10;                                     %x1初始值
x2=50;                                     %x2初始值
ck=25;                                     %罚参数初始值
wuca_fa=1.0e-7;                            %罚函数法误差界
wuca_tidu=1.0e-6;                          %梯度下降法误差界
N_fa=1024;                                 %罚函数法最大迭代次数
N_tidu=10000;                              %梯度下降法最大迭代次数
step=0.0004;                               %梯度下降法步长
%--------------------------------------------------------------------------
for i=1:N_fa
    %----------------------------------------------------------------------
    pc=ck*(max(1-x1-x2,0))^2;             %构造罚函数
    fc=x1^2+x2^2+pc;                     %构造增广目标函数
    %----------------------------------------------------------------------
    for j=1:N_tidu
        %------------------------------------------------------------------        
        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)<wuca_tidu)&(abs(daofcx2)<wuca_tidu)  %梯度值满足条件,
            break;                                        %结束迭代
        end
        %------------------------------------------------------------------ 
        step=step;                                      %调整步长因子
        pc=ck*(max(1-x1-x2,0))^2;             
        if abs(pc)>1
            step=step/abs(pc);
        end       
        %------------------------------------------------------------------ 
        step1=-step*daofcx1;                             %确定步长
        step2=-step*daofcx2;      
        %------------------------------------------------------------------         
        x1=x1+step1;                                     %调整x1,x2
        x2=x2+step2;
        %------------------------------------------------------------------ 
    end
    %----------------------------------------------------------------------
    if (max(1-x1-x2,0))^2<wuca_fa                        %x1,x2满足条件
        break;                                          %结束迭代
    end
    %----------------------------------------------------------------------
    ck=ck*2.54;                                            %调整罚参数
    %----------------------------------------------------------------------
end
%--------------------------------------------------------------------------
x1                                                      %输出结果x1,x2
x2

⌨️ 快捷键说明

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