meiemila123 发表于 2008-7-17 17:19

有偿求助:fmincon函数得不到满意的解 ??

大家好,我在用fmincon函数遇到了点问题,烦请各位高手给提供点建议,编写的三个函数文件在附件中
一个为目标函数,一个为约束函数,一个为fmincon优化函数。另一个为计算超调量和调节时间的函数。
= 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 编辑 ]

无水1324 发表于 2008-7-17 21:11

回复 楼主 的帖子

建议换一个优化方法,有一个序列的二次规划线性搜索方法,你可以试一下,精度很高的

meiemila123 发表于 2008-7-18 09:55

回复 2楼 的帖子

多谢管理员的建议。

fimincon就是用SQP 方法 二次规划线性搜索方法

dingd 发表于 2008-7-18 10:56

建议用1stOpt试一下。

meiemila123 发表于 2008-7-18 17:44

回复 4楼 的帖子

dingd
能不能给传个软件啊,我下的是版本 打不开帮助文档

zhjiaqing 发表于 2008-9-19 10:23

Con_Stru_NonLinF.m 函数有问题

t = 0:0.001:Ta;
i = size(t);
... ...
for i=1:i(2)
e(i) = exp(-Ksi*Omga.*t(i))*sin(Omga*sqrt(1-Ksi^2).*t(i)+acos(Ksi))/(sqrt(1-Ksi^2)); % Step response for 2nd order System
A =e(i).^2;      % Just take error and weight into consideration
end
这里的i有歧义,不能这么用,结果会有问题
换成下面试试看
for j=1:i(2)
e(j) = exp(-Ksi*Omga.*t(j))*sin(Omga*sqrt(1-Ksi^2).*t(i)+acos(Ksi))/(sqrt(1-Ksi^2)); % Step response for 2nd order System
A =e(j).^2;      % Just take error and weight into consideration
end
页: [1]
查看完整版本: 有偿求助:fmincon函数得不到满意的解 ??