用matlab写单纯形表

今天在做最优化的题目的时候,遇到了些麻烦,单纯形表怎么写都会留下点问题,却找不出哪里出现了毛病,于是想用matlab将每一个单纯形表都画出来,但是程序写了会就写不下去了,主要是其中的逻辑判断,数字选择,让我有种无从下手的感觉,我把一些代码和注意点先贴到这里,等以后再试试,看看自己进步了没有。

Matlab语言
%purpose 验算手工单纯形

%写不下去了,还是等对于编程这些玩意更熟悉一些再弄,完全现在是不能转化成程序语言了

%define variables
%C 目标函数变量系数 行向量
%CB 辨识初始基 行向量
%b 约束条件 列向量
%A 约束系数矩阵 矩阵
%delta 检验数 行向量
%X 列向量

function [JI opt]=simplex(C,CB,b,A)

theta=C-CB*A;
if max(delta)<=0
if all(CB<inf)
if %存在非基变量的检验数为0
%无穷多最优解

else
%唯一最优解
end

else
disp('无可行解')
end

else
thetaj=find(delta>0);%找出检验数为正的项
temp1=A(:,deltaj);%找出检验数为正项对应的向量
temp2=max(temp1);%找出检验数为正项对应的向量的每一列当中最大项
if any(temp2<0)
disp('无界解')
else %单纯形变化
[deltak,k]=max(delta);
aik1=A(:,k)>0;
baik=b./A()

end
end

 
 

下面就是搞的时候的一些注意点,自己查一下也很容易查到的地方。

matlab和excel差异:
log含义不同,前者就是ln
后者是以10为底

用最优化工具箱,没有x非负的设定,x的范围是自己写进去的.当然b也没有非零的设定

cat合并矩阵

逻辑数组逻辑数组有一个重要的属性
它在算术运算中能提供一个屏蔽(mask). 屏蔽(mask)
是指一个数组,它从另一个数组选择所需的元素参与运算.指定的运算只在选择的元素上执行,而不执行原有的元素.
例如,假设数组a 和b 的定义如上节所示.那么语句a(b)=sqrt(a(b))会计算a 中相应的元素的平方根,相应的元素是指与b 数组中的非零元素相对应的数组a 中的元素.其他元素保持
不变.

find找出非零元素
a(:)把a所有元素串成一串
all检测是否所有变量都非零
any相应
format rat %以有理数显示

This entry was posted in 技术相关 and tagged , , . Bookmark the permalink.

Leave a Reply

Your email address will not be published. Required fields are marked *