今天看完《数学模型》例题,然后转战《数学建模算法与应用》。课后习题放明后天集中解决,争取按时完成任务。
《数学建模算法与应用》这本书代码比较多,难度比较大,我争取把代码都打一遍并存在博客里,更清晰。
数学建模算法与应用
线性规划问题(Linear Programming)
这本书以matlab为主,我们指导老师建议我们
式中:
为列向量,其中称
为价值向量,
为资源向量;
,Aeq为矩阵。
Matlab中求解线性规划的命令
[x,fval]=linprog(f,A,b)
[x,fval]=linprog(f,A,b,Aeq,beq)
[x,fval]=linprog(f,A,b,Aeq,beq,lb,ub)
例1.2
matlab代码,有点抽象,要用矩阵表示
f=[-2;-3;5];
a=[-2,5,-1;1,3,1];b=[-10;12];
aeq=[1,1,1];
beq=7;
[x,y]=linprog(f,a,b,aeq,beq,zeros(3,1));
x,y=-y
lingo代码
model:
sets:
row/1..2/:b;
col/1..3/:c,x;
links(row,col):a;
endsets
data:
c=2 3 -5;
a=-2 5 -1 1 3 1;
b=-10 12;
enddata
max=@sum(col:c*x);
@for(row(i):@sum(col(j):a(i,j)*x(j))<b(i));
@sum(col:x)=7;
end
结果
Global optimal solution found.Objective value: 14.57143Total solver iterations: 2Variable Value Reduced CostB( 1) -10.00000 0.000000B( 2) 12.00000 0.000000C( 1) 2.000000 0.000000C( 2) 3.000000 0.000000C( 3) -5.000000 0.000000X( 1) 6.428571 0.000000X( 2) 0.5714286 0.000000X( 3) 0.000000 7.142857A( 1, 1) -2.000000 0.000000A( 1, 2) 5.000000 0.000000A( 1, 3) -1.000000 0.000000A( 2, 1) 1.000000 0.000000A( 2, 2) 3.000000 0.000000A( 2, 3) 1.000000 0.000000Row Slack or Surplus Dual Price1 14.57143 1.0000002 0.000000 0.14285713 3.857143 0.0000004 0.000000 2.285714
例1.3
matlab代码
c=[2;3;1];
a=[1,4,2;3,2,0];
b=[8;6];
[x,y]=linprog(c,-a,-b,[],[],zeros(3,1))
感觉自己犯了形式主义错误,只是把代码敲了一遍