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

DGL mit ode45 lösen und dabei weitere Funktion übergeben

 

Benni1050

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.07.2017, 08:51     Titel: DGL mit ode45 lösen und dabei weitere Funktion übergeben
  Antworten mit Zitat      
Hallo zusammen,

gerne möchte ich die DGL myode lösen, die wiederum eine von y(t) abhängige Funktion enthält. Diese könnte ich nun natürlich vollständig in myode ausschreiben. Für die Übersichtlichkeit würde ich darauf aber gerne verzichten.

Ein verkürztes Beispiel:

Code:

function dy=myode(t,y,a,b,F)
dy=zeros(2,1); %dy als Spaltenvektor generiert
dy(1) = y(2);
dy(2) = a*y(1) + b*y(1)^2+F; %F ist Funktion, die wiederum von y abhängig ist
end
 


F könnte folgendermaßen lauten:

Code:

F = y(1)^3+c
 


Der Weg, den ich gerne vermeiden würde, sieht so aus:

Code:

function dy=myode(t,y,a,b,c)
dy=zeros(2,1); %dy als Spaltenvektor generiert
dy(1) = y(2);
dy(2) = a*y(1) + b*y(1)^2+ y(1)^3+c;
 


Gibt es eine Möglichkeit, hier die Übersichtlichkeit bei den eigentlichen, wesentlich umfangreicheren Gleichungen zu wahren?

Viele Grüße

Benni


Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 12.07.2017, 18:51     Titel: Re: DGL mit ode45 lösen und dabei weitere Funktion übergeb
  Antworten mit Zitat      
Hallo Benni1050,

Ich würde es auf jeden Fall übersichtlicher finden, wenn die Funktionen genau da definiert sind, wo Du sie brauchst. Wenn F ein Bestandteil von myode ist, gehört die Gleichung entweder direkt in diese Funktion, oder in eine Unterfunktion:
Code:

function dy=myode(t,y,a,b,F)
dy=zeros(2,1); %dy als Spaltenvektor generiert
dy(1) = y(2);
dy(2) = a*y(1) + b*y(1)^2+F(y);
end

function f = F(y)
F = y(1)^3+c;   % Was ist "c"?!
end


Nur falls F ein Parameter des Modell ist, würde ich es als anonyme Funktion übergeben:
Code:
c = 17.3;
F = @(y) y(1)^3 + c;
ode45(@(t,y) myode(t, y, a, b, F), ...

Hier kommt es also darauf an, of F zur Gleichung gehört oder ein Parameter ist.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Benni1050

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.07.2017, 13:35     Titel: Re: DGL mit ode45 lösen und dabei weitere Funktion übergeb
  Antworten mit Zitat      
Hallo Jan,

beide Varianten funktionieren. Smile Vielen Dank!
c sollte übrigens einfach ein Parameter sein, so wie Du ihn auch definiert hast.
Da F kein Bestandteil von myode ist, sondern vielmehr auch noch in anderen Funktionen als Parameter verwendet wird, habe ich F jetzt als eigenständige Funktion definiert, die von myode aufgerufen wird.

Das sieht also als vollständiges Beispiel (mit etwas abgeänderten Funktionen) so aus:

Code:

function dy=myode(t,y,a,b,c,d) % Hauptfunktion, die F(y,d) als Unterfunktion enthält
dy=zeros(2,1); % dy als Spaltenvektor generiert
dy(1) = y(2)^2*t+c;
dy(2) = a*y(1)^2 + b*y(1)^2+F(y,d);
end
 



Code:

function f=F(y,d) % Unterfunktion, die in Hauptfunktion verwendet wird
f=y(2)+d;
end
 



Code:

%Skript zur Lösung der DGL
a=1.1;
b=2.76;
c=3.14;
d=1.5;
y0=[-1;1]; % Anfangsbedingungen
tspan=0:0.1:10; % Integrationsintervall

%Lösung des DGL-Systems
[tSol, ySol] = ode45(@(t,y)myode(t,y,a,b,c,d),tspan,y0); % Lösungsvektor [tSol, ySol]
 


Vielen Dank nochmals für die Hilfe.

Benni
 
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.