📄 quadprogram.m
字号:
function [Flag,Xopt]=QuadProgram(A,B,G,D,Xo)
X=Xo;Flag=0;
[flag1,x1]=Wuyueshu0(A,B,G,D); %求无约束条件时目标函数最小值
if (flag1==1) %无约束条件时目标函数最小值符合约束条件,最优解找到,flag1置1
Xout=x1;Flag=1;
else %无约束条件时目标函数最小值符合不约束条件,在约束范围内找最优解
mm=size(A,1); %求约束函数系数矩阵的行数,即约束数
W=zeros(1,mm); %有效约束集W赋初值0
Sign=0;
num=0;
while(Sign==0&num<100) %有效约束集W全为0或循环次数超过20,停止循环
num=num+1;
[p1,te]=JieFangCheng1(A,G,D,X,W); %求调整步长P和Lagrange乘子
P=p1;Te=te;
sign1=FlagZero(P); %判断调整步长P是否全为0,全为0则Sign记1,否则记0。
if (sign1==1) %调整步长P全为0
[flag1,w1,x1]=TiaoYueShu2(W,X,Te); %调整有效约束,Lagrange乘子全大于等于0,flag1记为1,否则记0
if (flag1==1) %flag1为1,找到最优解,结束循环
Xout=x1;Flag=1;break;
else X=x1; %flag1为0,重新赋值计算
W=w1;
end
else [alpha,x1,w1]=BuChangYueShu3(A,X,B,P,W); %调整步长P不全为0,调整x,调整有效约束
W=w1;X=x1;
end
Sign=FlagZero(W); %重新判断调整后的有效约束集W是否全为0
end
end
%Flag=flag1; %将flag1赋给Flag输出
if (Flag==1) %flag1为1,将最优值输出
Xopt=Xout;
else
Xopt=[]; %flag1为0,将最优值未找到,输出空集
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -