首页 > 其他 > 详细

matlab练习程序(二次规划-拉格朗日方法)

时间:2019-12-24 00:59:30      阅读:131      评论:0      收藏:0      [点我收藏+]

最近在看二次规划方法,对于等式约束的二次规划问题,可以使用拉格朗日方法求解。

推导方法如《最优化理论与算法(第2版)》书上所述:

技术分享图片

技术分享图片

这里代码如下(代码中给了三个例子):

clear all;
close all;
clc;

% min     x1^2+2*x2^2+x3^2+x2^2-2*x1*x2+x3
% s.t.    x1+x2+x3 = 4
%         2*x1-x2+x3 = 2
%{
H=[2 -2 0;
   -2 4 0;
   0 0 2];
c = [0 0 1];
A=[1 1 1;
   2 -1 1];
b=[4 2];
%}

%min      2*x1^2+x2^2+x1*x2-x1-x2  
%s.t.     x1+x2 = 1
H=[4 1;
   1 2];
c=[-1 -1];
A=[1 1];
b=1;

%min    1.5*x1^2-x1*x2+x2^2-x2*x3+0.5*x3^2+x1+x2+x3
%s.t.   x1+2*x2+x3 = 4
%{
H=[3 -1 0;
   -1 2 -1;
   0  -1 1];
c=[1 1 1];
A=[1 2 1];
b=4;
%}

invH = inv(H);
S = -inv(A*invH*A);
R = -S*A*invH;
Q = invH-invH*A*R;
x = -Q*c+R*b;

[x1,x2]=meshgrid(0:0.02:0.7,0:0.02:1.5);
z1 = 2*x1.^2+x2.^2+x1.*x2-x1-x2;
mesh(x1,x2,z1);

x1 = 0:0.02:0.7;
x2 = -x1 + 1;

hold on;
plot3(x1,x2,zeros(1,length(x1)),r);
plot3(x(1),x(2),0,r*)
plot3(x(1),x(2),2*x(1).^2+x(2).^2+x(1).*x(2)-x(1)-x(2),b*)

结果如下:

技术分享图片

图中红线为约束条件,曲面为待求解问题函数,红点为问题的解,蓝点为二次规划问题最小值所在的位置。

matlab练习程序(二次规划-拉格朗日方法)

原文:https://www.cnblogs.com/tiandsp/p/12088929.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!