目标函数有两个未知变量,怎么用matlab求最优解?

以上这个式子比较复杂,未知变量Q和p的约束条件都是大于零,求Z最大值时的最优解,有哪位大神可以提供matlab或者Lingo的求解程序给我,不胜感激!

参考代码(里面有些系数请再仔细检查,我虽已尽量小心,但不敢保证录入无误):

z = @(x)(1.8-x(1))/400*x(2)^2 + (-1.8*x(1)^2+146.24*x(1)-1270)/50*x(2) ...
    +(-3.24*x(1)^3+262.872*x(1)^2-3771*x(1)-82375)/100;
x = fmincon(@(x)-z(x),[0 0],[],[],[],[],[0 0])

得到的结果为:

x =
   35.6887  195.5207

其中第一个值为p,第二个为Q。目标函数为:

>> z(x)
ans =
  2.9446e+003

需要注意的是初值的选择需要慎重,选择不当很容易落在局部最优点(0,0)处。

 

优化结果绘制二维图如下:

h=ezmesh(@(p,Q)arrayfun(@(x1,x2)z([x1,x2]),p,Q),[0 50 0 300]);
set(h,'edgealpha',0.2)
hold on
plot3(x(1),x(2),z(x),'rp')
view(-20,6)
hold off

这里需要注意,ezmesh那句不能简单写成ezmesh(@(x1,x2)z([x1 x2])),因为匿名函数z不支持向量运算。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2015-10-31
问题主要是三角形隶属函数参数的确定问题,具体是如何求出第1张图中t1和t2。第1张图是一个三角形隶属函数,其函数的形式为图2所示,目的是求使图3所示的函数达到最小值时的t1和t2的值,t1和t2的取值范围是(8.8,16.8)和(16.8,31.3),x取值为一系列离散值。