|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?我要加入
x
大家好,我在用fmincon函数遇到了点问题,烦请各位高手给提供点建议,编写的三个函数文件在附件中
一个为目标函数,一个为约束函数,一个为fmincon优化函数。另一个为计算超调量和调节时间的函数。
[x,f] = fmincon(@Con_stru_NonLinF,x0,[],[],[],[],lb,ub,@Stru_ConNLinCon,options)
目标函数 Con_stru_NonLinF ,是设计变量 x (R = x(1); kp = x(2); ki = x(3); kd = x(4);r=x(5);j=x(6);J_motor=x(7);)的函数 ,约束函数 Stru_ConNLinCon 中的非线性不等式C(1),C(2),C(3) ,C(4),C(5),C(6) 不是直接给定的,是通过 z = fsolve(@Cons_Equ,z0,optimset('MaxFunEvals',1e10,'MaxIter',1e4))
每次求解新的z值来保证。Cons_Equ(x)函数是求解 z 的。
这个函数最终根据求出的x值计算超调量(<1%)和调节时间的(几乎为 0),问题是经过多次迭代后虽然得出一组数据但不满足超调量和调节时间很小。
迭代中出现这样的提示:Norm of relative change in X is less than max(options.TolX^2,eps) but
sum-of-squares of function values is greater than or equal to sqrt(options.TolFun)
Try again with a new starting guess.
Maximum number of function evaluations exceeded;
increase OPTIONS.MaxFunEvals.
fsolve在解非线性方程组时也会出现上面的提示,我认为有可能是在用fsolve解 z 时 有可能无解或出现复数根,而fmincon要求为实变量,这样会出现迭代错误得不到理想结果。
怎么才能判断 无解或复根 并且跳过这个点,选择一个好的点迭代?
或是不用这种方法解,用别的方法 如遗传算法。
这个问题是基于主导极点控制器 设计,困扰我好多天了,实在很头疼,加上时间有限,若有人能帮我解决,我会给予一定报酬的 希望matlab 高手联系我 我的QQ是927370837
[ 本帖最后由 meiemila123 于 2008-7-17 19:30 编辑 ] |
|