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