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

Integration mit Matrizen

 

baustamm
Forum-Anfänger

Forum-Anfänger


Beiträge: 29
Anmeldedatum: 20.07.12
Wohnort: ---
Version: Matlab 2011b
     Beitrag Verfasst am: 28.08.2013, 14:01     Titel: Integration mit Matrizen
  Antworten mit Zitat      
Hallo,
ich habe eine sehr einfache Frage, habe auch danach gesucht aber nichts gefunden.

Die Frage:
Wie kann man ein System der Art integrieren:
Code:
x_dot = A*x + B*u

Ich möchte aber kein state space model erstellen, also kein ss() Befehl benutzen da ich noch weitere Terme in der Gleichung habe.

Vielen Dank und Grüße!
Private Nachricht senden Benutzer-Profile anzeigen


Paul_87
Forum-Anfänger

Forum-Anfänger


Beiträge: 17
Anmeldedatum: 20.06.13
Wohnort: Oz
Version: ---
     Beitrag Verfasst am: 28.08.2013, 14:42     Titel:
  Antworten mit Zitat      
Da ist ein wunderbares lineares System, falls A und B konstant sind. Des uebrigen ist das schon ein state space model!!

ode45 oder ode15 (bei steifen Problemen) sollte das loesen.

Dazu System in eine Funktion schreiben, x Bereich festlegen und den Rest findest du in der Hilfe zu ode...

Falls u eine funktion (der Zeit?) ist musst du diese auch definieren.
Private Nachricht senden Benutzer-Profile anzeigen
 
baustamm
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 29
Anmeldedatum: 20.07.12
Wohnort: ---
Version: Matlab 2011b
     Beitrag Verfasst am: 28.08.2013, 14:48     Titel:
  Antworten mit Zitat      
danke für die antwort! das habe ich versucht:

Code:
[~,x_til]=ode45(@(t,x_til) x_til_dot_fun(t,x,A11,A12,A21,A22,B1,B2,u(ii),y),tspan,x_hat(1:4),options);


function x_til_dot = x_til_dot_fun(t,x_til,A11,A12,A21,A22,B1,B2,L,u,y)

x_til_dot = (A22 - L*A12)*x_til + (B2 - L*B1)*u ...
    + (A21 - L*A11 + (A22 - L*A12)*L)*y;


aber dann kommt ein fehler:

Error using - Matrix dimensions must agree.
Error in x_til_dot_fun (line 6)
x_til_dot = (A22 - L*A12)*x_til + (B2 - L*B1)*u + (A21 - L*A11 + (A22 - L*A12)*L)*y;

Error in @(t,x_til)x_til_dot_fun(t,x,A11,A12,A21,A22,B1,B2,u(ii),y)


Error in odearguments (line 88)
f0 = feval(ode,t0,y0,args{:}); % ODE15I sets args{1} to yp0.

Error in ode45 (line 114)
[neq, tspan, ntspan, next, t0, tfinal, tdir, y0, f0, odeArgs, odeFcn, ...

Error in luenberger_main (line 82)
[~,x_til]=ode45(@(t,x_til) x_til_dot_fun(t,x,A11,A12,A21,A22,B1,B2,u(ii),y)...

die Dimensionen stimmen aber alle...


A11 = A_new(1:3,1:3);
A12 = A_new(1:3,4:7);
A21 = A_new(4:7,1:3);
A22 = A_new(4:7,4:7);
B1 = B(5:7);
B2 = B(1:4);

mit

L =

1.0e+05 *

-1.1654 -1.1581 0.0009
0.6469 0.6428 -0.0005
0.0023 0.0027 -0.0000
3.3949 3.3726 -0.0026

y =

1.6161
0.0658
322.9022

und u(ii) skalar

für x_til_dot = (A22 - L*A12)*x_til + (B2 - L*B1)*u ...
+ (A21 - L*A11 + (A22 - L*A12)*L)*y = [x1;x2;x3;4]
wenn ich das in die commandzeile eingebe funktioniert es und ein stehender 4x1 vektor ist das ergebnis.
muss man x_til irgendwie initialisieren?



Edit by Martin: Die Code-Formatierung funktioniert nur, wenn man BBCode im Beitrag zulässt. Bitte das nächste Mal beachten.
Private Nachricht senden Benutzer-Profile anzeigen
 
Paul_87
Forum-Anfänger

Forum-Anfänger


Beiträge: 17
Anmeldedatum: 20.06.13
Wohnort: Oz
Version: ---
     Beitrag Verfasst am: 28.08.2013, 15:55     Titel:
  Antworten mit Zitat      
Also die Diemensionen stimmen auf den ersten Blick. Wie du selbst schreibst, erhaellst du ja einen Spaltenvektor mit 4 Elementen.


Die Uebergabe einer Funktion an den ode solver, mit zusaetzlichen Variablen (deine Matrizen) erfolgt nach dem Schema:

Code:

[T_out,x_out]=ode45(@(t,x_til) x_til_dot_fun(t,x,x_hat(1:4),options,A11,A12,A21,A22,B1,B2,u(ii),y),tspan);


Der ode-Solver braucht natuerlich einen Anfangswert (fuer dich Anfangsvektor) von x. Ich gehe davon aus, dass das dein x_hat ist?
Private Nachricht senden Benutzer-Profile anzeigen
 
baustamm
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 29
Anmeldedatum: 20.07.12
Wohnort: ---
Version: Matlab 2011b
     Beitrag Verfasst am: 29.08.2013, 05:29     Titel:
  Antworten mit Zitat      
genau richtig, x_hat(1:4) ist dann auch ein 4x1 vektor.
Private Nachricht senden Benutzer-Profile anzeigen
 
baustamm
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 29
Anmeldedatum: 20.07.12
Wohnort: ---
Version: Matlab 2011b
     Beitrag Verfasst am: 29.08.2013, 05:38     Titel:
  Antworten mit Zitat      
oh man, hab vergessen L zu übergeben... seltsam, dass kein fehler kommt weil zu wenig elemente übergeben. tut mir leid, trotzdem danke!
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 - 2025 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.