【发布时间】:2013-08-27 19:07:23
【问题描述】:
我正在尝试使用 MATLAB 优化工具箱中的 fmincon 估计非线性滤波器的参数,保持状态方程矩阵的特征值小于 1。 fmincon 使用 'sqp' 算法的文档说它在所有迭代中都尊重约束,但是在我的代码的第一次迭代中,它尝试了一个暗示不稳定特征值的点。我无法在这些参数值下运行过滤器,因此我的代码崩溃了。
文档是否真的意味着“AlwaysHonorConstraints”仅适用于作为向量(lb 和 ub)传入的不等式约束?有什么办法可以保证每一步都满足非线性约束?
这是我的相关代码:
c = @(x) max(abs(eig(reshape(x(8:16), 3, 3)))) - 1;
ceq = @(x) [];
nonlcon = @(x) deal(c(x), ceq(x));
obj = @(x) -unscented_kalman1(x, fulldiv, crsp_allEverything);
fminconOptions = optimset('Display', 'iter-detailed', 'Algorithm', 'sqp', ...
'TolX', errTol, 'UseParallel', 'always', 'AlwaysHonorConstraints', 'bounds');
maxX = fmincon(obj, x0, [], [], [], [], [], [], nonlcon, fminconOptions);
谢谢!
【问题讨论】:
-
当你说“在我的代码的第一次迭代中,它会尝试一个暗示不稳定特征值的点”你是指使用
x0的fmincon的第一次迭代吗?您是否尝试过不同的起始值?你把x0设置成什么?
标签: matlab mathematical-optimization