Español
Fuente/ Codesnippets

Differentialgleichungen N-ter Orden lösen: Størmer-Verlet Leapfrog-Método

 

p.specht

Differentialgleichungen 2. o. n.ter Orden lösen
=====================================
Das Verfahren, el con vollem Titel "Newton-Størmer-Verlet leapfrog method" heisst, findet se en fast allen Physik- y Game-Engines a Berechnung el Newtonschen Bewegungsgesetze. Mit otro Worten: Alles qué explodiert y luego runterfällt es con dieser deutlichen, aber doch no a zeitintensiven Verbesserung des einfachsten aller entsprechenden Algorithmen (Explizites Euler-Verfahren) berechnet. Das nachstehende Programa erlaubt una Beurteilung el Realitätsnähe, porque auch el analytisch-exakte Solución el Tarea bekannt es. Fünfstellige Genauigkeit reicht como wohl.

Lo es es una Rückübersetzung de Fortran-90 después de XProfan-11, con allen Tücken, por lo tanto: REINE DEMO OHNE JEDWEDE GEWÄHR!
Título de la ventana "Anfangswertproblem uno Differentalgleichung 2. Orden lösen después de Størmer-Verlet"
' ---------------------------------------------------------------------------------------------
' Aus Fortran90 después de XProfan-11 traducido 2014-08 de P. Pájaro carpintero, Wien (Österreich)
' Keine sin embargo geartete Gewähr! Verwendung en alleinige Gefahr de(s|r) Anwender(s|in)!
' Quelle: https://jean-pierre.moreau.pagesperso-orange.fr/Cplus/stormer.txt
'**********************************************************************************************
'*  Differential equation y"=f(x,y,y') by  Størmer's method  *
' (erweiterbar en allg. Verlet type, z.B. y'''[...]=f(x,y,y',y''[,y''',...])
'* --------------------------------------------------------- *
'* SAMPLE RUN (BEISPIEL)                                     *
'* Löse  y" = 8*y*y / (1+2*x) from x=0 to x=1                *

proc G :parámetros x!,y!,z!'= x, y, y'

    volver 8*sqr(y!)/(1+2*x!)

ENDPROC

proc F :parámetros x!,y!,z!'= x, y, y'

    volver z!

ENDPROC

'* with initial conditions: x(0)=0, y(0)=1 and y'(0)=-2      *
Declarar x![4],y![4],z![4],h!' Initial conditions:
x![1]= 0
y![1]= 1
z![1]=-2' dy/dt
h!=0.01' Step
'*  Compare to exact solution   y = 1/(1+2*x)                *

Proc Fx :parámetros x!' Exact Solution:

    volver 1/(1+2*x!)

ENDPROC

'* --------------------------------------------------------- *
'*   Differential equation y"=f(x,y,y') by Stormer's method  *
'* --------------------------------------------------------- *
'*        X           Y           Y exact         Error      *
'*     0.000       1.000000       1.000000     0.0000000000  *
'*     0.010       0.980392       0.980392     0.0000000001  *
'*     0.020       0.961538       0.961538     0.0000000295  *
'*     0.030       0.943396       0.943396     0.0000000457  *
'*     0.040       0.925926       0.925926     0.0000000974  *
'*     0.050       0.909091       0.909091     0.0000001285  *
'*     ...         ...            ...          ...           *
'*     0.950       0.344866       0.344828     0.0000381695  *
'*     0.960       0.342505       0.342466     0.0000388874  *
'*     0.970       0.340176       0.340136     0.0000396196  *
'*     0.980       0.337878       0.337838     0.0000403406  *
'*     0.990       0.335612       0.335570     0.0000410721  *
'*     1.000       0.333375       0.333333     0.0000418231  *
'*                                                           *
'*   F90 Release By J-P Moreau, Paris (www.jpmoreau.fr).     *
'*************************************************************
Ventana de Estilo 24:font 2:set("decimals",16):Ventana 0,0-%maxx,%maxy-40
Declarar c![4],a1!,a2!,a3!,yex!,k&,él! , x1!,y1!,z1!
a1!= 1.083333333333333333 : a2!=-2*(a1!-1) : a3!= a1!-1
clearclip
imprimir "\n------------------------------------------------------------------------------"
imprimir "       Differentialgleichung y''=f(x,y,y') con Störmer's Método lösen "
imprimir "------------------------------------------------------------------------------\n"
imprimir "         X                   Y                  Y exact                Error\n"
putclip " X | Y | Y_exact | Error \n"
yex!=Fx(x![1]):imprimir tab(2);x![1],tab(22);y![1],tab(42);yex!,tab(62);er!
putclip str$(x![1])+"|"+str$(y![1])+"|"+str$(yex!)+"|"+str$(él!)+"\n"
' Runge-Kutta for first 2 steps:

whileloop 1,2:k&=&Loop

    RK4D2 x![k&],y![k&],z![k&],h!
    x![k&+1]=x1!
    y![k&+1]=y1!
    z![k&+1]=z1!
    yex!=Fx(x![k&+1])
    él!=abs(yex!-y![k&+1])
    imprimir tab(2);x![k&+1],tab(22);y![k&+1],tab(42);yex!,tab(62);er!
    putclip str$(x![k&+1])+"|"+str$(y![k&+1])+"|"+str$(yex!)+"|"+str$(él!)+"\n"

endwhile

REPEAT'Main bucle G10:

    whileloop 2,4:k&=&Loop

        c![k&]=G( x![5-k&],y![5-k&],z![5-k&] )

    endwhile

    y![4]=2*y![3]-y![2]+sqr(h!)*(a1!*c![2]+a2!*c![3]+a3!*c![4])
    x![4]=x![3]+h!
    yex!=Fx(x![4])
    él!=abs(yex!-y![4])
    imprimir tab(2);x![4],tab(22);y![4],tab(42);yex!,tab(62);er!
    putclip str$(x![4])+"|"+str$(y![4])+"|"+str$(yex!)+"|"+str$(él!)+"\n"

    Whileloop 1,3:k&=&Loop'para nächsten Schritt umkopieren:

        x![k&]=x![k&+1]
        y![k&]=y![k&+1]

    endwhile

    if %csrlin>40:waitinput 4000:cls

        imprimir "\n         X                   Y                  Y-exakt                Error\n"

    endif

UNTIL x![3]>1'end x value = 1

imprimir "\n EOF"
Imprimir " Resultate en Zwischenablage!"
Waitinput
FIN

PROC RK4D2 :parámetros x!,y!,z!,h!',x1!,y1!,z1!

    declarar c1!,d1!,c2!,d2!,c3!,d3!,c4!,d4!
    c1!=F(x!,y!,z!)
    d1!=G(x!,y!,z!)
    c2!=F(x!+h!/2, y!+h!/2*c1!, z!+h!/2*d1!)
    d2!=G(x!+h!/2, y!+h!/2*c1!, z!+h!/2*d1!)
    c3!=F(x!+h!/2, y!+h!/2*c2!, z!+h!/2*d2!)
    d3!=G(x!+h!/2, y!+h!/2*c2!, z!+h!/2*d2!)
    c4!=F(x!+h!,   y!+h!*c3!,   z!+h!*d3!  )
    d4!=G(x!+h!,   y!+h!*c3!,   z!+h!*d3!  )
    x1!=x!+h!
    y1!=y!+h!*(c1!+2*c2!+2*c3!+c4!)/6
    z1!=z!+h!*(d1!+2*d2!+2*d3!+d4!)/6

ENDPROC

PROGEND
'{=============================================================================================
'    Stormer, aka Newton-Størmer-Verlet leapfrog method
' =============================================================================================
' Namensgebung: Der Algorithmus incluso va zurück en Delambre (1791), oftmals wiederentdeckt,
' u.a. 1907 por Carl Størmer, 1909 por Cowell y Cromlin, 1967 populär por Loup Verlet.
' Verbessert el explizite Euler-Método sin allzu hohen Mehraufwand. Oft en Physik-Engines
' para encontrar. Details siehe https://en.wikipedia.org/wiki/Verlet_integration
' =============================================================================================
' Método STORMER (aka Newton-Störmer-Verlet-leapfrog method):
' löst Y"=f(x,y,y') con gegebenen Anfangsbedingungen
' ----------------------------------------------------------------------------------
' Un Differentialgleichung 2. Orden (Y") kann ersetzt voluntad por una
' Differentialgleichungs-SYSTEM bestehend de 2 Gleichungen 1. Orden!
' Wenn also y"=f(x,y,y') se da con y(a=Anfang) y y'(a=Anfang), entonces puede ser
' esta Formel por Substitution u = y' umformen a:
'
'                    | u'=f(x,y,u)
'                    | y'=u
'                    | con el neuen Anfangsbedingungen y(a), u(a)
'
' Beginnen wir el Betrachtung con jener speziellen Form el Taylor-Desarrollo,
' en el Rest como Integral dargestellt se (Wiki: Taylorentwicklung)
'                                       x+h
'           y(x+h) = y(x) + h * y'(x) + INTEGRAL (x+h-t)*y"(t).dt
'                                        x
' Durch Verbringung el Nichtintegral-Terme en el linke Página y Aufspaltung
' des 'Restfehler-Integrals' en zwei Teile kann esta Form auch folgender-
' maßen dargestellt voluntad:
'                                        x+h              x-h
'           y(x+h) - 2y(x) + y(x-h) = INTEGRAL ...  +  INTEGRAL ...
'                                         x                x
' Für el zweite Integral se el Variable x nun substituiert por:  u = 2*x-t
' Dann gilt en Grund el Kettenregel:
'           x-h                              x+h
'         INTEGRAL (x-h-t) * y"(t).dt = - INTEGRAL (x+h-u)*y"(u).du
'            x                                x
' y el Ableitung .du rück-substituiert (a .-dt) liefert entonces:
'                                    x+h
'           du=-dt ==>           = INTEGRAL (x+h-t)*y"(2x-t).dt
'                                     x
' Somit puede ser escribir:              x+h
'           y(x+h) - 2*y(x) + y(x-h) = INTEGRAL (x+h-t)*[y"(t)+y"(2x-t)].dt
'                                         x
' Nun uso wir bajo Referencia, daß sí y"(x)=f(x,y,y') gilt, folgenden Ausdruck
' como Interpolationspolynom:
'                             x_n+1
'     y_n+1 - y_n + y_n-1 = INTEGRAL (x_n+1 - t)*[P(t)+P(2*x_n - 1)].dt  = ...
'                              x_n
'               x_n+1
'    ...= h^2*INTEGRAL (x_n+1 -t)*[O_00*Div(f_n)+O_11*Div(f_n)+O_22*Div(f_n)].dt ,
'                x_n
'                         1           |(-s) (m)|
' wobei O_mm  = -1^m * INTEGRAL (1-s)*|    +   | .ds
'                         0           |( m) (s)|
'                                               (vgl. auch 'Adams-Bashford-Método')
' Letzteres bringt uns schließlich a STORMER's Formeln:
' ==================================================================================
' Explizit formuliert:  y_n+1 -2*y_n + y_n-1 = h^2/12 * [13 * f_n - 2*f_n-1 + f_n-2]
' Das interessierende   y_n+1 = h^2/12 * [13 * f_n - 2*f_n-1 + f_n-2]+ 2*y_n - y_n-1
' (f_n+1 muss no bekannt ser: Prognoserechnung en aktuell ergänzten Zeitreihen)
' ----------------------------------------------------------------------------------
' oder implizit:        y_n+1 -2*y_n + y_n-1 = h^2/12 * [f_n+1 + 10 * f_n + f_n-1 ]
'}==================================================================================
 
XProfan 11
Computer: Gerät, daß es in Mikrosekunden erlaubt, 50.000 Fehler zu machen, zB 'daß' statt 'das'...
14.05.2021  
 



Zum Quelltext


Título del Tema, max. 100 Signo.
 

Systemprofile:

Kein Systemprofil creado. [anlegen]

XProfan:

 Contribución  Font  Smilies  ▼ 

Bitte registro en una Contribución a verfassen.
 

Tema opciones

1.792 Views

Untitledvor 0 min.
H.Brill07.12.2023
p.specht01.07.2022
E.T.20.11.2021
Manfred Barei19.11.2021
Más...

Themeninformationen

Dieses Thema ha 1 subscriber:

p.specht (1x)


Admins  |  AGB  |  Applications  |  Autores  |  Chat  |  Política de Privacidad  |  Descargar  |  Entrance  |  Ayuda  |  Merchantportal  |  Pie de imprenta  |  Mart  |  Interfaces  |  SDK  |  Services  |  Juegos  |  Búsqueda  |  Support

Ein Projekt aller XProfan, el lo son!


Mi XProfan
Privado Noticias
Eigenes Ablageforum
Temas-Merkliste
Eigene Beiträge
Eigene Temas
Zwischenablage
Cancelar
 Deutsch English Français Español Italia
Traducciones

Política de Privacidad


Wir uso Cookies sólo como Session-Cookies wegen el technischen Notwendigkeit y en uns hay no Cookies de Drittanbietern.

Wenn du hier en unsere Webseite klickst oder navigierst, stimmst du unserer Erfassung de Informationen en unseren Cookies en XProfan.Net a.

Weitere Informationen a unseren Cookies y dazu, como du el Kontrolle darüber behältst, findest du en unserer nachfolgenden Datenschutzerklärung.


einverstandenDatenschutzerklärung
Yo möchte no Cookie