当前位置: 代码迷 >> 综合 >> 学习笔记5 《数学模型》例题完结
  详细解决方案

学习笔记5 《数学模型》例题完结

热度:61   发布时间:2024-01-29 17:59:57.0

今天看完《数学模型》例题,然后转战《数学建模算法与应用》。课后习题放明后天集中解决,争取按时完成任务。
《数学建模算法与应用》这本书代码比较多,难度比较大,我争取把代码都打一遍并存在博客里,更清晰。

数学建模算法与应用

线性规划问题(Linear Programming)

这本书以matlab为主,我们指导老师建议我们
min ? x f T x , \underset{x}{\min}\boldsymbol{f}^T\boldsymbol{x},
s . t . { A ? x ? b , Aeq ? x = beq , lb ? x ? ub。 \text{s}.\text{t}.\begin{cases}\boldsymbol{A}\cdot \boldsymbol{x}\leqslant \boldsymbol{b},\\\text{Aeq}\cdot \boldsymbol{x}=\text{beq},\\\text{lb}\leqslant \boldsymbol{x}\leqslant \text{ub。}\\ \end{cases}
式中: f , x , b , beq , lb , ub \boldsymbol{f},\boldsymbol{x},\boldsymbol{b},\text{beq},\text{lb},\text{ub} 为列向量,其中称 f \boldsymbol{f} 为价值向量, b \boldsymbol{b} 为资源向量; A \boldsymbol{A} ,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))

感觉自己犯了形式主义错误,只是把代码敲了一遍