You are on page 1of 88

Chapter 20

ODEs:
Initial-Value Problems
Differential Equations
 There are ordinary differential equations -
functions of one variable
dv cd 2
 g v
dt m

 And there are partial differential equations -


functions of multiple variables
u u 2u  2  2
u  2  0
t x x x 2
y
Order of differential equations

 1st order (falling parachutist)


dv cd 2
 g v
dt m

 2nd order (mass-spring system with damping)

d2x dx
m 2 c  kx  0
etc. dt dt
Higher-Order ODE’s
 Can always turn a higher order ODE into a set of 1st
order ODEs
d3x d2x
 d t 
dx
 Example: a 3 b 2 c
dt dt dt

 dz 1
 dt  a d ( t )  bz  cy 

dx d2x  dy
 Let y , z 2 then  z
dt dt  dt
 dx
 dt  y

 So solutions to first-order ODEs are important
Linear and Nonlinear ODEs

 Linear: No multiplicative mixing of variables,


no nonlinear functions
 Nonlinear: anything else
d 2 g
2
 sin  0
dt l

u u 2u
u  2
t x x
Ordinary Differential Equations

ODEs show up everywhere in engineering


dv F
 Dynamics (Newton’s 2nd law) 
dt m

dT
 Heat conduction (Fourier’s law) q   k
dx

dc
 Diffusion (Fick’s law) J  D
dx
•Example of an d 2x dx
ODE m c  kx  f (t )
dt 2 dt

x
k f(t)
What order is this ODE?
m
If f(t) = 0, ODE is homogenous.
c
Free-body kx
If f(t) is not equal to 0, f(t)
ODE is non-homogenous. diagram m
dx
c
dt
d 2x dx
m  c  kx  f (t )
2 dt
dt
Solutions for ODEs
The solution for the homogenous ODE.
x(t )  C1S1 (t )  C2 S2 (t )
C1 & C2 are two arbitrary constants and
S1 (t ) & S2 (t ) are two general solutions.
The solution for the non-homogenous ODE
x(t )  C1S1 (t )  C2 S 2 (t )  P (t )
P (t ) is the particular solutions.
The arbitrary constants C1 & C2 are determined by
the Initial-value or Boundary-value conditions.
Initial-Value & Boundary-Value Conditions

The I-V Conditions All conditions are given


at the same value of the independent variable.
dx
For example at t  0, x  0 &  0.
dt
The two conditions are all given at t  0.

The B-V Conditions Conditions are given


at the different values of the independent variable.
For example at t  0, x  1 & at t  1, x  0.5.
The numerical schemes for solving Initial-value and
boundary-value are different.
Ordinary Differential Equations
I-V Problems

 Euler’s and Heun's methods


 Runge-Kutta methods
 Adaptive Runge-Kutta
 Multistep methods*
 Adams-Bashforth-Moulton methods*
Ordinary Differential Equations
1st order Ordinary differential equations (ODEs)
Initial value problems

dy
 f ( t , y) ; y( t0 )  y0
dt

Numerical approximations
New value = old value + slope × step size

yi 1  yi   h
Runge-Kutta Methods
 Runge Kutta methods (One Step Methods)
 Idea is that
New value = old value + slope*step size
yi 1  yi   h
 Slope is generally a function of t, hence y(t)
 Different methods differ in how to estimate 
One-Step Method

yi 1  yi   h
All one-step methods
can be expressed in
this general form, the
only difference being
the manner in which
the slope is estimated
Initial Conditions

The solution of
ODE depends on
the initial condition

Same ODE, but


t with different
initial conditions
Euler’s method
(First-order Taylor Series Method)
Approximate the derivative by finite difference
dy yi 1  yi
  f ( t i , yi )  yi 1  yi  hf ( t i , yi )
dt ti1  ti

Local truncation error


yi 2 yi( n ) n y ( n 1) ( )
yi  1  yi  yih  h   h  Rn ; Rn  h n 1
2 n! ( n  1)!
or
f ( t i , yi ) i 2 f ( n1) ( t i , yi ) n
yi  1  yi  f ( t i , yi )h  h  h  O ( h n 1 )
2 n!
Euler’s Method
 Euler’s (Euler-Cauchy or point-slope) method
 Use the slope at ti to predict yi+1
Euler’s method

dy
 y  f ( t , y); y(t 0 )  y0
dt

Straight line approximation

y0

t0 h t1 h t2 h t3
Example: Euler’s Method
dy
 t y , y(0 )  1, 0t1
dt
Analytic solution y  ( 1  t 2 / 4 ) 2
Euler method yi 1  yi  hfi , f  t y

h = 0.50

 y(0.5 )  y(0 )  hf (0,1.0 )  1  (0.5)(0 1 )  1.0


 y( 1.0 )  y(0.5 )  hf (0.5 ,1.0 )  1.0  (0.5 )( 0.5 1.0 )  1.25
Example: Euler’s Method
h = 0.25 yi 1  yi  hfi , f  t y
y(0.25 )  y(0 )  hf (0, 1.0 )
 1  (0.25 )( 0 1 )  1.0
y(0.5 )  y(0.25 )  hf (0.25 , 1.0 )
 1.0  (0.25 )( 0.25 1.0 )  1.0625
y(0.75 )  y(0.5 )  hf (0.5 , 1.0625 )
 1.0625  (0.25 )( 0.5 1.0625 )  1.191347
y( 1.0 )  y(0.75 )  hf (0.75 , 1.191347 )
 1.191347  (0.25 )( 0.75 1.191347 )  1.39600
Euler’s method:
y
dy
 y  t y ; y( 0 )  1
dt

h = 0.25
1
h = 0.5

t
0 0.25 0.5 0.75 1.0
Euler’s Method (modified M-file)
Euler’s Method
>> tt=0:0.01*pi:pi;
>> ye=1.5*exp(-tt)+0.5*sin(tt)-0.5*cos(tt);
>> [t,y]=Eulode('example2_f',[0 pi],1,0.1*pi);
step t y
1 0.0000000000 1.0000000000
2 0.3141592654 0.6858407346
3 0.6283185307 0.5674580652
dy
4 0.9424777961 0.5738440394   y  sin t ; y(0 )  1
5 1.2566370614 0.6477258022 dt
6 1.5707963268 0.7430199565
7 1.8849555922 0.8237526182
8 2.1991148575 0.8637463173
9 2.5132741229 0.8465525934
10 2.8274333882 0.7652584356
11 3.1415926536 0.6219259596
>> H=plot(t,y,'r-o',tt,ye);
>> set(H,'LineWidth',3,'MarkerSize',12)
>> print -djpeg ode01.jpg
Euler’s Method (h = 0.1)
dy
  y  sin t ; y(0 )  1
dt
Euler’s Method (h = 0.05)
dy
  y  sin t ; y(0 )  1
dt
Truncation Errors

There are
 Local truncation errors - error from
application at a single step
 Propagated truncation errors - previous
errors carried forward
The sum is “global truncation error”
Global & Local Errors

Global error
Local error
y y

yi+1 yi+1
yi yi

o xi xi+1 x o xi+1 xi+2 x


xi
Euler’s Method
 Euler’s method uses Taylor series with only
first order terms
 The true local truncation error is
f ( t i , yi ) 2
Et  h  ...  O( hn1 )
2!
 Approximate local truncation error - neglect
higher order terms (for sufficiently small h)
f ( t i , yi ) 2
Ea  h  O( h2 )
2!
Runge-Kutta Methods
Higher-order Taylor series methods (see
Chapra and Canale, 2002) -- need to compute
the derivatives of f(t,y)
Runge-Kutta Methods -- estimate the slope
without evaluating the exact derivatives

Heun’s method
Midpoint (or improved polygon) method
Third-order Runge-Kutta methods
Fourth-order Runge-Kutta methods
Heun’s Method

 Improvements of Euler’s method - Heun’s


method
 Euler’s method - derivative at the beginning
of interval is applied to the entire interval
 Heun’s method uses average derivative for
the entire interval
 A second-order Runge-Kutta Method
Heun’s Method
Heun’s method is a predictor-corrector method
 Predictor
y 0
i1  yi  f ( t i , yi ) h
 Corrector (may be applied iteratively)

f ( t i , yi )  f ( t i  1 , y )
0
yi  1  yi  i1
h
2
Heun’s Method
 Iterate the corrector of Heun’s method to obtain
an improved estimate

Predictor Corrector
Heun’s Method with Iterative Correctors
Heun’s Method with Iterative Correctors
» te=0:0.02*pi:pi; ye=example2_e(xe);
» [t1,y1]=Euler('example2_f',[0 pi],1,0.1*pi);
» [t2,y2]=Heun_iter('example2_f',[0 pi],1,0.1*pi,0);
» [t3,y3]=Heun_iter('example2_f',[0 pi],1,0.1*pi,5);
» H=plot(te,ye,t1,y1,'r-d',t2,y2,'g-s',t3,y3,'m-o');
» set(H,'LineWidth',3,'MarkerSize',12)
» [te' ye' y1',y2',y3']
t yEuler yHeun yHeun_iter ytrue
0 1.0000 1.0000 1.0000 1.0000
0.3142 0.6858 0.7837 0.7704 0.7746
0.6283 0.5675 0.7018 0.6830 0.6896
0.9425 0.5738 0.7064 0.6872 0.6951
1.2566 0.6477 0.7559 0.7395 0.7479
1.5708 0.7430 0.8152 0.8036 0.8118
1.8850 0.8238 0.8565 0.8503 0.8578
2.1991 0.8637 0.8592 0.8584 0.8648
2.5133 0.8466 0.8112 0.8149 0.8199
2.8274 0.7653 0.7082 0.7154 0.7188
3.1416 0.6219 0.5540 0.5631 0.5648
Heun’s Method with Iterative Correctors
dy
  y  sin( t ) ; y(0 )  1
dt
Heun’s with
5 iterations

Heun’s
method

Exact
Euler’s

t
Example: Heun’s Method
 h = 0.5 dy
 t y , y(0 )  1, 0t1
dt
 First Step
Preditor : y10  y0  f ( t0 , y0 ) h  1  (0 1 )( 0.5 )  1.0
f ( t0 , y0 )  f ( t 1 , y10 )
1st Corrector : y  y0 
1
1 h  1  0.5 (0 1  0.5 1.0 )( 0.5 )  1.1250
2
f ( t0 , y0 )  f ( t 1 , y11 )
2nd Corrector : y1  y0 
2
h  1  0.5 (0 1  0.5 1.1250 )( 0.5 )  1.1326
2
f ( t0 , y0 )  f ( t 1 , y12 )
3rd Corrector : y1  y0 
3
h  1  0.5 (0 1  0.5 1.1326 )( 0.5 )  1.1330
2
f ( t0 , y0 )  f ( t 1 , y13 )
4th Corrector : y1  y0 
4
h  1  0.5 (0 1  0.5 1.1330 )( 0.5 )  1.1331
2
f ( t0 , y0 )  f ( t 1 , y14 )
5 th Corrector : y1  y0 
5
h  1  0.5 (0 1  0.5 1.1331 )( 0.5 )  1.1331
2
Example: Heun’s Method
 h = 0.5 dy
 t y , y(0 )  1, 0x1
dt
 Second Step

Preditor : y20  y1  f ( t 1 , y1 ) h  1.1331  (0.5 1.1331 )( 0.5 )  1.3992


f ( t 1 , y1 )  f ( t 2 , y20 )
1st Corrector : y  y1 
1
2 h  1  0.5 (0.5 1.1331  1.0 1.3992 )( 0.5 )  1.5619
2
f ( t 1 , y1 )  f ( t 2 , y21 )
2nd Corrector : y2  y1 
2
h  1  0.5 (0.5 1.1331  1.0 1.5619 )( 0.5 )  1.5786
2
f ( t 1 , y1 )  f ( t 2 , y22 )
3rd Corrector : y2  y1 
3
h  1  0.5 (0.5 1.1331  1.0 1.5786 )( 0.5 )  1.5803
2
f ( t 1 , y1 )  f ( t 2 , y23 )
4th Corrector : y2  y1 
4
h  1  0.5 (0.5 1.1331  1.0 1.5803 )( 0.5 )  1.5804
2
f ( t 1 , y1 )  f ( t 2 , y24 )
5 th Corrector : y2  y1 
5
h  1  0.5 (0.5 1.1331  1.0 1.5804 )( 0.5 )  1.5804
2
dy
Example:  t y , y(0 )  1, 0t5
dt
» [t1,y1]=Eulode('example3',[0 5],1,0.5);
» [t2,y2]=Heun_iter('example3',[0,5],1,0.5,0);
» [t3,y3]=Heun_iter('example3',[0 5],1,0.5,5);
» [t1' y1' y2' y3' ye']
t yEuler yHeun yHeun_iter ytrue
0 1.0000 1.0000 1.0000 1.0000
0.5000 1.0000 1.1250 1.1331 1.1289
1.0000 1.2500 1.5523 1.5804 1.5625
1.5000 1.8090 2.4169 2.4859 2.4414
2.0000 2.8178 3.9463 4.0882 4.0000
2.5000 4.4964 6.4619 6.7192 6.5664
3.0000 7.1470 10.3793 10.8046 10.5625
3.5000 11.1570 16.2082 16.8630 16.5039
4.0000 17.0024 24.5532 25.5065 25.0000
4.5000 25.2492 36.1126 37.4407 36.7539
5.0000 36.5552 51.6796 53.4643 52.5625
Midpoint Method
 Improved Polygon or Modified Euler Method
 Use the slope at midpoint to represent the average slope
h
yi  1 / 2  yi  f ( t i , yi ) ; yi 1 / 2  f ( t i  1 / 2 , yi  1 / 2 )
2
yi  1  yi  f ( t i 1 / 2 , yi 1 / 2 )h
Runge-Kutta (RK) Methods
One-Step Method with general form

yi 1  yi   ( t i , yi , h) h
Where  is an increment function which represents
the weighted-average slope over the interval

  a1 k1  a2 k2    an kn
Where a’s are constants and k’s are slopes evaluated
at selected x locations
Runge-Kutta (RK) Methods
 One-Step Method
 General Form of nth-order Runge-Kutta Method
yi  1  yi   h
  a1 k 1  a 2 k 2    a n k n
 k1  f ( t i , yi )

 k2  f ( t i  p1 h, yi  q11k1 h)

 k3  f ( t i  p2 h, yi  q21k1 h  q22 k2 h)
 

kn  f ( t i  pn1 h, yi  qn1, 1 k1 h  qn1, 2 k2 h    qn1,n1 kn1 h)
 Where p’s and q’s are constants
 k’s are recurrence relationships
Second-Order RK Methods
 Taylor series expansion
 k1  f ( t , y )

k2  f ( t  p1 h, y  q11k1 h)  f ( t , y)  ( p1 h) f t ( t , y)  ( q11k1 h) f y ( t , y)
 y( t  h)  y( t )  ha1 f ( t , y)  a2 f ( t  p1 h, y  q11k1 h)
 y( t )  ha1 f  a2 ( f  p1 hft  q11k1 hf y )

 Compare to the second-order Taylor formula


y( t  h)  y( t )  hf  ( h2 /2 )( ft  ff y )
 Three equations for four unknowns (a1, a2, k1, q11)
a1  a2  1 a1  a2  1
 
 2 1
a p h 2
f t  (h 2
/2)f t  a2 p1  1/2
 a q  1/2
a q k
 2 11 1 h 2
f y  a q
2 11 h 2
ff y  (h 2
/2)f y f  2 11
Second-Order RK Methods
Second-order version of Runge-Kutta Methods

yi  1  yi  ( a1 k1  a2 k2 )h
k1  f ( t i , yi )

k2  f ( t i  p1 h, yi  q11k1 h)

3 equations for 4 unknowns

a1  a2  1

a2 p1  1 / 2
a q  1 / 2
 2 11
Second-Order RK Methods
General Second-order Runge-Kutta methods
k2

k1  f ( t i , yi )  f1

k1 a1 k1 + a2 k2 k2  f ( t i  p1 h, yi  q11k1 h)
 y  y  ( a k  a k )h
 i1 i 1 1 2 2

Weighted-average slope

xi xi+p1h xi+1
= xi+h
Heun’s Method
Heun’s method with a single corrector (a2 = 1/2):
Choose a2 = 1/2 and solve for the other 3 constants
a1 = 1/2, p1 = 1, q11 = 1

k1  f ( t i , yi )
k2  f ( t i  h, yi  k1 h)
1 1 
yi  1  yi   k1  k2  h
2 2 
Use average slope over the interval
Midpoint Method
 Another Second-order Runge-Kutta method
 Choose a2 = 1  a1 = 0, p1 = 1/2, q11 = 1/2
k2

 k 1  f ( t i , yi )
k1 
 h 1
k2  f ( t i  , yi  k1 h)
 2 2
 yi  1  yi  k2 h

xi xi+1/2 xi+1
Midpoint (2nd-order RK) Method
Midpoint (2nd-order RK) Method
>> [t,y] = midpoint('example2_f',[0 pi],1,0.05*pi);
step t y
1 0.0000000000 1.0000000000
2 0.1570796327 0.8675816988
3 0.3141592654 0.7767452235
4 0.4712388980 0.7206165079
5 0.6283185307 0.6927855807
6 0.7853981634 0.6872735266
7 0.9424777961 0.6985164603
8 1.0995574288 0.7213629094
9 1.2566370614 0.7510812520
dy
10
11
1.4137166941
1.5707963268
0.7833740988
0.8143967658
  y  sin( t )
12 1.7278759595 0.8407772414
dt
13 1.8849555922 0.8596353281 y( 0 )  1
14 2.0420352248 0.8685989204
15 2.1991148575 0.8658156821
16 2.3561944902 0.8499586883
17 2.5132741229 0.8202249154
18 2.6703537556 0.7763257790
19 2.8274333882 0.7184692359
20 2.9845130209 0.6473332788
21 3.1415926536 0.5640309524
>> tt = 0:0.01*pi:pi; yy = example2_e(tt);
>> H = plot(t,y,'r-o',tt,yy);
>> set(H,'LineWidth',3,'MarkerSize',12);
Midpoint (RK2) Method
dy
  y  sin( t ) ; y(0 )  1
dt
Ralston’s Method
Second-order Runge-Kutta method
Choose a2 = 2/3  a1 = 1/3, p1 = q11 = 3/4
k2
k 1  f ( t i , yi )
3 3
k2  f ( t i  h, yi  k1 h)
4 4
1 2
k1 yi  1  yi  ( k 1  k 2 ) h
3 3
k1/3 + 2k2/3

ti ti+3h/4 xi+1 = ti+h


Third-Order Runge-Kutta Method
General form

 k 1  f ( t i , yi )

k2  f ( t i  p1 h, yi  q11k1 h)

k3  f ( t i  p2 h, yi  q21k1 h  q22 k2 h)
 yi  1  yi  ( a1 k1  a2 k2  a3 k3 )h
Weighted slope

  a1 k1  a2 k2  a3 k3
Third-Order Runge-Kutta Methods
General Third-order Runge-Kutta methods
k3
k2
Weighted-
average
k1 value of
three slopes
k1 , k 2 , k 3

ti ti+p1h ti+p2h ti+1 = ti+h


Third-order Runge-Kutta Methods

 
 k 1  f ( t i , yi )  k 1  f ( t i , yi )
 
 2 2  1 1
 k2  f ( t i  h, yi  k1 h) k2  f ( t i  h, yi  k1 h)
 3 3  2 2
 2 2  3 3
 k3  f ( t i  3 h, yi  3 k2 h) k3  f ( t i  4 h, yi  4 k2 h)
1 1
yi  1  y i  ( 2 k 1  3 k 2  3 k 3 ) h yi  1  y i  ( 2 k 1  3 k 2  4 k 3 ) h
8 9
Nystrom Method Nearly Optimum Method
3rd-order
Runge-Kutta Method
 Reduce to Simpson’s 1/3 rule for f = f(t)
k 1  f ( t i , yi )
1 1
k2  f ( t i  h, yi  k1 h)
2 2
k3  f ( t i  h, yi  k1 h  2 k2 h)
1
yi  1  yi  ( k 1  4 k 2  k 3 ) h
6
rd
3 -Order Heun Method


 k 1  f ( t i , yi )

 1 1
k2  f ( t i  h, yi  k1 h)
 3 3
 2 2
k3  f ( t i  3 h, yi  3 k2 h)
1
yi  1  yi  ( k 1  3 k 3 ) h
4
Classical 4th-order
Runge-Kutta Method
 One-step method
 Reduce to Simpson’s 1/3 rule for f = f(t)
 k1  f ( t i , yi )

k2 1 1
 f ( t i  h, yi  k1 h)
 2 2

k 1 1
 f ( t i  h, yi  k2 h)
 3 2 2
k  f ( t i  h, yi  k3 h)
 4
1
yi  1  yi  ( k 1  2 k 2  2 k 3  k 4 ) h
6
Classical 4th-order
Runge-Kutta Method
k2
k4

k3

k1 
1
 ( k1  2 k 2  2 k 3  k 4 )
6

ti ti + h/2 ti + h
Example: Classical
4th-order RK Method
h = 0.5 dy
 t y , y(0)  1, 0t1
dt

First step, t = 0.5


 k1  f ( t0 , y0 )  0 1.0  0

 k2  f ( t0  0.5 h, y0  0.5 k1 h)  f (0.25 , 1.0 )  (0.25 1 )  0.25

 k3  f ( t0  0.5 h, y0  0.5 k2 h)  f (0.25 , 1.0625 )  0.25 1.0625  0.257694

k4  f ( t0  h, y0  k3 h)  f (0.5 , 1.128847 )  0.5 1.128847  0.531236

( k1  2 k2  2 k3  k4 ) h  1  0  2(0.25 )  2(0.257694 )  0.531236 (0.5 )


1 1
y1  y0 
6 6
 1.128885 (  t  0.0018%)
Example: Classical
4th-order RK Method
Second step, t = 1.0
 k1  f ( t 1 , y1 )  0.5 1.128885  0.531236

 k2  f ( t 1  0.5 h, y1  0.5 k1 h)  f (0.75 , 1.261697 )  0.75 1.261697  0.8424396

 k3  f ( t 1  0.5 h, y1  0.5 k2 h)  f (0.75 , 1.339495 )  0.75 1.339495  0.8680242

 k4  f ( t 1  h, y1  k3 h)  f ( 1.0 , 1.562897 )  1.0 1.562897  1.2501588
1
y1  y0  ( k1  2 k 2  2 k 3  k 4 ) h
6
 1.128885  0.531236  2(0.8424396 )  2(0.8680242 )  1.2501588 (0.5 )
1
6
 1.5624127 (  t  0.0056%)
Fourth-Order Runge-Kutta Method
Fourth-Order Runge-Kutta Method
>> tt=0:0.01*pi:pi; yy=example2_e(tt);
>> [t,y]=RK4('example2_f',[0 pi],1,0.05*pi);
step t y
1 0.0000000000 1.0000000000
2 0.1570796327 0.8663284784
3 0.3141592654 0.7745866433
4 0.4712388980 0.7178375776
5 0.6283185307 0.6896194725
6 0.7853981634 0.6839104249
7 0.9424777961 0.6951106492 dy
8 1.0995574288 0.7180384347  y  sin( t )
9 1.2566370614 0.7479364401 dt
10 1.4137166941 0.7804851708
11 1.5707963268 0.8118207434 y( 0 )  1
12 1.7278759595 0.8385543106
13 1.8849555922 0.8577907953
14 2.0420352248 0.8671448731
15 2.1991148575 0.8647524420
16 2.3561944902 0.8492761286
17 2.5132741229 0.8199036965
18 2.6703537556 0.7763385417
19 2.8274333882 0.7187817811
20 2.9845130209 0.6479057500
21 3.1415926536 0.5648190301
>> H=plot(x,y,'r-o',xx,yy);
>> set(H,'LineWidth',3,'MarkerSize',12);
Fourth-Order Runge-Kutta Method
dy
  y  sin( t ) ; y(0 )  1
dt
Numerical Accuracy
» tt=0:0.01*pi:pi; yy=example2_e(tt); dy
» t0=0; y0=example2_e(t0);   y  sin( t ) ; y(0 )  1
dt
» t1=0.1*pi; y1=example2_e(t1);
» [t,ya]=Eulode('example2_f',[0 pi],y0,0.1*pi); h = 0.1
» [t,yb]=midpoint('example2_f',[0 pi],y0,y1,0.1*pi);
» [t,yc]=Heun_iter('example2_f',[0 pi],y0,0.1*pi,5);
» [t,yd]=RK4('example2_f',[0 pi],y0,0.1*pi);
» H=plot(t,ya,'m-*',t,yb,'c-d',t,yc,'g-s',t,yd,'r-O',tt,yy);
» set(H,'LineWidth',3,'MarkerSize',12);
»
» [t,ya]=Eulode('example2_f',[0 pi],y0,0.05*pi);
» [t,yb]=midpoint('example2_f',[0 pi],y0,y1,0.05*pi);
» [t,yc]=Heun_iter('example2_f',[0 pi],y0,0.05*pi,5); h = 0.05
» [t,yd]=RK4('example2_f',[0 pi],y0,0.05*pi);
» H=plot(t,ya,'m-*',t,yb,'c-d',t,yc,'g-s',t,yd,'r-O',tt,yy);
» set(H,'LineWidth',3,'MarkerSize',12);
» print -djpeg075 ode06.jpg
Numerical Accuracy
Euler dy
  y  sin( t ) ; y(0 )  1
Midpoint dt
Heun (iterative)
RK4 h = 0.1
Numerical Accuracy
Euler dy
  y  sin( t ) ; y(0 )  1
Midpoint dt
Heun (iterative) h = 0.05
RK4
Butcher’s sixth-order
Runge-Kutta Method
1
yi 1  yi  (7k1  32k 2  12k 4  32k5  7k6 )
90
 k1  f (ti , yi )
 1 1
 k 2  f (ti  h, yi  k1h )
 4 4
 1 1 1
 k3  f (ti  h, yi  k1h  k 2h )
 4 8 8
 1 1
k
 4  f ( t i  h , y i  k 2 h  k 3h )
2 2

 k  f ( t  3 h, y  3 k h  9 k h )
 5 i
4
i
16
1
8
4


 k6  f (ti  h, yi  3 k1h  2 k 2 h  12 k3h  12 k 4h  8 k5h )
 7 7 7 7 7
System of ODEs
A system of simultaneous ODEs
n equations with n initial conditions
 dy1
 dt  f1 ( t , y1 , y2 ,  , yn )

 dy2  f 2 ( t , y1 , y2 ,  , yn )
 dt
 

 dyn  f n ( t , y1 , y2 ,  , yn )
 dt
System of ODEs
Bungee Jumper’s velocity and position
Two simultaneous ODEs

 dx 
 dt  v v ( t ) 
gm  gc d 
tanh  t 
  cd  m 
 dv  g  c d v 2 
 dt  m   gc d 
 
 x ( t )  c ln cosh m t 
m
x (0 )  v (0 )  0  d   
Second-Order ODE
d 2 y dy
  g ( t , y, )
 dt 2
dt

 y( t )   , dy (t )  


0 0
dt
0 1

Convert to two first-order ODEs


 dy1 dy
 y1  y    y2
  dt dt  y1 ( t0 )   0
let  dy   I .C . s 
  y2 ( t 0 )   1
2


y 2
dt  dy 2 d y
 2  g ( t , y1 , y2 )

 dt dt
System of Two first-order ODEs
Euler’s Method
Any method considered earlier can be used
Euler’s method for two ODE-IVPs
Basic Euler method

yi 1  yi  hf ( t i , yi )
Two ODE-IVPs

 y1,i  1  y1, i  hf1 ( t i , y1, i , y2 , i )



 y2 , i  1  y2 , i  hf2 ( t i , y1,i , y2 , i )
Hand Calculations: Euler’s Method
 Solve the following ODE from t = 0 to t = 1 with h = 0.5
 dy1
 dt  0.5 y1  y1 (0 )  4
 
 2  4  0.1 y  0.3 y  y2 (0 )  6
dy
 dt 1 2

 Euler method
 y1,i  1  y1, i  f 1 ( t i , y1, i , y2 , i ) h  y1,i  (0.5 y1, i ) h

 y2 , i  1  y2 , i  f 2 ( t i , y1, i , y2 , i ) h  y2 , i  ( 4  0.1 y1, i  0.3 y2 , i ) h
 y1 (0.5 )  y1 (0 )   0.5y1 (0 )h  4  ( 0.5)(4)(0.5)  3

 y2 (0.5 )  y2 (0 )  4  0.1y1 (0 )  0.3 y2 (0 )h  6  4  0.1( 4 )  0.3(6 )(0.5 )  6.9
 y1 ( 1.0 )  y1 (0.5 )   0.5y1 (0.5 )h  3  ( 0.5 )( 3 )(0.5 )  2.25

 y2 ( 1.0 )  y2 (0.5 )  4  0.1y1 (0.5 )  0.3 y2 (0.5 )h  6.9  4  0.1( 3 )  0.3(6.9 )(0.5 )  7.715
Euler’s Method for a System of ODEs

y is a column vector with n variables


Euler Method for a System of ODEs
function f = example5(t,y)
% dy1/dt = f1 = -0.5 y1
% dy2/dt = f2 = 4 - 0.1*y1 - 0.3*y2
% let y(1) = y1, y(2) = y2
% tspan = [0 1]
% initial conditions y0 = [4, 6]
f1 = -0.5*y(1);
f2 = 4 - 0.1*y(1) - 0.3*y(2);
f = [f1, f2]';

>> [t,y]=Euler_sys('example5',[0 1],[4 6],0.5);


t y1 y2 y3 ...
0.000 4.0000000000 6.0000000000
0.500 3.0000000000 6.9000000000 (h = 0.5)
1.000 2.2500000000 7.7150000000

>> [t,y]=Euler_sys('example5',[0 1],[4 6],0.2);


t y1 y2 y3 ...
0.000 4.0000000000 6.0000000000
0.200 3.6000000000 6.3600000000
0.400 3.2400000000 6.7064000000
0.600 2.9160000000 7.0392160000 (h = 0.2)
0.800 2.6244000000 7.3585430400
1.000 2.3619600000 7.6645424576
Euler Method for Second-Order ODE
d2y dy Nonlinear Pendulum
2
 0.3   sin y
dt dt
 dy1 dy
 1y  y    y2
  dt dt
let  dy  
 y2  dt  dy2  d2y
  0.3
dy
 sin y  0.3 y2  sin y1
 dt dt 2
dt
function f = pendulum(t,y)
% nonlinear pendulum d^2y/dt^2 + 0.3dy/dt = -sin(y)
% convert to two first-order ODEs
% dy1/dt = f1 = y2
% dy2/dt = f2 = -0.1*y2 - sin(y1)
% let y(1) = y1, y(2) = y2
% tspan = [0 15]
% initial conditions y0 = [pi/2, 0]
f1 = y(2);
f2 = -0.3*y(2) - sin(y(1));
f = [f1, f2]';
Euler’s Method for Second-Order ODE
Nonlinear Pendulum
» [t,y1]=Euler_sys('pendulum',[0 15],[pi/2 0],15/100);
» [t,y2]=Euler_sys('pendulum',[0 15],[pi/2 0],15/200);
» [t,y3]=Euler_sys('pendulum',[0 15],[pi/2 0],15/500);
» [t,y4]=Euler_sys('pendulum',[0 15],[pi/2 0],15/1000);
» H=plot(t1,y1(:,1),t2,y2(:,1),t3,y3(:,1),t4,y4(:,1))

n = 100
n = 200
n = 500
n = 1000
Higher Order ODEs
In general, nth-order ODE
 y ( n )  f ( t , y, y, y,  , y ( n1) )

 y( t0 )   0 , y( t0 )   1 ,  , y ( n 1) ( t0 )   n 1

 y1 y  y1  y2 , y1 ( t0 )  α0
  
 y2  y  2y  y3 , y2 ( t 0 )  α1

let  y3  y   y3  y4 , y3 ( t 0 )  α 2
   
 
 yn  y ( n 1 )  yn  f ( t, y1 , y2 , , yn ) , yn ( t0 )  αn 1
System of First-Order ODE-IVPs
Example
 y  f ( t , y, y, y)  t 2  4 ty  3 y  5 y

 y(0 )  2, y(0 )  4 , y(0 )  1
Convert to three first-order ODE-IVPs
let y1  y, y2  y  dy/dt, y3  y  d 2 y / dt 2
 y1  f 1 ( t , y1 , y2 , y3 )  y2  y1 (0 )  2
 
 y2  f 2 ( t , y1 , y2 , y3 )  y3  y2 ( 0 )  4
   y (0 )  1
 3
y  f 3 ( t , y1 , y 2 , y 3 )  t 2
 4 ty1  3 y2  5 y3  3
In Vector Notation  y  f ( t , y )
Euler’s Method for Systems of
First-Order ODEs
 Euler’s Method
 y1 ( i  1)  y1 ( i )  f1 ( t ( i ), y1 ( i ), y2 ( i ), y3 ( i )) h

 y2 ( i  1)  y2 ( i )  f 2 ( t ( i ), y1 ( i ), y2 ( i ), y3 ( i )) h
 y ( i  1)  y ( i )  f ( t ( i ), y ( i ), y ( i ), y ( i )) h
 3 3 3 1 2 3
 Example
 y  f ( t , y, y, y)  t 2  4 ty  3 y  5 y

 y(0 )  2, y(0 )  4 , y(0 )  1

 y1  y2  y1 (0 )  2
 
 y2  y3  y2 ( 0 )  4
   y (0 )  1
 3
y  t 2
 4 ty1  3 y2  5 y3  3
Example: Euler’s Method
First step: t(0) = 0, t(1) = 0.5 (h = 0.5)
 y1 ( 1)  y1 (0 )  f1 (0 )h  y1 (0 )  y2 (0 )h  2  ( 4 )( 0.5 )  4.0

 y2 ( 1)  y2 (0 )  f 2 (0 )h  y2 (0 )  y3 (0 )h  4  ( 1)( 0.5 )  4.5

y
 3 ( 1)  y 3 ( 0 )  f 3 ( 0 ) h  y 3 ( 0 )  0 
2
 4 (0 ) y1 (0 )  3 y2 (0 )  5 y3 (0 ) 

  
 1  (0 ) 2  4 (0 )( 2 )  3( 4 )  5 ( 1) (0.5 )  2.5

Second step: t(1) = 0.5, t(2) = 1.0


 y1 ( 2 )  y1 ( 1)  f1 ( 1)h  y1 ( 1)  y2 ( 1)h  4.0  ( 4.5 )( 0.5 )  6.25

 y2 ( 2 )  y2 ( 1)  f 2 ( 1)h  y2 ( 1)  y3 ( 1)h  4.5  ( 2.5 )( 0.5 )  3.25

 y 3 ( 2 )  y 3 ( 1)  f 3 ( 1) h  y 3 ( 1) ( 0.5 ) 2

 4 (0.5 ) y1 ( 1)  3 y2 ( 1)  5 y3 ( 1) h

   2 .5  
( 0 .5 ) 2

 4 (0.5 )( 4.0 )  3( 4.5 )  5 ( 2.5 ) (0.5 )  11.375
Classical 4th-order Runge-Kutta Method
for Systems of ODE-IVPs
 k1,1  f1 (t (i ), y1 (i ), y2 (i ))
 2 equations
 k1,2  f 2 (t (i ), y1 (i ), y2 (i ))
 k 2,1  f1 (t(i )  h/2, y1 (i )  k1,1h/2, y 2 (i )  k1,2 h/2)  f1(t * (i ),y1* (i ),y*2 (i ))

 k 2,2  f 2 (t(i )  h/2, y1 (i )  k1,1h/2, y 2 (i )  k1,2 h/2)  f 2 (t (i ),y1 (i ),y 2 (i ))
* * *

 k 3,1  f1 (t(i )  h/2, y1 (i )  k 2,1h/2, y 2 (i )  k 2,2 h/2)  f1(t * ( i ),y1** ( i ),y**


2 (i ))

 k 3,2  f 2 (t(i )  h/2, y1 (i )  k 2,1h/2, y 2 (i )  k 2,2 h/2)  f 2 (t (i ),y1 (i ),y 2 (i ))
* ** **

 k 4,1  f1 (t(i )  h, y1 (i )  k 3,1h, y 2 (i )  k 3,2 h)  f1 (t ** (i ),y1*** (i ),y***


2 (i ))

 k 4,2  f 2 (t(i )  h, y1 (i )  k 3,1h, y 2 (i )  k 3,2 h)  f 2 (t (i ),y1 (i ),y 2 (i ))
** *** ***


y ( i  1)  y ( i ) 
1
( k1, 1  2 k 2 , 1  2 k 3 , 1  k 4 , 1 ) h
Applicable for
 1 1


6 any number of
 y ( i  1)  y ( i )  1 ( k  2 k  2 k  k )h equations
 2 2
6
1, 2 2, 2 3, 2 4,2
Hand Calculations: RK4 Method
 Solve the following ODE from t = 0 to t = 1 with h = 0.5
 dy1
 dt  f1  0.5 y1  y1 (0 )  4
 
 2  f  4  0.1 y  0.3 y  y2 (0 )  6
dy
 dt 2 1 2

 Classical RK4 method


k1, 1  f1 (0 , y1 (0 ), y2 (0 ))  f1 (0 , 4 ,6 )  (0.5 )( 4 )  2

k1, 2  f 2 (0 , y1 (0 ), y2 (0 ))  f 2 (0 , 4 ,6 )  4  (0.1)( 4 )  (0.3 )( 6 )  1.8
 y1*  y1 (0 )  k1, 1 h / 2  4  ( 2 )( 0.5 ) / 2  3.5
 *
 y2  y2 (0 )  k1, 2 h / 2  6  ( 1.8 )( 0.5 ) / 2  6.45
 k2 , 1  f1 (0.25 , y1* , y2* )  f1 (0.25 , 3.5 ,6.45 )  (0.5 )( 3.5 )  1.75

k2 , 2  f 2 (0.25 , y1 , y2 )  f 2 (0.25 , 3.5 ,6.45 )  4  (0.1)( 3.5 )  0.3(6.45 )  1.715
* *
Continued: RK4 Method
 y1**  y1 (0 )  k2 , 1 h / 2  4  ( 1.75 )( 0.5 ) / 2  3.5625
 **
 y2  y2 (0 )  k2 , 2 h / 2  6  ( 1.715 )( 0.5 ) / 2  6.42875
 k3 , 1  f1 (0.25 , y1** , y2** )  f1 (0.25 , 3.5625 ,6.42875 )  (0.5 )( 3.5625 )  1.78125

k3 , 2  f 2 (0.25 , y1 , y2 )  f 2 (0.25 , 3.5625 ,6.42875 )  4  (0.1)( 3.5625 )  0.3(6.42875 )  1.715125
** **

 y1***  y1 (0 )  k3 , 1 h  4  ( 1.78125 )( 0.5 )  3.109375


 ***
 y2  y2 (0 )  k3 , 2 h  6  ( 1.715125 )( 0.5 )  6.857563
 k4 , 1  f1 (0.5 , y1*** , y2*** )  f1 (0.5 , 3.109375 ,6.857563 )  (0.5 )( 3.109375 )  1.554688

k4 , 2  f 2 (0.25 , y1 , y2 )  f 2 (0.5 , 3.109375 ,6.857563 )  4  (0.1)( 3.109375 )  0.3(6.857563 )  1.631794
*** ***

y1 (0.5 )  y1 (0 )  ( 1 / 6 )( k1, 1  2 k2 , 1  2 k3 , 1  k4 , 1 )h
 4  ( 1 / 6 )[( 2 )  2( 1.75 )  2( 1.78125 )  1.554688]( 0.5 )  3.115234
y2 (0.5 )  y2 (0 )  ( 1 / 6 )( k1, 2  2 k2 , 2  2 k3 , 2  k4 , 2 )h
 6  ( 1 / 6 )[( 1.8 )  2( 1.715 )  2( 1.715125 )  ( 1.631794 )]( 0.5 )  6.857670
4th-order Runge-Kutta Method for ODEs

Valid for any number of coupled ODEs


4th-order Runge-Kutta Method for ODEs
>> [t,y]=RK4_sys('example5',[0 10],[4 6],0.5);
t y1 y2 y3 ...
0.000 4.0000000000 6.0000000000
0.500 3.1152343750 6.8576703125
1.000 2.4261713028 7.6321056734
1.500 1.8895230605 8.3268859767
2.000 1.4715767976 8.9468651000
2.500 1.1460766564 9.4976013588
3.000 0.8925743491 9.9849540205
3.500 0.6951445736 10.4148035640
4.000 0.5413845678 10.7928635095
4.500 0.4216349539 11.1245594257
5.000 0.3283729256 11.4149566980
5.500 0.2557396564 11.6687232060
6.000 0.1991722422 11.8901165525
6.500 0.1551170538 12.0829881442
7.000 0.1208064946 12.2507984405
7.500 0.0940851361 12.3966392221
8.000 0.0732743126 12.5232598757
8.500 0.0570666643 12.6330955637
9.000 0.0444440086 12.7282957874
9.500 0.0346133758 12.8107523359
10.000 0.0269571946 12.8821259602
4th-order Runge-Kutta Method for ODE-IVPs
Nonlinear Pendulum
» tspan=[0 15]; y0=[pi/2 0];
» [t1,y1]=RK4_sys(‘pendulum',tspan,y0,15/25);
» [t2,y2]=RK2_sys(‘pendulum',tspan,y0,15/50);
» [t3,y3]=RK2_sys(‘pendulum',tspan,y0,15/100);
» H=plot(t1,y1(:,1),t2,y2(:,1),t3,y3(:,1));
» set(H,'LineWidth',3.0);

n = 25
n = 50
n = 100
Comparison of Numerical Accuracy
Nonlinear Pendulum
» tspan=[0 15]; y0=[pi/2 0];
» [t1,y1]=Euler_sys(‘pendulum',tspan,y0,15/100);
» [t2,y2]=RK2_sys(‘pendulum',tspan,y0,15/100);
» [t3,y3]=RK4_sys(‘pendulum',tspan,y0,15/100);
» H1=plot(t1,y1(:,1),t2,y2(:,1),t3,y3(:,1)); hold on;
» H2=plot(t1,y1(:,2),'b:',t2,y2(:,2),'g:',t3,y3(:,2),'r:');


Euler

 RK2
RK4
Example: More than 2 ODE-IVPs
 dy1
 dt  f 1  36 y1  30 y2  20 y3  10 y4 ; y1 (0 )  1

 dy2  f 2  61 y1  50 y2  36 y3  18 y4 ; y2 (0 )  0
 dt

 dy3  f 3  34 y1  29 y2  25 y3  13 y4 ; y3 (0 )  0
 dt
 dy
 4  f 4  10 y1  10 y2  10 y3  6 y4 ; y4 ( 0 )  0
 dt

  36 30  20 10  function f = example(t, y)
% solve y' = Ay = f, y0 = [1 0 0 0]'
  61 50  36 18  % four first-order ODE-IVPs
A  A = [ -36 30 -20 10
  34 29  25 13  -61 50 -36 18
  -34 29 -25 13
  10 10  10 6  -10 10 -10 6];
 y=[ y(1) y(2) y(3) y(4)]';

t0  1 0 0 0  f = A*y;
4th-order Runge-Kutta Method for ODE-IVPs

Symbols: n = 20
Lines : n =100

» tspan=[0 2]; y0=[1 0 0 0];


» [t1,y1]=RK4_sys(‘example', tspan, y0, 2/20);
» [t2,y2]=RK4_sys(‘example', tspan, y0, 2/100);
» H1=plot(t1,y1,'o'); set(H1,'LineWidth',3','MarkerSize',12);
» hold on; H2=plot(t2,y2); set(H2,'LineWidth',3);
CVEN 302-501
Homework No. 13

Chapter 20
Prob. 20.1 (40), (Hand Calculation, and use
MATLAB plotting for graph)
20.3 a) , b) and c) (40)(Hand Calculation)
Prob. 20.8 (30) (decomposing into two 1st
ODEs and then using MATLAB Program)

Due on Wed. 11/26/2008 at the beginning of


the period

You might also like