
%function [val, X, exitFlag] = simplex(A, b, B, c)
% simplex.m
% 单纯形法求解线性规划
%函数输入各项为标准型对应值
%val 最优解的值
%X 最优解 1*n
%exitFlag 求解结果
% 1: succeed
% 0: unbounded
% -1: iterate 100 times
%A 系数矩阵 m*n
%b 初始基可行解 m*1
%B 初始基可行解的索引 m*1
%c 价格系数 1*n
[m, n] = size(A)
x = 1:m
y = 1:n
d = zeros(m,1)
X = zeros(1,n)
c1 = c
%计算判别数
for kk = 1:m
c1 = c1 - A(kk,:).*c(B(kk))
end
%最多迭代100次
for count=1:100
[cMin, cIndex] = min(c1)
if (cMin >= 0)
exitFlag = 1
break
end
[dMin, dIndex] = minD(b, A(:,cIndex))
if (isinf(dMin))
exitFlag = 0
break
end
B(dIndex) = cIndex
major = A(dIndex, cIndex)
%矩阵A,b,c的迭代更新
A(dIndex,:) = A(dIndex,:)./major
b(dIndex) = b(dIndex)/major
temp = b(dIndex)
b(x) = b(x) - A(x,cIndex)*b(dIndex)
b(dIndex) = temp
temp = A(dIndex,:)
A(x,y) = A(x,y) - A(x,cIndex)*A(dIndex,y)
A(dIndex,:) = temp
c1 = c1 - c1(cIndex)*A(dIndex,:)
end
if count==100
exitFlag = -1
end
X(B(x)) = b(x)
val = sum(X.*c)
刚好我也做了这个,给你参考哈function x=lindual(c,A,b)
[n1,n2]=size(A)
A=[A,eye(n1)]c=[-c,zeros(1,n1)]
x1=[zeros(1,n2),b']lk=[n2+1:n1+n2]
while(1)
x=x1(1:n2)
s1=[lk',b,A]
c
x1
cc=[]ci=[]
for i=1:n1
if b(i)<0
cc=[cc,b(i)]
ci=[ci,i]
end
end
nc=length(cc)
if nc==0
fprintf('达到最优解')
break
end
cliu=cc(1)
cl=ci(1)
for j=1:nc
if abs(cc(j))>abs(cliu)
cliu=cc(j)
cl=j
end
end
cc1=[]ci1=[]
for i=1:n1+n2
if A(cl,i)<0
cc1=[cc1,A(cl,i)]
ci1=[ci1,i]
end
end
nc1=length(cc1)
if nc1==0
fprintf('无可行解')
break
end
cliu=c(ci1(1))/cc1(1)
cl1=ci1(1)
for j=1:nc1
if c(ci1(j))/cc1(j)<cliu
cliu=c(ci1(j))/cc1(j)
cl1=ci1(j)
end
end
b(cl)=b(cl)/A(cl,cl1)
A(cl,:)=A(cl,:)/A(cl,cl1)
for k=1:n1
if k~=cl
b(k)=b(k)-b(cl)*A(k,cl1)
A(k,:)=A(k,:)-A(cl,:).*A(k,cl1)
end
end
c=c-c(cl1).*A(cl,:)
x1(lk(cl))=0
lk(cl)=cl1
for kk=1:n1
x1(lk(kk))=b(kk)
end
x=x1(1:n2)
end
验证p62运筹学
min ω=2x1+3x2+4x3
x1+2x2+x3≥3
2x1-x2+3x3≥4
x1,x2,x3≥0
检验
format rat
c=[2 3 4]A=[-1 -2 -1-2 1 -3]b=[-3-4]
x=lindual(c,A,b)
对联生成器小程序,对联题出上句接下句,对联生成器是一款可以在电脑上使用的强大对联生成器,这款对联生成器完全免费,无需下载,平仄规范并严谨,数百万条对联,点击即可使用,是一款绿色的pc端对联生成器。对联又称楹联、对偶、门对、春贴、春联、对子、桃符等,一种对偶文学,起源于桃符欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)