求一个MATLAB源程序解决问题

目标函数:m1*t1+m2*t2的最小值
条件如下:T1=(1200.73-m1*t1)*((140/t1^2)+1.63)

T2=(1200.73-m1*t1)*24.41/t1
T1^2+T2^2=T
T=2940*m1
2940*m2=((52/t2^2)+1.63)*(1200.73-m1*t1-m2*t2)
t1+t2=184.76
有个条件出错了,应该是T1^2+T2^2=T^2
t1和t2要在[0,184.76]的范围内,m1和m2大于0就行

这是一个非线性优化问题,目标函数为优化变量t1、t2、m1、m2的非线性函数,且存在非线性等式约束(其中有一个线性等式约束,一并按照非线性处理)。

 

参考代码:

function zd2202425701491314988
% x1=t1, x2=t2, x3=m1, x4=m2
f = @(x)x(3)*x(1)+x(4)*x(2);
lb = zeros(4,1);
ub = [184.76; 184.76; inf; inf];
x0 = [100; 100; 1; 1];
opt = optimset('Algorithm', 'active-set');
[x, fval] = fmincon(f, x0, [], [], [], [], lb, ub, @con, opt)

function [c,ce] = con(x)
c = [];
T1=(1200.73-x(3)*x(1))*((140/x(1)^2)+1.63);
T2=(1200.73-x(3)*x(1))*24.41/x(1);
T=2940*x(3);
ce = [...
    T1^2+T2^2 - T^2;
    -2940*x(4) + ((52/x(2)^2)+1.63)*(1200.73-x(3)*x(1)-x(4)*x(2));
    x(1)+x(2) - 184.76
    ];

 

求出的最优解为:

x =
   88.6921
   96.0679
    0.6496
    0.6037

fval =
  115.6070

x的4个元素依次为t1、t2、m1、m2,fval为目标函数的最小值。

温馨提示:答案为网友推荐,仅供参考