网站首页 > 技术教程 正文
算例 1
计算结果:
算例 2
计算结果:
单纯形算法matlab代码
%单纯形算法
%Cn按行输入,b按列输入,N按系数矩阵正常输入
function [ X,z ] = func( N,b,Cn )%N:约束条件系数矩阵,b:资源向量,Cn:价值向量
[row,col]=size(N);
Ab=eye(row);%松弛变量的系数矩阵(单位阵)
A=[N,Ab];%完整的系数矩阵
[row2,col2]=size(A);
Cb=zeros(1,row2);%目标函数中初始基变量的系数
C=[Cn Cb];%目标函数的系数
indexB=find(C==0);%初始基变量的下标
sigma=zeros(1,col2);%定义检验数
theta=zeros(row2,1);%定义θ
X=zeros(1,col2);%定义最优解
while(1)
for i=1:col2
sigma(i)=C(i)-Cb*A(:,i);%计算检验数
end
if sum(sigma>0)
[maxs,k]=max(sigma);%确定换入变量
for j=1:row
theta(j)=b(j,1)/A(j,k);%计算θ
if theta(j)<=0
theta(j)=inf;
end
end
%判断无界解
if theta==inf
disp('该问题为无界解')
return;
end
if sum(theta>0)
[mint,m]=min(theta);%确定换出变量
end
element=A(m,k); %主元素
x1=[b A]; %增广矩阵
%进行行变换,将主元素化为1,同列元素化为0
x1(m,:)=x1(m,:)/element;
for i=1:row2
if i==m
continue;
else
x1(i,:)=x1(i,:)-x1(m,:)*x1(i,k+1);
end
end
b=x1(:,1); %取出新的b
A=x1(:,2:col2+1);%取出新的A
Cb(m)=C(k); %Cb变化
indexB(m)=k; %基变量下标变化
else
t=(sigma~=0);
t1=(b>0);
%判断无穷多解
if sum(t(:))<length(indexB(:))
disp('该问题有无穷多最优解,以下是其中之一')
X(indexB)=b';
disp('最优解为')
X
disp('目标函数最优取值为')
z=C*X'
%这种情况有可能是退化解
elseif sum(t1(:))<length(b(:))
disp('该问题的最优解不是可行解')
X(indexB)=b';
disp('最优解为')
X
disp('目标函数最优取值为')
z=C*X'
%唯一最优解
else
disp('该问题有唯一最优解')
X(indexB)=b';
disp('最优解为')
X
disp('目标函数最优取值为')
z=C*X'
end
break;
end
end
对偶单纯形算法matlab代码
%对偶单纯形算法
%Cn按行输入,b按列输入,N按系数矩阵正常输入
function [ X,z ] = func3( N,b,Cn )%N:约束条件系数矩阵,b:资源向量,Cn:价值向量
[row,col]=size(N);
Ab=eye(row);%松弛变量的系数矩阵(单位阵)
A=[-N,Ab];%完整的系数矩阵
b=-b;
[row2,col2]=size(A);
Cb=zeros(1,row2);%目标函数中基变量的系数
C=[-Cn Cb];%目标函数的系数
indexB=find(C==0);%初始基变量的下标
sigma=zeros(1,col2);%定义检验数
theta=zeros(1,col2);%定义θ
X=zeros(1,col2);%定义最优解
while(1)
t1=(b>=0);
if sum(t1(:))<length(b(:))
for i=1:col2
sigma(i)=C(i)-Cb*A(:,i);%计算检验数
end
[minb,m]=min(b);%确定换出变量
%判断无可行解
if A(m,:)>0
disp('无可行解')
return;
end
%计算θ
for i=1:col2
if sigma(i)==0
theta(i)=inf;
else
theta(i)=sigma(i)/A(m,i);
if theta(i)<0
theta(i)=inf;
end
end
end
[mint,k]=min(theta);%确定换入变量
element=A(m,k);%主元素
x1=[b A];%增广矩阵
%进行行变换,将主元素化为1,同列元素化为0
x1(m,:)=x1(m,:)/element;
for i=1:row2
if i==m
continue;
else
x1(i,:)=x1(i,:)-x1(m,:)*x1(i,k+1);
end
end
b=x1(:,1); %取出新的b
A=x1(:,2:col2+1);%取出新的A
Cb(m)=C(k); %Cb变化
indexB(m)=k;%基变量下标变化
else
X(indexB)=-b';
disp('最优解为')
X=-X
disp('目标函数最优取值为')
z=-C*X'
return;
end
end
猜你喜欢
- 2024-11-06 关于几种熵的计算(MATLAB)(matlab熵值法求权重)
- 2024-11-06 Python与Matlab画图的代码对比(matlab跟python)
- 2024-11-06 「话说嵌入式」STM32控制算法验证之Matlab PIL
- 2024-11-06 基于BP神经网络的QPSK解调算法matlab性能仿真
- 2024-11-06 MATLAB使用蒙特卡洛算法实例求解线性规划
- 2024-11-06 基于MATLAB的ACC控制算法设计及仿真测试
- 2024-11-06 「一」MATLAB语言之常见函数及符号运算
- 2024-11-06 基于无线传感器网络的MCKP-MMF算法matlab仿真
- 2024-11-06 基于最小二乘递推算法的系统参数辨识matlab仿真
- 2024-11-06 「话说嵌入式」STM32算法的翅膀之MATLAB
你 发表评论:
欢迎- 最近发表
-
- Win11学院:如何在Windows 11上使用WSL安装Ubuntu
- linux移植(Linux移植freemodbus)
- 独家解读:Win10预览版9879为何无法识别硬盘
- 基于Linux系统的本地Yum源搭建与配置(ISO方式、RPM方式)
- Docker镜像瘦身(docker 减小镜像大小)
- 在linux上安装ollama(linux安装locale)
- 渗透测试系统Kali推出Docker镜像(kali linux渗透测试技术详解pdf)
- Linux环境中部署Harbor私有镜像仓库
- linux之间传文件命令之Rsync傻瓜式教程
- 解决ollama在linux中安装或升级时,通过国内镜像缩短安装时长
- 标签列表
-
- 下划线是什么 (87)
- 精美网站 (58)
- qq登录界面 (90)
- nginx 命令 (82)
- nginx .http (73)
- nginx lua (70)
- nginx 重定向 (68)
- Nginx超时 (65)
- nginx 监控 (57)
- odbc (59)
- rar密码破解工具 (62)
- annotation (71)
- 红黑树 (57)
- 智力题 (62)
- php空间申请 (61)
- 按键精灵 注册码 (69)
- 软件测试报告 (59)
- ntcreatefile (64)
- 闪动文字 (56)
- guid (66)
- abap (63)
- mpeg 2 (65)
- column (63)
- dreamweaver教程 (57)
- excel行列转换 (56)
本文暂时没有评论,来添加一个吧(●'◡'●)