yangfanxing__ 发表于 2008-5-24 20:26

fmincon进行优化,出错了

:'( a=sym(x(1));b=sym(x(2));c=sym(x(3));
f = -a * b * c;
f=subs(f);
>>A=[-1 -2 -2;1 2 2];b=;
= fmincon(f,x0,A,b)

为什么执行这个程序时,出错,提示如下: ??? Input argument "x" is undefined. Error in ==> myfun at 2 a=sym(x(1));b=sym(x(2));c=sym(x(3));

大约意思是利用fmincon进行优化求满足约束条件的f最小时的a、b、c。
但是红色部分写成
f = -x(1)*x(2)*x(3)程序运行确实是对的;可是f来自其它函数,
只能是含有a、b、c三个参数,那么该怎样进行修改替换呢?

高人请解答!!!

gh688 发表于 2008-5-24 22:45

回复 楼主 的帖子

你的目标函数表达错误,程序我给你改了一下:
A=[-1 -2 -2;1 2 2];
b=;
x0=;
= fmincon('-x(1)*x(2)*x(3)',x0,A,b)
运行结果
x =
1.0e+007 *
    5.7098
   -1.4274
   -1.4274
fval =

-1.1634e+022

gh688 发表于 2008-5-25 11:19

您好,首先感谢您对我的问题的关注。
我知道目标函数本应表达成F(x(1),x(2),x(3))形式的;
但是现状是我的是F(a,b,c)的目标函数,所以不知道怎样进行正确的变量之间的转换,以便达到fmincon函数的要求。
你的x不能用sym定义成符号变量,这是自变量。
function f=myfun1(x)
a=x(1);      b=x(2);   c=x(3);
f=-a*b*c;
end
A=[-1 -2 -2;1 2 2];
b=;
x0=;
= fmincon('myfun1',x0,A,b)
运行结果
x =
1.0e+007 *
    5.7098
   -1.4274
   -1.4274
fval =
-1.1634e+022

yangfanxing__ 发表于 2008-5-25 18:36

原来还是这个原因。。。
知道了,非常感谢您!:@)

tianzang 发表于 2008-6-9 21:25

我也出了这个问题,不过我还是没看懂,我的是这样的

>> =fmincon(min,x0,[],[],[],[],[],[],st,options)
 ??? Input argument "x" is undefined.

Error in ==> min at 2
c=x(2)*{a*x(1)^b+90.5*x(1)+200};


我的问题在哪呢?

yangfanxing__ 发表于 2008-6-20 01:18

回复 5楼 的帖子

不是没有定义矩阵变量x么???
页: [1]
查看完整版本: fmincon进行优化,出错了