MATLAB求解线性规划问题

在这里插入图片描述
采用参数化编程,使程序具有推广性
main.m

%% MATLAB线性规划
clear;clc;
%% 初始参数
a = [30,40,20,10]';
b = [20,20,30,10]';
d = [15,14,15.3,14.8]';
N = 4;%一个生产周期包括几个部分(和a b d 数组维数相同)
%% 定义符号参数x和y
for i = 1:N
    x(i) = sym(['x',num2str(i)]);
end
for i = 1:N+1
    y(i) = sym(['y',num2str(i)]);
end
sum = 0;
y(1) = 0;
%% 使用迭代法求得目标函数对应自变量系数
for ii = 1:N
    y(ii+1) = x(ii)+y(ii)-b(ii);
    sum = sum+x(ii)*d(ii)+y(ii+1)*0.2;
end
p = coeffs(sum);
c = zeros(N,1);
for i = 1:N
    c(i) = double(p(N+2-i));
end
%% 得到A和B
A = zeros(2*N,N);%初始化不等式系数矩阵
B = zeros(2*N,1);%初始化不等式等于什么
for i = 1:N
    A(i,i) = 1;
    B(i) = a(i);
end
for i = 1:N
    pb = coeffs(y(i+1));
    len = length(pb);
    for j = 1:len-1
        A(i+N,j) = -pb(len+1-j);
    end
    B(i+N) = pb(1);
end
%% 调用linprog求解
lb = [0,0,0,0]';
[rut,fval] = linprog(c,A,B,[],[],lb,[]);
disp('最优解对应x为:')
disp(['x1=',num2str(rut(1))])
disp(['x2=',num2str(rut(2))])
disp(['x3=',num2str(rut(3))])
disp(['x4=',num2str(rut(4))])
disp(['此时函数值为:',num2str(fval+double(p(1)))])

运行结果

最优解对应x为:
x1=20
x2=40
x3=10
x4=10
此时函数值为:1165

学习收获
1.如何定义一个符号数组

for i = 1:~
    x(i) = sym(['x',num2str(i)]);
end

2.coeffs 函数用法
用于提取符号多项式每项符号变量前系数(倒序)
3.参数化编程好处
可直接修改“定义符号参数”项目即可推广到其他问题上。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值