MATLAB 实现单纯形法

MATLAB 实现单纯形法对于形如的代码实现 function x f it linp A b c 输出 x 为最优解 f 为最优值 it 为迭代次数 b b 变为列向量 it 0 m n size A x zeros 1 n length b A Aeye length b b 化为标准型 Ab 合一块 c czeros 1 length b 1 同上 while

对于形如在这里插入图片描述
的代码实现

function [x,f,it]=linp(A,b,c) %输出x为最优解,f为最优值,it为迭代次数。 b=b(:);%变为列向量 it=0; [m,n]=size(A); x=zeros(1,n+length(b)); A=[A eye(length(b)) b]; %化为标准型,A b合一块 c=[c zeros(1,length(b)+1)]; %同上 while ~all(c(1:length(c)-1)>=0) %并非所有的c中前length(c)-1个元素都大于等于零时进入循环 d=find(c<0);%d(1)-------第一个负数元素列坐标 e=find(A(:,d(1))>0);% e包含的d(1)列中正元素的行坐标 g=[]; for ii=1:length(e) g=[g A(e(ii),n+length(b)+1)/A(e(ii),d(1))]; end h=find(g==min(g));%选择离基变量 p=A(e(h),d(1)); for ii=1:n+length(b)+1 A(e(h),ii)=A(e(h),ii)/p;%离基变量 A(e(h),d(1)),对该行进行操作 end j=-c(d(1))/A(e(h),d(1)); for ii=1:n+length(b)+1 c(ii)=j*A(e(h),ii)+c(ii);%%%%%对c操作 end for ii=[1:e(h)-1,e(h)+1:m] j=-A(ii,d(1))/A(e(h),d(1)); for kk=1:n+length(b)+1 A(ii,kk)=j*A(e(h),kk)+A(ii,kk); end end%%%%%%%%%%%%截止,对A的操作完成 it=it+1; end o=[]; for ii=1:n if all(A(:,ii)>=0)&&sum(A(:,ii))==1 o=[o ii]; end %x解的列坐标 end for ii=1:length(o) for kk=1:m %x解的行坐标 if A(kk,o(ii))==1 x(o(ii))=A(kk,n+length(b)+1); %对x解进行整理 end end end x=x(:); f=-c(n+length(b)+1); end 
>> A=[-1 1;1 2;3 1]; >> b=[2 10 15]; >> c=[-2 -3]; >> [x,f,it]=linp(A,b,c) x = 4 3 0 0 0 f = -17 it = 2 >> 

结果正确

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/216913.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月18日 上午10:46
下一篇 2026年3月18日 上午10:46


相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号