zhangyong3725 发表于 2010-7-21 16:02

fmincon求最小值

约束条件 x(1)*x(2)=0.95;
0.925656<=x(1),x(2)<0.99999;
目标函数为:f=exp(0.1*(x(1)-0.925656)/(0.99999-x(1)))+exp(0.3*(x(2)-0.925656)/(0.99999-x(2)));
我编写了一个小程序:
目标M文件为:
function f=myfunt(x)
f=exp(0.1*(x(1)-0.925656)/(0.99999-x(1)))+exp(0.3*(x(2)-0.925656)/(0.99999-x(2)));

非线性等式约束为:
function = mycon(x)
c=[];
ceq=x(1)*x(2)-0.95;

在窗口输入:
fmincon(@myfunt,,[],[],[],[],,,@mycon)
结果却不对。
Warning: Large-scale (trust region) method does not currently solve this type of problem,
using medium-scale (line search) instead.
> In fmincon at 317
Maximum number of function evaluations exceeded;
increase OPTIONS.MaxFunEvals.
ans =
   0.999990000000000   0.950010000235281

麻烦大家分析下原因。
我又试了下,把上界变为或时,结果都是对的,但是变为时,结果就是不对,不知道为什么。
各位,帮下忙嘛,这个问题困惑我好久了。十分感谢啦。

[ 本帖最后由 ChaChing 于 2010-7-22 11:19 编辑 ]

messenger 发表于 2010-7-22 10:12

这种现象很正常吧,可能是你的函数越接近0.999越奇异

ChaChing 发表于 2010-7-22 11:23

个人浅见
这类求取最佳值的问题, 若可以的话, 先画画函数图, 了解下函数值的分布!
初步掌握函数分布情况, 对问题才能容易处理

dingd 发表于 2010-7-22 11:28

用1stOpt比较简单强大:
Parameter 0.925656<=<0.99999;
MinFunction exp(0.1*(x1-0.925656)/(0.99999-x1))+exp(0.3*(x2-0.925656)/(0.99999-x2));
          x1*x2=0.95;
结果:
目标函数值(最小): 2.83666394574412
x1: 0.981849942770918
x2: 0.967561292837648

约束函数:
   1: x1*x2-(0.95) = 0
页: [1]
查看完整版本: fmincon求最小值