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

Ode45 Solver + lineares DGL System liefert falsches Ergebnis

 

Febreze
Forum-Anfänger

Forum-Anfänger


Beiträge: 10
Anmeldedatum: 13.12.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.03.2013, 18:16     Titel: Ode45 Solver + lineares DGL System liefert falsches Ergebnis
  Antworten mit Zitat      
Hallo liebe Community,

Ich habe wieder einmal ein Problem mit dem ode45 Solver. Diesmal möchte ich ein einfaches linearisiertes DGL-System lösen.
Allerdings kommt ziemlicher Müll dabei raus.

Egal welche linearen DGL-Systeme ich mit dem Solver zu lösen versuche, alle Kurven sehen identisch aus, die Lösungswerte sind zunächst Null und steigen zum Ende der Simulation ins Unermessliche.

Hier ein kleines Beispiel. Über Hilfe wäre ich euch sehr dankbar.
Code:

% Parameter
function testlin()
tspan= [0 20];
dt=0.01;
u=1.5;

% Systemmatrizen
F=[1 dt; 0 1];
G=[dt^2/2; dt];

x0=[0;0];
[t,x]=ode45(@lindiff,tspan,x0,[],F,G,u);

% Ausgabe
 plot(t,x(:,1))
 
% Integrand
function dx = lindiff(t,x,F,G,u)
dx = F * x + G * u;
 


Viele Grüße
Fabian
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 03.03.2013, 20:03     Titel:
  Antworten mit Zitat      
Hallo,

die Frage ist, woran das liegt.
Dass die Lösungswerte anfangs 0 sind, sollte nicht weiter verwundern, da dein Anfangswert ja 0 ist.

Was das angeht, dass die Simulationen gegen unendlich laufen: Ich vermute, dass die von dir simulierten Systeme schlicht und einfach instabil sind.

Oder anders gefragt: du sagst, dass das Ergebnis falsch ist. Was ist das richtige Ergebnis?

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Febreze
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 10
Anmeldedatum: 13.12.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.03.2013, 21:03     Titel:
  Antworten mit Zitat      
Hallo danke für díe Antwort.

Das lineare DGL System 1. Ordnung was ich darstellen möchte, ist eine einfache Positionsbestimmung.
Als Differenzengleichung habe ich diese einfach in einer For-Schleife gelöst da es ein wirklich einfaches system ist habe ich halt immer den letzten wert wieder in das DGL system reingeschoben und das was daraus kommt, sieht meiner Meinung nach richtiger aus als das was der Solver abliefert. Da u konstant ist steigt der wert halt immer weiter an was er ja auch soll. Stabil ist das System auch nicht. Aber muss es das sein? Der Solver soll es doch bloß lösen.

Nur das Ergebnis von oben durch den Solver explodiert ja förmlich. Zudem sind wie gesagt alle meine linearen Beispiele die ich Versuche Kann man denn lineare systeme überhaupt mit Solver lösen?



Code:

%% Deklarieren der Metavariablen
tspan= 20;
dt=0.01;

%%Systemmatrizen definieren
F=[1 dt; 0 1];  %systemmatrix
G=[dt^2/2; dt]; %Steuermatrix

u=1.5; %Geschwindigkeit
x=[0;0]; %Initialisierung des Zustands


%% Initialisierung des Ergebnisvektors
x_pos=[];

for t=0:dt:tspan
    x = F * x + G * u
    x_pos = [x_pos,x(1)]; %reale Position
   
end

 plot(0:dt:tspan, x_pos)
 


Viele Grüße
Fabian

Zuletzt bearbeitet von Febreze am 03.03.2013, 21:29, insgesamt einmal bearbeitet
Private Nachricht senden Benutzer-Profile anzeigen
 
dany2k3k
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 66
Anmeldedatum: 02.02.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.03.2013, 21:20     Titel:
  Antworten mit Zitat      
Servas,

bei dem was du vorhast wundert es mich nicht,dass es explodiert.
Gott sei dank tut es das..

schau dir mal folgende matlab ausgabe an:

(deine werte)

> F=[1 0.01; 0 1];
>> eig(f)

ans =

1
1


Wenn man sich bisschen mit regelungstechnik und mathematik befasst hat, dann weiss man, dass differentialgleichungen der form

x'=A*x + b*u

dann stabil sind, wenn die eigenwerte der A Matrix NEGATIV!!! sind. Deine sind positiv.

Lösungen von differentialgleichungen (lineare) sind immer Linearkombinationen aus e^lamda*t Funktionen.
(lamda = eigenwert der A matrix)

sind diese positiv,dann hast du e^1*t .. eine e-Funktion welche steigt und steigt. (^1*t deswegen, weil deine eigenwerte 1 sind)


hoffe das hilft Wink

lg
daniel
Private Nachricht senden Benutzer-Profile anzeigen
 
Febreze
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 10
Anmeldedatum: 13.12.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.03.2013, 21:46     Titel:
  Antworten mit Zitat      
Das ist doch nun mal das System. Das es nicht stabil ist hab ich auch schon geschrieben. Wink

Es ist also nur möglich stabile lineare Systeme mit dem Solver zu lösen?
Warum bekommt meine For schleife das hin und der Solver nicht??

Ich brauche vernünftige Antworten Leute und bitte nicht ganz so von oben herab!
Private Nachricht senden Benutzer-Profile anzeigen
 
dany2k3k
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 66
Anmeldedatum: 02.02.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.03.2013, 21:56     Titel:
  Antworten mit Zitat      
Hallo Febreze,

falls es "von oben heraub" auf dich gewirkt hat, tuts mir leid.

Zurück zum Problem:

Der solver kann natürlich auch instabile Differentialgleichungen lösen. Du bekommst halt dann instabile Lösungen , genauso wie du sie hast.

Das ganze hat nur einen Haken: Bei steigenden exp-funktionen werden die zahlen sehr schnell sehr groß. Bei zu langer simulationsdauer gibt dir das matlab bekannt und verabschiedet sich aus der Simulation. Das ist bei dir nach 20 Sekunden jedoch nicht der Fall.

Deine Lösungen sind halt steigende exp-Funktionen. Das passt schon.

Versuch doch zuerst mal ein simpleres problem:

nimm einfach mal
x'=3*x das kansnt du zm beispiel durch händisches integrieren analytisch lösen, du kommst dann auf a*e^(3*t) (über den vorfaktor bin ich mir gerade nicht sicher,müsst es händisch durchrechnen)

wenn du das dann mit ode45 löst,hast du auch eine steigende e-funktion.


Nochmals zusammengefasst: Deine Lösungen sind instabil,und genau die bekommst ja von ode45 zurück.
Warum akzeptierst du diese Lösungen nicht ? Very Happy

lg
daniel
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 03.03.2013, 22:37     Titel:
  Antworten mit Zitat      
Hallo,

wenn du zwischen diskreten und kontinuierlichen Formulierungen wechselst, musst du auch die Systemmatrizen anpassen.

Linearisierung:
x(t+dt) ~ x(t) + dt*x'(t)

d.h.
x'(t) ~ 1/dt*( x(t+dt) - x(t) ) = 1/dt* (F*x + G*u - x) = 1/dt*(F -I)*x + G/dt*u

also in Näherung
x'(t) = [0 1; 0 0]*x + [0; 1]*u

Wenn du das jetzt mit ode45 löst, kommt auch etwas vergleichbares raus wie bei deiner Differenzengleichung:
Code:

function testlin()
tspan= [0 20];
dt=0.01;
u=1.5;

% Systemmatrizen
F=[0 1; 0 0];
G=[0; 1];

x0=[0;0];
% elegantere Nutzung des Function Handles
[t,x]=ode45(@(t,x) lindiff(t,x,F,G,u),tspan,x0,[]);

% Ausgabe
 plot(t,x(:,1))
 
% Integrand
function dx = lindiff(t,x,F,G,u)
dx = F * x + G * u;


Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
dany2k3k
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 66
Anmeldedatum: 02.02.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.03.2013, 22:43     Titel:
  Antworten mit Zitat      
Danke Harald,

dass der da diskrete Gleichungen aufstellt checkte ich net:)

lg u. schönen Abend.

Daniel
Private Nachricht senden Benutzer-Profile anzeigen
 
Febreze
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 10
Anmeldedatum: 13.12.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.03.2013, 23:06     Titel:
  Antworten mit Zitat      
Vielen Dank Harald, das hat mir weitergeholfen.

Viele Grüße
Fabian
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.