2017-11-07 16 views
0

Dies ist mein erstes Mal, also wenn du mehr Informationen brauchst oder etwas nicht richtig gemacht hast lass es mich wissen!Ein System von ODEs in MATLAB lösen?

Ich möchte ein System von ODES plotten, das wäre kein Problem, wie ich das folgende tun würde;

[email protected](t,x) [ 
.the RHS of my first order ODES. 
]; 


[t x]=ode45(F,[Range], [Initial conditions]); 

Wo ein Vektor x würde erstellt werden, die '(1), X' (2), ..., wobei X (1), x (2) würde die zeitabhängig variabel sein.

Allerdings ist mein System ein wenig komplizierter. Ich habe 6 Differentialgleichungen, die aus Gleichungen bestehen, die Differentialgleichungen und die zeitabhängigen Variablen enthalten. Zum Beispiel sind die RHS meiner ODES so etwas wie 2 * x (2) * x '(1) * f (a)

Wo f (a) könnte eine andere Funktion basierend auf Konstanten sein, a.

Ich habe meinen Code in der folgenden Reihenfolge eingerichtet;

Konstanten, dann Gleichungen der Form f (a), dann meine Differentialgleichungen gefolgt vom ode45 Solver und den Plotbefehlen. Allerdings bekomme ich mehrere Fehler "Undefinierte Funktion oder Variable", da frühe Gleichungen von Variablen/Gleichungen abhängen, die erst später definiert werden.

Vielen Dank schon mal so viel für Sie :)

Wie vorgeschlagen, hier ein Beispiel für die Art meines Codes helfen;

`%Constants 
a=34 
b=31 
c=20 
%Equations 
A=b*cos(2*pi) 
B=a*EQ1 
C=c*x(2) 
%DifferentialEquations 
EQ1=x(1)*A 
EQ2=(EQ3-EQ1)*(B-C) 
EQ3=x(2)*x(3) 
[email protected](t,x) [EQ1;EQ2;EQ3;];[t x]=ode45(F,[0 10], [0 0 0 ]); 

Liefert den Fehler. Erzeugt die undefinierte Funktion oder Variable 'DEQ1A'.

+0

Es würde helfen, wenn Sie einen Ausschnitt des Codes zur Verfügung stellen könnten Sie versucht haben, das nicht funktioniert, und die tatsächlichen Fehlermeldungen, die zeigen, was schief läuft (im Kontext). Außerdem sollten Sie bei der Eingabe von Code unbedingt die Schaltfläche {} im Editor verwenden, um sicherzustellen, dass sie korrekt formatiert ist. – Phil

+0

Dank @Jodag jedoch das Hauptproblem bleibt – ODAmatuer

+0

Könnten Sie das Problem mit tatsächlichen MATLAB-Code aktualisieren, die den Fehler wiedergibt, den Sie begegnen? Ich glaube, ich war in der Lage, 'F' richtig zu definieren, basierend auf den Gleichungen, die Sie gegeben haben, und' ode45' hat keine Fehler zurückgegeben. – jodag

Antwort

0

Basierend auf dem Kommentar versuchen Sie eine Variable zu verwenden, bevor sie definiert wird. In MATLAB müssen Sie Ihre Variablen und Funktionen definieren, bevor Sie sie verwenden. Da die Gleichungen Funktionen voneinander sind, können Sie anonymous functions verwenden, um F zu definieren.

Beispiel:

a=34; 
b=31; 
c=20; 
A = b*cos(2*pi); 
EQ1 = @(x) x(1)*A; 
B = @(x) a*EQ1(x); 
C = @(x) c*x(2); 
EQ3 = @(x) x(2)*x(3); 
EQ2 = @(x) (EQ3(x) - EQ1(x))*(B(x)-C(x)); 
F = @(t,x) [EQ1(x);EQ2(x);EQ3(x)]; 
[t,x] = ode45(F,[0 10], [0 0 0]); 
+0

Vielen Dank für Ihre Zeit. Ich werde das ausprobieren. – ODAmatuer

+0

Es ist erwähnenswert, dass die Ableitungen aller Ihrer Funktionen ('EQ1',' EQ2', 'EQ3') konstant in Bezug auf" t "sind und sie alle 0 für die Anfangsbedingung von [0 0 0]' sind bedeutet keine Änderung im Laufe der Zeit. – jodag

+0

Danke, ich habe es mit einer sehr, sehr großen Datei zu tun, also wird nicht alles 0 sein; Dies waren nur Beispiele, um das Problem zu zeigen, das Sie gelöst haben. Kurz gesagt, füge ich zu @ (x) Funktionen hinzu, die noch definiert sind, und benenne A und B in A (x) und B (x) um? – ODAmatuer

Verwandte Themen