这是09年5月份很用心写的一个 运筹学中的一个程序,使得我对Matlab脚本语言有了一个深入的了解!
但这篇很早已经在百度空间中发表,所以这次呢 作为在优快云的第一篇博文,我选择它是有其实意义的,那就是要在 Linux 和 Socket 方面的研究将坚持同样的心态。
运筹学是大家所熟悉的,其实也就是问题的最优化求解,然而如何从程序角度去诠释复杂的算法,是一件非常有意思的事情。
由于程序中有大量的注释,所以这里就不再敖述,有问题可以留下评论 我们接着讨论。
注: 除了算法实现,本篇博文还介绍了几个内置函数的使用,因为最近突然想写个建模类似的程序,便首先想到了这个程序,翻出来一看帮助不小~
clear all
clc
%一般凸二次规划有效集算法
% find 函数——集合中找到符合要求的数值位置
% intersect函数——求两个集合的交集
% setdiff函数——求两集合的差
% union函数——求两集合的并集
% 以下面的例题为例
% min x1^2+x2^2-2*x1-4*x2
% s.t. x1 >=0
% x2 >=0
% -x1-x2+1>=0
syms x1 x2
%=============求解任意函数时需要改变的参数=============
f=x1^2+x2^2-2*x1-4*x2; % CHANGE 1
g=jacobian(f,[x1;x2]);
G=jacobian([g(1);g(2)],[x1,x2]);
%Initial Value x_1 初始值
x_1=[0;0]; % CHANGE 2—x_1=[1;0] x_1=[0.5;0.5]
%Coefficient Matrix Named A 约束系数矩阵
AM=[1,0,-1;0,1,-1] % CHANGE 3
%约束条件个数
an=s