Runge Kutta Algorithmus

Hallo Leute

Kann mir jemand die Formel für das Runge Kutta Verfahren für ein System von DGLs geben.

Ich habe zwar einen aus ner Formelsammlung programmiert, aber die Ergebnisse sind Blödsinn.
War jetzt ein Druckfehler in der Formelsammlung, oder hab ich Mist programmiert? :wink:

Danke schon mal

Tommy

Hallo Leute

Kann mir jemand die Formel für das Runge Kutta Verfahren für
ein System von DGLs geben.

Das System ist erster Ordnung? Dann kannst Du das Verfahren woertlich uebernehmen, musst aber die Punkte als Vektoren behandeln.

Ciao Lutz

In Pascal sah das mal bei mir so aus:
-------------KUTTA.rkv-----------------------------
Kutta oder 3/8-Verfahren
4 4
0.33333333333333333333 0.33333333333333333333
0.66666666666666666666 -0.33333333333333333333 1.000000000000
1.0 1.0 -1.0 1.0
0.125 0.375 0.375 0.125
--------------------------GDGL.pas-------------------------------
UNIT GDGL;

INTERFACE

const maxrg = 10;
maxdim = 10;
TYPE TVektor = array [1…maxdim] of real;
TYPE RG_KT = Object
Id:String;
{ Parameter des Verfahrens }
Rang,Ordnung:INTEGER;
h:real;
alpha,gamma:array[1…maxrg] of real;
beta:array[1…maxrg,1…maxrg] of real;
{ Variablen der Gewoehnlichen Differentialgleiuchung }
dim:INTEGER;
wx:real;
wy:TVektor;
wk:array [1…maxrg] of TVektor;
wf:TVektor;
CONSTRUCTOR Init(VAR fp:TEXT;Dimension:integer);
PROCEDURE fkt(vx:real;var vy:TVektor);virtual;
PROCEDURE Schritt;
end;

IMPLEMENTATION

constructor RG_KT.Init;
var i,j:integer;
begin
readln(fp,Id);
readln(fp,Ordnung,Rang);
alpha[1] := 0;
for i := 2 to Rang do
begin
read(fp,alpha[i]);
for j := 1 to pred(i) do
read(fp,beta[i,j]);
readln(fp)
end;
for i := 1 to rang do
read(fp,gamma[i]);
dim := Dimension;
end;

Procedure RG_KT.fkt;{Dummy-Funktion}
var i:integer;
begin
for i := 1 to dim do
wf[i] := 10*i*vy[i]
end;

Procedure RG_KT.Schritt;
var i,j,k:integer;
vy:TVektor;
vx:real;
begin
for i := 1 to Rang do
begin
for k := 1 to dim do
begin
vy[k] := wy[k];
for j := 1 to pred(i) do
vy[k] := vy[k] + beta[i,j] * h * wk[j,k]
end;
vx := wx;
for j := 1 to pred(i) do
vx := vx + alpha[i] * h;
fkt(vx,vy);
for k := 1 to dim do
wk[i,k] := wf[k];
end;
for k := 1 to dim do
begin
vy[k] := 0;
for i := 1 to rang do
vy[k] := vy[k] + gamma[i] * wk[i,k];
wy[k] := wy[k] + h * vy[k];
end;
wx := wx + h
end;

end.

Hallo Leute

Kann mir jemand die Formel für das Runge Kutta Verfahren für
ein System von DGLs geben.

Ich habe zwar einen aus ner Formelsammlung programmiert, aber
die Ergebnisse sind Blödsinn.

Könnte es auch daran liegen, dass RK nicht für alle Systeme geeignet ist? Hast Du vielleicht aus Versehen ein extrem steifes System als Beispiel genommen?

Gruß

Fritze

Hallo Fritze

Könnte es auch daran liegen, dass RK nicht für alle Systeme
geeignet ist? Hast Du vielleicht aus Versehen ein extrem
steifes System als Beispiel genommen?

Glaube ich nicht, denn mit dem Euler-Verfahren hauts hin.
(Vergleichslösung analytisch berechenbar )

Schreib mir doch einfach mal, was in Deiner Formelsammlung steht

Tommy

Hallo Fritze

Könnte es auch daran liegen, dass RK nicht für alle Systeme
geeignet ist? Hast Du vielleicht aus Versehen ein extrem
steifes System als Beispiel genommen?

Glaube ich nicht, denn mit dem Euler-Verfahren hauts hin.
(Vergleichslösung analytisch berechenbar )

Was in meiner Formelsammlung steht, weiss ich nicht. Ich habe sie nicht griffbereit. Numerik ist bei mir auch schon eine Weile her. Aber wenn ich mich richtig erinnere, dann war das implizite Eulerverfahren gerade für steife Systeme recht gut geeignet, im Gegensatz zu Runge-Kutta. Daher wundert mich nicht, dass „Euler“ hin haut.

Gruß

Fritze