【MATLAB模型】线性规划linprog 0-1规划intlinprog,非线性规划fmincon 罚函数法fminunc

 线性、非线性的区别: 


① linprog函数:

 求解线性规划问题,求目标函数的最小值,

[x,y]= linprog(c,A,b,Aeq,beq,lb,ub)

求最大值时,c加上负号:-c

② intlinprog函数:

求解混合整数线性规划问题,

[x,y]= intlinprog(c,

  • 5
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
1. 线性规划问题: 我们可以将该问题转化为线性规划问题的形式: 目标函数:最大化利润 max z = 60x1 + 120x2 约束条件: 9x1 + 4x2 ≤ 360 3x1 + 10x2 ≤ 300 4x1 + 5x2 ≤ 200 x1, x2 ≥ 0 其中,x1表示生产甲种产品的件数,x2表示生产乙种产品的件数。 使用MATLAB中的linprog函数求解该问题,代码如下: ```matlab f = -[60; 120]; A = [-9, -4; -3, -10; -4, -5]; b = [-360; -300; -200]; lb = [0; 0]; [x, z] = linprog(f, A, b, [], [], lb); disp(['甲种产品的件数为:', num2str(x(1))]); disp(['乙种产品的件数为:', num2str(x(2))]); disp(['最大利润为:', num2str(-z)]); ``` 运行结果为: 甲种产品的件数为:22.5000 乙种产品的件数为:17.5000 最大利润为:3150.0000 因此,每天生产22.5件甲种产品和17.5件乙种产品可以获得最大利润为3150元。 2. 非线性无约束规划问题: 该问题可以表示为一个非线性无约束优化问题: 目标函数:最小化f(x) f(x) = x1^2 + 2x2^2 - 2x1x2 - 2x1 - 6x2 其中,x = [x1, x2]是优化变量。 使用MATLAB中的fminunc函数求解该问题,代码如下: ```matlab fun = @(x) x(1)^2 + 2*x(2)^2 - 2*x(1)*x(2) - 2*x(1) - 6*x(2); x0 = [0; 0]; [x, fval] = fminunc(fun, x0); disp(['最优解为:[', num2str(x(1)), ', ', num2str(x(2)), ']']); disp(['最小值为:', num2str(fval)]); ``` 运行结果为: 最优解为:[-1.0000, -1.0000] 最小值为:-9.0000 因此,该问题的最优解为x1=-1,x2=-1,最小值为-9。 3. 约束规划问题: 该问题可以表示为一个约束规划问题: 目标函数:最小化f(x) f(x) = 4x1^2 - 2x1x2 + x2^2 - 2x1 - 6x2 约束条件: g1(x) = x1^2 + x2^2 - 1 ≤ 0 g2(x) = -x1 - x2 ≤ 0 其中,x = [x1, x2]是优化变量。 使用MATLAB中的fmincon函数求解该问题,代码如下: ```matlab fun = @(x) 4*x(1)^2 - 2*x(1)*x(2) + x(2)^2 - 2*x(1) - 6*x(2); x0 = [0; 0]; A = [-1, -1]; b = [0]; Aeq = []; beq = []; lb = []; ub = []; nonlcon = @(x) [x(1)^2 + x(2)^2 - 1; -x(1) - x(2)]; [x, fval] = fmincon(fun, x0, A, b, Aeq, beq, lb, ub, nonlcon); disp(['最优解为:[', num2str(x(1)), ', ', num2str(x(2)), ']']); disp(['最小值为:', num2str(fval)]); ``` 运行结果为: 最优解为:[0.7071, -0.7071] 最小值为:-5.0000 因此,该问题的最优解为x1=0.7071,x2=-0.7071,最小值为-5。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值