在约束最优化中,用单纯形法解线性规划的matlab程序

 我来答
x330251671
推荐于2018-04-15
知道答主
回答量:1
采纳率:0%
帮助的人:2.8万
展开全部
function [zyj,zyz,k]=ssssimplex(A,N) %A为初始单纯型表 和书上的形式一样
[m,n]=size(A); % 分别代表A的行数和列数 %N为基本可行解的下标
k=0; %迭代次数 %zyj为最优解
%zyz为最优值
flag=1; %定义一个逻辑变量

while flag
k=k+1;
if A(1,:)>=0 %已找到最优解
flag=0;
zyj=zeros(1,n-1);%给每个变量赋初值0
for i=2:m
zyj(N(i-1))=A(i,n);%给基变量赋新值
end
zyz=-A(1,n);%给出最优解
else %判断问题是否不可解
for i=1:n-1
if A(1,i)<0&A(2:m,i)<=0 %问题不可解
disp('there is no answer');
flag=0;
break;
end
end
if flag %还不是最优表,进行转轴运算
temp=0;
for i=1:n-1
if A(1,i)<temp
temp=A(1,i); %为了求出第一行最小值的位子
inb=i; % 进基变量的下标 %inb为进基量下标
end
end
sita=zeros(1,m-1);
for i=2:m
if A(i,inb)>0 %为了求出相除以后最小的值
sita(i-1)=A(i,n)/A(i,inb);
end
end
temp=inf; %定义一个无穷量inf
for i=1:m-1
if sita(i)>0&sita(i)<temp
temp=sita(i);
outb=i+1; %出基变量下标
end
end %选择最小的sita横向对应的变量为出基变量
%以下更新N
for i=2:m
if i==outb
N(i-1)=inb;%以进基变量的下标替代出基变量的下标
end
end
%以下进行转化运算
A(outb,:)=A(outb,:)/A(outb,inb);%将主元化为1
for i=1:m
if i~=outb
A(i,:)=A(i,:)-A(outb,:)*A(i,inb);%将进基变量所在列除主元外的其余元素化为0
end
end
end
end
end
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式