DGl m. ni. konst. Koffizienten < gewöhnliche < Differentialgl. < Analysis < Hochschule < Mathe < Vorhilfe
|
Hallo,
Ich habe diese Frage in keinem Forum auf anderen Internetseiten gestellt.
kann mir jemand bei der Lösung eines Differentialgleichungssystems mit nicht konst. Koeffizienten weiterhelfen?
Das Gleichungssystem hat im einfachsten Fall folgende Form:
dP0/dt=-lambda1(t)*P0(t)+lambda2(t)*P1(t)
dP1/dt=-lambda2(t)*P1(t)+lambda1(t)*P0(t)
nach P0 und P1 möchte ich auflösen.
Anfangsbedingungen: P0=1, P1=0
Vielen Dank im vorraus!!!
|
|
|
|
Hallo andredoering,
Ein allgemeines Verfahren um jede DGL zu lösen gibt's sicher nicht. Auch nicht für jede lineare DGL.
Bei Deiner DGL
dP0/dt=-lambda1(t)*P0(t)+lambda2(t)*P1(t)
dP1/dt=-lambda2(t)*P1(t)+lambda1(t)*P0(t)
Fällt erstmal auf das
[mm] \bruch{dP_0}{dt}=-\bruch{dP_1}{dt}
[/mm]
Man kann also ansetzen
[mm] P_1=-P_0+c
[/mm]
Mit den Anfangswerten ergibt sich:
[mm] P_1=....
[/mm]
Das vereinfacht das ganze erstmal ein wenig.
viele Grüße
mathemaduenn
|
|
|
|
|
Hallo,
vielen dank für die Antwort, leider komme ich danach auch nicht wirklich weiter, da lambda ja nicht konstant ist sondern auch zeitabhängig ist.
Noch irgend ne Idee?
Vielleicht mit MATLAB?
Danke schon mal!!!
|
|
|
|
|
Hallo andredoering,
Die Substitution [mm] P_0=u+c [/mm] (c geschickt gewählt) sollte ein direktes (formales ) Lösen mittels Trennung der Veränderlichen möglich machen.
MATLAB kann DGL imho "nur" numerisch lösen. Dafür sollte die Funktion lambda(t) schon bekannt sein
viele Grüße
mathemaduenn
|
|
|
|
|
Vielen Dank.
Ich habe vorher das selbe Gleichungssystem mit Lambda1 und Lambda2 = konst. mit Hilfe der Laplace-Tranformation gelöst, das ging ohne Probleme.
Die Funktion für Lambda1 sind bekannt, das sind ganz einfache Funktionen, z.B. -x/2 oder so. Lambda2 kann konstant bleiben, also nicht Lambda2(t).
Wie sieht es dann mit MATLAB aus?
Oder kann man das auch mit Laplace machen?
Vielen Dank!
|
|
|
|
|
Hallo andredoering,
> Ich habe vorher das selbe Gleichungssystem mit Lambda1 und
> Lambda2 = konst. mit Hilfe der Laplace-Tranformation
> gelöst, das ging ohne Probleme.
> Die Funktion für Lambda1 sind bekannt, das sind ganz
> einfache Funktionen, z.B. -x/2 oder so. Lambda2 kann
> konstant bleiben, also nicht Lambda2(t).
>
> Wie sieht es dann mit MATLAB aus?
Wie schon gesagt numerisch geht das auf jaden Fall. Wenn Du nat. an einer Funktionsgleichung interessiert bist brauchst Du Computeralgebrasysteme wie z.B. Mathematica. Ich bin mir aber nicht inwieweit MATLAB das auch kann
> Oder kann man das auch mit Laplace machen?
Nein das geht i.A. nur für DGL mit konstanten Koeffizienten.
Du kannst aber deine DGL, bzw. wie weit Du mit meinen Hinweisen gekommen bist, erst nochmal hinschreiben.
viele Grüße
mathemaduenn
|
|
|
|
|
dP0(t)/dt=-lambda(t)*P0(t)+mü*P1(t)
dP1(t)/dt= lambda(t)*P0(t) -mü*P1(t)
lambda(t)=eine Funtkion für eine Ausfallrate= [mm] 1/(500*t^2)
[/mm]
mü=ein konstanter Wert für die Reparaturrate= 0,1
Anfangsbedingungen P1=1 und P0=0
Mein Ansatz ist leider doch falsch, hatte das mit Laplace versucht!
Hab das mit MS Word geschrieben, könnte ich dir per mail schicken, aber wie gesagt, ist leider flasch!
|
|
|
|
|
Hallo andredoering,
Ich geh nochmal zurück zur analytischen Lösung.
(I) [mm]\bruch{dP_0(t)}{dt}=-\lambda (t)*P_0(t)+\mu *P_1(t)[/mm]
(II) [mm]\bruch{dP_1(t)}{dt}=\lambda (t)*P_0(t)-\mu *P_1(t)[/mm]
Jetzt die Gleichungen addieren (I)+(II)
[mm]\bruch{dP_0(t)}{dt}+\bruch{dP_1(t)}{dt}=0[/mm]
D.h. [mm] P_0(t)+P_1(t) [/mm] ist konstant O.K.?
Man kann also ansetzen [mm] P_1(t)=c-P_0(t).
[/mm]
Mit Deinen Anfangswerten ergibt sich c=1. Einsetzen in (I) ergibt:
(I) [mm]\bruch{dP_0(t)}{dt}=-\lambda (t)*P_0(t)+\mu *(1-P_0(t))[/mm]
Das mit dem substituieren hatte ich nicht ganz durchdacht, aber dies ist eine lineare DGL also könnte man es mit dem Lösen der homogenen Gleichung + Variation der Konstanten für die partikuläre Lösung versuchen.
viele Grüße
mathemaduenn
|
|
|
|
|
Hallo,
ein bekannter lieferte mir folgendes zur numerischen Lösung des Problems:
"...Wenn Du das Numerisch lösen willst, dann ist der Klassiker Runge-Kutta
4. Ordnung.
(Benötigt Python und matplotlib)
def l(t):
# Vorsicht mit der Priorität der Operatoren
return 1/500*t*t
mu=0.01
def f((x1,x2), t):
return array((-l(t) * x1 + mu * x2,l(t) * x1 - mu * x2 ))
# Numerische Integration der Schwingungsgleichung
from numarray import array, arange, zeros, Float64, fft
from matplotlib.pylab import plot, subplot
N=1000 # Anzahl der Schritte
h=0.1 # Schrittweite
# d/dt (x1,x2) = f(x1,x2)
def f((x1,x2), t):
return array((x2,-x1 ))
#return array((x2,-x1 - 100 * x1**3 )) # anharmonischer Oszillator
# in diesem Array werden die Werte gespeichert
x1=zeros(N, type=Float64) # x
x2=zeros(N, type=Float64) # x'
# Anfangsbedingungen
x1[0]=0
x2[0]=1
t=0
# der letzte berechnete Punkt
x_last=array((x1[0],x2[0]))
for i in range(N):
# Runge-Kutta Zeitschritt
k1=h*f(x_last, t)
k2=h*f(x_last + k1/2,t+h/2)
k3=h*f(x_last + k2/2,t+h/2)
k4=h*f(x_last + k3,t+h)
x_last = x_last + (k1 + 2*k2 + 2*k3 + k4)/6
# Ergebnisse speichern
x1[i]=x_last[0]
x2[i]=x_last[1]
t=t+h
subplot (211)
fig1=plot(x1[:100], "ro-", x2[:100], "b^-" )
subplot (212)
fig2=plot(fft.real_fft(x1).real)
Wenn Du das Problem in Matlab lösen willst , kannst Du den Quellcode
oben fast 1:1 übernehmen..."
Kann mir vielleicht jemand weiter helfen wie ich das Programm abändern muss damit es in MATLAB läuft.
|
|
|
|