cutewangqi 发表于 2009-5-12 10:54:40

MATLAB 中 fmincon函数优化问题

最近在用fmincon函数做多元函数的非线性优化问题,参照课本的程序编写M-file,
结果系统报错,不知道该如何解决。

附程序:
function f=jsqyh_f(x);
hd=pi/180;
a1=x(1)*x(3)*(1+x(5));
a2=x(2)*x(4)*(1+31.5/x(5));
cb= 2*cos(x(6)*hd);
f=(a1+a2)/cb;

function =jsqyh_g(x);
hd=pi/180;
g(1)=cos(x(6)*hd)^3-3.079e-6*x(1)^3*x(3)^3*x(5);
g(2)=x(5)^2*cos(x(6)*hd)^3-1.701e-4*x(2)^3*x(4)^3;
g(3)=cos(x(6)*hd)^2-9.939e-5*(1+x(5))*x(1)^3*x(3)^2;
g(4)=x(5)^2.*cos(x(6)*hd)^2-1.076e-4*(31.5+x(5)*x(2))^3*x(4)^2;
g(5)=x(5)*(2*x(1)+50)*cos(x(6)*hd)+x(1)*x(2)*x(3)-x(2)*x(4)*x(31.5+x(5));

x0=;
lb=;
ub=;

=fmincon(@jsqyh_f,x0,[],[],[],[],lb,ub,@jsqyh_g);
disp ' 最优解
fprintf(1, ' 高速级模数    Mn1= %3.4f mm \n',x(1))
fprintf(1, ' 低速级模数    Mn2= %3.4f mm \n',x(2))
fprintf(1, '   z1=%3.4f\n',x(3))
fprintf(1, '   z2=%3.4f\n',x(4))
fprintf(1, '    i1= %3.4f\n',x(5))
fprintf(1, '    beta= %3.4f 度\n',x(6))
fprintf(1, '   a12=%3.4f mm\n',fn)

g=jsqyh_g(x);
disp' 最优解约束函数值
fprintf(1, ' g1=%3.4f \n',g(1))
fprintf(1, 'g2= %3.4f \n',g(2))
fprintf(1, ' g3=%3.4f \n',g(3))
fprintf(1, ' g4=%3.4f \n',g(4))
fprintf(1, 'g5= %3.4f \n',g(5))

系统显示在disp 这一行处Missing variable or function.
我真的不知道该怎样调整了。

messenger 发表于 2009-5-12 11:26:31

disp 后面缺引号吧,怎么引号只引了左边,不引右边?

cutewangqi 发表于 2009-5-12 11:47:21

2# messenger
呵呵 确实是个问题。 谢谢哦

cutewangqi 发表于 2009-5-12 11:57:21

2# messenger
听老师说盗版的MATLAB只能优化两个未知数的,三维以上的就做不出来?

bainhome 发表于 2009-5-12 13:15:11

1.不要讨论关于D版的问题
2.你们老师还真什么都敢胡说。

star19831106 发表于 2009-5-13 08:15:24

本帖最后由 star19831106 于 2009-5-13 08:16 编辑


听老师说盗版的MATLAB只能优化两个未知数的,三维以上的就做不出来?
cutewangqi 发表于 2009-5-12 11:57 http://forum.simwe.com/images/common/back.gif
这种说法是错误的
我做过两个以上的
但是用fmincon函数进行优化不会像事先想的那么容易(如果你不是在做教科书上的习题)。需要反复试验初值,改变目标函数的写法。。。

cutewangqi 发表于 2009-5-14 08:57:02

6# star19831106
我现在在做的是五个未知数的,不知道行不行?还有,函数变量的定义是一个矩阵?
我是这样写的:X=,不知道系统在获取变量时,是否会自动的识别呢?

yaohonghui666 发表于 2009-5-14 16:46:13

五个变量的优化也是可以的,我本科的毕业设计做过,没问题 7# cutewangqi

star19831106 发表于 2009-5-15 13:34:24

fmincon函数的使用本身没有限制变量的个数,无论你用的是什么版本。
在相同的约束和相同的目标函数的前提下,变量越多优化搜索的难度自然会不断加大。
我的经验是但是fmincon很达到全局最优,一般都是在局部最优。
所以很难有最好,只能有更好。
只要你模型没有错,对fmincon本身理解足够透彻(看好help和教材例题),就可以使用。
函数变量定义成矩阵没什么,计算矩阵本来就是matlab的强项。
你所遇到的问题不是fmincon本身的问题,是你自己对matlab甚至是其他语言理解的问题。
你得明白函数之家是如相互传递变量的,一个函数是如何调用另一个函数的。

李才华 发表于 2009-5-20 11:58:38

一直想用这个做边坡治理优化,正在学中

amperewwg 发表于 2009-11-18 13:02:57

想学优化,有什么好推荐的例子做啊,本人比较笨呢。。。
页: [1]
查看完整版本: MATLAB 中 fmincon函数优化问题