System von DGL lösen < Matlab < Mathe-Software < Mathe < Vorhilfe
|
Aufgabe | Plotten sie die Lösung des DGL-Systems für [mm]t \in [0,400][/mm] ab dem Startwert [mm]x(0)=1[/mm], [mm]y(0)=0[/mm], [mm]z(0)=0[/mm]:
[mm]\dot x = -(y+z)[/mm]
[mm]\dot y = x+ay[/mm]
[mm]\dot z = b+xz-cz[/mm]
mit [mm]a=0.2[/mm], [mm]b=0.3005[/mm], [mm]c=6.02[/mm] |
Ich habe diese Frage in keinem Forum auf anderen Internetseiten gestellt.
Hi!
Ich stehe bei dieser Aufgabe irgendwie total auf dem Schlauch.
Wie bringe ich Matlab dazu dieses System von DGL zu lösen?
Ich habe zu den einzelnen DGLs Funktionen geschrieben, nach dem Muster
function dx = DGL_x1(t, y, z)
dx = -(y+z);
Und die dann zu lösen via
[t1,x] = ode45(@DGL_x1, [0 400], 1);
[t2,y] = ode45(@DGL_y1, [0 400], 0);
[t3,z] = ode45(@DGL_z1, [0 400], 0);
und anschließend zu plotten.
Das bringt mir zwar ein Ergebnis, aber natürlich nicht das korrekte.
Wie schaffe ich es, dass Matlab die DGLs in die entsprechenden Beziehungen setzt?
Vielen Dank schonmal an alle, die versuchen mir zu helfen!
Gruß,
die Prinzessin
|
|
|
|
Hi,
da macht man sich die Vektor-Orientiertheit von Matlab zu nutze:
Für das DGL-System schreibt man nur ein m-File dgl.m:
1: | function dy=dgl(t,y)
| 2: | dy=zeros(3,1);
| 3: | global a;
| 4: | global b;
| 5: | global c;
| 6: | dy(1)=-(y(2)+y(3));
| 7: | dy(2)=y(1)+a*y(2);
| 8: | dy(3)=b+y(1)*y(3)-c*y(3); |
in dy(1) steht x'
in dy(2) y'
und in dy(3) z'
y(1) ist x,
y(2) ist y,
y(3) ist z.
Die globalen Variable a, b und c müssen im Hauptprogramm deklariert werden.
1: | global a; a=0.2;
| 2: | global b; b=0.3005;
| 3: | global c; c=6.02;
| 4: | y0=[1;0;0];
| 5: | t=[0 400];
| 6: | [t,y]=ode45(@dgl,t,y0);
| 7: |
| 8: | plot(t,y(:,1),t,y(:,2),t,y(:,3)); |
y ist dann der Lösungsvektor, mit Werten für
x, y und z zu den Zeitpunkten in t.
Das kannst Du auch z.B. hier nachlesen:
MATLAB Function Reference
Viele Grüße
nschlange
|
|
|
|
|
Vielen Dank!
So funktioniert es.
Gruß,
die Prinzessin
|
|
|
|