作者H45 (!H45)
看板MATLAB
标题Re: [运算] 最佳"整数"解
时间Tue Sep 3 12:12:12 2013
※ 引述《lifeisshine (芋头)》之铭言:
: -------------------------------------------------
: 实际应用题:
: 每个桌子:需木工 4时,漆工 2时,利润 5
: 每个椅子:需木工 1时,漆工 2时,利润 4
: 木工上限为 60 时,漆工上限为 48 时,
: 令 x1 为桌子的生产个数,令 x2 为椅子的生产个数
: -------------------------------------------------
: 数学模型:
: f = 5x1+ 4x2 ……(利润最大化)
: s.t. 4x1 + 1x2 ≦ 60 …….(木工时数限制)
: 2x1 + 2x2 ≦ 48 …….(漆工时数限制)
: x1 ≧ 0, x2 ≧ 0
: -------------------------------------------------
我用 MATLAB Help 找到 MuPAD 解法
广义上 MuPAD 也是 MATLAB 的工具......就看看
我贴出我的解法
在 MATLAB 里
------------
mupad;
在 MuPAD 里
-----------
c := {4*x1 + x2 <= 60, 2*x1 + 2*x2 <= 48}:
f := 5*x1 + 4*x2:
linopt::maximize([c, f, NonNegative, All])
Output
------
[OPTIMAL, {x1 = 12, x2 = 12}, 108]
参考资料:
http://www.mathworks.com/help/symbolic/mupad_ref/linopt-maximize.html
--
更新:
因为我对 MuPAD 还不是很熟
早上还不知道怎麽把 MuPAD 的计算结果导入至 MATLAB 的 Workspace 里面
刚刚写了一个比较完整的程式码
可以在 MATLAB 直接呼叫 MuPAD 函式取得答案
PTT_1I9AEkxY.m
--------------
read(symengine, 'PTT_1I9AEkxY.mu');
solution = feval(symengine, 'solution');
solution1 = double(solve(solution(1)));
solution2 = double(solve(solution(2)));
PTT_1I9AEkxY.mu
---------------
solution := proc()
begin
c := {4*x1 + x2 <= 60, 2*x1 + 2*x2 <= 48}:
f := 5*x1 + 4*x2:
A := linopt::maximize([c, f, NonNegative, All]):
solution := [A[2][1], A[2][2]];
end_proc:
程式逻辑其实就是呼叫一个自己写的 .mu 档
.mu 档就用 MuPAD 语法呼叫内建的 linopt::maximize 解出答案
然後回传给 .m 档
因为回传的结果是 sym 型别的 x1 == 12 与 x2 == 12
所以我用 solve 再解出 12
以上应该没有问题了。
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.116.247.22
※ 编辑: H45 来自: 140.116.247.22 (09/03 14:33)
1F:推 lifeisshine:喔!! 先感谢H大 晚上泡茶来研究一下! 09/03 18:27
2F:→ lifeisshine:有用喔! 只差在如何写成 .mu 档? 用这麽久Matlab 09/03 19:36
3F:→ lifeisshine:第一次听过 .mu 档,恳请H大开示,对我写GUI介面有益! 09/03 19:37
开一个新档
复制我的程式码贴上
存成 .mu 就好了
※ 编辑: H45 来自: 140.116.247.22 (09/03 19:39)
4F:推 lifeisshine:成功了! 太感谢H大! 再问几个问题,是不是想抓Toolbox 09/03 19:52
5F:→ lifeisshine:里的答案值,格式是solution := proc() → begin 09/03 19:54
6F:→ lifeisshine:→ 呼叫Toolbox并求解 → end_proc: 这样的语法格式? 09/03 19:56
MuPAD 我也不太熟...再自己尝试看看吧
※ 编辑: H45 来自: 140.116.247.22 (09/03 23:14)