/ / Ausdrücke für die Verwendung in 'odefun' in ODE-Lösern in Matlab - matlab, Differentialgleichungen

Manipulieren von Ausdrücken für die Verwendung in 'odefun' in ODE-Solvern in Matlab - Matlab, Differentialgleichungen

Ich habe ein System von Differentialgleichungen zweiter Ordnung, die ich lösen möchte, das ich symbolisch mit den Variablen y1, dy1 usw. habe. Zum Beispiel:

dy1 = y1 + y2
dy2 = 2*y1 + y2^3

Um einen ODE-Löser von Matlab verwenden zu können, benötige ich ein "odefun", bei dem ich das System der Differentialgleichungen erster Ordnung in einer Form ausdrücke, die der folgenden ähnelt:

function dydt = eqs(t,y)
dydt = [y(1)+y(2);   2*y(1)+y(2)^3]

In meinem vorliegenden Problem sind die symbolischen Gleichungen viel zu lang und können nicht einmal richtig auf dem Bildschirm angezeigt werden:

dy1 = y1 + y2 + ... More than 25000 characters
dy2 = 2*y1 + y2^3 + ... More than 25000 characters

Um die entsprechende Funktion für die Verwendung im ODE-Solver zu schreiben, müsste ich Folgendes eingeben:

function dydt = eqs(t,y)
dydt = [y(1)+y(2)+...More than 25000 characters; 2*y(1)+y(2)^3+...More than 25000 characters]

Offensichtlich nicht machbar. Ich möchte die Gleichungen in symbolischer Form manipulieren, um "y1" durch "y (1)" zu ersetzen. Dies scheint jedoch nicht einfach zu sein, da eine Variable keinen Namen einschließlich Klammern haben kann, das heißt, syms y (1) gibt einen Fehler aus.

Ein anderer Ansatz: Wenn die ursprünglichen symbolischen Gleichungen unter Verwendung von Strings konstruiert werden, ist es möglich, die Strings "y1" durch "y (1)" zu ersetzen. Danach konnte ich die Ausdrücke in eine Matlab-Skriptdatei kopieren, in der ich die Funktion dydt definiere. Die Ausdrücke sind jedoch zu lang, um vollständig dargestellt zu werden, egal ob symbolisch oder als Zeichenfolge.

Antworten:

0 für die Antwort № 1

Sie können eine Inline-Funktion (auch als Funktionshandle bezeichnet) folgendermaßen definieren:

dydt=@(y) [ sum(y) ; 2y(1)+y(2)^3+...]

Dann können Sie mit beliebige Werte eingeben dydt(y).

Sie können es auch in verwenden ode45() Funktion als Eingabe zum Lösen der Differentialgleichung.