DGL mit zeitabhängiger Störfkt < Matlab < Mathe-Software < Mathe < Vorhilfe
|
Status: |
(Frage) beantwortet | Datum: | 15:55 Mi 13.02.2008 | Autor: | nescius |
Aufgabe | Gegeben ist eine Differenzialgleichung dritter Ordnung:
x'''+0,2x''+3x'+x=F(t)
AB: x(0)=x'(0)=x''(0)=0
Störfunktion: f(t)=0 für t<5; f(t)=3 für t>=5 |
Hallo zusammen,
ich soll die oben genannte DGleichung mit Matlab lösen.
Dafür habe ich zwei Funktions-m-Files geschrieben in der einen steht die DGL in der ander die Störfunktion y=(0,3)
Das Lösen der Gleichung habe ich in einem weitern m-File der mit ODE23 durchgeführt, leider aber die Störfunktion nicht berücksichtigt.
Kann mir jemand einen Ansatz geben wie ich die zeitabhängige Störfunktion in den Quellcode mit einbinden kann?
Ich dachte da an eine if- oder while- Schleifen. Das kann aber nicht funtionieren da die DGL in einem andern m-File definiert wird.
MFG
nescius
Ich habe diese Frage in keinem Forum auf anderen Internetseiten gestellt.
|
|
|
|
Hi,
Example 3 aus der Hilfe zu den ode-Befehlen:
ode*
Hilft Dir das weiter?
mfg
nschlange
|
|
|
|
|
Status: |
(Frage) beantwortet | Datum: | 20:44 Mi 13.02.2008 | Autor: | nescius |
Hat mir etwas weiter geholfen. Ich bekomme nur leider einen etwas sehr unwirklichen Graphen. Da mein Englisch nicht sehr gut ist um nicht zu sagen schlecht muss ich nochmal fragen.
Wie läuft da mit dem linspace, dort muss ich meine f(t) eintragen? Der Rechner weis doch aber trotzdem nichtwann diese Werte zu treffen?
MFG
|
|
|
|
|
Hi,
Du könntest doch einfach die homogene DGL für t=0 bis 5 lösen,
und dann mit der konstanten rechten Seite die DGL
für t=5 bis 10 lösen und die beiden Lösungen dann hintereinander
hängen.
An sonsten würde ich es so versuchen:
Datei loese_ihdgl.m:
1: | clear all;
| 2: | clc;
| 3: |
| 4: | st = linspace(0,10,500);
| 5: | s = f(st);
| 6: |
| 7: | [t,x]= ode45(@(t,y) ihdgl(t,y,st,s),[0 10],[0; 0; 0]);
| 8: | plot(t,x(:,1),t,x(:,2),t,x(:,3));
| 9: | legend('x_1','x_2','x_3','Location','SouthWest'); |
Datei f.m:
1: | function ret = f(t)
| 2: |
| 3: | ret=0.*(t<5);
| 4: | ret=3.*(t>=5); |
Datei ihdgl.m:
1: | function dxdt = hdgl(t,x,st,s)
| 2: |
| 3: | s = interp1(st,s,t);
| 4: | dxdt=[ x(2); x(3); s-0.2*x(3)-3*x(2)-x(1)]; |
Im Plot ist [mm] x_1 [/mm] Dein gesuchtes x(t).
Stimmt das?
|
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 06:38 Do 14.02.2008 | Autor: | nescius |
Hallo!
Ich hab jetzt eine vernünftige Lösung mit deiner Hilfe. Ich hab noch etwas geändert und dann hat es funktioniert.
Danke
|
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 08:11 Do 14.02.2008 | Autor: | nschlange |
Schreib doch mal was Du geändert hast.
Das ist für den nächsten mit einem ähnlichen Problem sicher
hilfreich.
mfg
nschlange
|
|
|
|