Ich versuche, die Parameter eines nichtlinearen Filters mit fmincon im MATLAB Optimization Toolboox zu schätzen, wobei die Eigenwerte der Zustandsgleichungsmatrix kleiner als eins bleiben. Die Dokumentation für fmincon, die den 'sqp'-Algorithmus verwendet, sagt, dass sie die Einschränkungen bei allen Iterationen respektiert, und dennoch versucht sie bei der ersten Iteration meines Codes einen Punkt, der instabile Eigenwerte impliziert. Ich kann den Filter bei diesen Parameterwerten nicht ausführen, und so stürzt mein Code ab.Wie fmincon Ehre Einschränkungen bei jedem Schritt machen?
Bedeutet die Dokumentation wirklich, dass "AlwaysHonorConstraints" nur für die Ungleichheitsbeschränkungen gilt, die als Vektoren (lb und ub) übergeben werden? Gibt es eine Möglichkeit sicherzustellen, dass die nichtlinearen Einschränkungen bei jedem Schritt erfüllt sind?
Hier ist der relevante Teil meines Code:
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);
Dank!
Wenn Sie sagen "bei der allerersten Iteration meines Codes versucht es einen Punkt mit instabilen Eigenwerten" meinen Sie die erste Iteration von 'fmincon' mit' x0'? Hast du verschiedene Startwerte ausprobiert? Was setzt du 'x0'? – user1884905