前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >单纯形法MATALAB实现

单纯形法MATALAB实现

作者头像
卡尔曼和玻尔兹曼谁曼
发布2019-01-22 09:55:03
7280
发布2019-01-22 09:55:03
举报
文章被收录于专栏:给永远比拿愉快

参考单纯形法的步骤,MATALAB中的实现如下(求极小值): 注:对于极大值的求解,只需要对目标函数添加负号,求解出来的XX,再带入原目标函数即可。

代码语言:javascript
复制
function [ X, z ] = simplex( A, b, C )
% 单纯形法的实现
% X: 目标函数的最优解
% z: 目标函数的极小值
% A: 约束函数的系数矩阵
% b: 约束函数的常数列向量
% C: 目标函数的系数向量
[m, n] = size(A);
BIndex = n - m  + 1 : n;            % 基向量下标集合
NIndex = 1 : n - m;                 % 非基向量下标集合
flag = 1;
if (n < m)
    disp('系数矩阵不符合要求!')
else
    while flag
        B = A(:, BIndex);           % 基矩阵
        N = A(:, NIndex);           % 非基矩阵
        cb = C(BIndex);             % 基矩阵对应的目标值cb
        cn = C(NIndex);             % 非基矩阵对应的目标值cn
        xb = B \ b;
        X = zeros(1, n); X(BIndex) = xb;
        z = cb * xb;                    % 目标函数值
        sigma = cn - cb / B * N;        % 判别数
        [v, k] = min(sigma);            % k是进基向量下标
        if v > 1e-5
            flag = 0;
            disp('已找到最优解:')
        else
            [~, l] = min((B \ b) ./ (B \ A(:, k))); l = BIndex(l);      % l是出基向量下标
            BIndex(BIndex == l) = k;                % 更新基向量下标集合
            NIndex(NIndex == k) = l;                % 更新非基向量下标
        end
    end
end
end

对于单纯形法中的例子,求解如下:

单纯形法MATALB实现
单纯形法MATALB实现
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2017年10月17日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档