You are on page 1of 83

ĐẠI HỌC ĐÀ NẴNG

TRƯỜNG ĐẠI HỌC SƯ PHẠM


KHOA TOÁN

Nguyễn Thị Tuyết

SỬ DỤNG MỘT CẶP PHƯƠNG PHÁP ADAMS

ĐỂ GIẢI SỐ PHƯƠNG TRÌNH VI PHÂN

KHÓA LUẬN TỐT NGHIỆP


Ngành: Sư phạm Toán

Người hướng dẫn: ThS. Nguyễn Hoàng Thành

Đà Nẵng - 2012
Mục lục

1 Kiến thức chuẩn bị 6


1.1 Bài toán Cauchy . . . . . . . . . . . . . . . . . . . . . . . 6
1.1.1 Bài toán . . . . . . . . . . . . . . . . . . . . . . . 6
1.1.2 Tiếp cận cách giải số bài toán Cauchy . . . . . . . 6
1.2 Định lý tồn tại duy nhất nghiệm . . . . . . . . . . . . . . 7
1.3 Giới thiệu phương pháp số giải phương trình vi phân . . . 10
1.4 Cấp chính xác của một phương pháp số . . . . . . . . . . 13
1.5 Tính phù hợp . . . . . . . . . . . . . . . . . . . . . . . . 14
1.6 Tính zero - ổn định . . . . . . . . . . . . . . . . . . . . . 15
1.7 Sự hội tụ của phương pháp số . . . . . . . . . . . . . . . 15
1.8 Đa thức nội suy Newton . . . . . . . . . . . . . . . . . . 17
1.8.1 Sai phân và một số tính chất . . . . . . . . . . . . 17
1.8.2 Đa thức nội suy cuối bảng với mốc cách đều . . . . 19
1.9 Phương trình Riccati . . . . . . . . . . . . . . . . . . . . 21
1.9.1 Dạng chính tắc của phương trình Riccati . . . . . 21
1.9.2 Một số tính chất của phương trình Riccati . . . . . 21
1.10 Phương pháp lặp đơn giải phương trình đại số và siêu việt 23
1.11 Phương pháp Runge - Kutta . . . . . . . . . . . . . . . . 24

2 Các phương pháp số Adams - Bashforth, Adams - Moul-


ton 27
2.1 Phương pháp tuyến tính đa bước . . . . . . . . . . . . . . 27

−1−
2.1.1 Cấp chính xác của phương pháp tuyến tính đa bước 28
2.1.2 Tính phù hợp . . . . . . . . . . . . . . . . . . . . 29
2.1.3 Tính zero - ổn định . . . . . . . . . . . . . . . . . 29
2.1.4 Sự hội tụ của phương pháp tuyến tính k bước . . . 30
2.2 Công thức Adams - Bashforth . . . . . . . . . . . . . . . 30
2.2.1 Xây dựng công thức . . . . . . . . . . . . . . . . . 30
2.2.2 Một vài phương pháp Adams - Bashforth . . . . . 32
2.2.3 Các phương pháp Adams - Bashforth bậc cao . . . 36
2.3 Công thức Adams - Moulton . . . . . . . . . . . . . . . . 40
2.3.1 Xây dựng công thức . . . . . . . . . . . . . . . . . 40
2.3.2 Một vài công thức Adams - Moulton . . . . . . . . 42
2.3.3 Các phương pháp Adams - Moulton bậc cao . . . . 44

3 Sử dụng kết hợp các phương pháp Adams để giải số phương


trình vi phân 49
3.1 Kết hợp phương pháp Adams - Bashforth 2 bước và phương
pháp Adams - Moulton 2 bước để giải số phương trình vi
phân . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
3.1.1 Thuật toán . . . . . . . . . . . . . . . . . . . . . . 49
3.1.2 Áp dụng giải một số ví dụ . . . . . . . . . . . . . 50
3.2 Kết hợp phương pháp Adams - Bashforth 3 bước và phương
pháp Adams - Moulton 3 bước để giải số phương trình vi
phân . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
3.2.1 Thuật toán . . . . . . . . . . . . . . . . . . . . . . 61
3.2.2 Áp dụng giải một số ví dụ . . . . . . . . . . . . . 62

Phụ lục 73

Tài liệu tham khảo 81

−2−
LỜI CẢM ƠN

Em xin bày tỏ lòng biết ơn sâu sắc tới thầy Nguyễn Hoàng Thành,
người đã giới thiệu đề tài, cung cấp tài liệu và tận tình hướng dẫn em
trong suốt quá trình thực hiện khóa luận. Em xin chân thành cảm ơn
thầy Tôn Thất Tú đã giúp đỡ em cách cài đặt và sử dụng Latex, cách lập
trình Maple ứng dụng giải số phương trình vi phân.
Em cũng xin bày tỏ lòng biết ơn chân thành tới toàn thể các thầy cô
giáo trong khoa Toán, trường Đại học Sư phạm, Đại học Đà Nẵng đã
cho em những kiến thức toán học bổ ích trong suốt quá trình học tập tại
trường.
Nhân dịp này em cũng xin được gửi lời cảm ơn chân thành tới gia
đình, bạn bè đã luôn bên em, cổ vũ, động viên, giúp đỡ em trong suốt
quá trình học tập và thực hiện khóa luận tốt nghiệp.

Đà Nẵng, ngày 22 tháng 05 năm 2012


Sinh viên

Nguyễn Thị Tuyết

−3−
LỜI MỞ ĐẦU

Phương trình vi phân là mô hình mô tả khá tốt các qui luật trong tự
nhiên và kỹ thuật. Để nghiên cứu phương trình vi phân, người ta thường
tiếp cận theo hai hướng là nghiên cứu định tính và giải số.
Mặc dù đã có lịch sử phát triển hàng trăm năm, do còn có nhiều bài
toán thuộc lĩnh vực khoa học kỹ thuật quy về việc tìm nghiệm của phương
trình vi phân, giải số phương trình vi phân thường vẫn thu hút sự quan
tâm mạnh mẽ của các nhà toán học và các nhà nghiên cứu ứng dụng.
Trong giải số phương trình vi phân, người ta thường cố gắng tìm ra
những phương pháp hữu hiệu bảo đảm sự hội tụ, tính ổn định và tính
chính xác cao. Để làm được điều này người ta thường tổ hợp các phương
pháp đa bước để nhận được các phương pháp mới đảm bảo độ chính xác
cao hơn. Phương pháp đa bước hiện ( yn+1 tính được tường minh thông
qua yn , yn−1 , . . . ) dùng để dự báo (predict ) nghiệm. Phương pháp đa
bước ẩn ( yn+1 tính được bằng cách giải một phương trình phi tuyến
yn+1 = ϕ (yn+1 )) cho lượng hiệu chỉnh nghiệm (corrector). Từ đó có tên
gọi phương pháp dự báo- hiệu chỉnh (predict- corrector viết tắt là P-C).
Trong luận văn này em sẽ sử dụng một cặp phương pháp Adams gồm
phương pháp Adams-Bashforth và phương pháp Adams-Moulton, làm
một cặp phương pháp dự báo- hiệu chỉnh để giải số phương trình vi phân
nhằm tăng độ chính xác của nghiệm.
Bố cục của khóa luận bao gồm ba chương và một phụ lục

• Chương 1 của khóa luận trình bày những khái niệm cơ bản của
phương pháp số giải phương trình vi phân và các kiến thức liên
quan.

• Chương 2 của khóa luận tập trung trình bày cặp phương pháp tuyến
tính đa bước sử dụng làm cặp phương pháp dự báo- hiệu chỉnh là

−4−
phương pháp Adams-Bashforth và phương pháp Adams-Moulton.

• Chương 3 tập trung trình bày ý tưởng, thuật toán sử dụng cặp
phương pháp dự báo- hiệu chỉnh trên để giải số phương trình vi
phân.Cuối chương có sử dụng phần mềm Maple vào giải số một số
ví dụ cụ thể và minh họa bằng hình vẽ.

• Phụ lục trình bày một số đoạn code bằng Maple để giải phương trình
vi phân.

Do thời gian thực hiện khóa luận không nhiều, kiến thức còn hạn chế nên
khi làm khóa luận không tránh khỏi những sai sót. Em rất mong nhận
được sự góp ý và những ý kiến phản biện của quý thầy cô và các bạn.
Xin chân thành cảm ơn!

Đà Nẵng, ngày 22 tháng 05 năm 2012


Sinh viên

Nguyễn Thị Tuyết

−5−
Chương 1

Kiến thức chuẩn bị

1.1 Bài toán Cauchy

1.1.1 Bài toán

Cho hàm số y : [a, b] → Rn và hàm số f: [a, b] × Rn → Rn


Tìm nghiệm y(x) thỏa mãn điều kiện



 y 0 = f (x, y)

  

y (a)
 1


 
 y (a)
 2
 (1.1)
y (a) = η = 
 
 


  ......... 

  
yn (a)

1.1.2 Tiếp cận cách giải số bài toán Cauchy

Chia [a, b] thành N phần bằng nhau bởi các điểm chia

a = x0 < x1 < x2 < ... < xN = b


b−a
suy ra: xi = ai + ih với h =
N
Giả sử y(x) là nghệm của bài toán (1.1), kí hiệu yn ' y (xn ).

−6−
Mục đích của ta là tìm một phương pháp hữu hiệu để tính dãy giá trị
xấp xỉ {yn }N N
n=0 nghiệm của bài toán (1.1) trên tập rời rạc {xn }n=0

1.2 Định lý tồn tại duy nhất nghiệm

Định nghĩa 1.1. Cho hàm f(x,y) xác định trên miền D ⊂ R2 . Ta nói f
thỏa điều kiện Lipschitz theo biến y trên D nếu tồn tại hằng số dương L
(gọi là hằng số Lipschitz) sao cho

|f (x, y1 ) − f (x, y2 )| ≤ L |y1 − y2 | ; ∀ (x, y1 ) , (x, y2 ) ∈ D

Nhận xét 1.1. Điều kiện Lipschitz là mạnh hơn so với điều kiện giới
∂f
nội của đạo hàm riêng trên D.
∂y

∂f ∂f
Thật vậy, giả sử liên tục và ≤ L khi đó áp dụng định lý
∂y ∂y
Lagrange cho hàm f(x,y) theo biến y ta được
∂f
f (x, y1 ) − f (x, y2 ) = (y1 − y2 ) [x, y1 + θ (y2 − y1 )]
∂y

từ đó suy ra điều kiện Lipschitz.

Định lý 1.1. (Xem[13]) Giả sử hàm số f(x,y) trong bài toán Cauchy liên
tục và thỏa mãn điều kiện Lipschitz theo biến y trên hình chữ nhật
( )

D = (x, y) ∈ R2 |x − x0 | ≤ a; |y − y0 | ≤ b

Khi đó nghiệm của bài toán Cauchy  là tồn


 tại và duy nhất trong đoạn
b
I := [x0 − h; x0 + h] với h := min a, và M := max |f (x, y)|.
M (x,y)∈D

−7−
Chứng minh. Giả sử y(x) là nghiệm của bài toán Cauchy, tích phân 2 vế
của phương trình y 0 (x) = f (x, y) ta được phương trình tích phân đối
với y(x) là

Zx
y (x) = y0 + f (t, y (t)) dt
x0

Ta chứng minh hai bước là sự tồn tại nghiệm và tính duy nhất.
* Sự tồn tại
Ta chứng minh rằng phép lặp Picard hội tụ đều trên I đến một nghiệm
của bài toán Cauchy.
Trước tiên ta chứng minh bằng quy nạp rằng

k |x− x0 |k+1
|yk+1 (x) − yk (x)| ≤ M L ; ∀x ∈ I
(k + 1)!

Với k=0, bất đẳng thức trên chính là


x
Z

f (t, y0 (t)) dt ≤ M |x − x0 |


x0

bất đẳng thức này đúng.


Giả sử ta có điều đó với k-1, khi đó với x0 ≤ x ≤ x0 + h ta có
Zx

|yk+1 (x) − yk (x)| = [f (t, yk (t)) − f (t, yk−1 (t))] dt

x0
Zx
≤ |f (t, yk (t)) − f (t, yk−1 (t))|dt
x0
Zx
≤L |yk (t) − yk−1 (t)|dt
x0
Zx
k |x − x0 |k k |x − x0 |
k+1
≤ ML dt = M L
k! (k + 1)!
x0

−8−
Trường hợp x0 − h ≤ x ≤ x0 ta đánh giá tương tự.
Xét dãy hàm {yk (x)} trên I, ta có
|yk+p (x) − yk (x)| ≤ |yk+p (x) − yk+p−1 (x)| + |yk+p−1 (x) − yk+p−2 (x)|
+... + |yk+1 (x) − yk (x)|
( )
k+p k+1
M (L |x − x0 |) (L |x − x0 |)
≤ + ... +
L (k + p)! (k + 1)!
M X (L.h)j
≤ .
L j≥k+1 j!

X (L.h)j X (L.h)j
Chuỗi số là hội tụ cho nên có thể bé tùy ý khi k
j=0
j! j≥k+1
j!
đủ lớn. Theo tiêu chuẩn Cauchy, dãy {yk (x)} hội tụ đều trên I đến hàm
y(x). Để chứng minh y(x) là nghiệm ta chỉ cần qua giới hạn trong đẳng
thức
Zx
yk+1 (x) = y0 + f (t, yk (t)) dt
x0

Vì dãy hàm {yk (x)} hội tụ đều, f liên tục trên hình chữ nhật D nên dãy
hàm {f (t, yk (t))} hội tụ đều trên I đến hàm f (t, yk (t)). Do đó có thể
chuyển giới hạn qua dấu tích phân để được đẳng thức

Zx
y (x) = y0 + f (t, y (t)) dt
x0

Vậy y(x) chính là nghiệm của bài toán Cauchy.


* Tính duy nhất.
Giả sử bài toán Cauchy còn có nghiệm là z(x), khi đó ta có
Zx
y (x) − z (x) = [f (t, y (t)) − f (t, z (t))] dt
x0

−9−
suy ra
x
Z

|y (x) − z (x)| = [f (t, y (t)) − f (t, z (t))] ≤ 2M |x − x0 |

x0

từ đó

Rx Rx
|y (x) − z (x)| = [f (t, y (t)) − f (t, z (t))] ≤ L |y (t) − z (t)|dt

x0 x0
|x − x0 |2
≤ 2M L
2
Lặp lại quá trình trên, ta dễ dàng chứng minh được rằng với mọi số tự
nhiên k ta có

k |x − x0 |k+1
|y (x) − z (x)| ≤ 2M L ; ∀x ∈ I
(k + 1)!

cho k → +∞ ta có |y (x) − z (x)| = 0 trên I.


Như vậy, nghiệm y(x) là duy nhất.

1.3 Giới thiệu phương pháp số giải phương trình


vi phân

Nhiều bài toán khoa học kỹ thuật quy về việc tìm nghiệm phương
trình vi phân thỏa mãn một số điều kiện nào đó. Những phương pháp
giải đúng chỉ áp dụng được cho một lớp rất hẹp các phương trình vi
phân. Đa số các phương trình vi phân mô tả những hệ cơ học, lý học,
hóa học, sinh học còn phức tạp hơn rất nhiều và không có hy vọng giải
đúng buộc ta phải sử dụng phương pháp giải gần đúng. Người ta phân
biệt có hai loại phương pháp giải gần đúng là các phương pháp giải tích
và các phương pháp số.

− 10 −
Các phương pháp giải tích cho phép tìm nghiệm gần đúng dưới dạng
biểu thức, tuy nhiên miền áp dụng của chúng khá hẹp. Các phương pháp
giải tích thường dùng là phương pháp xấp xỉ Picard và phương pháp
chuỗi nguyên.
Các phương pháp số liên quan đến việc tính nghiệm trên một tập rời
rạc các điểm {xn }N n=0 của đoạn [a, b] được xác định bởi xn = a + nh,
b−a
n = 0, 1, 2, ..., N = . Tham số h được gọi là bước nhảy, nó được coi
h
như một hằng số, mặc dù nhiều thuật toán hiện đại có khả năng thay
đổi h bằng quá trình tính toán tự động. Chúng ta gọi {yn } là một lời giải
xấp xỉ của y (xn ) tại {xn } và đặt mục tiêu là để tìm ra một dãy các giá
trị {yn } của các điểm rời rạc {xn } như một trình tự tạo nên một lời giải
số cho bài toán Cauchy.
Một phương pháp số là một phương trình sai phân liên quan đến một số
liên tiếp xấp xỉ yn+1−i , i = 0, 1, 2, .., k từ đó ta sẽ tính toán theo tuần tự
dãy {yn } , n = 0, 1, 2, ..., N , phương trình sai phân này sẽ liên quan đến
yếu tố hàm f. Số nguyên k được gọi là số bước của phương pháp, nếu
k = 1 thì phương pháp được gọi là phương pháp một bước, khi k > 1
phương pháp được gọi là phương pháp nhiều bước hay k-bước.

Ví dụ 1.1.
 
h
yn+2 + yn+1 − 2yn = f (xn+2 , yn+2 ) + 8f (xn+1 , yn+1 ) + 3f (xn , yn )
4

Ví dụ 1.2.
 
h
yn+2 − yn+1 = 3f (xn+1 , yn+1 ) − 2f (xn , yn )
3

Ví dụ 1.3.
 
1 1 3 h
yn+3 + yn+2 − yn+1 − yn = 19f (xn+2 , yn+2 ) + 5f (xn , yn )
4 2 4 8

− 11 −
Ví dụ 1.4.


yn+2 − yn = h [f (xn+2 , yn+2 ) + f (xn , yn )]

trong đó
 
∗ h
yn+2 = 3yn+1 − 2yn = f (xn+1 , yn+1 ) − 3f (xn , yn )
2

Ví dụ 1.5.
h
yn+1 − yn = (k1 + 3k3 )
4
ở đây
k1 = f (xn , yn )
 
2 2
k3 = f xn + h, yn + hk2
3 3
Ví dụ 1.6.
h
yn+1 − yn = (k1 + k2 )
2
ở đây
k1 = f (xn , yn )
 
1 1
k2 = f xn + h, yn + hk1 + hk2
2 2
Rõ ràng ở ví dụ 1.5 và 1.6 là phương pháp một bước , đặt y0 = η dãy
{yn } có thể được tính toán một cách liên tiếp bởi tập hợp n = 0, 1, 2, ...
trong hằng số sai phân. Ví dụ 1.1, 1.2 và 1.4 là phương pháp 2 bước và nó
cần cung cấp 1 giá trị khởi đầu y1 trước khi dãy {yn } được tính. Trong
trường hợp ví dụ 1.3 là một phương pháp 3 bước, nó cần được cung cấp
2 giá trị ban đầu y1 và y2 . Tìm những giá trị ban đầu không có gì là khó
khăn và ta thường sử dụng các phương pháp một bước.
Một phương pháp số tổng quát thường có dạng
k
X
yn+1 = αj yn+1−j + hΦf (yn+1 , yn , ...yn+1−k , xn+1−k , h) (1.2)
j=1

− 12 −
(trong đó h là bước nhảy; k = 1 là phương pháp số một bước, k ≥ 2 là
phương pháp số đa bước.)
Nếu Φf không phụ thuộc vào yn+1 thì phương pháp (1.2) là phương pháp
hiển. Nếu Φf phụ thuộc vào yn+1 thì phương pháp số (1.2) là phương
pháp ẩn.

1.4 Cấp chính xác của một phương pháp số

Định lý 1.2. (Xem [13]) Phương pháp số (1.2) gọi là phương pháp có
cấp chính xác là p nếu

k
X
y(xn+1 ) − αj y (xn+1−j ) − hφf [y (xn+1 ) , ..., y (xn+1−k ) , xn+1−k , h] = 0(hp+1 )
j=1

(trong đó 0(hp+1 ) là vô cùng bé cùng bậc với hp+1 khi h → 0).

Ví dụ 1.7. Tính cấp chính xác của phương pháp Euler hiển
(
yn+1 = yn + hf (xn , yn )
y0 = y(x0 )

Ta có

y(xn+1 ) = y(xn + h) = y(xn ) + hy 0 (xn ) + 0(h2 )


⇒ y(xn+1 ) − y(xn ) = hy 0 (xn ) + 0(h2 )
⇒ y(xn+1 ) − y(xn ) − hf (xn , y(xn )) = 0(h2 )

Vậy phương pháp Euler hiển có cấp chính xác p = 1.

Ví dụ 1.8. Tính cấp chính xác của phương pháp Euler ẩn


 
h
yn+1 = yn + f (xn , yn ) + f (xn+1 , yn+1 )
2

− 13 −
Ta có
h
y(xn+1 ) − y(xn ) − [f (xn , y(xn )) + f (xn+1 , y(xn+1 ))]
2
h
= y(xn+1 ) − y(xn ) − [y 0 (xn ) + y 0 (xn+1 )]
2
h
= y(xn + h) − y(xn ) − [y 0 (xn ) + y 0 (xn + h)]
2
2
h
= y(xn ) + hy 0 (xn ) + y 00 (xn ) + 0(h3 ) − y(xn )
2
h 0
− [y (xn ) + y 0 (xn ) + hy 00 (xn ) + 0(h2 )] = 0(h3 )
2
Vậy phương pháp Euler ẩn có cấp chính xác p = 2.

1.5 Tính phù hợp

Đặt R(xn+1 ) =
k
X 
y(xn+1 ) − αj y (xn+1−j ) + hφf [y (xn+1 ) , ..., y (xn+1−k ) , xn+1−k , h]
j=1
là sai số chặt cụt.

Định nghĩa 1.2. (Xem [13]) Phương pháp số (1.2) gọi là phù hợp nếu

R (xn+1 )
lim =0
h→0 h
.

Hệ quả 1.1. Nếu phương pháp số (1.2) có cấp chính xác p ≥ 1 thì
phương pháp số (1.2) là phù hợp.

Định lý 1.3. (Xem [13]) Phương pháp số (1.2) phù hợp khi và chỉ khi


 ρ (1) = 0
φf (yn+1 , ..., yn+1−k , xn+1−k , 0)
 = f (xn+1−k , yn+1−k )
ρ0 (1)

− 14 −

 X k
1− αj = 0






 j=1
hay φ f (y n+1 , ..., yn+1−k , xn+1−k , 0)

 k
= f (xn+1−k , yn+1−k )
 X
k− (k − j) αj





j=1

k
(trong đó ρ(ξ) = ξ k − αj ξ k−j là đa thức đặc trưng thứ nhất của
P
j=1
phương pháp số (1.2) )

1.6 Tính zero - ổn định

Định nghĩa 1.3. Đa thức đặc trưng thứ nhất của phương pháp số (1.2)
gọi là thỏa mãn điều kiện nghiệm nếu mọi nghiệm của nó đều có modul
nhỏ hơn hoặc bằng 1, nghiệm có modul bằng 1 phải là nghiệm đơn.

Định nghĩa 1.4. (Xem [10]) Phương pháp số (1.2) được gọi là zero - ổn
định nếu đa thức đặc trưng thứ nhất thỏa mãn điều kiện nghiệm.

1.7 Sự hội tụ của phương pháp số

Định nghĩa 1.5. (Xem [3]) Phương pháp số (1.2) gọi là hội tụ nếu

lim max ky (xn ) − yn k = 0


h→0 n=0,N

Định lý 1.4. (Xem [10]) Phương pháp số (1.2) hội tụ khi và chỉ khi nó
phù hợp và zero - ổn định .

Ví dụ 1.9. Kiểm tra sự hội tụ của phương pháp Euler hiển


(
yn+1 = yn + hf (xn , yn )
y0 = y(x0 )

− 15 −
Để xét tính hội tụ của phương pháp Euler hiển thì theo định lý trên
ta cần xét tính phù hợp và zero - ổn định của nó.
Như ta đã tính cấp chính xác của phương pháp Euler hiển p=1, áp dụng
hệ quả 1.1 ta thấy phương pháp Euler hiển là phù hợp vì có cấp chính
xác p ≥ 1. Hoặc sử dụng định lý 1.3, đa thức đặc trưng thứ nhất là
ρ (ξ) = ξ − 1 khi đó ta cũng suy ra phương pháp Euler hiển phù hợp vì


 ρ (1) = 0
φf (yn+1 , ..., yn , xn , 0)
 = φf (yn+1 , yn , xn , 0) = f (xn , yn )
ρ0 (1)

Ta có nghiệm của đa thức đặc trưng thứ nhất ξ = 1 thỏa mãn điều kiện
nghiệm. Do đó phương pháp Euler hiển là zero - ổn định. Vậy phương
pháp Euler hiển hội tụ.

Ví dụ 1.10. Kiểm tra sự hội tụ của phương pháp số


 
1 1 3 h
yn+1 = − yn + yn−1 + yn−2 + 19f (xn , yn ) + 5f (xn−2 , yn−2 )
4 2 4 8

Ta có đa thức đặc trưng thứ nhất của phương pháp số trên là


k
k
X 1 1 3
ρ (ξ) = ξ − αj ξ k−j = ξ 3 + ξ 2 − ξ −
j=1
4 2 4

5 23
ρ (ξ) = 0 ⇒ ξ = 1; ξ = − ± i
8 8
√ r
5 23 25 + 23
nghiệm ξ = − ± i có modul <1
8 8 64
ρ (ξ) thỏa mãn điều kiện nghiệm, do đó phương pháp số trên zero - ổn
định.
Ta có ρ (1) = 0

− 16 −
1 1
và ρ0 (ξ) = 3ξ 2 + ξ − ⇒ ρ0 (1) = 3
2 2
suy ra  
1
φf (yn+1 , yn , yn−1 , yn−2 , xn−2 , h) = 19f (xn , yn ) + 5f (xn−2 , y−2 )
8
⇒ φf (yn+1 , yn , yn−1 , yn−2 , xn−2 , 0) = 3f (xn−2 , yn−2 )
φf (yn+1 , yn , yn−1 , yn−2 , xn−2 , 0)
⇒ = f (xn−2 , yn−2 )
3
Vậy phương pháp số này hội tụ.

1.8 Đa thức nội suy Newton

1.8.1 Sai phân và một số tính chất

Định nghĩa 1.6. (Xem [1]) Giả sử y=f(x) là một hàm số thực, xác định
trên đoạn [a, b], h = const 6= 0 .
Khi đó hiệu số ∆f (x) = f (x + h) − f (x) là sai phân cấp một của hàm
số y=f(x) tại x. Một cách tổng quát

∆0 f (x) = f (x)
∆1 f (x) = f (x + h) − f (x)
.......................................
∆n f (x) = ∆ ∆n−1 f (x) ; n ∈ N, n ≥ 1


lần lượt là sai phân cấp 0, cấp 1,.., cấp n của hàm số y=f(x) tại x.

Tính chất 1.1. ∆[αf (x)+βg(x)] = α∆[f (x)]+β∆[g(x)]với mọi α, β ∈


R ; f(x) và g(x) là hai hàm tùy ý xác định trên [a, b]

Tính chất 1.2. Nếu c = const thì ∆c = 0

Tính chất 1.3. ∆n (xn ) = n!hn và ∆m (xn ) = 0 (m > n)

Chứng minh. Ta có
∆ (xn ) = (x + h)n − xn = nhxn−1 + ...

− 17 −
∆2 (xn ) = ∆ (∆ (xn )) = ∆ nhxn−1 + ... = n (n − 1) h2 xn−2 + ...


...............................
∆n (xn ) = ∆ ∆n−1 (xn ) = n!hn


Từ tính chất 2 ta suy ra ∆m (xn ) = 0 với mọi m > n.

Tính chất 1.4. Nếu P(x) là đa thức bậc n thì


n
X hi
∆P := P (x + h) − P (x) = P (i) (x)
i=1
i!
n
X
Tính chất 1.5. f (x + nh) = Cni ∆i f (x)
j=0

Chứng minh. Ta có f (x + h) = f (x) + ∆f (x) = (1 + ∆) f (x) ở đây 1


là toán tử đơn vị. Áp dụng nhiều lần ta được
f (x + nh) = (1 + ∆) f [x + (n − 1) h] = ... = (1 + ∆)n f (x)
Xn
= Cni ∆i f (x)
i=0
n
X
Tính chất 1.6. ∆ f (x) = n
(−1)i Cni f [x + (n − i) h]
i=0

Chứng minh. Ta có
n
∆n f (x) = [(1 + ∆) − 1]n f (x) = (−1)i Cni (1 + ∆)n−i f (x)
P
i=0
n
i
(−1) Cni f [x + (n − i) h]
P
=
i=0

Tính chất 1.7. Giả sử f ∈ C n [a, b] và (x, x + nh) ⊂ [a, b] khi đó:
∆n f (x)
n
= f (n) (x + θnh) ; θ ∈ (0, 1) (*)
h
Chứng minh. Với n = 1 ta có công thức số gia hữu hạn

f (x + h) − f (x)
= f 0 (x + θh)
h
Giả sử (*) đúng với mọi k ≤ n ta chứng minh cho trường hợp k = n + 1.
Thật vậy

− 18 −
∆n+1 f (x) = ∆ [∆n f (x)] = ∆ hn f (n) (x + θ0 nh) .
 

Áp dụng công thức số gia hữu hạn cho f (n) (x + θ0 nh), ta được
∆n+1 f (x) = hn ∆f (n) (x + θ0 nh)
= hn f (n) (x + θ0 nh + h) − f (n) (x + θ0 nh)
 

= hn+1 f (n+1) (x + θ0 nh + θ00 h)


trong đó θ0 , θ00 ∈ (0, 1).
θ0 n + θ00
Đặt θ = ∈ (0, 1), ta được
n+1

∆n+1 f (x) = f (n+1) [x + θ (n + 1) h]

1.8.2 Đa thức nội suy cuối bảng với mốc cách đều

Giả sử x0 < x1 < ... < xn và xi+1 − xi = h với mọi i = 0, n − 1


Ta tìm đa thức nội suy
Ln (x) = a0 + a1 (x − xn ) + a2 (x − xn ) (x − xn−1 ) + ...
+ an (x − xn ) (x − xn−1 ) ... (x − x1 )
Cho x lần lượt bằng xn , xn−1 , ..., x0 và chú ý rằng
Ln (xi ) = f (xi ) = yi , i = 0, n
∆yn−1 ∆i yn−i ∆n y0
ta thu được a0 = yn , a1 = , ..., ai = , ..., an =
h i!hi n!hn
Từ đó ta có
∆yn−1 ∆2 yn−2
Ln (x) = yn + (x − xn ) + 2
(x − xn ) (x − xn−1 ) + ...
h 2!h
∆n y0
+ (x − xn ) (x − xn−1 ) ... (x − x1 )
n!hn
Nếu ta biến đổi x = xn + th, xi = x0 + ih, i = 1, n thì ta được công
thức nội suy Newton thứ nhất
∆yn−1 ∆2 yn−2
Ln (x) = Ln (xn + th) = yn + t+ t(t + 1) + ...+
1! 2!
∆n y0
+ t(t + 1)...(t + n − 1) = Pn (t)
n!
Với ∆yn = yn+1 − yn , kí hiệu ∇yn = yn − yn−1 là sai phân lùi của f tại

− 19 −
n suy ra
∆yn−1 = ∇yn
∆2 yn−2 = ∇2 yn
∆3 yn−3 = ∇3 yn
.................
∆k yn−k = ∇k yn
khi đó ta có công thức nội suy Newton dạng sai phân lùi
∇yn ∇ 2 yn ∇n y n
Pn (t) = yn + t+ t (t + 1) + .. + t (t + 1) .. (t + n − 1)
1! 2! n!
(1.3)

Ví dụ 1.11. Xét hàm số cho bởi bảng

x 0 1 2 3 4
y 4 8 13 16 18

Hãy tìm đa thức nội suy Newton ở cuối bảng cho bởi bảng trên.

Ta có

∇y4 = y4 − y3 = 18 − 16 = 2
∇2 y4 = ∇y4 − ∇y3 = y4 − 2y3 + y2 = −1
∇3 y4 = ∇2 y4 − ∇2 y3 = y4 − 3y3 + 3y2 − y1 = 1
∇4 y4 = ∇3 y4 − ∇3 y3 = y4 − 4y3 + 6y2 − 4y1 + y0 = 4

Suy ra đa thức nội suy cần tìm là


∇y4 ∇ 2 y4 ∇ 3 y4
P4 (t) = y4 + t+ t(t + 1) + t(t + 1)(t + 2)
1! 2! 3!
∇ 4 y4 1 1
+ t(t + 1)(t + 2)(t + 3) = 18 + 2t − t(t + 1) + t(t + 1)(t + 2)
4! 2 6
1
+ t(t + 1)(t + 2)(t + 3)
6

− 20 −
1.9 Phương trình Riccati

Phương trình Riccati tổng quát là phương trình vi phân dạng

y 0 = P (x) y 2 + Q (x) y + R (x) (1.4)

trong đó P(x), Q(x), R(x) là các hàm liên tục trên khoảng (a,b) nào đó.
P(x), Q(x) không đồng nhất bằng 0 trên (a,b)

1.9.1 Dạng chính tắc của phương trình Riccati

Phương trình dạng


y 0 = ±y 2 + R1 (x) (1.5)
được gọi là phương trình chính tắc của phương trình Riccati.
Xét phương trình Riccati đặc biệt y 0 = Ay 2 +Bxα trong đó A, B, α là các
α
số thực (A, B 6= 0). Người ta chứng minh được rằng nếu không
2α + 4
phải là số nguyên thì phương trình Riccati không tích phân được bằng
cầu phương.

1.9.2 Một số tính chất của phương trình Riccati

Tính chất 1.8. Nếu biết được một nghiệm của phương trình Riccati thì
có thể đưa nó về phương trình Bernoulli.

Chứng minh. Thật vậy, giả sử y1 (x) là một nghiệm đã biết của phương
trình (1.4) thì ta có

y1 0 = p (x) y12 + q (x) y1 + r (x)

Ta đặt y = y1 (x) + z với z là hàm số phải tìm, thay vào phương trình

− 21 −
(1.4) ta được
y10 + z 0 = p (x) y12 + 2p (x) y1 z + p (x) z 2 + q (x) y1 + q (x) z + r (x)
= p (x) y12 (x) + q (x) y1 (x) + r (x) + 2p (x) y1 (x) z + p (x) z 2 + q (x) z(∗)
Theo giả thiết

y10 (x) = p (x) y12 (x) + q (x) y1 (x) + r (x)

Nên từ (*) ta suy ra

z 0 − [2p (x) y1 (x) + q (x)] z = p (x) z 2

đây là phương trình Bernoulli.

Ví dụ 1.12. Giải phương trình y 0 + 2y (y − x) = 1

Đây là phương trình Riccati. Dễ thấy y = x là một nghiệm của phương


trình đã cho. Đặt y = x + z ta sẽ đưa phương trình đã cho về dạng

z 0 + 2z (z + x) = 0

đây là phương trình Bernoulli với α = 2.


Đặt u = z −1 ta được

u0 − 2xu = 2

nghiệm tổng quát của phương trình này là


Z 
x2 −x2
u=e 2e dx + C

− 22 −
Vậy nghiệm tổng quát của phương trình đã cho là

2
e−x
y =x+ R ;y = x
C + 2 e−x2 dx
Ví dụ 1.13. Giải phương trình y 0 = xy 2 + x2 y − 2x3 + 1

Nhận thấy y = x là một nghiệm của phương trình trên.


1
Đặt y = x + z = z + ta đưa phương trình đã cho về dạng
u

u0 + 3x2 u = −x

đây là phương trình tuyến tính cấp 1, nghiệm tổng quát của nó là
 Z 
−x3 x4
u=e C− e xdx

Vậy nghiệm tổng quát của phương trình có dạng

3
ex
y =x+ Z
3
C − ex xdx

1.10 Phương pháp lặp đơn giải phương trình đại


số và siêu việt

Giả sử ta có phương trình

y = ϕ (y) , ϕ : Rm → Rm (1.6)

− 23 −
Lập dãy lặp yn+1 = ϕ(yn ) (*) với y0 được cho một cách thích hợp, ta
nhận được dãy {yn }.
Định lý sau chỉ ra điều kiện để phương trình y = ϕ(y)) có duy nhất
nghiệm.

Định lý 1.5. (Xem [13]) Cho ϕ (y) thỏa mãn điều kiện Lipschitz

kϕ (y) − ϕ (y ∗ )k ≤ M ky − y ∗ k

y, y ∗ ∈ Rm , 0 ≤ M < 1. Khi đó phương trình (1.6) có duy nhất nghiệm


y = α và nếu {yn } được định nghĩa bởi (*) thì yn → α khi n → ∞

1.11 Phương pháp Runge - Kutta


 
c1
 
 c2 
 
Cho A = (aij )s , b = (b1 , b2 , ..., bs ), c =  . 
 
 
. 
 
cs
Bảng

c1 a11 a12 . . a1s


c2 a21 a22 . . a2s
. . . . . .
. . . . . .
cs as1 as2 . . ass
b1 b2 . . bs

được gọi là một bảng Butcher.

− 24 −
Định nghĩa 1.7. Phương pháp số dạng
 s
P
 Y
 ni
 = y n + h aij f (xn + cj h, Ynj ), i = 1, s
j=1
s
P
 yn+1 = yn + h bj f (xn + cj h, Ynj )


j=1

trong đó aij (i = 1, s, j = 1, s), bj (j = 1, s), cj (j = 1, s) được lấy từ bảng


Butcher gọi là phương pháp Runge - Kutta.

Ví dụ 1.14. Với bảng Butcher

0 0 0 0 0
1 1
2 2 0 0 0
1 1
2 0 2 0 0
1 0 0 1 0
1 1 1 1
6 3 3 6

ta có phương pháp Runge - Kutta 4 nấc sau





 Yn1 = yn





  

 1
Yn2 = yn + h f (xn , Yn1 )


2








  
1 h



 Y = yn + h f (xn + , Yn2 )
 n3

 2 2

  

 h
Yn4 = yn + h f (xn + , Yn3 )





 2




 
1 1 h 1 h




 y n+1 = y n + h f (x n , Yn1 ) + f (xn + , Yn2 ) + f (xn + , Yn3 )+
6 3 2 3 2



 

 1
 + f (xn + h, Yn4 )


6

− 25 −
Ví dụ 1.15. Với bảng Butcher

0 0 0 0 0
1 1
2 2 0 0 0
1 −3
-1 2 2 0 0
4 −1
1 0 3 3 0
1 2 1
6 3 0 6

ta có phương pháp Runge - Kutta 4 nấc sau





 Yn1 = yn





  

 1
Yn2 = yn + h f (xn , Yn1 )


2








  
1 3 h


Yn3 = yn + h f (xn , Yn1 ) − f (xn + , Yn2 )

 2 2 2




  

 4 h 1
Yn4 = yn + h f (xn + , Yn2 ) − f (xn − h, Yn3 )






 3 2 3




  

 1 2 1 1
 yn+1 = yn + h f (xn , Yn1 ) + f (xn + h, Yn2 ) + f (xn + h, Yn4 )


6 3 2 6

− 26 −
Chương 2

Các phương pháp số Adams -


Bashforth, Adams - Moulton

2.1 Phương pháp tuyến tính đa bước

Định nghĩa 2.1. Một phương pháp số gọi là phương pháp tuyến tính k
bước nếu phương pháp số cho bởi
k
X k
X
yn+1 = αj yn+1−j + h βj f (xn+1−j , yn+1−j ) (2.1)
j=1 j=0

Ví dụ 2.1. Phương pháp BDF 2 bước


 
4 1 2
yn+1 = yn − yn−1 + h f (xn+1 , yn+1 )
3 3 3
Ví dụ 2.2. Phương pháp Adams - Bashforth 4 bước

55 59 37
yn+1 = yn + h f (xn , yn ) − f (xn−1 , yn−1 ) + f (xn−2 , yn−2 )−
24 24 24
3
− f (xn−3 , yn−3 )
8
Ví dụ 2.3. Phương pháp hình thang
 
1 1
yn+1 = yn + h f (xn+1 , yn+1 ) + f (xn , yn )
2 2

− 27 −
2.1.1 Cấp chính xác của phương pháp tuyến tính đa bước

Định lý 2.1. (Xem [10]) Phương pháp số (2.1) có cấp chính xác là p ≥ 1
khi và chỉ khi tồn tại c 6= 0 sao cho

ρ(ξ + 1) − σ(ξ + 1) ln(ξ + 1) = c.ξ p+1 + 0(ξ p+2 )

( trong đó 0(ξ p+2 ) là vô cùng bé cùng cấp với ξ p+2 khi ξ → 0;


X k
k
ρ(ξ) = ξ − αj ξ k−j là đa thức đặc trưng thứ nhất của phương pháp số
j=1
Xk
(2.1); σ(ξ) = βj ξ k−j là đa thức đặc trưng thứ hai của phương pháp số
j=1
(2.1))

Ví dụ 2.4. Tính cấp chính xác của phương pháp BDF 2 bước
 
4 1 2
yn+1 = yn − yn−1 + h f (xn+1 , yn+1 )
3 3 3

Đa thức đặc trưng thứ nhất


4 1
ρ (ξ) = ξ 2 − ξ +
3 3
Đa thức đặc trưng thứ hai
2
σ (ξ) = ξ 2
3
Khi đó  
4 1
ρ(ξ + 1) − σ(ξ + 1) ln(ξ + 1) = (ξ + 1)2 − (ξ + 1) + −
3 3
 2 3 
2 ξ ξ 2
− (ξ + 1)2 (ξ − + − ...) = − ξ 3 + 0(ξ 4 )
3 2 3 9
Vậy phương pháp BDF 2 bước có cấp chính xác là p = 2

− 28 −
2.1.2 Tính phù hợp

Định lý 2.2. ( Xem [13] ) Phương pháp số (2.1) phù hợp khi và chỉ khi



 ρ (1) = 0
k



 X

 βj f (xn+1−j , yn+1−j )
j=0


 k
= f (xn+1−k , yn+1−k )
 X
k− αj (k − j)





j=1

 k
X
1−




 αj = 0
j=1





 Xk

⇔  βj 
j=0






[f (xn+1−k , yn+1−k )] k
= f (xn+1−k , yn+1−k )
 X
k− αj (k − j)





j=1

 Xk



 αj = 1

j=1
⇔ k k
 X X
βj = k − αj (k − j)





j=0 j=1

2.1.3 Tính zero - ổn định

Định nghĩa 2.2. Đa thức đặc trưng thứ nhất của phương pháp số (2.1)
gọi là thỏa mãn điều kiện nghiệm nếu mọi nghiệm của nó đều có modul
nhỏ hơn hoặc bằng 1, nghiệm có modul bằng 1 phải là nghiệm đơn.

Định nghĩa 2.3. ( Xem [13] ) Phương pháp số (2.1) được gọi là zero -
ổn định nếu đa thức đặc trưng thứ nhất thỏa mãn điều kiện nghiệm.

− 29 −
2.1.4 Sự hội tụ của phương pháp tuyến tính k bước

Định lý 2.3. (Xem [13]) Phương pháp số (2.1) hội tụ khi và chỉ khi nó
phù hợp và zero - ổn định

Ví dụ 2.5. Xét sự hội tụ của phương pháp BDF 2 bước


 
4 1 2
yn+1 = yn − yn−1 + h f (xn+1 , yn+1 )
3 3 3
Ta có
4 1 1
ρ (ξ) = 0 ⇒ ξ 2 − ξ + = 0 ⇒ ξ1 = 1, ξ2 =
3 3 3
ρ (ξ) thỏa mãn điều kiện nghiệm do đó phương pháp trên zero - ổn định.
Xét

2
 X 4 1
α = α + α = − =1

j 1 2

3 3




 j=1
2


X 2
βj = β0 =

 j=0
3

2
  
4 1 2

 X


 2 − α j (2 − j) = 2 − (2 − 1) − (2 − 2) =
3 3 3


j=1

suy ra phương pháp trên phù hợp.


Vậy phương pháp BDF 2 bước hội tụ.

2.2 Công thức Adams - Bashforth

2.2.1 Xây dựng công thức

Xét bài toán Cauchy (1.1), tích phân 2 vế từ xn đến xn+1 của phương
trình y 0 (x) = f (x, y(x)) ta có

x
Zn+1 x
Zn+1
y 0 (x) dx = f (x, y(x))dx
xn xn

− 30 −
x
Zn+1
⇒ y (xn+1 ) − y (xn ) = f (x, y(x))dx
xn
x
Zn+1
⇒ y (xn+1 ) = y (xn ) + f (x, y(x))dx
xn
x
Zn+1
⇒ yn+1 = yn + y 0 (x)dx
xn

Đặt x = xn + th ta có
Z1
yn+1 = yn + h y 0 (xn + th)dt (2.2)
0

Áp dụng công thức nội suy Newton lùi cho y 0 n+t := y 0 (xn + th) ta được

0 ∇yn0 ∇2 yn0 ∇k yn0


yn+t = yn0 + t+ t (t + 1) + ... + t (t + 1) ... (t + k − 1)
1! 2! k!
(2.3)
Vì y 0 n+t := y 0 (xn + th) nên thay (2.3) vào (2.2) ta được

k
X
yn+1 = yn + h ai ∇i yn0 (2.4)
i=0

trong đó
Z1
t (t + 1) ... (t + i − 1) 
a0 = 1; ai = dt; i = 1, k
i!
0

Các hệ số ai ; i = 1, k lần lượt là


Z1
1
a1 = tdt =
2
0
Z1
t (t + 1) 5
a2 = dt =
2! 12
0

− 31 −
Z1
t (t + 1) (t + 2) 3
a3 = dt =
3! 8
0
Z1
t (t + 1) (t + 2) (t + 3) 251
a4 = dt =
4! 720
0
Z1
t (t + 1) (t + 2) (t + 3) (t + 4) 95
a5 = dt =
5! 288
0
Z1
t (t + 1) (t + 2) (t + 3) (t + 4) (t + 5) 19087
a6 = dt =
6! 60480
0
Z1
t (t + 1) (t + 2) (t + 3) (t + 4) (t + 5) (t + 6) 5257
a7 = dt =
7! 17280
0
Z1
t (t + 1) (t + 2) (t + 3) (t + 4) (t + 5) (t + 6) (t + 7) 1070017
a8 = dt =
8! 3628800
0
Z1
t (t + 1) (t + 2) ..... (t + 8) 25713
a9 = dt =
9! 89600
0
Z1
t (t + 1) (t + 2) ..... (t + 9) 26842253
a10 = dt =
10! 95800320
0
Suy ra công thức Adams - Bashforth

1 5 3 251 4 95 5 19087 6
yn+1 = yn + h 1 + ∇ + ∇2 + ∇3 + ∇ + ∇ + ∇
2 12 8 720 288 60480

5257 7 1070017 8 25713 9 26842253 10
+ ∇ + ∇ + ∇ + ∇ + ..... yn0 (2.5)
17280 3628800 89600 95800320

2.2.2 Một vài phương pháp Adams - Bashforth

Ví dụ 2.6. Phương
 pháp Adams - Bashforth 4 bước
55 59 37
yn+1 = yn + h f (xn , yn ) − f (xn−1 , yn−1 ) + f (xn−2 , yn−2 )−
24 24 24

− 32 −

3
− f (xn−3 , yn−3 )
8
Đa thức đặc trưng thứ nhất

ρ (ξ) = ξ 4 − ξ 3

Đa thức đặc trưng thứ hai


55 3 59 2 37 3
σ (ξ) = ξ − ξ + ξ−
24 24 24 8
Khi đó
4
 + 1) − σ(ξ + 1) ln(ξ + 1) = [(ξ + 1) −
ρ(ξ (ξ + 1)3 ]−
ξ2 ξ3 ξ4 ξ5

55 3 59 2 37 3
− (ξ + 1) − (ξ + 1) + (ξ + 1) − ξ − + − + − ...
24 24  24 8  2 3 4 5
ξ ξ x ξ5
2 3 4 
4 3 2 55 3 53 2 7
= (ξ +3ξ +3ξ +ξ)− ξ + ξ + ξ+1 ξ− + − + −...
24 12 2 2 3 4 5
251 5
= ξ + 0(ξ 6 )
720
Vậy phương pháp Adams - Bashforth 4 bước có cấp chính xác p = 4
Ta lại có
ρ (ξ) = 0 ⇒ ξ 4 − ξ 3 = 0 ⇒ ξ1,..,3 = 0, ξ4 = 1

nhận thấy ρ (ξ) thỏa mãn điều kiện nghiệm do đó phương pháp trên
zero - ổn định.
Ta có

X4

αj = α1 = 1






 j=1
4


X 55 59 37 3
βj = β0 + β1 + β2 + β3 + β4 = 0 + − + − =1

 j=0
24 24 24 8

4



 X
 4− αj (4 − j) = 4 − (4 − 1) = 1



j=1

nên phương pháp số trên là phù hợp.


Vậy phương pháp Adams - Bashforth 4 bước hội tụ.

− 33 −
Ví dụ 2.7. Phương
 pháp Adams - Bashforth 5 bước
1901 1387 109
yn+1 = yn + h f (xn , yn ) − f (xn−1 , yn−1 ) + f (xn−2 , yn−2 )−
720 360  30
637 251
− f (xn−3 , yn−3 ) + f (xn−4 , yn−4 )
360 720
Đa thức đặc trưng thứ nhất

ρ (ξ) = ξ 5 − ξ 4

Đa thức đặc trưng thứ hai


1901 4 1387 3 109 2 637 251
σ (ξ) = ξ − ξ + ξ − ξ+
720 360 30 360 720
Khi đó  
ρ(ξ + 1) − σ(ξ + 1) ln(ξ + 1) = (ξ + 1)5 − (ξ + 1)4 −
 
1901 1387 109 637 251
− (ξ + 1)4 − (ξ + 1)3 + (ξ + 1)2 − (ξ + 1) +
720 360 30 360 720
 2 3 4 5 6 
ξ ξ ξ ξ ξ 95 6
ξ − + − + − + ... = ξ + 0(ξ 7 )
2 3 4 5 6 288
Vậy phương pháp Adams - Bashforth 5 bước có cấp chính xác p = 5
Ta lại có
ρ (ξ) = 0 ⇒ ξ 5 − ξ 4 = 0 ⇒ ξ1,..,4 = 0, ξ5 = 1

đa thức đặc trưng thứ nhất thỏa mãn điều kiện nghiệm suy ra phương
pháp trên zero - ổn định.
Xét 
 5
X



 αj = α1 = 1

j=1
 X5 5
X
βj = 5 − αj (5 − j) = 1





j=0 j=1

suy ra phương pháp số trên là phù hợp.


Vậy phương pháp Adams - Bashforth 5 bước hội tụ.

− 34 −
Ví dụ 2.8. Phương
 pháp Adams - Bashforth 6 bước
4277 2641 4991
yn+1 = yn + h f (xn , yn ) − f (xn−1 , yn−1 ) + f (xn−2 , yn−2 )−
1440 480 720 
3649 959 95
− f (xn−3 , yn−3 ) + f (xn−4 , yn−4 ) − f (xn−5 , yn−5 )
720 480 288

Đa thức đặc trưng thứ nhất

ρ (ξ) = ξ 6 − ξ 5
Đa thức đặc trưng thứ hai
4277 5 2641 4 4991 3 3649 2 959 95
σ (ξ) = ξ − ξ + ξ − ξ + ξ−
1440 480 720 720 480 288
Khi đó
6 5
 + 1) − σ(ξ + 1) ln(ξ + 1) = [(ξ + 1) − (ξ + 1) ]−
ρ(ξ
4277 2641 4991 3649
(ξ + 1)5 − (ξ + 1)4 + (ξ + 1)3 − (ξ + 1)2 +
1440 480 720 720
 2 3 4 5 6 7 
959 95 ξ ξ ξ ξ ξ ξ 19087 7
+ (ξ +1)− ξ − + − + − + ... = ξ +0(ξ 8 )
480 288 2 3 4 5 6 7 60480
Vậy phương pháp Adams - Bashforth 6 bước có cấp chính xác p = 6
Ta lại có
ρ (ξ) = 0 ⇒ ξ 6 − ξ 5 = 0 ⇒ ξ1,..,5 = 0, ξ6 = 1
đa thức đặc trưng thứ nhất thỏa mãn điều kiện nghiệm suy ra phương
pháp trên zero - ổn định.
Xét

X6

αj = α1 = 1






 j=1
6


X 4277 2641 4991 3649 959 95
βj = 0 + − + − + − =1

 j=0
1440 480 720 720 480 288

5



 X
 6− αj (6 − j) = 6 − (6 − 5) = 1



j=1

suy ra phương pháp trên cũng phù hợp.


Vậy phương pháp Adams - Bashforth 6 bước hội tụ.

− 35 −
2.2.3 Các phương pháp Adams - Bashforth bậc cao

* Với k = 9 ta cũng có phương pháp Adams - Bashforth 9 bước


14097247 21562603
yn+1 = yn + h f (xn , yn ) − f (xn−1 , yn−1 )+
3628800 1814400
47738393 69927631
+ f (xn−2 , yn−2 ) − f (xn−3 , yn−3 )+
1814400 1814400
862303 45586321
+ f (xn−4 , yn−4 ) − f (xn−5 , yn−5 )+
22680 1814400
19416743 4832053
+ f (xn−6 , yn−6 ) − f (xn−7 , yn−7 )+
1814400 1814400

1070017
+ f (xn−8 , yn−8 )
3628800
Tính cấp chính xác và xét sự hội tụ của phương pháp Adams - Bashforth
9 bước.
Đa thức đặc trưng thứ nhất

ρ (ξ) = ξ 9 − ξ 8

Đa thức đặc trưng thứ hai


14097247 8 21562603 7 47738393 6 69927631 5
σ (ξ) = ξ − ξ + ξ − ξ +
3628800 1814400 1814400 1814400

− 36 −
862303 4 45586321 3 19416743 2 4832053 1070017
+ ξ − ξ + ξ − ξ+
22680 1814400 1814400 1814400 3628800

Khi đó
ρ(ξ + 1) − σ(ξ + 1) ln(ξ + 1) = [(ξ + 1)9 − (ξ + 1)8 ]−

14097247 21562603 47738393
− (ξ + 1)8 − (ξ + 1)7 + (ξ + 1)6 −
3628800 1814400 1814400
69927631 862303 45586321
− (ξ + 1)5 + (ξ + 1)4 − (ξ + 1)3 +
1814400 22680 1814400

19416743 4832053 1070017
+ (ξ + 1)2 − (ξ + 1) +
1814400 1814400 3628800
ξ 2 ξ 3 ξ 4 ξ 5 ξ 6 ξ 7 ξ 8 ξ 9 ξ 10
 
ξ− + − + − + − + − ...
2 3 4 5 6 7 8 9 10
25713 10
= ξ + 0(ξ 11 )
89600

Vậy phương pháp Adams - Bashforth 9 bước có cấp chính xác p = 9


Ta lại có
ρ (ξ) = 0 ⇒ ξ 9 − ξ 8 = 0 ⇒ ξ1,..,8 = 0, ξ9 = 1

nhận thấy ρ (ξ) thỏa mãn điều kiện nghiệm do đó phương pháp trên
zero - ổn định.
Xét

 X 9




 αj = α1 = 1
j=1



 9
14097247 21562603 47738393 69927631 862303

 X
βj = − + − + −



j=0
3628800 1814400 1814400 1814400 22680

 45586321 19416743 4832053 1070017

 − + − + =1
1814400 1814400 1814400 3628800




 X9

9− αj (9 − j) = 9 − (9 − 1) = 1





j=1

− 37 −
suy ra phương pháp trên cũng phù hợp.
Vậy phương pháp Adams - Bashforth 9 bước hội tụ.
* Với k = 10 ta
 cũng tìm được phương pháp Adams - Bashforth 10 bước
4325321 104995189
yn+1 = yn + h f (xn , yn ) − f (xn−1 , yn−1 )+
1036800 7257600
6648317 28416361
+ f (xn−2 , yn−2 ) − f (xn−3 , yn−3 )+
181440 453600
269181919 222386081
+ f (xn−4 , yn−4 ) − f (xn−5 , yn−5 )+
3628800 3628800
15788639 2357683
+ f (xn−6 , yn−6 ) − f (xn−7 , yn−7 )+
453600 181440

20884811 25713
+ f (xn−8 , yn−8 ) − f (xn−9 , yn−9 )
7257600 89600
Ta tính cấp chính xác và xét sự hội tụ của phương pháp Adams - Bash-
forth 10 bước.
Đa thức đặc trưng thứ nhất

ρ (ξ) = ξ 10 − ξ 9

Đa thức đặc trưng thứ hai


4325321 9 104995189 8 6648317 7 28416361 6
σ (ξ) = ξ − ξ + ξ − ξ +
1036800 7257600 181440 453600
269181919 5 222386081 4 15788639 3 2357683 2
+ ξ − ξ + ξ − ξ +
3628800 3628800 453600 181440
20884811 25713
+ ξ−
7257600 89600

Khi đó
ρ(ξ + 1) − σ(ξ + 1) ln(ξ + 1) = [(ξ + 1)10 − (ξ + 1)9 ]−

4325321 104995189 6648317
− (ξ + 1)9 − (ξ + 1)8 + (ξ + 1)7 −
1036800 7257600 181440

− 38 −
28416361 269181919 222386081
− (ξ + 1)6 + (ξ + 1)5 − (ξ + 1)4 +
453600 3628800 3628800

15788639 2357683 20884811 25713
+ (ξ + 1)3 − (ξ + 1)2 + (ξ + 1) −
453600 181440 7257600 89600
ξ 2 ξ 3 ξ 4 ξ 5 ξ 6 ξ 7 ξ 8 ξ 9 ξ 10 ξ 11
 
ξ− + − + − + − + − + − ...
2 3 4 5 6 7 8 9 10 11
26842253 11
= ξ + 0(ξ 12 )
95800320

Vậy phương pháp Adams - Bashforth 10 bước có cấp chính xác p = 10


Ta lại có
ρ (ξ) = 0 ⇒ ξ 10 − ξ 9 = 0 ⇒ ξ1,..,9 = 0, ξ10 = 1
nhận thấy ρ (ξ) thỏa mãn điều kiện nghiệm do đó phương pháp trên
zero - ổn định.
Xét

 X 10




 αj = α1 = 1
j=1



 10
4325321 104995189 6648317 28416361 269181919

 X
βj = − + − + −



j=0
1036800 7257600 181440 453600 3628800

 222386081 15788639 2357683 20884811 25713

 − + − + − =1
3628800 453600 181440 7257600 89600




 10
X

10 − αj (10 − j) = 10 − (10 − 1) = 1





j=1

suy ra phương pháp trên cũng phù hợp.


Vậy phương pháp Adams - Bashforth 10 bước hội tụ.
* Với k = 11 ta
 cũng tìm được phương pháp Adams - Bashforth 11 bước
2132509567 2067948781
yn+1 = yn + h f (xn , yn ) − f (xn−1 , yn−1 )+
479001600 119750400
1572737587 1921376209
+ f (xn−2 , yn−2 ) − f (xn−3 , yn−3 )+
31933440 19958400

− 39 −
3539798831 82260679
+ f (xn−4 , yn−4 ) − f (xn−5 , yn−5 )+
26611200 623700
2492064913 186080291
+ f (xn−6 , yn−6 ) − f (xn−7 , yn−7 )+
26611200 3991680
2472634817 52841941
+ f (xn−8 , yn−8 ) − f (xn−9 , yn−9 )+
159667200 17107200

26842253
f (xn−10 , yn−10 )
95800320

2.3 Công thức Adams - Moulton

2.3.1 Xây dựng công thức

Từ (2.3) thay n bởi n + 1 và thay t bởi t − 1 ta được


0 0 0
0 0 ∇yn+1 ∇2 yn+1 ∇k yn+1
yn+t = yn+1 + (t − 1) + (t − 1)t + ... + (t − 1)t...
1! 2! k!
... (t + k − 2) + ...
(2.6)

Vì y 0 n+t := y 0 (xn + th) nên thay (2.6) vào (2.2) ta được

k
X
0
yn+1 = yn + h ai ∇i yn+1 (2.7)
i=0

trong đó
Z1
(t − 1)t... (t + i − 2) 
a0 = 1; ai = dt; i = 1, k
i!
0

Các hệ số ai lần lượt là


Z1
(t − 1) 1
a1 = dt = −
1! 2
0

− 40 −
Z1
(t − 1) t 1
a2 = dt = −
2! 12
0
Z1
(t − 1) t (t + 1) 1
a3 = dt = −
3! 24
0
Z1
(t − 1) t (t + 1) (t + 2) 19
a4 = dt = −
4! 720
0
Z1
(t − 1) t (t + 1) (t + 2) (t + 3) 3
a5 = dt = −
5! 160
0
Z1
(t − 1) t (t + 1) (t + 2) (t + 3) (t + 4) 863
a6 = dt = −
6! 60480
0
Z1
(t − 1) t (t + 1) (t + 2) (t + 3) (t + 4) (t + 5) 275
a7 = dt = −
7! 24192
0
Z1
(t − 1) t (t + 1) ..... (t + 6) 33953
a8 = dt = −
8! 3628800
0
Z1
(t − 1) t (t + 1) ..... (t + 7) 8183
a9 = dt = −
9! 1036800
0
Suy ra công thức Adams - Moulton

1 1 1 19 4 3 5 863 6
yn+1 = yn + h 1 − ∇ − ∇2 − ∇3 − ∇ − ∇ − ∇
2 12 24 720 160 60480

275 7 33953 8 8183 0
− ∇ − ∇ − ∇9 − .... yn+1
24192 3628800 1036800
(2.8)

− 41 −
2.3.2 Một vài công thức Adams - Moulton

Ví dụ 2.9. Công thức Adams - Moulton 2 bước


 
5 2 1
yn+1 = yn + h f (xn+1 , yn+1 ) + f (xn , yn ) − f (xn−1 , yn−1 )
12 3 12
Đa thức đặc trưng thứ nhất

ρ (ξ) = ξ 2 − ξ

Đa thức đặc trưng thứ hai


5 2 2 1
σ (ξ) = ξ + ξ−
12 3 12
Khi đó
ρ(ξ + 1) − σ(ξ + 1) ln(ξ + 1) = [(ξ + 1)2 − (ξ + 1)]−
  2 3 4 
5 2 1 ξ ξ ξ 1
− (ξ + 1)2 + (ξ + 1) − ξ − + − ... = − ξ 4 + 0(ξ 5 )
12 3 12 2 3 4 24
Vậy cấp chính xác của phương pháp Adams - Moulton 2 bước là p = 3
Ta có
ρ (ξ) = 0 ⇒ ξ 2 − ξ = 0 ⇒ ξ1 = 0, ξ2 = 1

ρ (ξ) thỏa mãn điều kiện nghiệm do đó phương pháp trên zero - ổn định.
Xét 
2
X

αj = α1 = 1






 j=1
2


 X 5 2 1
βj = + − =1

 j=0
12 3 12

2



 X
 2− αj (2 − j) = 2 − (2 − 1) = 1



j=1

suy ra phương pháp trên phù hợp.


Vậy phương pháp Adams - Moulton 2 bước hội tụ.

− 42 −
Ví dụ 2.10. Công
 thức Adams - Moulton 3 bước
3 19 5
yn+1 = yn + h f (xn+1 , yn+1 ) + f (xn , yn ) − f (xn−1 , yn−1 )+
8  24 24
1
+ f (xn−2 , yn−2 )
24

Đa thức đặc trưng thứ nhất

ρ (ξ) = ξ 3 − ξ 2

Đa thức đặc trưng thứ hai


3 19 5 1
σ (ξ) = ξ 3 + ξ 2 − ξ +
8 24 24 24
Khi đó
ρ(ξ + 1) − σ(ξ + 1) ln(ξ + 1) = [(ξ + 1)3 − (ξ + 1)2 ]−

ξ2 ξ3 ξ4 ξ5
 
3 3 19 2 5 1
− (ξ + 1) + (ξ + 1) − (ξ + 1) + ξ− + − +
8 24 24 24 2 3 4 5
ξ6

19 5
− ... = − ξ + 0(ξ 6 )
6 720
Vậy cấp chính xác của phương pháp Adams - Moulton 3 bước là p = 4
Ta có
ρ (ξ) = 0 ⇒ ξ 3 − ξ 2 = 0 ⇒ ξ1,2 = 0, ξ3 = 1

ρ (ξ) thỏa mãn điều kiện nghiệm do đó phương pháp trên zero - ổn định.
Xét 
3
X

αj = α1 = 1






 j=1
3


 X 3 19 5 1
βj = + − + =1

 j=0
8 24 24 24

3



 X
 3− αj (3 − j) = 3 − (3 − 1) = 1



j=1

− 43 −
suy ra phương pháp trên phù hợp.
Vậy phương pháp Adams - Moulton 3 bước hội tụ.

2.3.3 Các phương pháp Adams - Moulton bậc cao

* Với k = 8 ta cũng tìm được công thức Adams - Moulton 8 bước


1070017 2233547
yn+1 = yn + h f (xn+1 , yn+1 ) + f (xn , yn )−
3628800 1814400
2302297 2797679
− f (xn−1 , yn−1 ) + f (xn−2 , yn−2 )−
181440 1814400
31457 1573169
− f (xn−3 , yn−3 ) + f (xn−4 , yn−4 )−
22680 1814400
645607 156437
− f (xn−5 , yn−5 ) + f (xn−6 , yn−6 )−
1814400 1814400

33953
− f (xn−7 , yn−7 )
3628800

Tính cấp chính xác và xét sự hội tụ của phương pháp trên.

− 44 −
Đa thức đặc trưng thứ nhất

ρ(ξ) = ξ 8 − ξ 7

Đa thức đặc trưng thứ hai


1070017 8 2233547 7 2302297 6 2797679 5 31457 4
σ (ξ) = ξ + ξ − ξ + ξ − ξ +
3628800 1814400 181440 1814400 22680
1573169 3 645607 2 156437 33953
+ ξ − ξ + ξ−
1814400 1814400 1814400 3628800

Khi đó
ρ(ξ + 1) − σ(ξ + 1) ln(ξ + 1) = [(ξ + 1)8 − (ξ + 1)7 ]−

1070017 2233547 2302297
− (ξ + 1)8 + (ξ + 1)7 − (ξ + 1)6 +
3628800 1814400 181440
2797679 31457 1573169
+ (ξ + 1)5 − (ξ + 1)4 + (ξ + 1)3 −
1814400 22680 1814400
ξ2 ξ3

645607 2 156437 33953
− (ξ + 1) + (ξ + 1) − ξ− + −
1814400 1814400 3628800 2 3
ξ 4 ξ 5 ξ 6 ξ 7 ξ 8 ξ 9 ξ 10 ξ 11 ξ 12 ξ 13 ξ 14 ξ 15 ξ 16

− + − + − + − + − + − + − ...
4 5 6 7 8 9 10 11 12 13 14 15 16
8183 10
=− ξ + 0(ξ 11 )
1036800

Vậy cấp chính xác của phương pháp Adams - Moulton 8 bước là p = 9.
Ta có
ρ (ξ) = 0 ⇒ ξ 8 − ξ 7 = 0 ⇒ ξ1,..,7 = 0, ξ8 = 1

ρ (ξ) thỏa mãn điều kiện nghiệm do đó phương pháp trên zero - ổn định.

− 45 −
Xét

 X8




 αj = α1 = 1
j=1



 8
1070017 2233547 2302297 2797679 31457

 X
βj = + − + −



j=0
3628800 1814400 181440 1814400 22680

 1573169 645607 156437 33953

 + − + − =1
1814400 1814400 1814400 3628800




 X8

8− αj (8 − j) = 8 − 7 = 1





j=1

suy ra phương pháp trên phù hợp.


Vậy phương pháp Adams - Moulton 8 bước hội tụ.
* Với k = 9 ta cũng tìm được công thức Adams - Moulton 9 bước

25713 9449717
yn+1 = yn + h f (xn+1 , yn+1 ) + f (xn , yn )−
89600 7257600
1408913 200029 8641823
− f (xn−1 , yn−1 )+ f (xn−2 , yn−2 )− f (xn−3 , yn−3 )
907200 90720 3628800
6755041 462127 335983
+ f (xn−4 , yn−4 )− f (xn−5 , yn−5 )+ f (xn−6 , yn−6 )
3628800 453600 907200

116687 8183
− f (xn−7 , yn−7 ) + f (xn−8 , yn−8 )
1451520 1036800
Tính cấp chính xác và xét sự hội tụ của phương pháp trên.
Đa thức đặc trưng thứ nhất

ρ (ξ) = ξ 9 − ξ 8

Đa thức đặc trưng thứ hai


25713 9 9449717 8 1408913 7 200029 6 8641823 5
σ (ξ) = ξ + ξ − ξ + ξ − ξ +
89600 7257600 907200 90720 3628800

− 46 −
6755041 4 462127 3 335983 2 116687 8183
+ ξ − ξ + ξ − ξ+
3628800 453600 907200 1451520 1036800

Khi đó
ρ(ξ + 1) − σ(ξ + 1) ln(ξ + 1) = [(ξ + 1)8 − (ξ + 1)7 ]−

25713 9449717 1408913
− (ξ + 1)9 + (ξ + 1)8 − (ξ + 1)7 +
89600 7257600 907200
200029 8641823 6755041
+ (ξ + 1)6 − (ξ + 1)5 + (ξ + 1)4 −
90720 3628800 3628800
462127 335983 116687
− (ξ + 1)3 + (ξ + 1)2 − (ξ + 1)+
453600 907200 1451520
ξ2 ξ3 ξ4 ξ5 ξ6 ξ7 ξ8

8183
+ ξ− + − + − + − +
1036800 2 3 4 5 6 7 8
ξ 9 ξ 10 ξ 11 ξ 12 ξ 13 ξ 14 ξ 15 ξ 16 ξ 17 ξ 18

+ − + − + − + − + − ...
9 10 11 12 13 14 15 16 17 18
3250433 11
=− ξ + 0(ξ 12 )
479001600
Vậy cấp chính xác của phương pháp Adams - Moulton 9 bước là p = 10.
Ta có
ρ (ξ) = 0 ⇒ ξ 9 − ξ 8 = 0 ⇒ ξ1,..,8 = 0, ξ9 = 1

ρ (ξ) thỏa mãn điều kiện nghiệm do đó phương pháp trên zero - ổn định.

− 47 −
Xét

 X9




 αj = α1 = 1
j=1



 8
25713 9449717 1408913 200029 8641823

 X
βj = + − + −



j=0
89600 7257600 907200 90720 3628800

 6755041 462127 335983 116687 8183

 + − + − + =1
3628800 453600 907200 1451520 1036800




 X9

9− αj (9 − j) = 9 − 8 = 1





j=1

suy ra phương pháp trên phù hợp.


Vậy phương pháp Adams - Moulton 9 bước hội tụ.
* Với k = 10 ta cũng tìm được công thức Adams - Moulton 10 bước

26842253 164046413
yn+1 = yn + h f (xn+1 , yn+1 ) + f (xn , yn )−
95800320 119750400
296725183 12051709
− f (xn−1 , yn−1 ) + f (xn−2 , yn−2 )−
159667200 3991680
33765029 2227571
− f (xn−3 , yn−3 ) + f (xn−4 , yn−4 )−
8870400 623700
21677723 23643791
− f (xn−5 , yn−5 ) + f (xn−6 , yn−6 )−
8870400 19958400
12318413 9071219
− f (xn−7 , yn−7 ) + f (xn−8 , yn−8 )−
31933440 119750400

3250433
− f (xn−9 , yn−9 )
479001600

− 48 −
Chương 3

Sử dụng kết hợp các phương pháp


Adams để giải số phương trình vi
phân

3.1 Kết hợp phương pháp Adams - Bashforth 2


bước và phương pháp Adams - Moulton 2 bước
để giải số phương trình vi phân

3.1.1 Thuật toán

Giải bài toán (


y 0 = f (x, y)
, x ∈ [a, b]
y (x0 ) = y0

• Chia [a, b] thành n phần bằng nhau bởi các điểm chia

a = x0 , x1 , x2 , ..., xn = b
b−a
khi đó h =
n

− 49 −
• Chia đôi [x0 , x1 ] bởi điểm chia

x0 = x00 , x01 , x02 = x1

h 0
• Sử dụng phương pháp Euler hiển tính giá trị y10 với h1 = ,x =
2 1
x0 + h1 .

• Tính giá trị y20 bằng phương pháp Adams - Bashforth 2 bước, khi
đó y20 chính là giá trị y1 dự báo, kí hiệu y1d

• Sử dụng phương pháp Adams - Moulton 2 bước hiệu chỉnh giá trị y1d
lần thứ nhất được giá trị y1∗1 . Tiếp tục hiệu chỉnh sao cho y1∗k −y1∗k−1 <
ε thì dừng lại được giá trị y1∗k , khi đó y1∗ = y1∗k

• Tiếp tục sử dụng phương pháp Adams - Bashforth 2 bước dự báo


giá trị y2d

• Hiệu chỉnh giá trị y2d lần thứ nhất được giá trị y2∗1 . Tiếp tục hiệu
chỉnh sao cho y2∗k − y2∗k−1 < ε thì dừng lại được giá trị y2∗k , khi đó
y2∗ = y2∗k

..............................
Thực hiện quá trình này cho đến giá trị yn

3.1.2 Áp dụng giải một số ví dụ

Ví dụ 3.1. Giải bài toán


( 2
y 0 = x3 ex + 2xy
, x ∈ [0, 0.1] , ε = 10−20
y(0) = 0

Bài toán có nghiệm giải tích là


1 2
y = ex x4
4
− 50 −
Tiến hành tìm nghiệm gần đúng của bài toán trên [0, 0.1]
Chia đoạn [0, 0.1] làm 10 phần bằng nhau bởi các điểm chia

0 = x0 , x1 , x2 , ..., x10 = 0.1

Tiếp tục chia đoạn [x0 , x1 ] làm 2 phần bằng nhau bởi điểm chia

x0 = x00 , x01 , x02 = x1


h 0
Sử dụng phương pháp Euler hiển tính giá trị y10 với h1 = , x = x0 + h1
2 1
y1 0 = y0 + h1 f (x0 , y0 ) = 0

Tính giá trị y20 bằng phương pháp Adams - Bashforth 2 bước
 
3 1
0 0 0 0
y2 = y1 + h1 f (x1 , y1 ) − f (x0 , y0 ) = 0.937523.10−9
2 2

khi đó y20 chính là y1d .


Sử dụng phương pháp Adams - Moulton 2 bước hiệu chỉnh giá trị y1d , kí
hiệu giá trị sau khi được hiệu chỉnh là y1∗
 
5 2 1
y1∗1 = y1 0 + h1 f (x1 , y1 d ) + f (x1 0 , y1 0 ) − f (x0 , y0 )
12 3 12
= 0.2500258.10−8

 
5 2 1
y1∗2 = y1 0 + h1 f (x1 , y11 ∗ ) + f (x1 0 , y1 0 ) − f (x0 , y0 )
12 3 12
= 0.2500323.10−8

 
5 2 1
y1∗3 = y1 0 + h1 f (x1 , y12 ∗ ) + f (x1 0 , y1 0 ) − f (x0 , y0 )
12 3 12
= 0.2500323.10−8

− 51 −
xét |y1∗3 − y1∗2 | = 0 < ε do đó y1∗ = y1∗3 = 0.2500323.10−8
Tiếp tục dự báo giá trị y2 với y1 = y1∗ bằng phương pháp Adams -
Bashforth 2 bước ta được

y2d = 0.17502573.10−7

và hiệu chỉnh bằng phương pháp Adams - Moulton 2 bước nhiều lần ta
được
y2∗ = 0.42521746.10−7

Thực hiện quá trình tương tự đến giá trị y10 .


Với x3 = 0.03 dự báo y3 được y3d = 0.157594518.10−6 , hiệu chỉnh y3∗ =
0.20770752.10−6
Với x4 = 0.04 dự báo y4 được y4d = 0.573234613.10−6 , hiệu chỉnh y4∗ =
0.648591797.10−6
Với x5 = 0.05 dự báo y5 được y5d = 0.147572347.10−5 , hiệu chỉnh y5∗ =
0.157655089.10−5
Với x6 = 0.06 dự báo y6 được y6d = 0.3137837235.10−5 , hiệu chỉnh y6∗ =
0.326443728.10−5
Với x7 = 0.07 dự báo y7 được y7d = 0.5894645558.10−5 , hiệu chỉnh y7∗ =
0.6047397801.10−5
Với x8 = 0.08 dự báo y8 được y8d = 0.1014451604.10−4 , hiệu chỉnh y8∗ =
0.10323878293.10−4
Với x9 = 0.09 dự báo y9 được y9d = 0.1635030792.10−4 , hiệu chỉnh y9∗ =
0.16556817546.10−4
d
Với x10 = 0.1 dự báo y10 được y10 = 0.2504075851.10−4 , hiệu chỉnh

y10 = 0.25275033874.10−4
So sánh với giá trị yn chính xác ta có bảng sau

− 52 −
Giá Giá trị yn Giá trị yn Giá trị yn
trị xn dự báo hiệu chỉnh chính xác
0 0 0 0
0.01 0.937523.10−9 0.2500323.10−8 0.250593.10−8
0.02 0.17502573.10−7 0.42521746.10−7 0.40015373.10−7
0.03 0.157594518.10−6 0.20770752.10−6 0.203088571.10−6
0.04 0.573234613.10−6 0.648591797.10−6 0.648640108.10−6
0.05 0.147572347.10−5 0.157655089.10−5 0.1582836455.10−5
0.06 0.3137837235.10−5 0.326443728.10−5 0.3272628237.10−5
0.07 0.5894645558.10−5 0.6047397801.10−5 0.6051336629.10−5
0.08 0.1014451604.10−4 0.10323878293.10−4 0.1031865335.10−4
0.09 0.1635030792.10−4 0.16556817546.10−4 0.1654064069.10−4
0.1 0.2504075851.10−4 0.25275033874.10−4 0.2524973145.10−4
Từ bảng các giá trị trên so sánh giá trị chính xác với giá trị dự báo và
giá trị hiệu chỉnh ta được bảng sai số sau

Giá trị xn |yd − ycx| |yh − ycx|


0 0 0
0.01 0.1568406639.10−8 0.5607136.10−11
0.02 0.2251280021.10−7 0.250637267.10−8
0.03 0.454940522.10−7 0.46189495.10−8
0.04 0.754054950.10−7 0.483115.10−10
0.05 0.107112985.10−6 0.6285565.10−8
0.06 0.134791002.10−6 0.8190957.10−8
0.07 0.156691071.10−6 0.3938828.10−8
0.08 0.17413731.10−6 0.522494.10−8
0.09 0.19033277.10−6 0.1617686.10−7
0.1 0.20897294.10−6 0.2530242.10−7

− 53 −
Nhận xét 3.1. Từ bảng sai số so sánh 2 cột giá trị ta thấy giá trị hiệu
chỉnh đúng đến 7, 8, 10, 11 chữ số sau dấu phẩy, tức là sai số giữa giá
trị hiệu chỉnh và giá trị chính xác là nhỏ.

Hình 3.1: Đồ thị biểu diễn nghiệm hiệu chỉnh

Hình 3.2: Đồ thị biểu diễn nghiệm chính xác

− 54 −
Ví dụ 3.2. Giải bài toán
(
y 0 = x3 + 2xy
x ∈ [0, 0.1] , ε = 10−20
y(0) = 0
Bài toán trên có nghiệm giải tích là
1 1 1 2
y = − − x2 + ex
2 2 2
Tìm nghiệm của bài toán trên [0, 0.1]
Chia đoạn [0, 0.1] làm 10 phần bằng nhau bởi các điểm chia

0 = x0 , x1 , x2 , ..., x10 = 0.1


0.1 − 0
Ta có h = = 0.01
10
Tiếp tục chia đoạn [x0 , x1 ] làm 2 phần bằng nhau bởi điểm chia

x0 = x00 , x01 , x02 = x1


h 0
Sử dụng phương pháp Euler hiển tính giá trị y10 với h1 = , x = x0 + h1
2 1
y1 0 = y0 + h1 f (x0 , y0 ) = 0

Tính giá trị y20 bằng phương pháp Adams - Bashforth 2 bước
 
3 1
y2 = y1 + h1 f (x1 , y1 ) − f (x0 , y0 ) = 0.9375.10−9
0 0 0 0
2 2
khi đó y20 chính là y1d .
Sử dụng phương pháp Adams - Moulton 2 bước hiệu chỉnh giá trị y1d , kí
hiệu giá trị sau khi được hiệu chỉnh là y1∗
 
∗ 0 5 d 2 0 0 1
y11 = y1 + h1 f (x1 , y1 ) + f (x1 , y1 ) − f (x0 , y0 )
12 3 12
= 0.2500039.10−8
 
5 2 1
y1∗2 0
= y1 + h1 ∗ 0 0
f (x1 , y11 ) + f (x1 , y1 ) − f (x0 , y0 )
12 3 12
= 0.2500104.10−8

− 55 −
 
5 2 1
y1∗3 = y1 0 + h1 f (x1 , y12 ∗ ) + f (x1 0 , y1 0 ) − f (x0 , y0 )
12 3 12
= 0.2500104.10−8

xét |y1∗3 − y1∗2 | = 0 < ε do đó y1∗ = y1∗3 = 0.2500104.10−8


Tiếp tục dự báo giá trị y2 với y1 = y1∗ bằng phương pháp Adams -
Bashforth 2 bước ta được

y2d = 0.17500854.10−7

và hiệu chỉnh bằng Adams - Moulton 2 bước nhiều lần ta được

y2∗ = 0.42507522.10−7

Thực hiện quá trình tương tự đến giá trị y10 cho ta bảng sau
Giá Giá trị yn Giá trị yn Giá trị yn
trị xn dự báo hiệu chỉnh chính xác
0 0 0 0
0.01 0.9375.10−9 0.2500104.10−8 0.2501174.10−8
0.02 0.17500854.10−7 0.42507522.10−7 0.40005115.10−7
0.03 0.157532777.10−6 0.207570708.10−6 0.202737517.10−6
0.04 0.572749021.10−6 0.647868276.10−6 0.644943929.10−6
0.05 0.1473583447.10−5 0.1573859202.10−5 0.1574737895.10−5
0.06 0.3130960843.10−5 0.3256493497.10−5 0.3259354235.10−5
0.07 0.5876568255.10−5 0.6027483569.10−5 0.6028746638.10−5
0.08 0.1010318739.10−4 0.10279636662.10−4 0.1027558767.10−4
0.09 0.1626508855.10−4 0.16467248838.10−4 0.1645526877.10−4
0.1 0.248784867.10−4 0.25106561052.10−4 0.2508590025.10−4
Từ bảng trên ta có bảng sai số giữa giá trị chính xác và giá trị dự báo,
giá trị hiệu chỉnh sau

− 56 −
Giá trị xn |yd − ycx| |yh − ycx|
0 0 0
0.01 0.1563674149.10−8 0.1069978.10−11
0.02 0.2250426053.10−7 0.250240738.10−8
0.03 0.452047408.10−7 0.48331911.10−8
0.04 0.721949080.10−7 0.29243473.10−8
0.05 0.101154448.10−6 0.878693.10−9
0.06 0.128393392.10−6 0.2860738.10−8
0.07 0.152178383.10−6 0.1263069.10−8
0.08 0.17240028.10−6 0.404899.10−8
0.09 0.19018022.10−6 0.1198007.10−7
0.1 0.20741355.10−6 0.2066080.10−7
Nhận xét 3.2. Quan sát bảng sai số ta nhận thấy giá trị hiệu chỉnh gần
với giá trị chính xác hơn giá trị dự báo. Ở giá trị đầu tiên, giá trị hiệu
chỉnh so với giá trị chính xác đúng đến 11 chữ số sau dấu phẩy trong khi
giá trị dự báo đúng 8 chữ số sau dấu phẩy.

Hình 3.3: Đồ thị biểu diễn nghiệm hiệu chỉnh

− 57 −
Hình 3.4: Đồ thị biểu diễn nghiệm chính xác

Ví dụ 3.3. Giải bài toán


(
y 0 = x2 + y 2
, x ∈ [0, 1], ε = 10−20
y(0) = 0

Tìm nghiệm gần đúng của bài toán trên [0, 1]


Với n = 100 chia đoạn [0, 1] làm 100 phần bằng nhau bởi các điểm chia

0 = x0 , x1 , x2 , ..., x100 = 1
1−0
Ta có h = = 0.01
100
Tiếp tục chia đoạn [x0 , x1 ] làm 2 phần bằng nhau bởi điểm chia

x0 = x00 , x01 , x02 = x1


h 0
Sử dụng phương pháp Euler hiển tính giá trị y10 với h1 = , x = x0 + h1
2 1
y1 0 = y0 + h1 f (x0 , y0 ) = 1

Tính giá trị y20 bằng phương pháp Adams - Bashforth 2 bước
 
3 1
y2 0 = y1 0 + h1 f (x1 0 , y1 0 ) − f (x0 , y0 ) = 1.875.10−7
2 2
− 58 −
khi đó y20 chính là y1d .
Sử dụng phương pháp Adams - Moulton 2 bước hiệu chỉnh nhiều lần giá
trị y1d ta được
y1∗ = 2.917.10−7

Tiếp tục quá trình như vậy ta được 100 giá trị trên [0, 1] Ta có bảng 10
giá trị đại diện sau
Giá Giá trị yn Giá trị yn Giá trị yn
trị xn dự báo hiệu chỉnh maple tính
0 0 0 0
0.1 0.3324598396.10−3 0.333293265269.10−3 0.3333344337.10−3
0.2 0.2665993241.10−2 0.2666828389779.10−2 0.2666884487.10−2
0.3 0.9002589296.10−2 0.9003432484934.10−2 0.9003497423.10−2
0.4 0.2135847601.10−1 0.21359341709882.10−1 0.2135936878.10−1
0.5 0.4179019791.10−1 0.41791112672635.10−1 0.4179115658.10−1
0.6 0.7244682939.10−1 0.72447837026333.10−1 0.7244790628.10−1
0.7 0.1156586762 0.115659845611663 0.1156599169
0.8 0.174078846 0.17408028483035 0.1740803381
0.9 0.2509048704 0.250906749799359 0.2509067734
1 0.3502293902 0.350231992823669 0.3502319798
Từ bảng giá trị trên so sánh giá trị do maple tính với giá trị dự báo
và giá trị hiệu chỉnh ta có bảng sai số sau

− 59 −
Giá trị xn |yd − yM | |yh − yM |
0 0 0
0.1 0.8745941.10−6 0.411684.10−7
0.2 0.891246.10−6 0.56097.10−7
0.3 0.908127.10−6 0.64938.10−7
0.4 0.89277.10−6 0.2707.10−7
0.5 0.95867.10−6 0.4391.10−7
0.6 0.107689.10−5 0.6925.10−7
0.7 0.12407.10−5 0.713.10−7
0.8 0.14921.10−5 0.533.10−7
0.9 0.19030.10−5 0.236.10−7
1 0.25896.10−5 0.130.10−7

Nhận xét 3.3. Qua bảng sai số trên ta thấy giá trị hiệu chỉnh tốt hơn
rõ rệt so với giá trị dự báo, điều này rất có ý nghĩa trong việc giải gần
đúng các phương trình vi phân bằng phương pháp dự báo - hiệu chỉnh.

Hình 3.5: Đồ thị biểu diễn nghiệm hiệu chỉnh

− 60 −
Hình 3.6: Đồ thị biểu diễn nghiệm do Maple tính

3.2 Kết hợp phương pháp Adams - Bashforth 3


bước và phương pháp Adams - Moulton 3 bước
để giải số phương trình vi phân

3.2.1 Thuật toán

Giải bài toán (


y 0 = f (x, y)
, x ∈ [a, b]
y (x0 ) = y0

• Chia [a, b] thành n phần bằng nhau bởi các điểm chia

a = x0 , x1 , x2 , ..., xn = b

• Sử dụng phương pháp Runge - Kutta hiển 4 nấc tính các giá trị
b−a
y1 , y2 với h =
n
• Dự báo giá trị y3 bằng phương pháp Adams - Bashforth 3 bước

− 61 −
• Sử dụng phương pháp Adams - Moulton 3 bước hiệu chỉnh giá trị
y3d lần thứ nhất được giá trị y3∗ . Tiếp tục hiệu chỉnh nhiều lần sao
cho y3∗k − y3∗k−1 < ε thì dừng lại được giá trị y3∗k , khi đó y3∗ = y3∗k

• Tiếp tục sử dụng phương pháp Adams - Bashforth 3 bước dự báo


giá trị y4

• Hiệu chỉnh giá trị y4 nhiều lần sao cho y4∗k − y4∗k−1 < ε thì dừng lại
được giá trị y4∗k , khi đó y4∗ = y4∗k

...............................
Thực hiện quá trình này cho đến giá trị yn .

3.2.2 Áp dụng giải một số ví dụ


(
y 0 = xex − y cos x
Ví dụ 3.4. Giải bài toán , x ∈ [0, 1]
y(0) = 0

Chia đoạn [0, 1] làm 100 phần bằng nhau bởi các điểm chia

0 = x0 , x1 , x2 , ..., x10 = 1

Sử dụng phương pháp Runge - Kutta hiển 4 nấc tính giá trị y1 , y2 với

− 62 −
1−0
h= = 0.01, x1 = x0 + h = 0.01, x2 = x1 + h = 0.02
100



 Yn1 = yn





  

 1
Yn2 = yn + h f (xn , Yn1 )


2








  
1 3 h


Yn3 = yn + h f (xn , Yn1 ) − f (xn + , Yn2 )

 2 2 2




  

 4 h 1
Yn4 = yn + h f (xn + , Yn2 ) − f (xn − h, Yn3 )






 3 2 3




  

 1 2 1 1
 yn+1 = yn + h f (xn , Yn1 ) + f (xn + h, Yn2 ) + f (xn + h, Yn4 )


6 3 2 6
Ta có
y1 = 0.501683430337827.10−4
y2 = 0.201348561876164.10−3
Dự báo giá trị y3 bằng phương pháp Adams - Bashforth 3 bước
 
23 4 5
y3 = y2 + h1 f (x2 , y2 ) − f (x1 , y1 ) + f (x0 , y0 )
12 3 12
= 0.050344882225134

Sử dụng phương pháp Adams - Moulton 3 bước hiệu chỉnh nhiều lần giá
trị y3 , kí hiệu giá trị sau khi được hiệu chỉnh là y3∗
 
5 2 1
y3∗ = y2 + h1 f (x1 , y1 ) + f (x2 , y2 ) − f (x1 , y1 )
12 3 12
= 0.050344899671878

Tiếp tục dự báo giá trị y4 bằng phương pháp Adams - Bashforth 3 bước
ta được
y4 = 0.093529037522892

− 63 −
và hiệu chỉnh bằng Adams - Moulton 2 bước nhiều lần ta được

y4∗ = 0.093529059440013

Thực hiện quá trình tương tự đến giá trị y10 .


So sánh với giá trị do maple tính ta có bảng sau
Giá Giá trị yn Giá trị yn Giá trị yn
trị xn dự báo hiệu chỉnh maple tính
0 0 0 0
0.3 0.050344882225134 0.050344899671878 0.05034491876
0.4 0.093529037522892 0.093529059440013 0.09352908855
0.5 0.153310564254015 0.153310591446411 0.153310639
0.6 0.232566648247936 0.232566681769874 0.2325667545
0.7 0.334927784335635 0.334927825540783 0.3349279072
0.8 0.464952790995011 0.464952841592538 0.4649528715
0.9 0.628341496912628 0.628341559030917 0.6283415657
1 0.8321948550241 0.832194931282643 0.8321950042
Từ bảng giá trị trên so sánh giá trị do maple tính với giá trị dự báo
và giá trị hiệu chỉnh ta có bảng sai số sau

Giá trị xn |yd − yM | |yh − yM |


0 0 0
0.3 0.3653.10−7 0.1909.10−7
0.4 0.5103.10−7 0.2911.10−7
0.5 0.747.10−7 0.476.10−7
0.6 0.1063.10−6 0.727.10−7
0.7 0.1229.10−6 0.817.10−7
0.8 0.805.10−7 0.299.10−7
0.9 0.688.10−7 0.67.10−8
1 0.1492.10−6 0.729.10−7

− 64 −
Nhận xét 3.4. Từ bảng sai số so sánh 2 cột giá trị ta thấy giá trị dự báo
gần với giá trị do maple tính đến 7, 8 chữ số sau dấu phẩy, điều này cho
ta thấy phương pháp Adams - Bashforth 3 bước là khá tốt rồi nên nghiệm
dự báo có độ chính xác cao.

Hình 3.7: Đồ thị biểu diễn nghiệm hiệu chỉnh

Hình 3.8: Đồ thị biểu diễn nghiệm do Maple tính

− 65 −
Ví dụ 3.5. Giải bài toán
(
y0 = x − y2
, x ∈ [0, 1]
y(0) = 0

Chia đoạn [0, 1] làm 100 phần bằng nhau bởi các điểm chia

0 = x0 , x1 , x2 , ..., x10 = 1

Sử dụng phương pháp Runge - Kutta hiển 4 nấc tính giá trị y1 , y2 với
1−0
h= = 0.01, x1 = x0 + h = 0.01, x2 = x1 + h = 0.02
100



 Yn1 = yn





  

 1
Yn2 = yn + h f (xn , Yn1 )


2








  
1 3 h


Yn3 = yn + h f (xn , Yn1 ) − f (xn + , Yn2 )

 2 2 2




  

 4 h 1
Yn4 = yn + h f (xn + , Yn2 ) − f (xn − h, Yn3 )






 3 2 3




  

 1 2 1 1
 yn+1 = yn + h f (xn , Yn1 ) + f (xn + h, Yn2 ) + f (xn + h, Yn4 )


6 3 2 6

Ta có
y1 = 0.499999833333271.10−4

y2 = 0.19999980833345.10−3

Dự báo giá trị y3 bằng phương pháp Adams - Bashforth 3 bước


 
23 4 5
y3 = y2 + h1 f (x2 , y2 ) − f (x1 , y1 ) + f (x0 , y0 )
12 3 12
= 0.044878914362061

− 66 −
Sử dụng phương pháp Adams - Moulton 3 bước hiệu chỉnh nhiều lần giá
trị y3 , kí hiệu giá trị sau khi được hiệu chỉnh là y3∗
 
∗ 5 2 1
y3 = y2 + h1 f (x1 , y1 ) + f (x2 , y2 ) − f (x1 , y1 )
12 3 12
= 0.044878908206218

Tiếp tục dự báo giá trị y4 bằng phương pháp Adams - Bashforth 3 bước
ta được
y4 = 0.079492070171301

và hiệu chỉnh bằng Adams - Moulton 2 bước nhiều lần ta được

y4∗ = 0.079492062345693

Thực hiện quá trình tương tự đến giá trị y10 .


So sánh với giá trị do maple tính ta có bảng sau
Giá Giá trị yn Giá trị yn Giá trị yn
trị xn dự báo hiệu chỉnh maple tính
0 0 0 0
0.3 0.044878914362061 0.044878908206218 0.0448789076
0.4 0.079492070171301 0.079492062345693 0.07949206365
0.5 0.123461540009235 0.12346153113371 0.1234615132
0.6 0.176214175945663 0.176214166882488 0.1762142071
0.7 0.236941738311343 0.236941730086801 0.2369417115
0.8 0.304600441636617 0.304600435294036 0.3046005556
0.9 0.377937537294278 0.377937533706399 0.3779374982
1 0.455544526481062 0.455544526171948 0.4555445178
Từ bảng giá trị trên so sánh giá trị do maple tính với giá trị dự báo
và giá trị hiệu chỉnh ta có bảng sai số sau

− 67 −
Giá trị xn |yd − yM | |yh − yM |
0 0 0
0.3 0.676.10−8 0.61.10−9
0.4 0.652.10−8 0.130.10−8
0.5 0.268.10−7 0.179.10−7
0.6 0.312.10−7 0.402.10−7
0.7 0.268.10−7 0.186.10−7
0.8 0.1140.10−6 0.1203.10−6
0.9 0.391.10−7 0.355.10−7
1 0.87.10−8 0.84.10−8

Nhận xét 3.5. Giá trị dự báo và hiệu chỉnh đều gần giá trị do maple
tính như ví dụ trên. Qua cả hai ví dụ ta nhận thấy việc tính giá trị y1 , y2
bằng phương pháp Runge - Kutta 4 nấc sau đó dự báo - hiệu chỉnh bằng
phương pháp Adams - Bashforth 3 bước và Adams - Moulton 3 bước đạt
kết quả tốt.

Hình 3.9: Đồ thị biểu diễn nghiệm hiệu chỉnh

− 68 −
Hình 3.10: Đồ thị biểu diễn nghiệm do Maple tính

Ví dụ 3.6. Giải bài toán


(
y 0 = x cos y − yex
, x ∈ [0, 0.1]
y(0) = 0

Chia đoạn [0, 1] làm 100 phần bằng nhau bởi các điểm chia

0 = x0 , x1 , x2 , ..., x10 = 0.1

Sử dụng phương pháp Runge - Kutta hiển 4 nấc tính giá trị y1 , y2 với

− 69 −
0.1 − 0
h= = 0.001, x1 = x0 + h = 0.001, x2 = x1 + h = 0.002
100



 Yn1 = yn





  

 1
Yn2 = yn + h f (xn , Yn1 )


2








  
1 3 h


Yn3 = yn + h f (xn , Yn1 ) − f (xn + , Yn2 )

 2 2 2




  

 4 h 1
Yn4 = yn + h f (xn + , Yn2 ) − f (xn − h, Yn3 )






 3 2 3




  

 1 2 1 1
 yn+1 = yn + h f (xn , Yn1 ) + f (xn + h, Yn2 ) + f (xn + h, Yn4 )


6 3 2 6
Ta có
y1 = 4.9983320824988910−7
y2 = 0.19986652497907710−7
Dự báo giá trị y3 bằng phương pháp Adams - Bashforth 3 bước
 
23 4 5
y3 = y2 + h1 f (x2 , y2 ) − f (x1 , y1 ) + f (x0 , y0 )
12 3 12
= 0.000445432496043

Sử dụng phương pháp Adams - Moulton 3 bước hiệu chỉnh nhiều lần giá
trị y3 , kí hiệu giá trị sau khi được hiệu chỉnh là y3∗
 
5 2 1
y3∗ = y2 + h1 f (x1 , y1 ) + f (x2 , y2 ) − f (x1 , y1 )
12 3 12
= 0.000445432495293

Tiếp tục dự báo giá trị y4 bằng phương pháp Adams - Bashforth 3 bước
ta được
y4 = 0.000789119975502

− 70 −
và hiệu chỉnh bằng Adams - Moulton 2 bước nhiều lần ta được

y4∗ = 0.000789119974751

Thực hiện quá trình tương tự đến giá trị y10 .


So sánh với giá trị do maple tính ta có bảng sau
Giá Giá trị yn Giá trị yn Giá trị yn
trị xn dự báo hiệu chỉnh maple tính
0 0 0 0
0.3 0.000445432496043 0.000445432495293 0.0004454323101
0.4 0.000789119975502 0.000789119974751 0.000789119856
0.5 0.001228645741146 0.001228645740395 0.001228645681
0.6 0.001762919732843 0.001762919732091 0.001762918844
0.7 0.002390831849204 0.002390831848451 0.002390828966
0.8 0.003111251935824 0.003111251935071 0.00311124667
0.9 0.00392302977477 0.003923029774017 0.00392302232
1 0.004824995076381 0.004824995075628 0.004824986029
Từ bảng giá trị trên so sánh giá trị do maple tính với giá trị dự báo
và giá trị hiệu chỉnh ta có bảng sai số sau

Giá trị xn |yd − yM | |yh − yM |


0 0 0
0.3 0.1859.10−9 0.1852.10−9
0.4 0.1195.10−9 0.1188.10−9
0.5 0.60.10−10 0.59.10−10
0.6 0.889.10−9 0.888.10−9
0.7 0.2883.10−8 0.2882.10−8
0.8 0.5266.10−8 0.5265.10−8
0.9 0.7455.10−8 0.7454.10−8
1 0.9047.10−8 0.9047.10−8

− 71 −
Nhận xét 3.6. Từ bảng sai số so sánh 2 cột giá trị ta thấy giá trị dự
báo và giá trị được hiệu chỉnh gần với giá trị do maple tính đến 10 chữ số
sau dấu phẩy. Sự chênh lệch giữa dự báo và hiệu chỉnh là rất nhỏ chứng
tỏ dự báo bằng phương pháp Adams - Bashforth 3 bước cho kết quả tốt.

Hình 3.11: Đồ thị biểu diễn nghiệm hiệu chỉnh

Hình 3.12: Đồ thị biểu diễn nghiệm do Maple tính

− 72 −
Phụ Lục

Chương trình giải trên Maple


Code: Kết hợp phương pháp Adams - Bashforth 2 bước và Adams -
Moulton 2 bước giải số phương trình vi phân

restart;
with(Maplets[Elements]):
GD:=Maplet([
["Nhap ham f(x,y)= ",TextField[f]"x^2+y^2"],
[ "Nhap a= ", TextField[a]("0"), " b= ", TextField[b]("1")],
[ "Nhap n= ", TextField[n]("10000"), " y0= ", TextField[y0]
("0")],
[Button("Thoat", Shutdown([f,a,b,n,y0]))]
]):
gtn:=Maplets[Display](GD):
ham:=parse(gtn[1]);
n:=parse(gtn[4]);
a:=parse(gtn[2]); b:=parse(gtn[3]); y0:=parse(gtn[5]);
h:=evalf((b-a)/n):
f:=unapply(ham,x,y):
epsilon:=10^(-20):
nmax:=100:
for i from 0 to n do
x[i]:=a+i*h:

− 73 −
end do:
h1 := evalf((1/2)*h,20): x01:=evalf(x[0]+h1,20):
x[1]:=evalf(x[0]+h, 20):
yh[0]:=evalf(y0,20):
yd[0]:=evalf(y0,20):
y01:=evalf(yd[0]+h1*f(x[0],yd[0]),20):
yd[1]:=evalf(y01+h1*((3/2)*f(x01, y01)-(1/2)*f(x[0], yd[0])),
20):
H[1][0]:=yd[1]:
H[1][1]:=evalf(y01+h1*((5/12)*f(x[1],H[1][0])+(2/3)*f(x01,y01)
-(1/12)*f(x[0],yd[0])),20):
i:=1:
while abs(H[1][i]-H[1][i-1])>epsilon do
i:=i+1;
H[1][i]:=evalf(y01+h1*((5/12)*f(x[1],H[1][i-1])+(2/3)*f(x01,
y01)-(1/12)*f(x[0],yd[0])),20):
if i>nmax then break; end if;
end do:
yh[1]:=H[1][i]:
for i from 2 to n do
yd[i]:=yh[i-1]+h*(3/2*f(x[i-1],yh[i-1])-1/2*f(x[i-2],
yh[i-2]));
H[i][0]:=yd[i];
H[i][1]:=evalf(yh[i-1]+h*((5/12)*f(x[i],H[i][0])+(2/3)*
f(x[i-1],yh[i-1])-(1/12)*f(x[i-2],yh[i-2])),20):
j:=1:
while abs(H[i][j]-H[i][j-1])>epsilon do
j:=j+1;
H[i][j]:=evalf(yh[i-1]+h*((5/12)*f(x[i],H[i][j-1])+(2/3)*

− 74 −
f(x[i-1],yh[i-1])-(1/12)*f(x[i-2],yh[i-2])),20):
if j>nmax then break; end if;
end do:
yh[i]:=H[i][j];
end do:
rs:=dsolve({diff(y(t),t)=f(t,y(t)),y(0)=y0},y(t)):
ngh:=unapply(rhs(rs),t):
y=ngh(x);
tmp:=dsolve({diff(y(t),t)=f(t,y(t)),y(0)=y0},y(t),type=numeric,
output=listprocedure,range=a..b):
ngh:=subs(tmp,y(t)):
printf("%12s %16s %22s %16s %20s %20s\n","Gia tri x",
"y du bao","y hieu chinh","y Maple","yM-yd","yM-yh"):
for i from 0 to 10 do
printf("%10.3f %20.15f %20.15f %20.15f %20A %20A\n",
x[i*n/10],yd[i*n/10],yh[i*n/10],evalf(ngh(x[i*n/10])),
evalf(abs(ngh(x[i*n/10])-yd[i*n/10])),evalf(abs(ngh(x[i*n/10])-
yh[i*n/10]))):
end do;
p1:=plot(ngh(t),t=a..b,color=red,legend="Nghiệm chính xác"):
p2:=plot([seq([x[i],yh[i]],i=0..n)],color=blue,legend="
Nghiệm hiệu chỉnh"):
plots[display](p1,p2);
Code: Kết hợp phương pháp Adams - Bashforth 3 bước và Adams -
Moulton 3 bước giải số phương trình vi phân
restart;
with(Maplets[Elements]):
GD:=Maplet([
["Nhap ham f(x,y)= ",TextField[f]("x^2+y^2")],

− 75 −
[ "Nhap a= ", TextField[a]("0"), " b= ", TextField[b]("1")],
[ "Nhap n= ", TextField[n]("10000"), " y0= ", TextField[y0]
("0")],
[Button("Thoat", Shutdown([f,a,b,n,y0]))]
]):
gtn:=Maplets[Display](GD);
["x*exp(x)-y*cos(x)", "0", "1", "100", "0"]
ham:=parse(gtn[1]);
n:=parse(gtn[4]);
a:=parse(gtn[2]); b:=parse(gtn[3]); y0:=parse(gtn[5]);
h:=evalf((b-a)/n):
f:=unapply(ham,x,y):
epsilon:=10^(-20):
nmax:=100:
for i from 0 to n do
x[i]:=a+i*h:
end do:
x[1]:=evalf(x[0]+h,20): x[2]:=evalf(x[1]+h,20):
x[3]:=evalf(x[2]+h,20):x[4]:=evalf(x[3]+h,15):
Y[0]:=evalf(y0,20): yd[0]:=evalf(Y[0],20):
yh[0]:=evalf(Y[0],15):
Y01:=evalf(yh[0],15):
Y02:=evalf(yh[0]+h*((1/2)*f(x[0],Y01)),15):
Y03:=evalf(yh[0]+h*((1/2)*f(x[0],Y01)-(3/2)*f(x[0]+(1/2)*h,Y02)),
15):
Y04:=evalf(yh[0]+h*((4/3)*f(x[0]+(1/2)*h,Y02)-(1/3)*f(x[0]-h,
Y03)),15):
Y[1]:=evalf(yh[0]+h*((1/6)*f(x[0],Y01)+(2/3)*f(x[0]+(1/2)*h,
Y02)+(1/6)*f(x[0]+h,Y04)),15);

− 76 −
yd[1]:=evalf(Y[1],15):
yh[1]:=evalf(Y[1],15):
Y11:=evalf(yh[1],15):
Y12:=evalf(yh[1]+h*((1/2)*f(x[1],Y11)),15):
Y13:=evalf(yh[1]+h*((1/2)*f(x[1],Y11)-(3/2)*f(x[1]+(1/2)*h,
Y12)),15):
Y14:=evalf(yh[1]+h*((4/3)*f(x[1]+(1/2)*h,Y12)-(1/3)*f(x[1]-h,
Y13)),15):
Y[2]:=evalf(yh[1]+h*((1/6)*f(x[1],Y11)+(2/3)*f(x[1]+(1/2)*h,
Y12)+(1/6)*f(x[1]+h,Y14)),15);
yd[2]:=evalf(Y[2],15):
yh[2]:=evalf(Y[2],15):
yd[3]:=evalf(yh[2]+h*((23/12)*f(x[2], yh[2])-(4/3)*f(x[1],
yh[1])+(5/12)*f(x[0],yh[0])),15):
H[3][0]:=yd[3]:
H[3][1]:=evalf(yh[2]+h*((3/8)*f(x[3],H[3][0])+(19/24)*f(x[2],
yh[2])-(5/24)*f(x[1],yh[1])+(1/24)*f(x[0],yh[0])),15):
i:=1:
while abs(H[3][i]-H[3][i-1])>epsilon do
i:=i+1;
H[3][i]:=evalf(yh[2]+h*((3/8)*f(x[3],H[3][i-1])+(19/24)*f(x[2],
yh[2])-(5/24)*f(x[1],yh[1])+(1/24)*f(x[0],yh[0])),15);
if i>nmax then break; end if;
end do:
yh[3]:=H[3][i]:
for i from 4 to n do
yd[i]:=evalf(yh[i-1]+h*(23/12*f(x[i-1],yh[i-1])-4/3*f(x[i-2],
yh[i-2])+(5/12)*f(x[i-3],yh[i-3])),15);
H[i][0]:=yd[i];

− 77 −
H[i][1]:=evalf(yh[i-1]+h*((3/8)*f(x[i],H[i][0])+(19/24)*
f(x[i-1],yh[i-1])-(5/24)*f(x[i-2],yh[i-2])+(1/24)*f(x[i-3],
yh[i-3])),15):
j:=1:
while abs(H[i][j]-H[i][j-1])>epsilon do
j:=j+1;
H[i][j]:=evalf(yh[i-1]+h*((3/8)*f(x[i],H[i][j-1])+(19/24)*
f(x[i-1],yh[i-1])-(5/24)*f(x[i-2],yh[i-2])+(1/24)*f(x[i-3],
yh[i-3])),15):
if j>nmax then break; end if;
end do:
yh[i]:=H[i][j];
end do:
y:=’y’:
rs:={dsolve({diff(y(t),t)=f(t,y(t)),y(0)=y0},y(t))}:
if rs={} then
print(‘Không tìm được nghiệm chính xác. Maple sẽ cho nghiệm
số bằng phương pháp Runge-Kutta bậc 4-5 để làm cơ sở so sánh.‘);
tmp:=dsolve({diff(y(t),t)=f(t,y(t)),y(0)=y0},y(t),type=numeric
,output=listprocedure,range=a..b):
ngh:=evalf(subs(tmp,y(t)),15):
else
ngh:=unapply(rhs(rs[1]),t):
print(‘Nghiệm chính xác giải bằng Maple‘);
print(y(x)=ngh(x));
end if:
printf("%12s %16s %22s %16s %20s %20s\n","Gia tri x","y du bao"
,"y hieu chinh","y Maple","yM-yd","yM-yh");
for i from 3 to 10 do

− 78 −
printf("%10.3f %20.15f %20.15f %20.15f %20A %20A\n",x[i*n/10]
,yd[i*n/10],yh[i*n/10],evalf(ngh(x[i*n/10])),evalf(abs(ngh
(x[i*n/10])-yd[i*n/10])),evalf(abs(ngh(x[i*n/10])-yh[i*n/10])));
end do;
p1:=plot(ngh(t),t=a..b,color=red,legend="Nghiệm chính xác"):
p2:=plot([seq([x[i],yh[i]],i=0..n)],color=blue,style=point
,legend="Nghiệm hiệu chỉnh"):
plots[display](p1,p2);

− 79 −
KẾT LUẬN
Đề tài sử dụng một cặp phương pháp Adams - Bashforth và Adams
- Moulton làm cặp phương pháp dự báo - hiệu chỉnh để giải số phương
trình vi phân. Đặc biệt có sử dụng Maple làm công cụ giải nhanh và
chính xác những bài toán phương trình vi phân phức tạp hoặc không thể
tìm nghiệm dưới dạng giải tích.

Ở chương 2 em có nêu ra một vài phương pháp Adams - Bashforth


và Adams - Moulton bậc cao, đồng thời tiến hành xét sự hội tụ và tính
cấp chính xác của nó. Tuy nhiên, chương 3 em mới chỉ sử dụng kết hợp
cặp phương pháp Adams - Bashforth 2 bước và Adams - Moulton 2 bước,
Adams - Bashforth 3 bước và Adams - Moulton 3 bước để giải số phương
trình vi phân vì khi sử dụng các phương pháp Adams bậc cao ta phải
tính nhiều giá trị ban đầu khiến sai số sẽ rất lớn và hơn nữa khi sử dụng
đến cặp phương pháp Adams 3 bước cho thấy kết quả thu được đã là khá
tốt.

Phương pháp Adams - Bashforth kết hợp với phương pháp Adams -
Moulton là một cặp dự báo - hiệu chỉnh khá tốt.

− 80 −
Tài liệu tham khảo

[1] Phạm Kỳ Anh, Giải tích số, NXB đại học quốc gia Hà Nội, 2000.

[2] Butcher .J.C , Numerical methods for ordinary differential equations


(second edition), John Wiley & Sons, 2008.

[3] Dahlquits, Convergence and stability in the numerical integration of


ordinary differential equation, Math. Scand. 4, 1956, pp 33-53.

[4] Nguyễn Hữu Điển, Hướng dẫn và sử dụng Maple V, NXB Thống Kê,
1999.

[5] Nguyễn Hữu Điển, Nguyễn Minh Tuấn, Latex tra cứu và soạn thảo,
NXB ĐHQG Hà Nội, 2003.

[6] Nguyễn Thế Hoàn, Cơ sở phương trình vi phân và lý thuyết ổn định,


NXB Giáo Dục, 2000.

[7] Henrici , Discrete variable methods in ordinary differential equation,


Wiley, New York, 1962.

[8] Phạm Văn Hạp, Lê Đình Thịnh, Phương pháp tính và các thuật
toán, NXB Giáo Dục, 2000.

[9] Doãn Tam Hòe, Toán học tính toán, NXB giáo dục, 2005.

[10] Arieh Iserles, A first course in the numerical analysis of differential


equation (second edition), Cambridge University Press, New York,
2009.

− 81 −
[11] Isaascon and H.B Keller, Analysis of Numerical Methods, Wiley, New
York, 1966.

[12] Bùi Tuấn Khang, Giáo trình phương pháp tính, Tài liệu lưu hành
nội bộ, Đại học Đà Nẵng, 2003.

[13] J.D Lambert, Numerical Methods for ordinary differential systems,


John Wiley and Sons, Reprinted May 1991.

[14] B V Ramana, Higher Engineering Mathematics, McGraw-Hill, 2006.

[15] Hoàng Trọng Thái, Trần Thị Ngọc Diệp, Lê Quang Phan, Nguyễn
Văn Tuấn, Sử dụng phần mềm toán học, NXB ĐHSP Hà Nội, 2007.

− 82 −

You might also like