Italia
Fonte/ Codesnippets

Geheimnis vieler Physik-Engines: Velocity Verlet Integrator

 

p.specht

Das grande Dilemma bei der numerischen Lösung von Feldgleichungen (z.B. Magnetfeldern) ist folgendes: Man muss entweder zuerst 2 Orte und die verstrichene Zeit kennen, um eine Durchschnittsgeschwindigkeit berechnen zu können (von der dann aber z.B. die Induktion und auf den Weg zurückwirkende magnetische Kräfte abhängen). Oder man muss, bei Kenntnis des Ausgangsortes, der Richtung und Geschwindigkeit, den nächsten Bahnpunkt berechnen - die wirkenden nichtlinearen Reibungskräfte sind aber z.B. vom Weg ZWISCHEN Ausgangs- und nächstem Bahnpunkt abhängig ... den man aber noch nicht kennt! Problem erkannt?
Fehler-Minimierung allein hilft da wenig, es geht nämlich noch um weitere Eigenschaften, die ein guter Simulationsalgorithmus erfüllen muss:

Das Geheimnis vieler Physik-Simulationen ist Velocity Verlet Integration, ein schnelles Integrationsverfahren per Newton'sche Bewegungsgleichungen, das sogar das hochgenaue 'Runge-Kutta-4./5.Ordnung (RKF45)'-Verfahren übertrifft, - allerdings NICHT an Genauigkeit, sondern an Energie-Konstanz! Runge-Kutta neigt nämlich im Laufe der Zeit dazu, durch systematische Fehler und Rundungsfehler immer mehr Energie in das simulierte System (etwa ein Pendel) zu pumpen.

Das kann beim hier als DEMO OHNE GEWÄHR vorgestellten VELOCITY VERLET-Verfahren (sehr ähnlich dem 'Leapfrog'-Verfahren, zu deutsch etwa 'Bockspringen') nicht passieren, da es ein ZEITUMKEHRBARES, SYMPLEKTISCHES Verfahren ist, dessen Fehler sich bis auf einen kleinen Anteil gegenseitig weitestgehend aufheben. Zeitumkehrbar è: Durch Vorzeichenänderung im Zeitschritt gelangt man wieder an die Ausgangsposition! Symplektisch bedeutet, daß physikalische Erhaltungsgrößen wie Impuls, Energie, Entropie dabei (weitestgehend) erhalten bleiben.

Anbei ein bewusst äußerst einfach gehaltenes Verfahrensbeispiel (In Physik-Engines geht's dann gleich in allen 3 Freiheitsgraden der Translation und 3 der Rotation zur Sache):
WindowTitle "VELOCITY VERLET DEMO am Beispiel Lineares Feder-Masse-Dämpfungssystem"
'(CL) CopyLeft 2014-08 by P.Specht, Wien
'Q: https://en.wikipedia.org/wiki/Verlet_integration#Velocity_Verlet
WindowStyle 24:Window 0,0-%maxx,%maxy
var xh&=width(%hwnd)\2:var yh&=height(%hwnd)\2
Declare m!,dt!,x1!,x2!,v1!,v15!,v2!,a1!,a2!

proc A :parameters x!,v!

    var l!=200' Federlänge m/1000
    var fk!=25' Federkonstante N/m 'Kraft pro Auslenkung
    var rk!=0.2' Reibungskonstante N*s/m
    return (l!-x!)*fk!/m! - v!*rk!
    'Beschleunigung = Kraft / Masse - Reibungsdämpfung

endproc

proc DRAW

    usepen 0,(xh&-x2!)/30  ,255
    cls
    line xh&-500,yh& - xh&+x2!-200,yh&
    usepen 0,37,rgb(0,0,255)
    line xh&+x2!-200,yh& - xh&+x2!-199,yh&

endproc

'Startwerte:
dt!=0.03's
m!=1'kg
'Einfachstes Zeichenmodell (mit Cls, ohne MemCopy)
'Hauptschleife
Repeat :waitinput 33
'VELOCITY VERLET (aka Leapfrog)
v15!= v1!+a1!/2*dt!
x2! = x1!+v15!*dt!
a2! = A(x2!,v15!)
v2! = v15!+dt!*a2!/2
DRAW
a1!=a2!:v1!=v2!:x1!=x2!' Umgreifen per nächsten Schritt

until %key=27

END
 
Computer: Gerät, daß es in Mikrosekunden erlaubt, 50.000 Fehler zu machen, zB 'daß' statt 'das'...
14.05.2021  
 



Zum Quelltext


Topictitle, max. 100 characters.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Posting  Font  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Topic-Options

1.961 Views

Untitledvor 0 min.
Jens-Arne Reumschüssel08.07.2022
p.specht01.07.2022
RudiB.07.03.2022
R.Schneider20.11.2021
Di più...

Themeninformationen

Dieses Thema hat 1 subscriber:

p.specht (1x)


Admins  |  AGB  |  Applications  |  Autori  |  Chat  |  Informativa sulla privacy  |  Download  |  Entrance  |  Aiuto  |  Merchantportal  |  Impronta  |  Mart  |  Interfaces  |  SDK  |  Services  |  Giochi  |  Cerca  |  Support

Ein Projekt aller XProfaner, die es gibt!


Il mio XProfan
Private Notizie
Eigenes Ablageforum
Argomenti-Merkliste
Eigene Beiträge
Eigene Argomenti
Zwischenablage
Annullare
 Deutsch English Français Español Italia
Traduzioni

Informativa sulla privacy


Wir verwenden Cookies nur als Session-Cookies wegen der technischen Notwendigkeit und bei uns gibt es keine Cookies von Drittanbietern.

Wenn du hier auf unsere Webseite klickst oder navigierst, stimmst du unserer Erfassung von Informationen in unseren Cookies auf XProfan.Net zu.

Weitere Informationen zu unseren Cookies und dazu, wie du die Kontrolle darüber behältst, findest du in unserer nachfolgenden Datenschutzerklärung.


einverstandenDatenschutzerklärung
Ich möchte keinen Cookie