Numeric Integration Methods - Essential Math for Games Programmers

advertisement
Numeric Integration
Methods
Jim Van Verth
Red Storm Entertainment
jimvv@redstorm.com
2
Talk Summary

Going to talk about:
Euler’s method subject to errors
 Implicit methods help, but complicated
 Verlet methods help, but velocity inaccurate
 Symplectic methods can be good for both

3
Forces Encountered
Dependant on position: springs, orbits
 Dependant on velocity: drag, friction
 Constant: gravity, thrust


Will consider how methods handle these
4
Euler’s Method

Has problems
Expects the derivative at the current point is a
good estimate of the derivative on the interval
 Approximation can drift off the actual function
– adds energy to system!
 Worse farther from known values
 Especially bad when:

System oscillates (springs, orbits, pendulums)
 Time step gets large

5
Euler’s Method (cont’d)

Example: orbiting object
x
x
0
x1
x2
x3
x4
t
6
Stiffness

Have similar problems with “stiff” equations


Have terms with rapidly decaying values
Larger decay = stiffer equation = req. smaller h
x
t

Often seen in equations with stiff springs (hence
the name)
7
Euler
Lousy for forces dependant on position
 Okay for forces dependant on velocity
 Bad for constant forces

8
Runge-Kutta
Idea: single derivative bad estimate
 Use weighted average of derivatives across
interval
 How error-resistant indicates order
 Midpoint method Order Two
 Usually use Runge-Kutta Order Four, or
RK4

9
Runge-Kutta (cont’d)
RK4 better fit, good for larger time steps
 Tends to dampen energy
 Expensive – requires many evaluations
 If function is known and fixed (like in
physical simulation) can reduce it to one
big formula

10
Runge-Kutta
Okay for forces dependant on position
 Okay for forces dependant on velocity
 Great for constant forces


But expensive: four evaluations of
derivative
11
Implicit Methods
Explicit Euler method adds energy
 Implicit Euler dampens it
 Use new velocity, not current
 E.g. Backwards Euler:
xi 1  xi  hx i 1

v i 1  v i  hv i 1
 Better for stiff equations
12
Implicit Methods
Result of backwards Euler
 Solution converges - not great
 But it doesn’t diverge!

x
0
x1
x3
x2
13
Implicit Methods

 i 1 or v
 i 1 ?
How to compute x
Derive from formula (most accurate)
 Solve using linear system (slowest, but
general)
 Compute using explicit method and plug in
value (predictor-corrector)

14
Implicit Methods

Solving using linear system:
x i 1  x i  hi xi 1
x i  x i  x i  hi f (x i  x i )
x i  hi f (x i  x i )
x i  hi (f (x i )  f (x i )x i )
1
1



x i   I  f (x i )  f (x i )
 hi


Resulting matrix is sparse, easy to invert
15
Implicit Methods

Example of predictor-corrector:
~
x  x  hv
i 1
i
i
~
v i 1  v i  h  F(x i , v i ) / m
x i 1  x i  h / 2  (~
v i 1  v i )
v i 1  v i  h / 2  (F(~
xi 1 , ~
v i 1 )  F(x i , v i )) / m
16
Backward Euler
Okay for forces dependant on position
 Great for forces dependant on velocity
 Bad for constant forces


But tends to converge: better but not ideal
17
Verlet Integration
Velocity-less scheme
 From molecular dynamics
 Uses position from previous time step
 Very stable, but velocity estimated
 Good for particle systems, not rigid body

x i 1  2x i  x i 1  h 2  a i
18
Verlet Integration

Leapfrog Verlet
vi1/ 2  vi1/ 2  hi  a i
x i1  x i  hi  vi1/ 2

Velocity Verlet
v i1/ 2  v i  hi /2  a i

x i1  x i  h  v i1/ 2
v i1  v i1/ 2  hi /2  a i1
19
Verlet Integration
Better for forces dependant on position
 Okay for forces dependant on velocity
 Okay for constant forces


Not too bad, but still have estimated
velocity problem
20
Symplectic Euler
Idea: velocity and position are not
independent variables
 Make use of relationship
 Run Euler’s in reverse: compute velocity
first, then position
 Very stable

21
Symplectic Euler

Applied to orbit example
x
0
x1
x2
x3

(Admittedly this is a bit contrived)
22
Symplectic Euler
Good for forces dependant on position
 Okay for forces dependant on velocity
 Bad for constant forces


But cheap and stable!
23
Which To Use?



With simple forces, standard Euler or higher order RK might
be okay
But constraints, springs, etc. require stability
Recommendation: Symplectic Euler



Generally stable
Simple to compute (just swap velocity and position terms)
More complex integrators available if you need them -- see
references
24
References
Burden, Richard L. and J. Douglas Faires,
Numerical Analysis, PWS Publishing Company,
Boston, MA, 1993.
 Witken, Andrew, David Baraff, Michael Kass,
SIGGRAPH Course Notes, Physically Based
Modelling, SIGGRAPH 2002.
 Eberly, David, Game Physics, Morgan
Kaufmann, 2003.

25
References
Hairer, et al, “Geometric Numerical
Integration Illustrated by the
Störmer/Verlet method,” Acta Numerica
(2003), pp 1-51.
 Robert Bridson, Notes from CPSC 533d:
Animation Physics, University of BC.

Download