| |
|
|
p.specht
| cela procéder RK4 de Runge et Kutta peut sich aussi sur DifferentialgleichungsSYSTEME (DGS) höherer Ordre anwenden. Allerdings nimmt qui Präzision (trotz des im linearen Bereich exzellenten Verhaltens) avec qui Anzahl R qui Dimensionen rapide ab - genauer dit avec qui R-ten Wurzel aus 'Schrittweite ^ 5'. on sollte diesfalls alors pas allzu hohe Erwartungen hegen.
Anmerkung: Hochdimensionalen Problemen rückt on besser avec sog. 'Monte Carlo-Methoden' trop Leibe. Literatur en supplément: P. Zinterhof: Integrale et mehrdimensionale Funktionen, Aufsatz dans OCG-Schriftenreihe ruban 12 'Zahlentheoretische Methoden dans qui Numerischen Mathematik', S.132ff
Titre de la fenêtre "Demo: Runge-Kutta RK4 pour Systeme de Differentialgleichungen höherer Ordnung"
' Angelehnt à: B.incendie: Algorithmen zur praktischen mathématique, S.240, Oldenbourg
' Testhalber migriert pour XProfan-11 dans 2014-09 by P.Specht, vienne.
' Demo pour privaten Gebrauch, aucun cependant geartete Gewähr!
Fenêtre Style 24:Fenêtre 0,0-%maxx,%maxy
declare k1!,k2!,k3!,k4!,l1!,l2!,l3!,l4!
':: Beispiel: 'Nichtlinares Differentialgleichungssystem'
':: deux Testfunktionen, qui une gekrümmte Surface bilden (X: Abszisse, Y: Ordinate, Z: Hauteur)
declare x!,y!,z!,f!,g!
declare i&,h!,x![],y![],z![],xend!
proc F :parameters x!,y!,z!
return (y!-z!)/x!
endproc
proc G :parameters x!,y!,z!
return (y!+z!)/x!
endproc
' Hinweis: Zeilen, qui avec :: commencer, stammen vom Übersetzter pour XProfan-11
imprimer "\n Im Beispiel wird un System aus '2 nichtlinearen Differentialgleichungen "
imprimer " dans 3 Variablen' gelöst. qui Gleichungen lauten F=(y+z)/x et G=(y-z)/x. "
imprimer " qui Anfangswerte pour x, y et z sowie qui Schrittweite h sommes vorzugeben. "
imprimer " Ferner wird un Abbruchkriterium, z.B. qui Maximale x-Endwert eingegeben. \n"
imprimer " Aus Trouvé meiner confort volonté chez Eingabe 'x=0' qui Beispiels- "
imprimer " werte qui Originalvorlage pris (Ergebnisse einsehbar im Programmtext).\n"
' qui Contribution-Werte des Original-Beispiels:
' x!=1 : y!=1 : z!=0 : h!=0.2 : xend!=3
' mener trop suivant Ausgabe:
'Schritt X Y Z
' 0 1 1 0
' 1 1.2 1.18011937557392 0.217584940312213
' 2 1.4 1.32150759540037 0.462240502741668
' 3 1.6 1.42651937035306 0.724648391007437
' 4 1.8 1.49791768072086 0.998168848790414
' 5 2 1.53848713605723 1.27796059664382
' 6 2.2 1.55087497139788 1.56043022121442
' 7 2.4 1.5375315540692 1.84287395296026
' 8 2.6 1.50069575905948 2.12323677414932
' 9 2.8 1.44240050556552 2.39994581694282
' 10 3 1.36448684585809 2.67179234356735
' ---
':: ACHTUNG! aussi cela Endkriterium ist jeweils à qui Gleichungsstruktur anzupassen,
':: sonst rechnet cela Ding, jusqu'à qui grenier voll ist!!!
imprimer " X = ";:input x! : si x!=0:x!=1:y!=1:z!=0:h!=0.2:xend!=3.0:goto "skip":endif
imprimer " Y = ";:input y!
imprimer " Z = ";:input z!
imprimer " Schrittweite h = ";:input h!
imprimer " Endwert (ici: X_end) = ";:input xend!
skip:
set("decimals",17)
clear x![],y![],z![]:clearclip
x![0]=x!:y![0]=y!:z![0]=z!
ausgabe:
imprimer "\n Schritt";Tab(25);" X";Tab(50);" Y";Tab(75);" Z":imprimer mkstr$("-",90)
Repeat
imprimer " ";i&,Tab(25);format$("%g",X![i&]);Tab(50);format$("%g",Y![i&]);Tab(75);format$("%g",Z![i&])
::putclip str$(i&)+" "+format$("%g",X![i&])+" "+format$("%g",Y![i&])+" "+format$("%g",Z![i&])+"\n"
k1!=h!*F(x![i&],y![i&],z![i&])
l1!=h!*G(x![i&],y![i&],z![i&])
k2!=h!*F(x![i&]+h!/2,y![i&]+k1!/2,z![i&]+l1!/2)
l2!=h!*G(x![i&]+h!/2,y![i&]+k1!/2,z![i&]+l1!/2)
k3!=h!*F(x![i&]+h!/2,y![i&]+k2!/2,z![i&]+l2!/2)
l3!=h!*G(x![i&]+h!/2,y![i&]+k2!/2,z![i&]+l2!/2)
k4!=h!*F(x![i&]+h!, y![i&]+k3!,z![i&]+l3!)
l4!=h!*G(x![i&]+h!, y![i&]+k3!,z![i&]+l3!)
y![i&+1]=y![i&]+1/6*(k1!+2*k2!+2*k3!+k4!)
z![i&+1]=z![i&]+1/6*(l1!+2*l2!+2*l3!+l4!)
x![i&+1]=x![i&]+h!
inc i&
::si %csrlin>55:waitinput' 55 et 85 à aktuelle Schirmdimensionen anpassen!
::cls:imprimer:imprimer " Schritt";Tab(25);" X";Tab(50);" Y";Tab(75);" Z":imprimer mkstr$("-",90)
::endif
until x![i&]>(xend!*1.000000000000001)'(à cause de höherer Genauigkeit de Intel-FPUs)
::imprimer "OK.":beep:imprimer " Ausgabe steht aussi dans Zwischenablage!":waitinput
Fin
|
|
|
| Computer: Gerät, daß es in Mikrosekunden erlaubt, 50.000 Fehler zu machen, zB 'daß' statt 'das'... | 15.05.2021 ▲ |
|
|
|