Sto provando a stimare i parametri di un filtro non lineare utilizzando fmincon nel toolbox di ottimizzazione MATLAB, mantenendo gli autovalori della matrice di equazioni di stato meno di uno. La documentazione di fmincon che usa l'algoritmo 'sqp' dice che rispetta i vincoli a tutte le iterazioni, eppure alla primissima iterazione del mio codice prova un punto che implica autovalori instabili. Non riesco ad eseguire il filtro con questi valori di parametro, quindi il mio codice si arresta in modo anomalo.come eseguire i vincoli di onore fmincon ad ogni passo?
La documentazione indica realmente che "AlwaysHonorConstraints" si applica solo ai vincoli di disuguaglianza trasmessi come vettori (lb e ub)? Esiste un modo per garantire che i vincoli non lineari siano soddisfatti in ogni fase?
Ecco il pezzo rilevante del mio codice:
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);
Grazie!
Quando si dice "alla prima iterazione del mio codice si prova un punto che implica autovalori instabili" si intende la prima iterazione di 'fmincon' usando' x0'? Hai provato diversi valori iniziali? A cosa imposti 'x0'? – user1884905