Chöông 6
GIAÛI GAÀN ÑUÙNG
PHÖÔNG TRÌNH VI PHAÂN
I. GIẢI GẦN ĐÚNG PTVP CẤP 1 :
Xét bài toán Cauchy : tìm nghiệm y=y(x) của
phương trình vi phân với giá trò ban đầu y
0
y’ = f(x, y), ∀x ∈ [a,b]
y(a) = y
0
Các phương pháp giải gần đúng :
Công thức Euler
Công thức Euler cải tiến
Công thức Runge-Kutta
1. Công thức Euler :
Để tìm nghiệm gần đúng của bài toán Cauchy
ta chia đoạn [a,b] thành n đoạn nhỏ bằng nhau
với bước h = (b-a)/n
x
o
= a, x
1
= x
0
+h, ... , x
k
= x
0
+ kh, ... , x
n
= b
Nghiệm gần đúng của bài toán là dãy {y
k
} gồm
các giá trò gần đúng của hàm tại x
k
Ta có y
k
≈ y(x
k
) , k =0, n
Giả sử bài toán có nghiệm duy nhất y(x) có
đạo hàm đến cấp 2 liên tục trên [a,b].
Khai triển Taylor ta có
y(x
k+1
) = y(x
k
) + (x
k+1
-x
k
) y’(x
k
) + (x
k+1
-x
k
)
2
y’’(ξ
k
)/2
với ξ
k
∈ (x
k
, x
k+1
)
Công thức Euler :
y
k+1
= y
k
+ h f(x
k
, y
k
) , k = 0, n-1
với h = x
k+1
- x
k
Ví dụ : Dùng công thức Euler tìm nghiệm gần
đúng của bài toán Cauchy
y’ = y – x
2
+1, 0≤x≤1
y(0) = 0.5
với n = 5
Tính sai số biết nghiệm chính xác là :
y(x) = (x+1)
2
– 0.5e
x
giải
ta có h = 0.2
x
0
= 0, x
1
= 0.2, x
2
= 0.4, x
3
= 0.6, x
4
= 0.8, x
5
= 1
Coâng thöùc Euler
y
0
= 0.5
y
k+1
= y
k
+ h f(x
k
, y
k
) = y
k
+ 0.2 (y
k
- x
k
2
+1)
0.18268312.64085912.45817615
0.13874952.12722951.988480.84
0.09854061.64894061.55040.63
0.06208771.21408771.1520.42
0.02929860.82929860.80.21
00.50.500
|y(x
k
) - y
k
|y(x
k
)y
k
x
k
k
A = 0
B = 0.5
B = B + 0.2(B – A
2
+ 1) : A=A+0.2:
(A+1)2-0.5eA:Ans-B
* Nhận xét : công thức Euler đơn gian, nhưng sai
số còn lớn nên ít được sử dụng
2. Coõng thửực Euler caỷi tieỏn :
y
k+1
= y
k
+ (k
1
+k
2
)/2 k = 0,1, ..., n-1
k
1
= hf(x
k
, y
k
),
k
2
= hf(x
k
+h, y
k
+ k
1
)
vụựi h = x
k+1
- x
k
Ví dụ : Dùng công thức Euler cải tiến tìm nghiệm
gần đúng của bài toán Cauchy
y’ = y – x
2
+1, 0≤x≤1
y(0) = 0.5
với n = 5
Tính sai số biết nghiệm chính xác là :
y(x) = (x+1)
2
– 0.5e
x
giải
ta có h = 0.2
x
0
= 0, x
1
= 0.2, x
2
= 0.4, x
3
= 0.6, x
4
= 0.8, x
5
= 1
Coâng thöùc Euler caûi tieán
y
o
= 0.5
y
k+1
= y
k
+ (k
1
+k
2
) /2
k
1
= 0.2(y
k
- x
k
2
+1)
k
2
= 0.2(y
k
+ k
1
– (x
k
+0.2)
2
+1)
0.02322.64085912.617687615
0.01702.12722952.11023570.84
0.01171.64894061.63724240.63
0.00721.21408771.206920.42
0.00330.82929860.8260.21
00.50.500
|y(x
k
) - y
k
|y(x
k
)y
k
x
k
k
A = 0 (x
k
)
B = 0.5 (y
k
)
C = 0.2(B – A
2
+ 1) :
D = 0.2(B + C - (A+0.2)
2
+ 1):
B=B + (C+D)/2:
A=A+0.2:
(A+1)
2
-0.5e
A
:Ans-B