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

Problem mit ode45 und dem darauffolgenden Plot

 

Mrxxn
Forum-Anfänger

Forum-Anfänger


Beiträge: 10
Anmeldedatum: 02.12.22
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 23.08.2023, 22:52     Titel: Problem mit ode45 und dem darauffolgenden Plot
  Antworten mit Zitat      
Hallo,
ich habe folgendes Problem: Ich habe einen main code geschrieben. In diesem Plotte ich einen Erwartungswert <X> gegen die Zeit t. <X> wiederum berechnet sich aus einer Funktion a. Diese Funktion a berechne ich in einem anderen Code mithilfe des ode45 solvers als Lösung einer DGL. Aber in <X> steckt auf noch die Funktion b, die ich auch aus einer DGL bekomme, die ich mit ode45 löse. Mein Problem ist, dass mir ode45 einen array für a und einen array für b gibt, die unterschiedlich lang sind, obwohl ich

tspan = [0 50]

gesetzt habe. Soweit ich weiß liegt das daran, dass ode45 sich die Zeitschritte selbst aussucht, um die Lösung zu optimieren. Natürlich kann ich feste Schritte vorgeben, aber dann büße ich die Genauigkeit meiner Lösung ein, was ich nicht möchte. Durch die unterschiedliche Länge der arrays krieg ich jetzt aber ein Problem, weil die Dimensionen in der Berechnung von <X> nicht mehr übereinstimmen. Wie kann ich das lösen?
Und noch eine Verständnisfrage: Ist es sinnvoll die Range von tspan genauso zu wählen wie die Range meiner t-Achse im Plot von <X>?
Danke im Voraus!
Bem: Der Code, den ich angehängt habe ist nicht vollständig, weil der richtige Code relativ lang ist. Außerdem sind a und b im Code a_row und a_row_osci:

Code:

%Berechnung von a und b mit ode45
tspan = [0 50];
a0 = 0;
[t, a] = ode45(@(t,a) (-1/2*B-1/2*A+B.*z(t)).*a-F_star(t)+F_star(t).*z(t), tspan,a0);
a_row= a.';      

a0_osci = 0;
[t, a1] = ode45(@(t,a1) (-1/2*B-1/2*A+B.*z(t)).*a1-F_star_osci(t)+F_star_osci(t).*z(t), tspan,a0_osci,options);
 a_row_osci= a1.';        %hat andere Länge als a_row

%Berechnung von <X>
t = 0:0.1:50
a_dagger = a_row(t)./z(t)   %Array Dimensionen stimmen nicht überein
a = a_row_osci./z(t)           %Array Dimensionen stimmen nicht überein
X = a_dagger(t)+a(t)

%Plotte <X>
plot(t,X)
 
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.449
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 24.08.2023, 08:19     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
Natürlich kann ich feste Schritte vorgeben, aber dann büße ich die Genauigkeit meiner Lösung ein, was ich nicht möchte.

Die Genauigkeit der Lösung sollte erhalten bleiben. Aus der Dokumentation:
"The solutions produced at the specified points are of the same order of accuracy as the solutions computed at each internal step."

Statt a_dagger = a_row(t)./z(t) solltest du das verwenden:
Code:
a_dagger = a_row ./z

Das bezieht sich dann implizit auf t.

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 ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
tournesol59
Forum-Newbie

Forum-Newbie


Beiträge: 8
Anmeldedatum: 16.06.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 04.09.2023, 06:27     Titel:
  Antworten mit Zitat      
Das Thema ist alt. Jedoch habe ich gleiches Problem betroffen.
Habe ich feste Punkte option in tspan Eingabe zu ode45 gegeben.
Mathworks:
Interval of integration, specified as a vector. At a minimum, tspan must be a two-element vector [t0 tf] specifying the initial and final times. To obtain solutions at specific times between t0 and tf, use a longer vector of the form [t0,t1,t2,...,tf]. The elements in tspan must be all increasing or all decreasing.
Wenn es trotzdem hilfreich ist.
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.