Tải bản đầy đủ (.ppt) (21 trang)

Bài giảng phương pháp tính chương 5 giải phương trình vi phân thường TS nguyễn quốc lân

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (792.75 KB, 21 trang )

BỘ MƠN TỐN ỨNG DỤNG - ĐHBK
-------------------------------------------------------------------------------------

PHƯƠNG PHÁP TÍNH – SV
CHƯƠNG 5
GIẢI PHƯƠNG TRÌNH VI PHÂN THƯỜNG


TS. NGUYỄN QUỐC LÂN (5/2006)


NỘI DUNG
---------------------------------------------------------------------------------------------------------------------------

A- BÀI TỐN CƠSI (GIÁ TRỊ ĐẦU)
1 – PHƯƠNG PHÁP EULER
2 – EULER CẢI TIẾN + RUNGE – KUTTA
3 – HỆ PHƯƠNG TRÌNH VI PHÂN THƯỜNG
4 – PHƯƠNG TRÌNH VI PHÂN CẤP CAO
B- BÀI TOÁN BIÊN
1- PHƯƠNG PHÁP SAI PHÂN HỮU HẠN


BÀI TỐN CƠSI
---------------------------------------------------------------------------------------------------------------------------

Tìm hàm y = y(t) thoả phương trình vi phân thường &
điều kiện đầu

 y ' = f (t , y ), a ≤ t ≤ b


 y (a ) = α

Giải xấp xỉ: Chia [a, b] thành n đoạn bằng nhau, độ dài h =
(b – a)/n, (n + 1) điểm chia t0 = a < t1 = a + h < … < tn = b
y1 = ?
y0 = α

h

a
a = t0

t1

b
t2

b = tn

Cần tính gần đúng giá trị wk ≈ yk = y(tk), k = 1 → n


MINH HOẠ Ý TƯỞNG
----------------------------------------------------------------------------------------------------------------------------------------

 y ' = −5 y + 5t 2 + 2t , 0 ≤ t
Bài tốn Cơsi: 
Với bước chia h = 0.5
 y (0) = 1 3
f ( x0 + h) − f ( x0 )

& công thức xấp xỉ đạo hàm 2 điểm: f ' ( x0 ) ≈
h
hãy tính xấp xỉ nghiệm y tại t = 0.5, t = 1.
Từ đó xây dựng đa thức nội suy Lagrange (spline) ygđ và vẽ đồ
1 −5 t
2
t + e
thị so sánh với nghiệm chính xác g(t) =
3
Điểm chia:

t0 = 0

Kết quả tìm được:

t1 = 0.5
y ( 0.5) = −0.5
y (1.0 ) = 1.875

t 2 = 1.
ygñ.Lagrange = at 2 + bt + c
⇒ ygñ = 6.42t 2 − 4.87t + 0.33


CÁC SƠ ĐỒ GIẢI XẤP XỈ PTRÌNH VPHÂN THƯỜNG
-------------------------------------------------------------------------------------------------------------------------------

Btốn Cơsi: Tìm y(t)
 y ' = f (t , y ), t ∈ [ a, b]


 y (a ) = α
Chia [a, b] → n đoạn
b−a
h=
, ti = a + ih
n
Tính wi, i = 0 → n

Sơ đồ Runge –
Kutta: w0 = α.
Giả sử biết wi ⇒

Sơ đồ Euler (i = 0 → n – 1)
w0 = α . Giả sử wi đã biết ⇒
wi +1 = wi + hf (ti , wi )
S/đ Euler cải tiến (i = 0 → n – 1)
w0 = α . Giả sử wi đã bieát ⇒
k1 = hf (ti , wi ), k 2 = hf (ti + h, wi + k1 )
wi +1 = wi + (k1 + k 2 ) 2

k1 = hf (ti , wi ), k 2 = hf (ti + h 2 , wi + k1 2)

k3 = hf (ti + h 2 , wi + k 2 2), k 4 = hf (ti +1 , wi + k3 )
 w = w + ( k + 2k + 2k + k ) 6
 i +1
i
1
2
3
4



VÍ DỤ PHƯƠNG PHÁP EULER
--------------------------------------------------------------------------------------------------------------------------------

Bằng p/pháp Euler, giải bài tốn Côsi với n = 3 đoạn chia:
 y ' = y − t 2 + 1, 0 ≤ t ≤ 1

 y (0) = 0.5
So sánh nghiệm xấp xỉ với nghiệm g(t) = (t+1)2 – 0.5et. Từ
1
đó tính xấp xỉ tích phân bằng c/t hình thang:

I = ∫ y (t )dt
0

Giải: f(t,y) = y – t2 + 1
h = (b–a)/n = 1/3
Sơ đồ Euler:

t0 = 0, w0 = 0.5

t1 , w1

t 2 , w2

w0 = 0.5

wi +1 = wi + hf (ti , wi ) = wi + 0.2( wi − ti2 + 1)



t3 , w3


KẾT QUẢ PHƯƠNG PHÁP EULER
-----------------------------------------------------------------------------------------------------------------------------

Bảng kết quả:
i

ti

wi

gi = g(ti )

| gi - wi |

0

0

0.5

0.5

0

1


1/3

2

2/3

3

1.

Tính gần đúng tích phân với cơng thức hình thang
1

h
[ y( t0 ) + 2 y( t1 ) + 2 y( t2 ) + y( t3 ) ] ≈ h [ w0 + 2w1 + 2w2 + w3 ]
2
2
= 1.3528807

∫ y(t )dt ≈
0


VÍ DỤ EULER CẢI TIẾN
--------------------------------------------------------------------------------------------------------------------------------

Tính y(1.) của bt Cơsi sau bằng  y ' = y − t 2 + 1, 0 ≤ t ≤ 1

SĐ Euler cải tiến với h = 0.5:
 y (0) = 0.5

f (t , y ) = y − t 2 + 1 , h = 0.5

t0 = 0, α = 0.5 t1 = 0.5, w1 = ?

t 2 , w2

k1 + k 2
k1 = hf (ti , wi ) , k 2 = hf (ti + h, wi + k1 ) → wi +1 = wi +
2
i

ti

wi

k1

0

0.0

0.5

0.75

1

0.5

1.375


1.0625

2

1.0

2.515625

k2
1.0
1.21875


VÍ DỤ RUNGE – KUTTA
--------------------------------------------------------------------------------------------------------------------------------

Tính y(1.) bằng Runge – Kutta với h = 0.5

 y' = y − t 2 + 1

 y (0) = 0.5

h
k

k1 = hf (ti , wi ) , k 2 = hf (ti + , wi + 1 )
Runge – 
2
2


Kutta 4: k3 = hf (ti + h 2 , wi + k 2 2) , k 4 = hf (ti + h, wi + k3 )

wi → wi+1 wi +1 = wi + k1 + 2k 2 + 2k3 + k 4

6
i

ti

0 0.0

wi

k1

k2

0.5

0.75

0.90625

k3

k4

0.9451325 1.0976563


1 0.5 1.4251302 1.0875651 1.2032064 1.2331167 1.3286235
2 1.0 2.6396027


HỆ PHƯƠNG TRÌNH VI PHÂN THƯỜNG
----------------------------------------------------------------------------------------------------------------------------------

Bài tốn Cơsi : Tìm hai hàm u1 = u1(t), u2 = u2(t) thoả
 du1 = f (t , u , u ), a ≤ t ≤ b
1
1 2
 dt
u1 (a ) = α1
& Điều kiện đầu 

u2 (a ) = α 2
 du2 = f 2 (t , u1 , u2 ), a ≤ t ≤ b
 dt
Chia [a, b] thành đoạn bằng nhau: Phân hoạch & rời rạc hoá
0
1
w10 = α1 , w2 = α 2 w1 , w1
2

α1 , α 2
a = t0

u1 ( t1 ) , u2 ( t1 ) = ?

t1 = a + h


2
w12 , w2 = ?

t 2 = a + 2h

i
i
0
0
i
i
Ký hiệu: w1 ≈ u1 (ti ), w2 ≈ u2 (ti ), i ≥ 0 ⇒ Bieát w1 , w 2 tính w1 , w 2 ?


MINH HOẠ Ý TƯỞNG
----------------------------------------------------------------------------------------------------------------------------------------

Xét bài tốn Cơsi với hệ phương trình vi phân thường:
u1 ' = 3u1 + 2u2 − ( 2t 2 + 1) e 2t , u1 ( 0 ) = 1

u2 ' = 4u1 + u2 + ( t 2 + 2t − 4 ) e 2t , u2 ( 0 ) = 1

Với bước chia h = 0.5, tính xấp xỉ nghiệm u1, u2 tại t = 0.5; 1
So sánh giá trị tính được với giá trị nghiệm chính xác:
1 5t 1 −t
1 5t 2 −t 2 2 t
2t
u1 ( t ) = e − e + e ; u2 ( t ) = e + e + t e
3

3
3
3
Điểm chia:

t0 = 0
u1 ( 0 ) = 1

t1 = 0.5
u1 ( 0.5) = ?

u2 ( 0 ) = 1 u2 ( 0.5) = ?

t 2 = 1.
u1 (1) = ?

u2 (1) = ?

t

u1

u2

0

1

1


0.5
1.0


SƠ ĐỒ EULER
----------------------------------------------------------------------------------------------------------------------------------

Bài tốn Cơsi : Tìm hai hàm u1 = u1(t), u2 = u2(t) thoả
 du1 = f (t , u , u ), a ≤ t ≤ b
1
1 2
 dt
u1 (a ) = α1
& Điều kiện đầu 

u2 (a ) = α 2
 du2 = f 2 (t , u1 , u2 ), a ≤ t ≤ b
 dt
S/đồ Euler:

0
0
i
w1 = α1 , w2 = α 2 Giaû sử biết w1i , w2 ( i = 0 → n − 1)
i
w1i +1 = w1i + hf1 ( ti , w1i , w2 ) ,

i
i
i

w2+1 = w2 + hf 2 ( ti , w1i , w2 )

u1 ' = 3u1 + 2u2 − ( 2t + 1) e , u1 ( 0 ) = 1
        

f1 ( t ,u1 ,u 2 )

VD: 
u2 ' = 4u1 + u2 + ( t 2 + 2t − 4 ) e 2t , u2 ( 0 ) = 1

         

f 2 ( t ,u1 ,u 2 )

2

2t

α1 = 1 w10 = 1

⇒
⇒ 0
α 2 = 1 w2 = 1

1
w1 = 1 + 0.5 f1 ( 0,1,1) =

w1 = 1 + 0.5 f 2 ( 0,1,1) =
2



ÁP DỤNG : PHƯƠNG TRÌNH VI PHÂN CẤP 2
----------------------------------------------------------------------------------------------------------------------------------

Bài tốn Cơsi cấp 2 (Ph/trình vi phân cấp 2 và đkiện đầu):
 y" = f ( t , y, y ') , t ≥ a

 y ( a ) = α1 , y ' ( a ) = α 2
Đưa về bài tốn Cơsi cấp 1: Đổi biến u1(t)= y(t), u2(t)=y’(t)
u1 ' = u2 = f1 ( t , u1 , u2 )

u2 ' = y ' ' = f ( t , y, y ') = f 2 ( t , u1 , u2 )

w10 = α1
u1 ( a ) = y ( a ) = α1
⇒ 0
Điều kiện đầu: 
u2 ( a ) = y ' ( a ) = α 2 w2 = α 2
1
0
w1 = w10 + hf1 ( t0 , w10 , w2 ) = α1 + hα 2
Sơ đồ Euler:  1
0
0
w2 = w2 + hf 2 ( t0 , w10 , w2 ) = α 2 + hf 2 ( a, α1 , α 2 )



VÍ DỤ
----------------------------------------------------------------------------------------------------------------------------------


Với h = 0.1, tính xấp xỉ giá trị y(0.2), y’(0.2) của nghiệm
bài toán sau bằng phương pháp Euler:
 y"−2 y '+2 y = e 2t sin t , t ≥ 0

 y (0) = −0.4, y ' (0) = −0.6
Đổi biến đưa về bài tốn Cơsi cấp 1: u1 = y(t), u2 = y’(t) ⇒
u1 ' = u2 = f1 ( t , u1 , u2 ) & u1 ( 0 ) = −0.4 , u2 ( 0 ) = −0.6

u2 ' = −2 y + 2 y '+ e 2t sin t = −2u1 + 2u2 + e 2t sin t = f 2 ( t , u1 , u2 )


1
0
w1 = w10 + hf1 ( t0 , w10 , w2 ) = −0.4 + 0.1 f1 ( 0,−0.4,−0.6 )
w10 = −0.4
⇒ 1
 0
0
0
w2 = −0.6
w2 = w2 + hf 2 ( t0 , w10 , w2 ) = −0.6 + 0.1 f 2 ( 0,−0.4,−0.6 )




BÀI TỐN BIÊN
--------------------------------------------------------------------------------------------------------------------------

Bài tốn biên cấp 2: Tìm hàm y = y(x) thoả phương trình

 y ' ' = f ( x, y, y ' ), a ≤ x ≤ b

 y (a ) = α , y ( b ) = β
Hay gặp: Bài tốn biên tuyến tính cấp 2
 y" = p ( x) y '+ q ( x) y + r ( x), a ≤ x ≤ b

 y( a ) = α , y( b ) = β


MINH HOẠ
----------------------------------------------------------------------------------------------------------------------------------

Tính giá trị nghiệm y của bài tốn biên tuyến tính cấp 2
 y ' ' = −( x + 1) y '+2 y + (1 − x 2 ) e − x , 0 ≤ x ≤ 1

 y ( 0 ) = −1, y (1) = 0

tại các điểm chia cách đều của [0, 1] với bước chia h = 1/3
và xấp xỉ đạo hàm y’, y’’ bằng công thức hướng tâm
Điểm chia:

x0 = 0

y ( 0 ) = y0 = −1

x1 = 1 3
1 = y = ?
y 
1
3



x2 = 2 3

x3 = 1

2 = y = ?
y 
2
3


y (1) = y3 = 0


PHƯƠNG PHÁP SAI PHÂN HỮU HẠN
---------------------------------------------------------------------------------------------------------------------------------------

BT biên tuyến tính

 y" = p ( x) y '+ q ( x) y + r ( x), a ≤ x ≤ b ( *)

 y( a ) = α , y( b) = β

Chia [a, b] thành các đoạn nhỏ bằng nhau. Thay x = xk vào (*).
Xấp xỉ y’(xk) , y’’(xk): công thức đạo hàm hướng tâm

y ( x2 ) − y ( x0 )
y ' ( x1 ) ≈
2h


y ' ( x2 )

y ( x3 ) − y ( x1 )

2h

h
a= x0

x1

y ( x2 ) − 2 y ( x1 ) + y ( x0 )
y" ( x1 ) ≈
h2

x2

x3

b= xn+1

y ( x3 ) − 2 y ( x2 ) + y ( x1 )
y" ( x2 ) ≈
h2


CÔNG THỨC LẮP GHÉP
-------------------------------------------------------------------------------------------------------------------------------------


n mốc xk ∈ (a, b) – ứng n giá trị yk chưa biết → Ma trận cấp n
Ký hiệu pk = p(xk) … yk = y(xk), 1 ≤ k ≤ n ⇒ y= [y1, … yn]T: Ay = b

h
 2  h  


2
2 + h q1 − 1 + p1
0  0
 − h r1 +  1 + 2 p1 α 

2






2
h
h
2


− h r2
 − 1 − p2 2 + h q2 − 1 + p2  






2
2
2
− h r3

 0
 b= 
A=



0
 




h
   

 − 1 + pn −1 


− h 2 rn −1

2





h
 2  h  
2
 0  0 − 1 − p n 2 + h q n 
 − h rn +  1 − 2 pn  β 



 

2




LẬP BẢNG LẮP GHÉP
-------------------------------------------------------------------------------------------------------------------------------------

BT biên tuyến tính

 y" = p ( x) y '+ q ( x) y + r ( x), a ≤ x ≤ b ( *)

 y( a ) = α , y( b ) = β

 Chia [a, b] thành các đoạn nhỏ độ dài h. n điểm chia xk
(không kể 2 đầu) – ứng với yk chưa biết → n ẩn số yk
 Lập bảng cột xk → pk = p(xk), qk = q(xk), rk = r(xk) → akk
(đ/chéo chính), ak,k+1 (chéo trên), ak-1,k (dưới), bk → Nghiệm yk

 Đ/chéo akk: k = 1 → n; ak,k+1: k = 1 → (n – 1), ak-1,k: k = 2 → n
i
1
2
3

xk

pk

qk

rk

akk

ak,k+1

ak-1,k

bk

yk


VÍ DỤ
-------------------------------------------------------------------------------------------------------------------------------------

Giải bài tốn biên cấp 2 sau bằng phương pháp sai phân hữu
hạn với bước chia h = 0.2


 y" = −3 y '+2 y + 2 x + 3

 y (0) = 2, y (1) = 1

h = 0.2 ⇒ n = 5 ⇒ 6 điểm chia ⇒ Hệ phương trình 4 ẩn
Ma trận cấp 4: Chéo chính akk – 4 phần tử; Chéo trên ak, k+1: 3
i
1

xi

0.2
2 0.4
3 0.6
4 0.8

pi

qi

ri

aii

ai,i+1

−3
−3
−3

−3

2
2
2
2

3.4
3.8
4.2
4.6

− 2.08
− 2.08
− 2.08
− 2.08

1.3
1.3
1.3

ai-1,i

bi

0.7
0.7
0.7

− 1.264

0.152
0.168
− 1.116


KẾT QUẢ
-------------------------------------------------------------------------------------------------------------------------------------

Giải hệ bằng phép khử Gauss (làm tròn 3 chữ số lẻ):
0
0
 2.08 − 1.3
− 0.7 2.08 − 1.3
0

[ A b] =
− 0.7 2.08 − 1.3
 0
 0
0 − 0.7 2.08

0
0
 1 − 0.625
 0 1.642 − 1.3
0

→ [ A b] =
− 0.7 2.08 − 1.3
 0

 0
0 − 0.7 2.08


0.608 
0.273 

− 0.168
1.116 


1.264 
− 0.152

− 0.168
1.116 

1.006 
0.636

⇒ y=
0.593
0.736





×