You are on page 1of 25

Trường Đại học Bách khoa tp Hồ Chí Minh

Bộ môn Toán ứng dụng


-------------------------------------------------------------------------------------

Môn học Phương pháp tính

Chương 6: Phương trình vi phân

Giảng viên: TS Đặng Văn Vinh


Nội dung chương 6

1/ Phương pháp Euler giải phương trình vi phân

2/ Phương pháp Euler cải tiến

3/ Phương pháp Runge - Kutta

4/ Phương pháp sai phân hữu hạn


1/ Phương pháp Euler

Xét phương trình vi phân y '  f  x, y  , y  x0   y0 , a  x  b


Chia a, b  thành n đoạn nhỏ bằng nhau bởi các điểm chia
ba
xi  a  ih, i  0,1,..., n  1, xn  b, h 
n
Gọi nghiệm đúng của phương trình là y  x 
Giá trị của nghiệm đúng tại xi là y  xi 
Giá trị của gần đúng của nghiệm tại xi là yi

Khai triển Taylor của y  x  tại xi đến cấp 1 với phần dư Lagrange
 x  xi  ''
2

y  x   y  xi    x  xi  y  xi  
'
y c  , c   xi , x 
2!

Thay x  xi 1  xi  h, y  xi   f  xi , y  xi  vào đẳng thức trên:


'
h 2 ''
y  xi 1   y  xi   hf  xi , y  xi   y c  , c   xi , x 
2

Thay y  xi  , y  xi 1  lần lượt bởi yi , yi 1 ta có

yi 1  yi  hf  xi , yi  , i  0,1, 2,..., n  1 với y0  y  x0  đã biết.

Đây là công thức Euler giải phương trình vi phân

Người ta chứng minh được sai số của phương pháp Euler:

yi  y  xi   Mh với M là hằng số dương không phụ thuộc vào h.


Ví dụ 1
Cho bài toán Côsi: y '  e x  y , y  0   1. Hãy tìm nghiệm gần đúng bằng
phương pháp Euler trên 0,1 với h  0.5 . yi 1  yi  hf  xi , yi  , i  0,1, 2
y  xi  
i xi yi f  xi , yi  hf  xi , yi 
 
ln e xi  e  1
0 0 1 0.3678794 0.1839397 1

1 0.5 1.1839397 0.504625 0.2523125 1.2140231

2 1 1.4362522 1.489988

A  h * f  X ,Y  : Y  Y  A : X  X  h

A  0.5* e X Y : Y  Y  A : X  X  h

Bấm Calc X  0, Y  1
Ví dụ 2
Cho bài toán Côsi: y '   y  x y , y  2   2 . Hãy tìm nghiệm gần
đúng bằng phương pháp Euler trên 2,3 với h  0.25 .
yi 1  yi  hf  xi , yi  , i  0,1, 2,3

i xi yi hf  xi , yi 
0 2 2 0.2071067812

1 2.25 2.2071067812 0.2838921267

2 2.5 2.4909989 0.3636814406

3 2.75 2.854680348 0.4479161165

4 3 3.302596465 0.5373294278

A  h * f  X ,Y  : Y  Y  A : X  X  h

 
A  0.25* Y  X Y : Y  Y  A : X  X  0.25

Bấm Calc X  2, Y  2
1/ Phương pháp Euler cải tiến
Xét phương trình vi phân y '  f  x, y  , y  x0   y0 , a  x  b
xi 1
y  xi 1   y  xi    y '  x dx
xi

Tính gần đúng tích phân xác định ở vế trái bằng công thức hình thang
h ' h3 '''
y  xi 1   y  xi    y  xi   y  xi 1   y ci  , ci   xi , xi 1 
'

2 2

Thay y  xi  , y  xi 1  lần lượt bởi yi , yi 1 ta có


h
yi 1  yi   f  xi , yi   f  xi 1 , yi 1  , i  0,1, 2,..., n  1 với y0  y  x0  đã biết.
2
Để đơn giản, để thay yi 1 ở vế phải ta dùng yi 1  yi  hf  xi , yi 

Người ta chứng minh được sai số của phương pháp Euler:


yi  y  xi   Mh 2 với M là hằng số dương không phụ thuộc vào h.
Ví dụ 3
Dùng phương pháp Euler cải tiến giải phương trình vi phân
2  2 xy h
'
y  2
x 1
, y 0   1
2
 
yi 1  yi   f  xi , yi   f xi 1 , yi*1 

trên đoạn 0,1 với h  0.1 . yi*1  yi  hf  xi , yi 
A B
A  h * f  X ,Y  : X  X  h : B  h * f  X ,Y  A  : Y  Y 
2
Ví dụ 4
Dùng phương pháp Euler cải tiến giải phương trình vi phân
2
y y
y '   2 , y 1  1 y  y  h  f  x , y   f  x , y * 
2
x x i 1 i i i i 1 i 1 

trên đoạn 1, 2 với h  0.1 . yi*1  yi  hf  xi , yi 


A B
A  h * f  X ,Y  : X  X  h : B  h * f  X ,Y  A  : Y  Y 
2
3/ Phương pháp Runge - Kutta

Xét phương trình vi phân y '  f  x, y  , y  x0   y0 , a  x  b

Chia a, b  thành n đoạn nhỏ bằng nhau bởi các điểm chia
ba
xi  a  ih, i  0,1,..., n  1, xn  b, h 
n
Khai triển Taylor của y  x  tại xi đến cấp 2 với phần dư Lagrange
 x  xi   x  xi 
2 3

y  x   y  xi    x  xi  y '  xi   y ''  xi   y '''  c  , c   xi , x 


2! 3!

Thay x  xi 1  xi  h, y  xi   f  xi , y  xi  vào đẳng thức trên:


'

h 2 '' h3 '''
y  xi 1   y  xi   hy  xi   y  xi   y  c  , c   xi , x 
'

2! 3!
với y '  xi   f  xi , y  xi  , y ''  xi   f x'  xi , y  xi   f y'  xi , y  xi  y '  xi 

h2 '
 yi 1  yi  hy   f x  xi , yi   f y'  xi , yi  yi'    h 3
2!
'
i  
Công thức Runge – Kutta bậc bốn (RK4)
1
yi 1  yi   K1   2 K 2   2 K 3   K 4  
i i i i

6 

K1   hf  xi , yi 
i

 h K 
K 2   hf  xi  , yi  1 
i

 2 2 

 h K 
K 3   hf  xi  , yi  2 
i

 2 2 

K 4   hf  xi  h, yi  K 3 
i
i  0,1, 2,..., n  1
Ví dụ 5

Nhập 0.25*  X 2  Y  cos  X  Y 


Bấm Calc X? 1 Y? M=3.2 1.1725652
Bấm shift +sto +A
Bấm Calc X? 1+0.125 Y? M+A/2 1.213537107
Bấm shift +sto +B
Bấm Calc X? 1+0.125 Y? M+B/2 1.213692
Bấm shift +sto +C
Bấm Calc X? 1+0.25 Y? M+C 1.290504862
1
 y 1.25    A  2 B  2C  D 
6
Lặp lại quá trình trên với A, B, C, D mới để tính y(1.5)
Ví dụ 6

Nhập 
0.2* Y 2  X  3.2 
Bấm Calc X? 1 Y? 0.5
Bấm shift +sto +A
Bấm Calc X? 1.1 Y? 0.5+A/2
Bấm shift +sto +B
Bấm Calc X? 1.1 Y? 0.5+B/2
Bấm shift +sto +C
Bấm Calc X? 1.2 Y? M+C
1
 y 1.2    A  2 B  2C  D 
6
4/ Hệ phương trình vi phân
 dx
 dt  f t , x t  , y t 
 at b
 dy
  g t , x t  , y t 
 dt
 x  t0    , y  t0   

sử dụng cả ba công thức: Euler, Euler cải tiến, Runge – Kutta cấp 4
ta có các công thức để giải hệ phương trình vi phân cấp 1.
Chia a, b  thành n đoạn nhỏ bằng nhau bởi các điểm chia
ba
ti  a  ih, i  0,1,..., n  1, xn  b, h 
n
Công thức Euler cho hệ  xk 1  xk  hf tk , xk , yk 

 yk 1  yk  hg tk , xk , yk 

Công thức Euler cải tiến cho hệ

 h
x
 i 1  xi 
2
f  t i , xi , yi   f 
t , x *
i 1 i 1 , y *
i 1 

 y  y  h  g t , x , y   g t , x * , y *
 
 i 1 2
i i i i i 1 i 1 i 1

 xi*1  xi  hf ti , xi , yi 
 *
 yi 1  yi  hg ti , xi , yi 
Công thức Runge – Kutta bậc bốn (RK4) cho hệ
 1  i  i  i  i  
x
 i 1  x  K  2 K  2 K  K
6
i 1 2 3 4 


 y  y  1  Li   2 Li   2 Li   Li  
6
4 
 i 1 i 1 2 3

K1   hf ti , xi , yi 
i

 K1  L1  
i i
i  h
K2  hf  ti  , xi  , yi  
 2 2 2
 
 K 2  L2  
i i
i  h
K  hf  ti  , xi  , yi  
3  2 2 2
 
K 4 
i

 hf ti  h, xi  K 3  , yi  L3 
i i

Tương tự cho L1  , L2  , L3  , L4 
i i i i
Đổi biến z  x   y ' x  y'  z
 xM
 x 1
Ta có hệ z'  z x y x
 e 1
x
e 1 e 1
 y 1  0; z 1  M

Công thức Euler cho hệ  yk 1  yk  hf  xk , yk , zk 



 zk 1  zk  hg  xk , yk , zk 
Đổi biến z  x   y ' x 
y'  z
Ta có hệ  z '   xz  x 2 y  e x

 y 1  0.1; z 1  0.5

Công thức Euler cải tiến cho hệ
 h
y
 i 1  yi 
2
f  x i , y i , z i   f xi 1 , y *
, z *
i 1 i 1 

 z  z  h  g  x , y , z   g x , y* , z*
 
 i 1 i 2  i i i i 1 i 1 i 1

 yi*1  yi  hf  xi , yi , zi 
 *
 zi 1  zi  hg  xi , yi , zi 
5/ Phương pháp sai phân hữu hạn
 p  x  y ''  q  x  y '  r  x  y  f  x 
Xét phương trình  a  x  b, y  a    , y b   


Chia đoạn a, b  thành n đoạn nhỏ bằng nhau bởi các điểm
xk  a  kh, k  0...n  1, xn  b

Khai triển Taylor của y đến cấp 3 tại xk

 x  xk   x  xk 
2 3

y  x   y  xk    x  xk  y '  xk   y ''  xk   y '''  xk 


2! 3!
Thay x  xk 1  xk  h và x  xk 1  xk  h
h 2 '' h3 '''
y  xk 1   y  xk   hy  xk   y  xk   y  xk 
'

2! 3!
2 3
h h
y  xk 1   y  xk   hy '  xk   y ''  xk   y '''  xk 
2! 3!
y  xk 1   y  xk 1   2 y  xk   h 2 y ''  xk 

1 yk 1  2 yk  yk 1
y  xk   2  y  xk 1   2 y  xk   y  xk 1  
''

h h2
1 yk 1  yk 1
y  xk  
'

2h
 y  xk 1   y  xk 1  
2h

Thay vào phương trình đã cho, ta có


y  xk 1   2 y  xk   y  xk 1  y  xk 1   y  xk 1 
2
p  xk   q  xk   r  xk  y  xk   f  xk 
h 2h
yk 1  2 yk  yk 1 yk 1  yk 1
2
pk  qk  rk yk  f k , k  1, 2,..., n  1
h 2h
y0   , yn  

 pk qk   2 pk   pk qk 
 2  y 
 k 1  kr  2  k
y   2   yk 1  f k
h 2h   h  h 2h 
Ta có hệ phương trình ma trận AX  b
 2 p1 p1 q1 
r 
 1 h2  0   0 
h 2 2h
 
 p2  q2 2p
r2  22
p2 q2
  0 
 h 2 2h h h 2 2h 
 0 0 0  0 0 
A 
      
 
 2 pn  2 pn  2 qn  2 
0 0 0  rn  2  
 h2 h 2
2h 
 pn 1 qn 1 2 pn 1 
 0 0 0   rn 1  2 
 h2 2h h 

  p1 q1  
 f1   2    
 y1    h 2h 

 y 
 2   f2 
 
X    ,b    
 
 yn  2   f n2 
y   
 n 1   p q
 f  n 1  n 1   
 n 1  h 2 
2h  
 
Trường hợp A vuông cấp 3: N  3

 2 p1 p1 q1 
r 
 1 h2 2
 0 
h 2h
 
p q 2p p2 q2 
A   22  2 r2  22 
h 2h h h 2
2h 
 p3 q3 2 p3 
 0  r3  2 
 h 2 2h h 

  p1 q1  
 1  h 2  2h   
f 
 1
y
   
X   y2  , b   f2 
y   
 2 f   p q  
 3  h 2  2h   
3 3

   
Ví dụ 7
Cho ptvp y ''
  xy '
 16 y  4 x, x  0,1, y (0)  0, y (1)  1 .
Sử dụng pp sai phân hữu hạn, tính y  x  trong [0,1], với h  0.25 .

 2 p1 p1 q1 
r 
 1 h2  0 
h 2 2h
 
p q 2p p2 q2 
A   22  2 r2  22 
h 2h h h 2 2h 
 p3 q3 2 p3 
 0  r3  2 
 h 2 2h h 

  p1 q1  
 f1   2
  
 y1    h 2h  
X   y2  , b   f2 
y   
 2  p
 f  3  3 q 
 3  h 2 2h  
   
 2 p1 p1 q1 
r 
 1 h2  0 
h 2 2h
 
p q 2p p2 q2 
A   22  2 r2  22 
h 2h h h 2 2h 
 p3 q3 2 p3 
 0  r3  2 
 h 2 2h h 

  p1 q1  
 f1   2
  
 y1    h 2h  
X   y2  , b   f2 
y   
 2  p
 f  3  3 q 
 3  h 2 2h  
   

You might also like