3 Department of Guilin University of Electronic Technology
比方要求解:
则:
转化成标准形式为:
则用单纯形法:
令标准化约束条件系数的矩阵:
基解B
目标系数举证:
基解的目标初始系数是:
则基解对应的变量向量为:
用MATLAB程序设计为:
data.mat:
simplex.m:
function [solution,solu_B,solu_X]=simplex(A,B,C,Cb,X)
%求出系数矩阵的行数和列数
% A为要求的标准化方程的举证
% B为初始时的基解向量
% C为待解的系数向量
% Cb为初始基解的系数向量
% X为x1、x2……xn等向量
%======================
SIZE=size(A);
m=SIZE(1);
n=SIZE(2);
%初始计算dada
for j=1:n
sum=0;
for i=1:1:m
sum=sum+Cb(i)*A(i,j);
end
deda(j)=C(j)-sum;
end
Max_deda=max(deda);
%循环计算体
while Max_deda > 0
%计算最大的deda所在的列
k=find(deda==Max_deda)
%计算确定基换出确定变量thida,并找出其行位置l
for i=1:m
thida(i)=B(i)/A(i,k);
end
l=find(thida==min(thida));
%换出基变量的基
Cb(l)=C(k);
X(l)=k;
%做系数矩阵的变换
B(l)=B(l)/A(l,k);
m_Alk=A(l,k);
for j=1:n
A(l,j)=A(l,j)/m_Alk;
end
for i=1:m
m_Aik=A(i,k);
if i~=l
B(i)=B(i)-B(l)*m_Aik;
for j=1:n
A(i,j)=A(i,j)-A(l,j)*m_Aik;
end
end
end
%再次计算dada
for j=1:n
sum=0;
for i=1:m
sum=sum+Cb(i)*A(i,j);
end
deda(j)=C(j)-sum;
end
Max_deda=max(deda);
end
%计算最优目标解
if Max_deda<=0
s=0;
for i=1:m
s=s+Cb(i)*B(i);
end
max_z=s;
end
solution=max_z;solu_B=B;solu_X=X;
end
则运行结果为:
在MATLAB里运行:[solution,solu_B,solu_X]=simplex(A,B,C,Cb,X)
其结果为:
solution =
8.5000即,目标函数最优解;
solu_B =
7.5000
3.5000
1.5000 即,即约束条件最优解;
solu_X =
3 1 2 即,最优解的x变量,对应表示是x3,x1,x2,即x3=7.5;
x1=3.5;x2=1.5。下载本文