我试图在 MATLAB 优化工具箱中使用 fmincon 估计非线性滤波器的参数,保持状态方程矩阵的特征值小于一。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);
谢谢!