我的 MATLAB 代码存在问题,该代码使用两相单纯形法求解线性方程组。在某些示例中,它不起作用,我找不到问题所在。
工作示例和不工作示例如下图所示:
代码如下
clear
clc
close all
%%
%these are working examples
%%
%Number1
%a=[-1 3 1 0 0 0 0;1 1 0 1 0 0 0;1 -1 0 0 1 0 0;1 3 0 0 0 -1 1];
%f=[-1 -2 0 0 0 0 0];
%f1=[-1 -3 0 0 0 1 0];
%b=[10;6;2;6;0;-6];
%Number 2
%a=[5 8 1 0 0;5 2 0 -1 1];
%f=[-1 2 0 0 0];
%f1=[-5 -2 0 1 0];
%b=[50;20;-20;0];
%%
%This is the one that don't give me any answer
%%
%a=[-1 1 1 -1 1 0 0;3 1 -1 0 0 -1 1];
%f=[10 6 2 0 0 0 0];
%f1=[-3 -1 1 0 0 1 0];
%b=[1;2;0;-2];
%%
%Code
c=[[a;f;f1],b];
[e,d]=size(c);
while f1(end)==0
g=find(min(f)==f);
g=g(1,1);
h=c(:,g);
for i=1:length(h)
if h(i)>0
l(i)=b(i)./h(i);
else
l(i)=inf;
end
end
l(end)=inf;
l(end-1)=inf;
m=min(l);
n=find(l==m);
n=n(1,1);
c(n,:)=c(n,:)./c(n,g);
for j=1:e
if j~=n
c(j,:)=c(j,:)-c(n,:).*c(j,g);
end
end
a=c(1:end-2,1:end-1);b=c(:,end);f=c(end-1,1:end-1);f1=c(end,1:end-1);
end
c(end,:)=[];
while min(f)<0
[p,q]=size(c);
g1=find(min(f)==f);
g1=g1(1,1);
h1=c(:,g1);
for i=1:length(h1)
if h1(i)>0
l1(i)=b(i)./h1(i);
else
l1(i)=inf;
end
end
l1(end)=inf;
m1=min(l1);
n1=find(l1==m1);
n1=n1(1,1);
c(n1,:)=c(n1,:)./c(n1,g1);
for j=1:p
if j~=n1
c(j,:)=c(j,:)-c(n1,:).*c(j,g1);
end
end
a=c(1:end-1,1:end-1);b=c(:,end);f=c(end,1:end-1);
end
Minf=-c(end,end)
如果您尝试解决这些问题,您会看到代码没有答案,我想知道为了工作而必须更改的内容。