Próbuję oszacować parametry filtra nieliniowego za pomocą fmincon w MATLAB Optimization Toolboox, utrzymując wartości własne macierzy równań stanu mniej niż jeden. Dokumentacja dla fmincon przy użyciu algorytmu "sqp" mówi, że respektuje ograniczenia we wszystkich iteracjach, a jednak na samym początku iteracji mojego kodu próbuje punktu sugerującego niestabilne wartości własne. Nie mogę uruchomić filtra przy tych wartościach parametrów, więc mój kod ulega awarii.jak wykonać ograniczenia honorowe Fmincon na każdym etapie?
Czy dokumentacja rzeczywiście oznacza, że "AlwaysHonorConstraints" ma zastosowanie tylko do ograniczeń nierówności przekazywanych jako wektory (lb i ub)? Czy jest jakiś sposób, aby upewnić się, że ograniczenia nieliniowe są spełnione na każdym etapie?
Oto odnośny fragment mojego kodu:
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);
Dzięki!
Kiedy mówisz "na początku iteracji mojego kodu, próbuje punktu oznaczającego niestabilne wartości własne" masz na myśli pierwszą iterację 'fmincon' używając' x0'? Czy próbowałeś różnych wartości początkowych? Do czego służy opcja 'x0'? – user1884905