DGL mit ode45 lösen und dabei weitere Funktion übergeben
Benni1050
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 12.07.2017, 08:51
Titel: DGL mit ode45 lösen und dabei weitere Funktion übergeben
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
Verfasst am: 12.07.2017, 18:51
Titel: Re: DGL mit ode45 lösen und dabei weitere Funktion übergeb
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
Hier kommt es also darauf an, of F zur Gleichung gehört oder ein Parameter ist.
Gruß, Jan
Benni1050
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 13.07.2017, 13:35
Titel: Re: DGL mit ode45 lösen und dabei weitere Funktion übergeb
Hallo Jan,
beide Varianten funktionieren. 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
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.