Français
Source/ Codesnippets

Nichtlineare Differentalgleichungssysteme avec Runge-Kutta RK4-Algorithmus lösen

 

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  
 



Zum Quelltext


Topictitle, max. 100 marque.
 

Systemprofile:

ne...aucune Systemprofil angelegt. [anlegen]

XProfan:

 Posting  Font  Smilies  ▼ 

s'il te plaît s'inscrire um une Beitrag trop verfassen.
 

Options du sujet

1.499 Views

Untitledvor 0 min.
p.specht21.11.2021
R.Schneider20.11.2021
Uwe Lang20.11.2021
Manfred Barei19.11.2021
plus...

Themeninformationen

cet Thema hat 1 participant:

p.specht (1x)


Admins  |  AGB  |  Applications  |  Auteurs  |  Chat  |  protection des données  |  Télécharger  |  Entrance  |  Aider  |  Merchantportal  |  Empreinte  |  Mart  |  Interfaces  |  SDK  |  Services  |  Jeux  |  cherche  |  Support

un projet aller XProfaner, qui il y a!


Mon XProfan
Privé Nouvelles
Eigenes Ablageforum
Sujets-La liste de voeux
Eigene Posts
Eigene Sujets
Zwischenablage
Annuler
 Deutsch English Français Español Italia
Traductions

protection des données


Wir verwenden Cookies seulement comme Session-Cookies à cause de qui technischen Notwendigkeit et chez uns gibt es aucun Cookies de Drittanbietern.

si du ici sur unsere Webseite klickst ou bien navigierst, stimmst du unserer Erfassung de Informationen dans unseren Cookies sur XProfan.Net trop.

Weitere Informationen trop unseren Cookies et en supplément, comment du qui Kontrolle par-dessus behältst, findest du dans unserer nachfolgenden Datenschutzerklärung.


d'accordDatenschutzerklärung
je voudrais keinen Cookie