Tải bản đầy đủ (.pdf) (43 trang)

Các phương pháp số cho phương trình vi phân pot

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 (390.78 KB, 43 trang )

1
Mục lục
Mục lục 1
0.1 Lý do chọn đề tài . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
0.2 Mục đích yêu cầu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
0.3 Phương pháp nghiên cứu . . . . . . . . . . . . . . . . . . . . . . . . . 3
0.4 Giới hạn của đề tài . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1 Phương pháp số cho phương trình vi phân cấp 1 4
1.1 Phương pháp Euler để giải phương trình vi phân cấp 1 . . . . . . . . 4
1.2 Phương pháp Euler cải tiến (Phương pháp Heun) . . . . . . . . . . . 7
1.3 Phương pháp Runge - Kutta . . . . . . . . . . . . . . . . . . . . . . . 9
1.4 Sai số và sự điều chỉnh bước nhãy RKF (Rung - Kutta - Fehlberg) . . 11
2 Phương pháp nhiều nút 14
2.1 Phương pháp Adams - Bashforth . . . . . . . . . . . . . . . . . . . . 14
2.2 Các phương pháp Adams - Moulton . . . . . . . . . . . . . . . . . . . 15
3 Phương pháp cho hệ phương trình và phương trình vi phân bậc
cao 17
3.1 Phương pháp Euler cho hệ phương trình . . . . . . . . . . . . . . . . 17
3.2 Các phương pháp Runge - Kutta cho hệ phương trình . . . . . . . . . 19
3.3 Phương pháp Runge - Kutta - Nystr¨om (phương pháp RKN) . . . . . 20
4 Phương pháp cho các phương trình vi phân đạo hàm riêng 22
4.1 Các phương pháp cho các phương trình vi phân kiểu Elip . . . . . . . 23
4.1.1 Các phương trình vi phân cho phương trình Laplace và phương
trình Poisson . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
4.1.2 Bài toán Dirichlet . . . . . . . . . . . . . . . . . . . . . . . . . 25
4.1.3 Phương pháp ADI . . . . . . . . . . . . . . . . . . . . . . . . 28
4.2 Bài toán Neumann và nhiễu loạn. Biên không chính quy . . . . . . . 30
4.3 Phương pháp cho phương trình Parabol . . . . . . . . . . . . . . . . . 34
2
4.4 Phương pháp cho phương trình Hypebol . . . . . . . . . . . . . . . . 40
5 Phần kết luận 42


3
0.1 Lý do chọn đề tài
Phương pháp số là một môn học bắt buộc cho tất cả học viên Cao học vật lý.
Nó cung cấp cho học viên các phương pháp nhằm giải quyết những vấn đề liên quan
đến tính toán, các thuật toán và cách giải gần đúng hay xấp xỉ các phương trình,
tích phân, vi phân, đạo hàm, Phương pháp số có thể dùng để giải gần đúng các
bài toán mà các phương pháp thông thường không thể giải được. Hầu hết, chúng
mã hoá và đưa ra các thuật giải để thuận tiện cho việc lập trình trên máy tính.
Để tìm hiểu sâu hơn về môn học nhóm chúng tôi được sự phân công của thầy
giáo hướng dẫn làm đề tài : Các phương pháp số cho phương trình vi phân
(numerical methods for differential equations). Để làm tiểu luận cho môn học.
Do kinh nghiệm còn hạn chế nên trong tiểu luận không tránh khỏi các sai sót
kính mong sự góp ý chân thành của quý thầy cô và bạn đọc.
0.2 Mục đích yêu cầu
Đưa ra các phương pháp cho phương trình vi phân cấp một, cho hệ phương
trình vi phân cấp 1, phương trình vi phân cấp cao, phương trình vi phân đạo hàm
riêng.
0.3 Phương pháp nghiên cứu
Chủ yếu là nghiên cứu tài liệu và thảo luận nhóm để đưa ra các kết luận đưa
vào tiểu luận.
0.4 Giới hạn của đề tài
Trong tiểu luận này chúng tôi chỉ trình bày, đưa ra phương pháp và mỗi phương
pháp chỉ trình bày một ví dụ để minh hoạ.
4
Chương 1
PHƯƠNG PHÁP SỐ CHO
PHƯƠNG TRÌNH VI PHÂN CẤP 1
1.1 Phương pháp Euler để giải phương trình vi
phân cấp 1
Ta đã biết phương trình vi phân cấp 1 có dạng F (x, y, y


) = 0, và nó có thể
viết tường minh y

= f(x, y). Thường phương trình vi phân người ta cho thêm một
điều kiện ban đầu về nghiệm thoả mãn. Trong phần này ta sẽ xét phương trình vi
phân cấp 1 và điều kiện có dạng:
y

= f(x, y); y(x
0
) = y
0
(1.1)
giả sữ f là bài toán có duy nhất nghiệm trên đoạn có chứa x
0
.
Ta sẽ bàn về các phương pháp để tính các giá trị số của các nghiệm, ở đây ta chỉ
cần nêu một cách thức cho nghiệm của các phương trình không khả dụng hoặc quá
phức tạp để tính toán.
Các phương pháp mà ta thực hiện để làm điều này là phương pháp gần đúng
theo từng bứơc (step-by-step motheds). Ta bắt đầu từ việc có giá trị y
0
= y(x
0
)
và tiến hành theo các bước, tính các giá trị gần đúng của nghiệm y(x) tại các nút
"mesh points"
x
1

= x
0
+ h; x
2
= x
0
+ 2h; x
3
= x
0
+ 3h; . . .
với h là bước nhãy (step size) cố định, chẳng hạn 0.1 hay 0.2 tuỳ chúng ta chọn.
Tính toán trong mỗi bước được thực hiện theo cách thức như nhau. Cách thức đó
là dựa vào việc khai triển chuổi Taylor:
y(x + h) = y(x) + hy

(x) +
h
2
2
y

(x) + ··· (1.2)
Xét với các giá trị nhỏ của h, các số hạng bậc cao h
2
, h
3
, ··· là rất nhỏ,ta có thể bỏ
qua, do vậy:
y(x + h) ≈ y(x) + hy


(x) = y(x) + hf(x, y)
5
(vế phải đạt được ở trên là từ phương trình vi phân y

(x) = f(x, y)) và theo các quá
trình lặp. Trong bước đầu tiên ta tính
y
1
= y
0
+ hf(x
0
, y
0
)
với cách lấy gần đúng y(x
1
) = y(x
0
+ h). Trong bước thứ hai ta tính
y
2
= y
1
+ hf(x
1
, y
1
)

và một cách gần đúng thì y(x
2
) = y(x
0
+ 2h) và tổng quát:
y
n+1
= y
n
+ hf(x
n
, y
n
); (n = 0, 1, 2, ···) (1.3)
Đây được gọi là Phương pháp Euler hay Phương pháp Euler-Cauchy.
Phương pháp thô sơ này hầu như ít được dùng trong thực hành nhưng từ
phương pháp đơn giản này, ta giải thích cho nguyên tắc dùng các phương pháp dựa
trên cơ sở khai triển chuổi Taylor.
Hình 1: Phương pháp Euler
Công thức Taylor với khai triển dạng y(x + h) = y(x) + hy

(x) +
1
2
h
2
y

(ξ) với
x ≤ ξ ≤ x + h. Nó diễn tả rằng Phương pháp Euler là làm ngắn lại các sai số

trong mỗi bước hay nó làm ngắn sai số bộ phận (local truncation error) tỉ lệ
với h
2
, được viết O(h
2
). Trên một khoảng x cố định mà ta muốn giải một phương
trình số các bước tỉ lệ với 1/h. Sai số bộ phận hay sai số toàn phần ở đây tỉ lệ với
h
2
(1/h) = h
1
. Do nguyên nhân này mà phương pháp Euler được gọi là Phương
pháp cấp 1. Ngoài ra còn có sai số do làm tròn và do các phương pháp khác, nó
gây ảnh hưởng đến độ chính xác của các giá trị y
1
, y
2
, ···
Ví dụ 1.1. Dùng phương pháp Euler để giải bài toán điều kiện đầu, chọn h = 0.2
và tính y
1
, ··· , y
5
y

= x + y, y(0) = 0 (1.4)
6
Giải: f(x, y) = x + y, và ta thấy rằng (1.3) trở thành:
y
n+1

= y
n
+ 0.2(x
n
+ y
n
)
Bảng 1.1 diễn tả cách tính toán, giá trị chính xác của nghiệm của (1.4) là y(x) =
e
x
−x−1. Trong thực hành tính toán chính xác nghiệm là chưa biết, nhưng sự chính
xác của các giá trị có thể tìm được bằng việc áp dụng phương pháp Euler từ một
lần khác với bước nhảy 2h = 0.4 và so sánh với sai số tương ứng. Kết quả tính này
là:
x
n
y
n
0.4(x
n
+ y
n
y
n
trong bảng (1.1) Sự sai khác
0.0 0.000 0.000 0.000 0.000
0.4 0.000 0.160 0.040 0.040
0.8 0.160 0.274 0.114
ở đây sai số là của h
2

, trong miền từ h đến 2h nó được nhân với 2
2
= 4, nhưng vì
ta chỉ cần một nữa của bước nhãy trước đó, nên nó chỉ nhân với 4/2 = 2. Do đó
hiệu số 2
2
−
2
= 0.040, sai số 
2
của y
2
trong bảng 1.1 (với kết quả thực là 0.052)
và 0.114 của y
4
(chính xác là 0.152).
n x
n
y
n
0.2(x
n
+ y
n
) Giá trị đúng Sai số
0 0.0 0.000 0.000 0.000 0.000
1 0.2 0.000 0.040 0.021 0.021
2 0.4 0.040 0.088 0.092 0.052
3 0.6 0.128 0.146 0.222 0.094
4 0.8 0.274 0.215 0.426 0.152

5 1.0 0.489 0.718 0.229
Bảng 1.1. Phương pháp Euler áp dụng cho (1.4) trong ví dụ 1.1 và sai số.
Lựa chọn biến bước nhảy một cách ngẫu nhiên trong các mã hiện đại. Những
mã này lựa chọn kiểu các biến nhãy h
n
sao cho sai số của nghiệm không lớn hơn giá
trị cực đại TOL (dung hạn được đề nghị). Với phương pháp Euler, khi bước nhãy
là h
n
, sai số bộ phận tại x
n
là cở
1
2
h
2
n
| y

(x
n
) |. Ta quy định giá trị này bằng dung
hạn TOL
1
2
h
2
n
| y


(x
n
) |= T OL, nên h
n
=

2T OL
| y

(x
n
) |
(1.5)
y

(x) phải khác không trên đoạn J : x
0
≤ x ≤ x
N
. Chọn K là giá trị cực tiểu của
| y

(x
n
) | trên J và giả sử K > 0 . Giá trị cực tiểu | y

(x
n
) | tương ứng với giá trị
cực đại h = H =


2T OL
K
của (1.5). Vì vậy,

2T OL = H

K. Đưa giá trị này vào
(1.5) ta đạt được
h
n
= ϕ(x
n
)H, ϕ(x
n
) =

K
| y

(x
n
) |
(1.6)
7
Đối với các phương pháp khác,lựa chọn biến bước nhảy một cách ngẫu nhiên là như
nguyên tắc này.
1.2 Phương pháp Euler cải tiến (Phương pháp
Heun)
Khi ta chú ý nhiều đến các số trong (1.2) ta đạt được các phương pháp số bậc

cao và chính xác. Nhưng đây là vấn đề thực hành. Nếu ta thế y

= f (x, y(x)) vào
(1.2) ta được:
y(x + h) = y(x) + hf +
1
2
h
2
f

+
1
6
h
3
f

+ ··· (1.7)
ở đây, vì f phụ thuộc vào x nên
f

= f
x
+ f
y
y

= f
x

+ f
y
f
và các đạo hàm cấp cao f

, f

trở nên cồng kềnh hơn. Phương pháp bây giờ là huỷ
bỏ các tính toán đó mà thay vào đó là tính f bởi một hay nhiều giá trị phụ trợ được
chọn thích hợp của (x, y). "Thích hợp" có nghĩa là chúng được chọn làm cấp của
phương pháp cao có thể thực hiện được (có độ chính xác cao). Ta nói về hai phương
pháp thực hành quan trọng.
Phương pháp thứ nhất gọi là Phương pháp Euler cải tiến hay Phương pháp
Euler - Cauchy cải tiến (còn gọi là Phương pháp Heun). Trong mỗi bước của
phương pháp này ta tính giá trị phụ đầu tiên (1.8a) và rồi tính giá trị mới (1.8b)
y

n+1
= y
n
+ f(x
n
, y
n
) (1.8a)
y
n+1
= y
n
+

1
2
h[f(x
n
, y
n
) + f(x
n+1
, y

n+1
)] (1.8b)
Hình 2: Phương pháp Euler cải tiến
8
Phương pháp này có cách giải thích hình học đơn giãn. Thực tế ta có thể trong
khoảng từ x
n
đến x
n
+
1
2
h ta có nghiệm gần đúng y bằng đường thẳng qua điểm
(x
n
, y
n
) với hệ số góc f(x
n
, y

n
), và chúng ta tiếp tục dọc theo đường thẳng với hệ
số góc f(x
n+1
, y

n+1
) cho đến x là x
n+1
.
Phương pháp Euler - Cauchy cải tiến là một Phương pháp predictor -
corrector, bởi vì trong mỗi bước ta đầu tiên ta tiên đoán một giá trị trong (1.8a)
và hiểu chính cho chính xác nó trong (1.8b). Ta dùng kí hiệu k
1
= hf(x
n
, y
n
) trong
(1.8a) và k
2
= hf(x
n+1
, y

n+1
) trong (1.8b) ta có thể viết sơ đồ dạng này trong bảng
1.2.
Ví dụ 1.2. Vận dụng phương pháp Euler cải tiến để giải bài toán (1.4), chọn h = 0.2
như trước.

Giải: Với bài toán lúc này.
k
1
= 0.2(x
n
+ y
n
)
k
2
= 0.2(x
n
+ 0.2)y
n
+ 0.2(x
n
+ y
n
)
y
n+1
= y
n
+
0.2
2
(2.2x
n
+ 2.2y
n

+ 0.2) + 0.22(x
n
+ y
n
) + 0.02.
Bảng 1.3 cho thấy rằng kết quả các kết quả hiện tại là chính xác hơn các kết quả
trong ví dụ 1.1, xem bảng 1.6 .
Thuật toán Euler (f, x
0
, y
0
, h, N)
Thuật toán này tìm nghiệm bài toán với giá trị đầuy

= f(x, y), y(x
0
) = y
0
tại
các điểm cách đều x
1
= x
0
+ h, x
2
= x
0
+ 2h, ··· , x
N
= x

0
+ Nh, ở đây, f như
một bài toán có duy nhất nghiệm trên đoạn [x
0
, x
N
].
Nhập vào: giá trị ban đầu x
0
, y
0
, bước đi(bước nhảy) h số bước đi trong
khoảng khảo sát N
Giá trị ra: Giá trị gần đúng y
n+1
của nghiệm y(x
n+1
) tại x
n+1
= x
0
+(n+1)h.
Với n = 0, 1, ··· , N − 1.
For n = 0, 1, ··· , N − 1 do:
x
n+1
= x
n
+ h
k

1
= hf(x
n
, y
n
)
k
2
= hf(x
n+1
, y
n
+ k
1
)
y
n+1
=
1
2
(k
1
+ k
2
)
Lấy ra: x
n+1
, y
n+1
Kết thúc

Tạm dừng
Kết thúc Phương pháp Euler
Bảng 1.2. Phương pháp Euler cải tiến(Phương pháp Heun)
9
n x
n
y
n
0.22(x
n
+ y
n
) + 0.02 Giá trị chính xác Sai số
0 0.0 0.0000 0.0200 0.0000 0.0000
1 0.2 0.0200 0.0684 0.0214 0.0014
2 0.4 0.0884 0.1274 0.0918 0.0034
3 0.6 0.2158 0.1995 0.2221 0.0063
4 0.8 0.4153 0.2874 0.4255 0.0102
5 1.0 0.7027 0.7183 0.0156
Bảng 1.3. Phương pháp Euler cải tiến áp dụng cho (1.4) và sai số
Sai số bộ phận: Sai số bộ phận của phương pháp Euler cải tiến là số hạng h
3
.
Thật vậy, đặt

f
n
= f(x
n
, y(x

n
)) và dùng (1.7), ta được
y(x
n
+ h) −y(x
n
) = h

f
n
+
1
2
h
2

f
n

+
1
2
h
3

f
n

+ ··· (1.9)
Lấy gần đúng biểu thức trong ngoặc của (1.8b) bằng


f
n
+

f
n+1
và dùng khai triển
Taylor ta được từ (1.8b)
y
n+1
− y
n

1
2
h[

f
n
+

f
n+1
]
=
1
2
h[


f
n
+ (

f
n
+ h

f
n

+
1
2
h
2

f
n

+ ···)]
= h

f
n
+
1
2
h
2


f
n

+
1
4
h
3

f
n

+ ···
(1.10)
Trừ (1.9) cho (1.10) ta có sai số
h
3
6

f
n


h
3
4

f
n


+ ··· = −
h
3
12

f
n

+ ···
Vì số các bước nhãy trên đoạn x tỉ lệ với
1
h
, nên sai số toàn phần là
h
3
h
= h
2
. ở đây
phương pháp Euler cải tiến được gọi là Phương pháp cấp hai
1.3 Phương pháp Runge - Kutta
Vẫn còn phương pháp thực hành quan trọng chính xác hơn nửa là Phương
pháp bốn số cổ điển Runge - Kutta, thường gọi một cách ngắn gọn là Phương
pháp Hunge - Kutta. Nó được diễn tả trong bảng 1.4. Ta thấy rằng trong mỗi
bước việc đầu tiên ta tính bốn số k
1
, k
2
, k

3
, k
4
và tiếp đó tính giá trị mới y
n+1
. Công
thức có vẻ phức tạp ở dạng đầu tiên, nhưng thực tế nó lại dễ cho một bài toán.
Việc tính tay f(x, y) bằng tay thì rất phức tạp nhưng nó sẽ không thành vấn đề đối
với máy tính. Phương pháp này là hoàn hảo cho máy tính bởi vì không cần đến các
tính toán ban đầu, nó làm sáng tỏ sự tích lũy, và dùng lặp lại các kết quả một cách
trực tiếp. Nó là số ổn định. Chú ý, nếu f chỉ phụ thuộc vào x, ta dùng công thức
tích phân Simpson.
10
Ví dụ 1.3. áp dụng phương pháp Runge - Kutta đối với bài toán (1.4) trong ví dụ
1.1, chọn h = 0.2 như trước và tính năm bước.
Giải: Với bài toán này, ta có f(x, y) = x + y nên ta có
k
1
= 0.2(x
n
+ y
n
), k
2
= 0.2(x
n
+ 0.1 + y
n
+ 0.5k
1

)
k
3
= 0.2(x
n
+ 0.1 + y
n
+ 0.5k
2
), k
4
= 0.2(x
n
+ 0.2 + y
n
+ k
3
)
Từ các biểu thức đơn giản, ta tìm giá trị thích hợp của k
1
và thay vào k
2
ta đạt được kết quả k
2
= 0.22(x
n
+ y
n
) + 0.02, thay giá trị này vào k
3

ta tìm
được k
3
= 0.222(x
n
+ y
n
) + 0.022, và cuối cùng thay giá trị này vào k
4
ta được
k
4
= 0.2444(x
n
+ y
n
) + 0 .0444. Nếu ta dùng các số trên, công thức y
n+1
trong bảng
1.4 trở thành
y
n+1
= y
n
+ 0.2214(x
n
+ y
n
) + 0.0214. (1.11)
Tất nhiên, các quá trình thay vào này là không tiêu biểu cho phương pháp

Kunge - Kutta và sẽ không là vấn đề chung. Bảng 1.5 diễn tả quá trình tính toán.
Từ bảng 1.6 ta thấy rằng các giá trị là chính xác hơn các giá trị trong ví dụ 1.1
và ví dụ 1.2
Thuật toán Runge - Kutta (f, x
0
, y
0
, h, N)
Thuật toán này tìm nghiệm bài toán với giá trị đầuy

= f(x, y), y(x
0
) = y
0
tại
các điểm cách đều x
1
= x
0
+ h, x
2
= x
0
+ 2h, ··· , x
N
= x
0
+ Nh, ở đây, f như
một bài toán có duy nhất nghiệm trên đoạn [x
0

, x
N
].
Nhập vào: giá trị ban đầu x
0
, y
0
, bước đi(bước nhảy) h số bước đi trong
khoảng khảo sát N
Giá trị ra: Giá trị gần đúng y
n+1
của nghiệm y(x
n+1
) tại x
n+1
= x
0
+(n+1)h.
Với n = 0, 1, ··· , N − 1.
For n = 0, 1, ··· , N − 1 do:
k
1
= hf(x
n
, y
n
)
k
2
= hf(x

n
+
1
2
h, y
n
+
1
2
k
1
)
k
3
= hf(x
n
+
1
2
h, y
n
+
1
2
k
2
)
k
4
= hf(x

n
+ h, y
n
+ k
3
)
x
n+1
= x
n
+ h
y
n+1
= y
n
+
1
6
(k
1
+ 2k
2
+ 2k
3
+ k
4
)
Lấy ra: x
n+1
, y

n+1
Kết thúc
Tạm dừng
Kết thúc Phương pháp Runge - Kutta
Bảng 1.4. Phương pháp Runge - Kutta cổ điển cấp bốn
11
n x
n
y
n
0.2214(x
n
+ y
n
) + 0.0214 Giá trị
đúng y =
e
x
− x −1
10
6
× sai số
của y
0 0.0 0.000 000 0.021 400 0.000 000 0
1 0.2 0.021 400 0.070 418 0.021 403 3
2 0.4 0.091 818 0.130 289 0.091 825 7
3 0.6 0.222 106 0.203 414 0.222 119 11
4 0.8 0.425 521 0.292 730 0.425 541 20
5 1.0 0.718 251 0.718 282 31
Bảng 1.5. Phương pháp Runge - Kutta áp dụng (1.4); tính toán bằng dùng biểu

thức (1.11).
x y = e
x
− x −1 Sai số
Phương pháp Euler Phương pháp
Euler cải tiến
Phương pháp
Runge - Kutta
0.2 0.021 403 0.021 0.0014 0.000 003
0.4 0.091 825 0.052 0.0034 0.000 007
0.6 0.222 119 0.094 0.0063 0.000 011
0.8 0.425 541 0.152 0.0102 0.000 020
1.0 0.718 282 0.229 0.0156 0.000 031
Bảng 1.6. So sánh sự chính xác của ba phương pháp xét trong bài toán (1.4) với
h = 0.2.
1.4 Sai số và sự điều chỉnh bước nhãy RKF (Runge
- Kutta - Fehlberg)
ý tưởng này dùng tích phân thích hợp cho Rung-Kutta và các phương pháp
khác. Trong bảng 1.4 cho RK (Runge - Kutta), nếu ta tính mỗi bước với bước nhãy
h và 2h, thì ít lâu sau sai số cho mỗi bước bằng 2
5
= 32 nhân với giá trị ban đầu.
Tuy nhiên, ta chỉ có một nữa bước cho 2h, nên số chính xác là 2
5
/2 = 16. ở đây sai
số  xấp xĩ với bước nhãy h bằng cở 1/15 nhân với độ chênh lệch δ = y −

y của các
giá trị tương ứng với cở bước nhãy lần lượt là h và 2h
 ≈

1
12
(y −

y) (1.12)
Bảng 1.7 minh hoạ (1.12) với phương trình vi phân có giá trị đầu
y

= (y −x − 1)
2
+ 2, y(0) = 1; (1.13)
12
y

y Sai số Chính xác hoá Nghiệm chính
x (cở h) (cở 2h) ứơc tính (1.12) sai số chính xác
0.0 1.000 000 000 1.000 000 000 0.000 000 000 0.000 000 000 1.000 000 000
0.1 1.200 334 589 0.000 000 083 1.200 334 672
0.2 1.402 709 878 1.402 707 408 0.000 000 765 0.000 000 157 1.402 710 036
0.3 1.609 336 039 0.000 000 210 1.609 336 250
0.4 1.822 792 993 1.822 788 993 0.000 000 267 0.000 000 226 1.822 793 219
Bảng 1.7. Phương pháp Runge - Kutta được áp dụng vào phương trình vi phân
(1.13) và sái số ước tính (1.12). Nghiệm chính xác y = tan x + x + 1
cở bước h = 0.1 và 0 ≤ x ≤ 4. Ta thấy rằng sai số ước tính gần bằng sai số chính
xác. Đây là phương pháp cho sai số ước tính là đơn giãn nhưng không ổn định.
RKF. E. Fhlberg đề xuất và phát triển sai số điều chính bằng cách dùng hai
phương pháp RK với các số khác nhau đi từ (x
n
, y
n

) đến (x
n+1
, y
n+1
). Sự chênh lệch
của việc tính giá trị y tại x
n+1
cho sai số ước tính được dùng cho điều chỉnh cở bước
nhãy h. E. Fhlberg đưa ra hai công thức RK với công thức này chỉ cần 6 giá trị
hàm cho mỗi bước. Ta trình bày dạng các hàm ở đây vì RKF đã trở nên quá phổ
biến. Chẳng hạn, Maple dùng nó (cho hệ thống các phương trình vi phân).
Phương pháp RK bậc năm của Fhlberg là
y
n+1
= y
n
+ γ
1
k
1
+ ··· + γ
6
k
6
(1.14a)
γ =

16
135
0

6656
12825
28561
56430

9
50
2
55

(1.14b)
Với hằng số vectơ γ =

γ
1
··· γ
6

Phương pháp RK bậc bốn của ông là
y

n+1
= y
n
+ γ

1
k
1
+ ··· + γ


5
k
6
(1.15a)
γ

=

25
216
0
1408
2565
2197
4104

1
5

(1.15b)
Trong cả hai công thức ta chỉ dùng 6 giá trị hàm khác nhau
k
1
= hf(x
n
, y
n
)
k

2
= hf(x
n
+
1
4
h, y
n
+
1
4
k
1
k
3
= hf(x
n
+
3
8
h, y
n
+
3
32
k
1
+
9
32

k
2
k
4
= hf(x
n
+
12
13
h, y
n
+
1932
2197
k
1

7200
2197
k
2
+
7296
2197
k
3
) (1.16)
k
5
= hf(x

n
+ h, y
n
+
439
216
k
1
− 8k
2
+
3680
513
k
3

845
4104
k
4
)
k
6
= hf(x
n
+
1
2
h, y
n


8
27
k
1
+ 2k
2

3544
2565
k
3
+
1859
4104
k
4

11
40
k
5
13
Sự sai khác của (1.14a) và (1.15a) cho sai số ước tính

n+1
≈ y
n+1
− y


n+1
=
1
360
k
1

128
4275
k
3

2197
75240
k
4
+
1
50
k
5
+
2
55
k
6
(1.17)
Ví dụ 1.4. Runge - Kutta - Fehlberg cho bài toán phương trình vi phân (1.13) ta
đạt được từ (1.14a), (1.14b), (1.15a), (1.15b), (1.16) với h = 0.1 trong bước đầu
tiên với 12 số thập phân là

k
1
= 0.200000000000 k
2
= 0.200062500000 k
3
= 0.200140756867
k
4
= 0.200856926154 k
5
= 0.201006676700 k
6
= 0.200250418651
y
1
= 1.20033467253 y

1
= 1.20033466949 
1
= 0.00000000304
Giá trị chính xác đến 12 số thập phân là y(0.1) = 1.20033467209. Do đó sai số chính
xác của y
1
là −4.4 · 10
−10
, nhỏ hơn trong bảng 1.7 bằng hằng số 200.
Bảng 1.8 tổng kết các kết quả cơ bản của các phương pháp trong chương 1
này. Nó có thể các phương pháp này là các sai số ổn định. Chúng là các phương

pháp một bước bởi vì mỗi bước ta dùng dữ kiện của bước trước một cách có thế
tự.
Phương pháp Hàm giá trị cho mỗi bươc Sai số toàn phần Sai số cục bộ
Euler 1 O(h) O(h
2
)
Euler cải tiến 2 O(h
2
) O(h
3
)
RK(bậc bốn) 4 O(h
4
) O(h
5
)
RKF 6 O(h
5
) O(h
6
)
Bảng 1.8. Các phương pháp được xem xét và bậc của chúng (=sai số toàn phần
của chúng)
Bắt đầu Tiên đoán Hiệu chỉnh Giá trị 10
6
× sai số
n x
n
y
n

y

n
y
n
chính xác của y
n
0 0.0 0.000 000 0.000 000 0
1 0.2 0.021 400 0.021 403 3
2 0.4 0.091 818 0.091 825 7
3 0.6 0.222 107 0.222 119 12
4 0.8 0.425 361 0.425 529 0.425 541 12
5 1.0 0.718 066 0.718 270 0.718 282 12
6 1.2 1.119 855 1.120 106 1.120 117 11
7 1.4 1.654 885 1.655 191 1.655 200 9
8 1.6 2.352 653 2.353 026 2.353 032 6
9 1.8 3.249 190 2.249 646 3.249 647 1
10 2.0 4.388 505 4.389 062 4.389 056 −1
Bảng 1.9. Phương pháp Adams - Moulton áp dụng vào bài toán (2.9); giá trị tiên
đoán được tính bằng (2.7) và các giá trị được hiệu chính bằng (2.8).
14
Chương 2
PHƯƠNG PHÁP NHIỀU NÚT
Phương pháp một bước(một nút) là phương pháp mà trong mỗi bước chúng ta
dùng các kết quả đạt được từ các bước trước một cách có thứ tự. Tất cả các phương
pháp trong chương 1 đều là phương pháp một bước. Trái lại, phương pháp nhiều
nút là phương pháp mà mỗi bước dùng các giá trị từ các bước thứ tự. Lý do mà
chúng ta dùng các bước tương đương là thêm các thông tin có thể làm tăng độ chính
xác của kết quả. Các phương pháp đó sẽ lần được trình bày như ở dưới đây:
2.1 Phương pháp Adams - Bashforth

Ta hãy xét phương trình vi phân có điều kiện đầu sau
y

= f(x, y), y(x
0
) = y
0
(2.1)
như trước, với f như là một bài toán có nghiệm duy nhất trên đoạn chứa điểm x
0
.
Ta lấy tích phân y

= f(x, y) từ x
n
đến x
n+1
= x
n
+ h:

x
n+1
x
n
y

(x)dx = y(x
n+1
) − y (x

n
) =

x
n+1
x
n
f(x, y(x))dx.
Ta thay f(x, y(x)) bởi đa thức nội suy (interpolation polynomical) p(x), để ta đi
tính tích phân, điều này cho kết quả xấp xĩ y
n+1
của y(x
n+1
) và y
n
của y(x
n
)
y
n+1
= y
n
+

x
n+1
x
n
p(x)dx (2.2)
Chọn các giá trị khác nhau của p(x) sẽ tạo ra các phương pháp khác nhau. Ta giải

thích các nguyên lý bằng cách dùng đa thức bậc ba, kí hiệu p
3
(x) tại các điểm cách
đều x
n
, x
n−1
, x
n−2
, x
n−3
có giá trị lần lượt
f
n
= f(x
n
, y
n
), f
n−1
= f(x
n−1
, y
n−1
),
15
f
n−2
= f(x
n−2

, y
n−2
), f
n−3
= f(x
n−3
, y
n−3
). (2.3)
Điều này sẽ đưa ra các biểu thức tốt. Ta có thể tính được p
3
(x) từ biểu thức Newton.
p
3
(x) = f
n
+ r∇f
n
+
1
2
r(r + 1)∇
2
f
n
+
1
6
r(r + 1)(r + 2)∇
3

f
n
với r = (x − x
n
)/h. Ta lấy tích phân p
3
(x) theo x từ x
n
đến x
n+1
= x
n
+ h, vì vậy
theo r từ 0 đến 1. Vì x = x
n
+ hr nên dx = hdr. Tích phân của
1
2
r(r + 1) là
5
12

của
1
6
r(r + 1)(r + 2) là
3
8
. Vì vậy ta đạt được:


x
n+1
x
n
p
3
dx = h

1
0
P
3
dr = h

f
n
+
1
2
∇f
n
+
5
12

2
f
n
+
3

8

3
f
n

(2.4)
Ta biết rằng
∇f
n
= f
n
− f
n−1

2
f
n
= f
n
− 2f
n−1
+ f
n−2

3
f
n
= f
n

− 3f
n−1
+ 3f
n−2
− f
n−3
.
Thế vào (2.4) và gom các số hạng lại ta thư được biểu thức nhiều bước của Phương
pháp Adams - Bashforth bậc bốn:
y
n+1
= y
n
+
h
24
(55f
n
− 59f
n−1
+ 37f
n−2
− 9f
n−3
) (2.5)
Biểu thức này diễn tả giá trị mới y
n+1
[xấp xĩ nghiệm y của (2.1) tại x
n+1
] trong

các số của bốn giá trị của f được tính từ giá trị của y đạt được trong thứ tự bốn
bước. Sai số bộ phận là số h
5
, có thể được biểu diễn để sai số toàn phần là số h
4
; vì
vậy (2.5) được định nghĩa là phương pháp bậc bốn.
2.2 Các phương pháp Adams - Moulton
Các phương pháp này đạt được nếu cho p(x) trong (2.2) chọn đa thức nội suy
f(x, y(x)) tại x
n+1
, x
n
, x
n−1
, ··· (trái với x
n
, x
n−1
, ··· đã được dùng trước đó, đây
là các điểm chính). Ta giải thích quy luật cho đa thức bậc ba p
3
(x) nội suy tại các
điểm x
n+1
, x
n
, x
n−1
, x

n−2
. (Trước đây ta đã có tại các điểm x
n
, x
n−1
, x
n−2
, x
n−3
. Ta
tính đa thức nội suy nhưng lúc này ta thay r = (x − x
n+1
h), ta được
p
3
(x) = f
n+1
+ r∇f
n+1
+
1
2
r(r + 1)∇
2
f
n+1
+
1
6
r(r + 1)(r + 2)∇

3
f
n+1
.
Ta lấy tích phân theo x từ x
n
đến x
n+1
như trước. Như vậy, r tương ứng từ −1 đến
0. Ta được

x
n+1
x
n
p
3
(x)dx = h

f
n+1

1
2
∇f
n+1

1
12


2
f
n+1

1
24

3
f
n+1

.
16
Ta cũng có biểu thức
y
n+1
= y
n
+

x
n+1
x
n
p
3
(x)dx = y
n
+
h

24
(9f
n+1
+ 19f
n
− 5f
n−1
+ f
n−2
) (2.6)
Biểu thức trên thường được gọi là biểu thức Adams - Moulton. Nó là một đa
thức ẩn vì f
n+1
= f(x
n+1
, y
n+1
) xuất hiện ở vế phải, vì vậy nó định nghĩa y
n+1
chỉ
là ẩn, khác với (2.5), đó là biểu thức ẩn không báo hàm y
n+1
ở vế phải. Để dùng
(2.6) ta tiên đoán một giá trị y

n+1
, chẳng hạn dùng (2.5) là
y

n+1

= y
n
+
h
24
(55f
n
− 59f
n−1
+ 37f
n−2
− 9f
n−3
) (2.7)
Giá trị đúng mới y
n+1
đạt được từ (2.6) với f
n+1
được thay bằng f

n+1
= f(x
n+1
, y

n+1
)
vì vậy đạt được giá trị như sau:
y
n+1

= y
n
+
h
24
(9f

n+1
+ 19f
n
− 5f
n−1
+ f
n−2
) (2.8)
Phương pháp predictor - corrector (2.7), (2.8) này được gọi là phương pháp
Adams - Moulton bậc bốn Phương pháp này ta sữ dụng qua hao bước:
Bước (2.7) được gọi là predictor;
Hiệu chỉnh các giá trị y
n+1
trong (2.8) vừa tìm được bằng cách sữ dụng các
biểu thức ẩn, bước này gọi là corretor và có thể lặp lại nhiều lần cho đến khi kết
quả đạt độ chính xác như ý.
Ví dụ 2.1. Dùng tiên đoán Adams - Bashforth (2.7), và hiệu chỉnh Adams - Moultor
(2.8) để giải phương trình
y

= x + y, y(0) = 0 (2.9)
bằng (2.7) và (2.8) trên đoạn 0 ≤ x ≤ 2, chọn h = 0.2
Giải: Đây là bài toán giống như bài toán trong ví dụ 1.1-1.2 trong chương 1

nên ta có thể so sánh các kết quả. Ta tính các giá trị ban đầu y
1
, y
2
, y
3
bằng phương
pháp Runge - Kutta cỗ điển. Rồi trong mỗi bước ta tiên đoán bằng cách dùng (2.7)
và hiệu chỉnh bằng cách dùng (2.8) trước khi tiến hành các bước tiếp theo. Các kết
quả trong bảng 1.9 được biễu diển và so sánh với kết quả chính xác. Ta thấy rằng
tính chính xác được cải tiến, khảo sát chính xác.
Nhận xét về sự so sánh của các phương pháp . Biểu thức Adams - Moulton là chính
xác hơn biểu thức Adams - Bashforth cùng bậc. Phương pháp (2.7); (2.8) là phương
pháp số ổn định, trái lại ngoại trừ sữ dụng (2.7) có thể gây ra sự bất ổn định. Sự
điều chỉnh ở mỗi bước sẽ tương đối đơn giản. Nếu |Corrector −P redictor| > T OL,
dùng phép nội suy để phát sinh kết quả cũ tại một nữa tại bước hiện thời và thử
h/2 như bước mới. Phương pháp (2.7), (2.8) chỉ cần 2 giá trị cho mỗi bước, phương
pháp Runge - Kutta cần 4 giá trị; tuy nhiên phương pháp Runge - Kutta có thể có
số bước lớn hơn hai rất lớn.
17
Chương 3
Phương pháp cho hệ phương trình
và các phương trình bậc cao
Ta xét hệ phương trình vi phân cấp một có điều kiện đầu sau:
y

= f(x, y), y(x
0
) = y
0

, (3.1)
như vậy
y

1
= f
1
(x, y
1
, ··· , y
m
)
y

2
= f
2
(x, y
1
, ··· , y
m
)

y

m
= f
m
(x, y
1

, ··· , y
m
)
Giả sữ f là bài toán có duy nhất nghiệm theo x trên đoạn chứa x
0
. Hệ phương trình
(3.1) gồm các phương trình vi phân cấp m
y
(m)
= f(x, y, y

, y

, ··· , y
(m−1)
) (3.2)
và điều kiện đầu tương ứng là y(x
0
) = K
1
, y

(x
0
) = K
2
, ··· , y
(m−1)
= K
m

Ta có thể
đặt:
y
1
= y, y
2
= y

, y
3
= y

, ··· , y
m
= y
(m−1)
(3.3)
Thì ta đạt được
y

1
= y
2
, y

2
= y
3
, ··· , y


m−1
= y
m
, y

m
= f(x, y
1
, ··· , y
m
). (3.4)
và điều kiện đầu y
1
(x
0
) = K
1
, y
2
(x
0
) = K
2
, ··· , y
m
(x
0
) = K
m
.

3.1 Phương pháp Euler cho hệ phương trình
Các phương pháp cho phương trình vi phân bậc nhất đơn giản có thể được mở
rộng cho hệ phương trình (3.1) bằng cách viết dưới dạng vectơ hàm y và f thay cho
các hàm y và f trước đây, ở đấy x là một đại lượng vô hướng.
18
Ví dụ 3.1. Phương pháp Euler cho phương trình vi phấn cấp hai. Hệ khối lượng -
lò xo. Giải bài toán tắt dần cho hệ khối lượng - lò xo
y

+ 2y

+ 0.75y = 0, y(0) = 3, y

(0) = −2.5
bằng cách dùng phương pháp Euler cho hệ thống với bước nhãy h = 0.2 và x từ 0
đến 1.
Giải: Phương pháp Euler (1.3) ở chương 1 khái quát hoá cho hệ thống
y
n+1
= y
n
+ hf(x
n
, y
n
). (3.5)
với các thành phần
y
1,n+1
= y

1,n
+ hf
1
(x
n
, y
1,n
, y
2,n
)
y
2,n+1
= y
2,n
+ hf
2
(x
n
, y
1,n
, y
2,n
)
và tương tự cho hệ phương trình nhiều hơn hai phương trình. Dựa vào (3.4) các
phương trình đã cho chuyển đổi thành hệ
y

1
= f
1

(x, y
1
, y
2
) = y
2
y

2
= f
2
(x, y
1
, y
2
) = −2y
2
− 0.75y
1
Do đó (3.5) trở thành
y
1,n+1
= y
1,n
+ 0.2y
2,n
y
2,n+1
= y
2,n

+ 0.2(−2y
2,n
− 0.75y
1,n
)
Các điều kiện đầu là y(0) = y
1
(0) = 3, y

(0) = y
2
(0) = −2.5 các tính toán được trình
bày trong bảng 3.1. Như các phương pháp đơn giãn, các kết quả sẽ không đủ chính
xác cho mục đích tính toán. Tất nhiên ví dụ chỉ là để minh hoạ cho phương pháp
còn bài toán này ta có thể giải được nghiệm một cách chính xác
y = y
1
= 2e
−0.5x
+ e
−1.5x
, y

= y
2
= −e
−0.5x
− 1.5e
−1.5x
y

1
Sai số y
2
Sai số
n x
n
y
1,n
chính xác 
1
= y
1
− y
1,n
y
2,n
chính xác 
2
= y
2
− y
2,n
0 0.0 3.00000 3.00000 0.00000 -2.50000 -2.50000 0.00000
1 0.2 2.50000 2.55049 0.05049 -1.95000 -2.01606 -0.06606
2 0.4 2.11000 2.18627 0.76270 -1.54500 -1.64195 -0.09695
3 0.6 1.80100 1.88821 0.08721 -1.24350 -1.35067 -0.10717
4 0.8 1.55230 1.64183 0.08953 -1.01625 -1.12211 -0.10586
5 1.0 1.34905 1.43619 0.08714 -0.84260 -0.94123 -0.09863
Bảng 3.1. Phương pháp Euler cho ví dụ 3.1
19

3.2 Các phương pháp Runge - Kutta cho hệ phương
trình
Được dùng cho hệ phương trình (3.1) bằng cách viết dưới dạng vectơ, thành
phần m cho m = 1 ép buộc các biểu thức vô hướng trước. Từ phương pháp Runge
- Kutta cổ điển bậc bốn trong bảng 1.4 ta được
y(x
0
) = y
0
, giá trị đầu (3.6)
và cho n = 0, 1, ··· , N − 1 (N số các bước), ta đạt được các tính chất phụ trợ sau
k
1
= hf(x
n
, y
n
), k
2
= hf(x
n
+
1
2
h, y
n
+
1
2
k

1
),
k
3
= hf(x
n
+
1
2
h, y
n
+
1
2
k
2
), k
4
= hf(x
n
+ h, y
n
+ k
3
) (3.7)
và giá trị mới [xấp xĩ của nghiệm y(x) tại x
n+1
= x
0
+ (n + 1)h]

y
n+1
= y
n
+
1
6
(k
1
+ 2k
2
+ 2k
3
+ k
4
) (3.8)
Ví dụ 3.2. Phương pháp Runge - Kutta cho hệ phương trình. Phương
trình Airy. Hàm Airy Ai(x)
Giải bài toán sau
y

= xy, y(0) =
1
3
2/3
Γ(2/3)
= 0.35502805, y

(0) = −
1

3
1/3
Γ(1/3)
= −0.25881940
bằng phương pháp Runge - Kutta cho hệ phương trình với h = 0.2, làm 5 bước. Đây
là phương trình Airy, được phát sinh trong quang học. Γ là hàm gamma. Điều kiện
đầu đạt được trong điều kiện chuẩn, các hàm Ai(x) đã được liệt kê và khảo sát.
Giải: Cho y

= xy, đặt y
1
= y, y
2
= y

1
= y

, ta được từ hệ (3.4)
y

1
= y
2
, y

2
= xy
1
.

ở đây f = [f
1
f
2
]
T
trong (3.1) có các thành phần
f
1
(x, y) = y
2
, f
2
(x, y) = xy
1
Ta viết các thành phần (??). Điều kiện đầu (3.6) là y
1,0
= 0.35508805, y
2,0
=
−0.25881940. Ta có thể viết
k
1
= a, k
2
= b, k
3
= c, k
4
= d

để a = [ a
1
a
2
]
T
rồi (3.7) có dạng
a = h

y
2,n
x
n
y
1,n

b = h

y
2,n
+
1
2
a
2
(x
n
+
1
2

h)(y
1,n
+
1
2
a
1
)

20
c = h

y
2,n
+
1
2
b
2
(x
n
+
1
2
h)(y
1,n
+
1
2
b

1
)

(3.9)
d = h

y
2,n
+ c
2
(x
n
+ h)(y
1,n
+ c
1
)

Chẳng hạn, thành phần thứ hai của b đạt được như theo sau, f (x, y) có thành phần
thứ hai f
2
(x, y) = xy
1
. Trong b(= k
2
) số thứ nhất là x = x
n
+
1
2

h. Số thứ hai
trong b là y = y
n
+
1
2
a và thành phần đầu tiên là y
1
= y
1,n
+
1
2
a
1
. Cùng với,
xy
1
= (x
n
+
1
2
h)(y
1,n
+
1
2
a
1

). Tương tự tính được các thành phần khác trong (3.9).
Cuối cùng
y
n+1
= y
n
+
1
6
(a + 2b + 2c + d) (3.10)
Bảng 3.2 diễn tả các giá trị y(x) = y
1
(x) của hàm Airy Ai(x) và đạo hàm của nó
là y

(x) = y
2
(x) cũng như sai số của y(x).
n x
n
y
1,n
(x
n
) y
1
(x
n
) chính xác 10
8

× sai số của y
1
y
2,n
(x
n
)
0 0.0 0.35502 805 0.35502 805 0 -0.25881 940
1 0.2 0.30370 303 0.30370 315 12 -0.25240 464
2 0.4 0.25474 211 0.25474 235 24 -0.23583 073
3 0.6 0.20979 973 0.20980 006 33 -0.21279 185
4 0.8 0.16984 596 0.16984 632 36 -0.18641 171
5 1.0 0.13529 207 0.13529 242 35 -0.15914 687
Bảng 3.2. Phương pháp Runge - Kutta cho hệ phương trình: Các giá trị y
1,n
(x
n
)
của hàm Airy Ai(x) trong ví dụ 3.2
3.3 Phương pháp Runge - Kutta - Nystr¨om (phương
pháp RKN)
Phương pháp RKN là mở rộng trực tiếp phương pháp RK(phương pháp Runge
- Kutta) cho phương trình vi phân cấp hai y

= f(x, y, y

) như đã cho bằng phép
toán E. J. Nystr¨om. Đa thức tốt nhất được biết, ở đây n = 0, 1, ··· , N − 1 (N là
số bước nhảy). Các biểu thức dưới với K =
1

2
h(y

n
+
1
2
k
1
), L = h(y

n
+ k
3
)
k
1
=
1
2
hf(x
n
, y
n
, y

n
)
k
2

=
1
2
hf(x
n
+
1
2
h, y
n
+ K, y

n
+ k
1
)
k
3
=
1
2
hf(x
n
+
1
2
h, y
n
+ K, y


n
+ k
2
) (3.11)
k
4
=
1
2
hf(x
n
+ h, y
n
+ L, y

n
+ 2k
3
)
21
Từ các vấn đề trên ta tính xấp xĩ y
n+1
của y(x
n+1
) tại x
n+1
= x
0
+ (n + 1)h.
y

n+1
= y
n
+ h[y

n
+
1
3
(k
1
+ k
2
+ k
3
)] (3.12)
và xấp xĩ y

n+1
của đạo hàm y

(x
n+1
) trong bước tiếp theo
y

n+1
= y

n

+
1
3
(k
1
+ 2k
2
+ 2k
3
+ k
4
) (3.13)
Đây là phương pháp đặc biệt thuận tiện cho y

= f(x, y) với f không chứa y

vì vậy
k
2
= k
3
và số các hàm được giảm. Tóm lại
k
1
=
1
2
hf(x
n
, y

n
)
k
2
= k
3
=
1
2
hf(x
n
+
1
2
h, y
n
+
1
2
h(y

n
+
1
2
k
1
)) (3.14)
k
4

=
1
2
hf(x
n
+ h, y
n
+ h(y

n
+ k
2
))
y
n+1
= y
n
+ h[y

n
+
1
2
(k
1
+ 2k
2
)]
y


n+1
=
y

n
+
1
2
(
k
1
+ 4
k
2
+
k
4
)
Ví dụ 3.3. Phương pháp Runge - Kutta - Nystr¨om. Phương trình Airy.
Hàm Airy Ai(x)
Với bài toán trong ví dụ 3.2 và h = 0.2 như trước ta đạt được từ (3.14) đơn giản
như sau k
1
= 0.1x
n
y
n
và k
2
= k

3
= 0.1(x
n
+ 0.1)(y
n
+ 0.1y

n
+ 0.05k
1
), k
4
=
0.1(x
n
+ 0.2)(y
n
+ 0.2y

n
+ 0.2k
2
)
Bảng 3.3 diễn tả các kết quả. Chính xác như ví dụ 3.2 nhưng các bước làm
thì ít hơn.
x
n
y
n
y


n
y(x) chính xác 10
8
× sai số của y
n
0.0 0.355 028 05 -0.258 819 40 0.355 028 05 0
0.2 0.303 703 04 -0.252 404 64 0.303 703 15 11
0.4 0.254 742 11 -0.235 830 70 0.254 742 35 24
0.6 0.209 799 74 -0.212 791 72 0.209 800 06 32
0.8 0.169 845 99 -0.186 411 34 0.169 846 32 33
1.0 0.135 292 18 -0.159 146 09 0.135 292 42 44
Bảng 3.3. Phương pháp Runge - Kutta - Nystr¨om áp dụng cho phương trình Airy,
tính toán của hàm Airy y = Ai(x)
22
Chương 4
PHƯƠNG PHÁP CHO CÁC
PHƯƠNG TRÌNH VI PHÂN
ĐẠO HÀM RIÊNG
Các phương trình vi phân đạo hàm riêng đặc biệt là phương trình Laplace,
phương trình Poisson, phương trình truyền nhiệt và phương trình sóng có cơ sở là
sự phụ thuộc theo thời gian theo các kiểu khác nhau. Các kiểu đó được phân thành
phương trình kiểu elip, phương trình kiểu hypebol và phương trình kiểu parabol.
Chúng được định nghĩa như dưới đây.
Phương trình vi phân đạo hàm riêng được gọi là chuẩn tuyến tính nếu nó tuyến
tính trong đạo hàm cao nhất. Với phương trình chuẩn tuyến tính bậc hai với hai
biến độc lập x, y có thể được viết
au
xx
+ 2bu

xy
+ cu
yy
= F (x, y, u, u
x
, u
y
) (4.1)
u là hàm chưa biết. Các phương trình này được gọi là
• Kiểu elip nếu ac − b
2
≥ 0 Chẳng hạn: Phương trình Laplace
• Kiểu parabol nếu ac − b
2
= 0 Chẳng hạn: Phương trình nhiệt
• Kiểu hyperbol nếu ac − b
2
≤ 0 Chẳng hạn: Phương trình sóng
(với phương trình sóng và phương trình nhiệt, y là thời gian t). Các hệ số a, b, c có
thể là các hàm của x, y, vì vậy các kiểu của (4.1) có thể khác nhau trong các miền
khác nhau của mặt phẳng xy. Sự phân loại này không chỉ là đúng các quy cách vật
chất nhưng lại thuận lợi cho việc tính toán bởi vì cách giải chung của từng loại khác
nhau là khác nhau nên ta thêm các điều kiện (điều kiện biên và điều kiện đầu) mà
ta quan tâm đến.
áp dụng việc giải các phương trình elip thường dẫn đến các vấn đề về các bài
toán giá trị biên trong miền R, gọi là bài toán giá trị biên thứ nhất hay bài toán
23
Dirichlet nếu u được chỉ định trên đường biên C của R, bài toán giá trị biên thứ
hai hay bài toán Neumann nếu u
n

=
∂u
∂n
(đạo hàm riêng của u) được quy định trên
C và bài toán thứ ba hay bài toán hỗn hợp nếu u được đặt ra trên một phần của C
và u
n
trên phần còn lại. C là đường cong đóng (hay chứa hai hay nhiều đường).
4.1 Các phương pháp cho các phương trình vi
phân kiểu Elip
4.1.1 Các phương trình vi phân cho phương trình Laplace
và phương trình Poisson
Phương trình Laplace là

2
u = u
xx
+ u
yy
= 0 (4.2)
Phương trình Poisson

2
u = u
xx
+ u
yy
= f(x, y) (4.3)
Các phương trình này là các phương trình elip quan trọng nhất trong áp dụng.
Để đạt được các phương pháp của lời giải số, ta thay đạo hàm riêng tương ứng bằng

những thương số khác nhau, bằng đa thức Taylor
u(x + h, y) = u(x, y) + hu
x
(x, y) +
1
2
h
2
u
xx
(x, y) +
1
6
h
3
u
xxx
(x, y) + ··· (4.4a)
u(x − h, y) = u(x, y) −hu
x
(x, y) +
1
2
h
2
u
xx
(x, y) −
1
2

h
3
u
xxx
(x, y) + ··· (4.4b)
Lấy (4.4a) trừ cho (4.4b), bỏ các số hạng chứa h
3
, h
4
, |cdots và tính u
x
thì ta được
u
x
(x, y) ≈
1
2h
[u(x + h, y) −u(x − h, y)]. (4.5)
Tương tự,
u(x, y + k) = u(x, y) + ku
y
(x, y) +
1
2
k
2
u
yy
(x, y) + ···
u(x, y −k) = u(x, y) −ku

y
(x, y) +
1
2
k
2
u
yy
(x, y) + ···
Bằng cách trừ vế theo vế, loại bỏ các số hạng chứa k
3
, k
4
, ···, và tính u
y
ta được
u
y
(x, y) ≈
1
2k
[u(x, y + k) −u(x, y − k)]. (4.6)
24
Ta đưa ra các đạo hàm cấp hai. Thêm vào (4.4a) và (4.4b) và lược bỏ các số hạng
chứa h
4
, h
5
, cdots ta được
u(x + h, y) + u(x − h, y) ≈ 2u(x, y) + h

2
u
xx
(x, y).
Ta tính được
u
xx
(x, y) ≈
1
h
2
[u(x + h, y) −2u(x, y) + u(x −h, y)]. (4.7)
Tương tự
u
yy
(x, y) =
1
k
2
[u(x, y + k) −u(x, y − k)]. (4.8)
u
xy
(x, y) ≈
1
4hk
[u(x + h, y + k) − u(x − h, y + k)
− u(x + h, y − k) + u(x − h, y −k)]. (4.9)
Hình 3 diễn tả các điểm (x + h, y), (x − h, y), cdots trong (4.5), (4.6), (4.7), (4.8),
(4.9).
Hình 3: Các điểm trong (4.5), (4.6), (4.7), (4.8), (4.9).

Ta thế (4.7) và (4.8) vào phương trình Poisson (4.3), chọn k = h để đạt được biểu
thức đơn giản
u(x + h, y) + u(x, y + h) + u(x − h, y) + u(x, y −h) − 4u(x, y) = h
2
f(x, y). (4.10)
Đây là phương trình sai phân tương ứng với (4.3). Còn đối với phương trình
Laplace (4.2) thì phương trình sai phân tương ứng là
u(x + h, y) + u( x, y + h) + u(x − h, y) + u(x, y −h) − 4u(x, y) = 0 (4.11)
h gọi là kích thước lưới (mesh size). Phương trình (4.11) liên hệ u tại (x, y) với u
tại bốn điểm trong hình 4. Để tiện lợi thì bốn điểm đó ta gọi là E (đông), N (bắc),
25
W (tây) và S (nam). Và hình nó sẽ chuyển thành hình bên cạnh và phương trình
(4.10) trở thành
u(E) + u(N) + u(W ) + u(S) − 4u(x, y) = h
2
f(x, y) (4.12)
Xấp xĩ của h
2

2
u trong (4.10) và (4.11) là 5 điểm xấp xĩ với sơ đồ hệ số hay mẫu



1
1 −4 1
1




(4.13)
Hình 4: Các điểm trong phương trình (4.10) và (4.11) và các điểm đã chuyển đổi
cho tiện
Như vậy phương trình (4.10) có thể viết thu gọn như sau



1
1 −4 1
1



u = h
2
f(x, y)
Chú ý rằng (4.11) làm nổi bật u tại (x, y) bằng trung bình của các giá trị của u tại
bốn điểm lân cận. Đây là mô phỏng tính chất trung bình của hàm điều hoà.
4.1.2 Bài toán Dirichlet
Trong nghiệm số của bài toán Dirichlet trong miền R, trước tiên ta chọn h và
đưa vào trong R một lưới gồm các đường nằm ngang và các đường thẳng đứng cách
đều cách nhau một khoảng h. Các điểm giao nhau của chúng gọi là các mắt lưới
(mesh point). Xem hình 5. Rồi ta dùng phương trình sai phân xấp xỉ phương trình
vi phân đạo hàm riêng - dạng (4.11) trong trường hợp của phương trình Laplace -
với các giá trị chưa biết của u tại các mắt lưới trong R đến các điểm khác và các

×