📄 jidaidianzi1.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 + -