Verfasst am: 11.02.2011, 09:54
Titel: Lösung von linearer Differentialgleichung berechnen
Guten Tag,
ich möchte die Lösung der Differentialgleichung:
bestimmen. Die analytische Lösung dafür lautet:
Für gegebene Vektoren f und g und Anfangszustand x_0 würde ich gern die Lösung x berechnen. Dabei ergeben sich einige Probleme.
darf nicht größer als 700 werden,da e^700 = inf. Daher muss man die Lösung gegebenenfalls zusammenstückeln. Außerdem sollte sich im Spezialfall die gleiche Lösung wie bei lsim ergeben.
Hier ist mein bisheriger Code:
Code:
function x = lode(f,g,t,x1) % x = lode(f,g,t,x(0)) % Lösung der linearen Differentialgleichung dx/dt = f(t)*x + g(t)
%
% x(t) = (int_0^t(g(t')/z(t') dt') + x(0))z(t) z(t) = exp(int_0^t(f(t')dt'))
%
% Beispiel: t = linspace(0,100,1000)'; % f = -0.1; % g = 100*ones(size(t)); % x0 = 1; % y_lsim = lsim(f,1,1,0,g,t,x0); % y_lode = lode(f,g,t,x0); % % für konstantes f sollte sich für lode und lsim das gleiche % % resultat ergeben % figure('name','Vergleich lsim und lode'); % subplot(2,1,1); % plot(t,[y_lsim,y_lode]); % subplot(2,1,2); % plot(t,y_lsim-y_lode);
%
% figure('name','lode_bsp'); % f = -0.1 + 0.01*sin(0.1*t); % y_lode = lode(f,g,t,x0); % plot(t,[y_lode,y_lsim]);
Idee wäre stichpunktartig:
- x~(t) in die Klammer ziehen
- x~(t) auch in das Integral ziehen
- Quotient zweier e-Funktionen ist e^(Differenz)
- Die dann entstehende Differenz der Integrale dürfte darauf hinauslaufen, dass du nur einmal und über ein anderes Intervall integrierst.
Grüße,
Harald
_________________
1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
zwischen der Formel und den Tags dürfen wohl keine Leerzeilen sein. Der schöneren Ansicht halber:
Zur weiteren Vorgehensweise: du hattest da doch schon einen Ansatz, und die Umformung der Gleichung sollte ihn doch eher vereinfachen?
Grüße,
Harald
_________________
1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
In der zweiten Form taucht im Gegensart zu meiner zuerst geposteten Lösung das Integral auf (Exponent der e-Funktion). Da dieser Ausdruck von t' und t abhängt müsste ich es als 2-dimensionalle Matrix speichern (oder eine Schleife verwenden). Die Erstellung dieser Matrix ist sicherlich sehr zeitaufwendig und sprengt auch schnell den Speicher.
Ich hatte ursprünglich eher an eine Lösung mit Hilfe von Laplace-Transformation oder ähnlichen gedacht. Da aber f zeitabhängig ist geht das wohl nicht.
wenn t für den Moment mal als fest angenommen wird, sollten die verschiedenen Integrale von t' bis t als Integrale von t - k*dt bis t darstellbar sein. Ich würde es also mit cumsum/cumtrapz über den umgedrehten Vektor f(end:-1:1) versuchen.
In der nächsten Iteration der Schleife (t+dt statt t) müsstest du an den Vektor nur vorne eine 0 anfügen (für ein neues Teilstück) und zu dem Vektor als ganzen das Integral von t bis t + dt (was ja sehr schnell berechnet sein sollte) dazuzählen.
Aber mal ne ganz andere Frage: fehlt in deinem ursprünglichen Code nicht ein Minus? xtilde = exp(- integral).
Empfehlung wäre auch, den Code an sich zu dokumentieren. Ich habe da gerade meine Schwierigkeiten, das nachzuvollziehen, und fürchte, dass du selbst nach einem oder mehreren Monaten da auch Probleme haben wirst.
Grüße,
Harald
_________________
1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Einstellungen und Berechtigungen
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
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.