Leviathan的matlab的学习博客-使用matlab解决一般线性规划问题

第一次使用matlab解决一般线性规划问题 2021/1/24

该题是MMAA书上是第一个使用matlab解答的例题。

在这里插入图片描述

matlab工具箱求目标函数最小化的,而你的题目是最大化问题,所以就把原目标函数取负值作为linprog的目标函数
这里的矩阵取负。注意结果也要取负才行。

在这里插入图片描述

其实线性规划这类题目,都有统一的格式(注意这里要变成min)。也就是需要取负。注意结果也要取负才行。

在这里插入图片描述

matlab中也有求线性规划的函数linprog()。
有时候会警告,这时候在语句前加上options = optimoptions(‘linprog’,‘Algorithm’,‘dual-simplex’); 并且linporg()最后一个参数写上options。代码中有例子。

在这里插入图片描述

代码:
%% MMAA Page2 Sample-1.2
%% 
% f^T=x
f = [-2;-3;5];
% a·x <=b 
a = [-2,5,-1;1,3,1];
b = [-10;12];
% aeq·x=beq
aeq = [1,1,1];
beq = 7;
% lb<=x<=ub
% 这里三个x都是大于0的,因此 lb =[0;0;0] ub=[]
% zeros(rows,cols) 全零矩阵
%%
% 防止警告输出
% 这里的options是设置了函数算法为单纯形法(dual-simplex)
options = optimoptions('linprog','Algorithm','dual-simplex');
% linprog(f,a,b,aeq,beq,lu,ub,options);
[x,y] = linprog(f,a,b,aeq,beq,zeros(3,1),[],options);
%% 格式化的输出方案
% sprintf返回的是一个字符串(直接输出会带一个"ans="),fprintf是直接向命令行输出
fprintf('最大值为%.4f。\n',-y);
fprintf('x1,x2,x3的取值分别为%.4f,%.4f,%.4f。\n',x);
%% 另一种简单的输出方案
disp(-y);
disp(x);

输出:
>> LP_Sapmle1

Optimal solution found.

最大值为14.5714。
x1,x2,x3的取值分别为6.4286,0.5714,0.0000。
   14.5714

    6.4286
    0.5714
         0

>> 

比较重要的点:

1、matlab工具函数都是求最小值的,求最大值需要先将矩阵乘-1,最后结果也要取负。
2、sprintf返回的是一个字符串(直接输出会带一个"ans="),fprintf是直接向命令行输出
3、这里的options是设置了函数算法为单纯形法(dual-simplex)
options = optimoptions(‘linprog’,‘Algorithm’,‘dual-simplex’);
如果不设置会输出警告:
警告: Your current settings will run a different algorithm (‘dual-simplex’)
in a future release.

  • 7
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值