Eingebettete Runge-Kutta < DGL < Numerik < Hochschule < Mathe < Vorhilfe
|
Status: |
(Frage) beantwortet | Datum: | 22:59 Mi 09.12.2009 | Autor: | ftm2037 |
Aufgabe | Gegeben ist das folgende eingebettete RK-Verfahren:
c = (0 , 1 , 1/2)
A = (0 , 0 , 0)
(1 , 0 , 0)
(1/4,1/4, 0)
b = (1/2 , 1/2 , 0)
[mm] \overline{b} [/mm] = (1/6 , 1/6 , 4/6)
Bestimme die Lösung nach einem Zeitschritt für die DGL [mm] u'=\lambda.u, [/mm] d.h. bestimme [mm] U^{n+1} [/mm] und [mm] \overline{U}^{n+1} [/mm] unter der Annahme , dass [mm] U^{n} [/mm] bekannt ist. |
Hallo,
ich weiß nicht, womit ich anfangen soll. Folgendes ist mir nicht klar:
1- Ist das Eingebettete RK-Verfahren eigentlich eine Aufgabe, die aus 2 normalen RK-Verfahren besteht?
2- Mit welcher Formel muss ich [mm] U^{n+1} [/mm] und [mm] \overline{U}^{n+1} [/mm] auchrechnen?
Ich wäre sehr dankbar, wenn einer mir einen Ansatz geben könnte.
Grüße
Ich habe diese Frage in keine anderen Foren gestellt.
|
|
|
|
Hallo,
bei den eingebetteten Verfahren handelt es sich in der Tat um zwei Runge-Kutta-Verfahren. Dabei dient das mit der (meist) höheren Ordnung zur Bestimmung der Lösung der Differentialgleichung (hier wird b benutzt) und das andere zur Abschätzung des Fehlers (hier wird b* oder in deinem Fall [mm] \overline{b} [/mm] verwendet).
Zur Lösung hilft dir die Formel:
[mm] U^{n+1}=U^n+\summe_{j=1}^{s}b_jk_j
[/mm]
Dabei ist
[mm] k_1=\lambda*U^n
[/mm]
[mm] k_2=\lambda*U^n+a_{21}*h*k_1=\lambda*U^n+1*h*\lambda*U^n
[/mm]
[mm] k_3=\lambda*U^n+a_{31}*h*k_1+a_{32}*h*k_2=\dots
[/mm]
Das zusammenzufassen überlasse ich dir. Außerdem habe ich hier angenommen das die Schrittweite [mm] \(h\) [/mm] ist.
Nun könntest du dich wundern, warum die c gar nicht benutzt wurde. Das ist nicht nötig, da deine Differentialgleichung keine explizite Zeitabhängigkeit hat.
Viel Erfolg weiterhin,
Roland.
|
|
|
|
|
Status: |
(Frage) beantwortet | Datum: | 15:12 So 13.12.2009 | Autor: | ftm2037 |
Hallo,
danke! Das hat mir sehr geholfen. Da habe ich aber zwei Fragen:
1- Woher erkenne ich diese explizite Zeitabhängigkeit? Meinst du damit, dass u'=Lambda.u unabhängig vom t ist? Wenn das so ist, werden dann z.B. [mm] f(k_{2} [/mm] , [mm] t_{n}) [/mm] und [mm] f(k_{2} [/mm] , [mm] t_{n}+h) [/mm] und [mm] f(k_{2} [/mm] , [mm] t_{n}+h/2) [/mm] usw. alle mit einander gleich?
2- Wie rechne ich die Ks? Ich dachte so:
[mm] k_{i} [/mm] = [mm] U^n [/mm] + h. [mm] \summe_{j=1}^{i-1} (a_{ij}. f(k_{j} [/mm] , [mm] t_{n} [/mm] + [mm] c_{j}h))
[/mm]
[mm] k_{1} [/mm] = [mm] U^n
[/mm]
[mm] k_{2} [/mm] = [mm] U^n [/mm] + h. [mm] f(k_{1} [/mm] , [mm] t_{n}) [/mm] = [mm] U^n [/mm] + lambda. [mm] U^n
[/mm]
[mm] k_{3} [/mm] = [mm] U^n [/mm] + 1/4 h. f( [mm] k_{1} [/mm] , [mm] t_{n}) [/mm] + 1/4h. [mm] f(k_{2} [/mm] , [mm] t_{n} [/mm] + h) =
[mm] U^n [/mm] + 1/4h [mm] (U^n [/mm] + lambda. [mm] (U^n [/mm] + lambda. [mm] U^n))
[/mm]
Was ich in deiner Lösung nicht verstehe, warum ist
[mm] k_{1} [/mm] = lambda. [mm] U^n?
[/mm]
Grüße
|
|
|
|
|
Hallo,
vorab noch eine Bitte: Schau dir mal den Formeleditor an - es macht keinen Spaß deine Nachrichten zu lesen... Wenn du ein Sternchen (*) setzt, dann macht der daraus einen Malpunkt [mm] (\cdot). [/mm] Außerdem kannst du vor lambda ein \ setzten, damit du ein [mm] \lambda [/mm] erhältst.
> Hallo,
>
> danke! Das hat mir sehr geholfen. Da habe ich aber zwei
> Fragen:
>
> 1- Woher erkenne ich diese explizite Zeitabhängigkeit?
> Meinst du damit, dass u'=Lambda.u unabhängig vom t
> ist? Wenn das so ist, werden dann z.B. [mm]f(k_{2}[/mm] , [mm]t_{n})[/mm] und
> [mm]f(k_{2}[/mm] , [mm]t_{n}+h)[/mm] und [mm]f(k_{2}[/mm] , [mm]t_{n}+h/2)[/mm] usw. alle mit
> einander gleich?
>
Ja, u' ist unabhängig von t. Aber dein Beispiel dazu passt nicht ganz. Man berechnet ja die Funktion nicht von verschiedenen Zeiten, sondern von den Orten zu den dazugehörigen Zeiten. Also [mm] f(k_1,t_n) [/mm] und [mm] f(k_2,t_n+h/2) [/mm] usw... Ein Beispiel für explizite Zeitabhängigkeit wäre: [mm] f(u,t)=\lambda*u+\sin [/mm] t
Da macht es Sinn, dass auch unterschiedliche Zeiten benutzt werden.
> 2- Wie rechne ich die Ks? Ich dachte so:
>
> [mm]k_{i}[/mm] = [mm]U^n[/mm] + h. [mm]\summe_{j=1}^{i-1} (a_{ij}. f(k_{j}[/mm] ,
> [mm]t_{n}[/mm] + [mm]c_{j}h))[/mm]
Die Formel stimmt so nicht. Aber ehe ich jetzt interpretiere, was du gemeint haben könntest, schreibe ich die richtige Variante auf. Man geht davon aus, dass [mm] U^n [/mm] bekannt ist. Die einfachste Variante ist das Euler-Verfahren (Runge-Kutta 1. Ordnung), welches davon aus geht, dass im nächsten Zeitschritt [mm] U^{n+1}=U^n+h*f(U^n) [/mm] gilt. [mm] f(U^n) [/mm] ist die Ableitung von der Lösungsfunktion, die durch die Gleichung [mm] u'=f(u)=\lambda*u [/mm] gegeben ist, an der Stelle [mm] U^n, [/mm] also [mm] f(U^n)=\lambda*U^n. [/mm] Dein Runge-Kutta-Algorithmus benutzt nun nicht nur die Ableitung an dieser Stelle, sondern auch an anderen, um damit den "wahren" (er ist immer noch genähert, aber von besserer Qualität) Wert des nächsten berechneten Wertes zu bestimmen.
Blöder Satz, also nochmal... Runge-Kutta benutzt nicht nur [mm] f(U^n), [/mm] sondern beispielsweise auch [mm] f(U^n+\frac{h}{2}) [/mm] usw. gewichtet diese Ableitungen noch sinnvoll und "mittelt" daraus einen besseren Wert für den nächsten Zeitschritt.
Die ks sind dabei "Abkürzungen" für die Differentialgleichungsfunktion (in deinem Fall f(u)) zu den unterschiedlichen Zeiten, bzw. an verschiedenen Stellen.
[mm] k_1=f(U^n)
[/mm]
[mm] k_2=f(U^n+ha_{21}*k_1)
[/mm]
[mm] k_3=f(U^n+ha_{31}*k_1+ha_{32}*k_2)
[/mm]
[mm] k_4=f(U^n+ha_{41}*k_1+ha_{42}*k_2+ha_{43}*k_3)
[/mm]
Was nun damit berechnet wird, hab ich in der vorherigen Antwort schon einmal getippt, nämlich:
[mm] U^{n+1}=U^n+\summe_{j=1}^{s}b_jk_j [/mm]
s=4, da es sich um ein vierstufiges Runge-Kutta-Verfahren handelt.
Analog funktioniert die Gleichung für [mm] \overline{U}^{n+1}:
[/mm]
[mm] \overline{U}^{n+1}=U^n+\summe_{j=1}^{s}\overline{b}_jk_j
[/mm]
Und die Berechnung des Fehlers ist: [mm] e^{n+1}=U^{n+1}-\overline{U}^{n+1}
[/mm]
> [mm]k_{1}[/mm] = [mm]U^n[/mm]
> [mm]k_{2}[/mm] = [mm]U^n[/mm] + h. [mm]f(k_{1}[/mm] , [mm]t_{n})[/mm] = [mm]U^n[/mm] + lambda. [mm]U^n[/mm]
> [mm]k_{3}[/mm] = [mm]U^n[/mm] + 1/4 h. f( [mm]k_{1}[/mm] , [mm]t_{n})[/mm] + 1/4h. [mm]f(k_{2}[/mm] ,
> [mm]t_{n}[/mm] + h) =
> [mm]U^n[/mm] + 1/4h [mm](U^n[/mm] + lambda. [mm](U^n[/mm] + lambda. [mm]U^n))[/mm]
>
So ist das erstmal falsch.
> Was ich in deiner Lösung nicht verstehe, warum ist
> [mm]k_{1}[/mm] = lambda. [mm]U^n?[/mm]
Ich hoffe, diese letzte Frage ist nach obigen Ausführungen auch beantwortet.
Diese k-Werte auszurechnen macht halt in der Informatik Sinn, da so eine Differentialgleichung beliebig kompliziert werden kann und somit viel Rechenaufwand kostet. Ist der Wert aber einmal berechnet, so kann er leicht aus dem Speicher wieder abgerufen werden.
> Grüße
Viel Erfolg noch,
Roland.
|
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 03:06 Mo 14.12.2009 | Autor: | ftm2037 |
Hallo Roland,
Herzlichen Dank für die ausführliche Antwort!
Grüße
|
|
|
|