WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Kalman-Filter

 

Rita
Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 19.02.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 19.02.2015, 12:59     Titel: Kalman-Filter
  Antworten mit Zitat      
Hallo zusammen,
ich muss ein Kalman-Filter mit Beschränkung programmieren. Dafür brauche ich die fmincon Funktion. Das Problem was ich mit dieser Funktion habe, ist:
1- Aufruf von konstanten die in fmincon Funktion benutzt werden.
2- gesucht ist K, sodass trace[(I-K*H)*P*(I-K*H)'} minimum ist und unter der Bedingung A(x+K)<d. I, H und A sind Matrizen, x, K und d Vektoren.

Kann mir Bitte jemanden dabei helfen?
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden


cvanommer
Forum-Anfänger

Forum-Anfänger


Beiträge: 32
Anmeldedatum: 02.03.15
Wohnort: Garching bei München
Version: R2015a
     Beitrag Verfasst am: 09.03.2015, 13:07     Titel:
  Antworten mit Zitat      
Hallo Rita,

Wenn ich annehme dass:
I ist der Einheitsmatrix
K ist dein Korrekturvektor
z_k = H_k * x_k + v_k
d ist ein Vektor worin alle Fehler der state variables stehen (von x_1 bis x_k)

Die Bedingung A(x+K)<d geben Sie mehreren linear inequalities.
Eine Möglichkeit dieses zu lösen, ist um in Matlab eine Funktion in ein mfile zu kreieren wo deine Constraints definiert sind (z.B. Constrains.m) und dann in deine m-file wo du deine neuer gain K ausrechnest danach zu verweisen. Ein Beispiel wie man dieses machen könnte ist mit http://www.mathworks.com/help/optim/ug/writing-constraints.html.

Zusätzlich ist hier ein Übersicht von alle solvers in Matlab: http://www.mathworks.com/help/optim/ug/choosing-a-solver.html. Für dieses Problem ist fmincon prima.

Viel Erfolg!
Christiaan
Private Nachricht senden Benutzer-Profile anzeigen
 
Rita
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 19.02.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.03.2015, 14:52     Titel:
  Antworten mit Zitat      
Hallo Christian.
Vielen Dank für deine Hilfe.
Es läuft aber manchmal zeigt mir (wenn ich dp1 kleiner mache dh. viele Werte zu optimieren) diesen Fehler: fmincon hat aufgehört zu laufen weil 200 optimierung überschritten hat:

Solver stopped prematurely.

fmincon stopped because it exceeded the function evaluation limit,
options.MaxFunEvals = 200 (the default value).
Hast du eine Idee, wie ich es lösen kann.
Vielen Dank im Voraus

VG.
Rita

Code:

% die Beschränkung muss nur auf den 2ten Term (K(1,2)von K bzw. x_k(1,2)
% ich hab den Ausdruck A=(I-KH)P(I-KH)´+KRK´ berechnet und den trace(A)
% auch und so bekam ich Trace(A)=ax*k(1)^2 + bx*k(1) +cx + dx*k(2)^2 + ex*k(2) + gx
% Beim Jeden Takt bekommen die Matrizen H,P,R,Z,YY neue Werte (db1=d(1,2) lassen
% wir es ertsmal eine Konstante sein), deswegen habe ich sie als global
% deklariert(xh1,z1,yy1..).
% P=[p11 p21; p12 p22]; H=[h11 h21; h12 h22]; R=[r11 r21; r12 r22]und K=[k11 0; 0 k22].

global xh1 z1 yy1 db1;
        xh1 = XX(2,1);
        z1 = Z(jj:k);
        yy1 = YY;
        db1 = 4.9;
         
       
        if (XX(2,1) + (K(2,1)*(Z(2,1)-YY(2,1)))  >= db1)
            k11 = K(1,1);
           
            p11 = PP(1,1);
            p12 = PP(1,2);
            p21 = PP(2,1);
            p22 = PP(2,2);
           
            h11 = HH(1,1);
            h12 = HH(1,2);
            h21 = HH(2,1);
            h22 = HH(2,2);
           
            r11 = R(1,1);
            r12 = R(1,2);
            r21 = R(2,1);
            r22 = R(2,2);

            global ax bx cx dx ex gx;% Trace(A)=ax*k(1)^2 + bx*k(1) +cx + dx*k(2)^2 + ex*k(2) + gx
           
            ax = (p11*h11^2) + (p22*h12^2) + ((p12+p21)*(h11*h12)) + r11;
            bx = (-2*p11*h11^2) - (h12*(p12+p21));
            cx = p11;
            dx = (p11*h21^2) + (p22*h22^2) + ((p21+p12)*(h21*h22)) + r22;
            ex = (-2*p22*h22) - (h21*(p21+p12));
            gx = p22;

            k0 = [0,0];            % Make a starting guess at the solution
            options = optimset('Algorithm','active-set');

            [ck,fval] = fmincon(@objfun,k0,[],[],[],[],[],[],@confuneq,options)% [ck,fval]=.....
       
            k21 = abs(ck(2));
            K = [k11; k21];% zusammen fügen von K Komponanten K=[k11;k22]
       
           
        end
       
       
%         fmincom habe ich als extra mFile wie folgendes geschrieben:
% objfun habe ich als extra mFile wie folgendes geschrieben
function f = objfun(ck)
global ax bx cx dx ex gx
f = ax*ck(1)^2 + bx*ck(1) +cx + dx*ck(2)^2 + ex*ck(2) + gx


% Und confuneq habe ich als extra mFile wie folgendes geschrieben
function [c, ceq] = confuneq(ck)
% Nonlinear inequality constraints
global xh1 z1 yy1 db1

c = xh1 +  (ck(2)*(z1-yy1)) - db1;
% Nonlinear equality constraints
ceq = [];
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
cvanommer
Forum-Anfänger

Forum-Anfänger


Beiträge: 32
Anmeldedatum: 02.03.15
Wohnort: Garching bei München
Version: R2015a
     Beitrag Verfasst am: 11.03.2015, 09:22     Titel:
  Antworten mit Zitat      
Hallo Rita,

Schön zu hören dass Sie damit weiter gekommen sind.
Auf diesem Forum finden Sie einen Weg dieses Problem zu lösen. http://www.mathworks.com/matlabcent.....olver-stopped-prematurely

Wenn dieses geklappt hat, aber den Problem noch immer vor steht, könnten Sie versuchen das Problem mit einem anderen Solver zu lösen. (sehe Link von vorherigen Post)

Viel Erfolg!
Vg Christiaan
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum posten
Du kannst Dateien in diesem Forum herunterladen
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2024 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.