Các công thức này đi thành cặp: một công thức tích phân bậc m và một công thức tích phân bậc m+1.. Để tìm nghiệm của phương trình vi phân ta dùng chương trình ctadaptrk.m: Đây là công th
Trang 1CHƯƠNG 7: CÁC PHƯƠNG TRÌNH VI PHÂN THƯỜNG
)y, ,y,y,x(fy
)y, ,y,y,x(fy
n 2
1 n n
n 2
1 2 2
n 2
1 1 1
(
Y
)X,x()x
(
Y
với:
y
yy
f
ff
y
yy
Trang 2n hằng số tuỳ ý. Để nhận được một nghiệm riêng, ta phải cho n điều kiện đầu. Bài toán sẽ có giá trị đầu nếu với giá trị xo đã cho ta cho y(xo), y′(xo), y″(xo), Một phương trình vi phân bậc n có thể đưa về thành một hệ phương trình vi phân cấp 1. Ví dụ nếu ta có phương trình vi phân cấp 2:
a
(
y
)y,y,x(y
Khi đặt u = y và v = y′ ta nhận được hệ phương trình vi phân cấp 1:
vu
với điều kiện đầu: u(a) = α và v(a) = β
Các phương pháp giải phương trình vi phân được trình bày trong chương này là các phương pháp rời rạc: đoạn [a, b] được chia thành n đoạn nhỏ bằng nhau được gọi là các ʺbướcʺ tích phân h = ( b ‐ a) / n.
()x(y2
)xx
()x(y)xx
()x(y)x
(
3 i 1 i i
2 i 1 i i
i 1 i i
yi+1 = yi + hf(xi, yi) (2)
Về mặt hình học ta thấy (1) cho kết quả càng
Trang 6Xét bài toán Cauchy (1). Giả sử ta đã tìm được giá trị gần đúng yi của y(xi) và muốn tính yi+1 của y(xi+1). Trước hết ta viết công thức Taylor:
)c(y
!m
h)x(y
!m
h)
x(y2
h)x(yh)x(y)x
(
1 m
i ) m ( m
i
2
i i
1 i
+ +
d)x
(
1 k
i )
!m
h)x(y
!m
h)
x(y2
h)x(yhy
1 m
i ) m ( m
i
2
i i
1
i
+ +
Ta đã kéo dài khai triển Taylor để kết quả chính xác hơn. Để tính y′i, y″i v.v. ta
có thể dùng phương pháp Runge‐Kutta bằng cách đặt:
) i ( 4 4 ) i ( 3 3 ) i ( 2 2 ) i ( 1 1 i 1
=
α++
=
=
)kk
y,bhx
(hfk
)ky
,ahx(hfk
)y,x(hfk
) i ( 2 ) i ( 1 i
i )
i
(
3
) i ( 1 i
i )
i
(
2
i i )
=
=
)ky
,ahx(hfk
)y,x(hfk
) i ( 1 i
i )
i
(
2
i i )
h)y,x
Trang 7k(1i) = hf(xi,yi)= hy′i
k(2i) =h[ (xi,yi)+ahfx′(xi,yi)+αk(1i)fy′(xi,yi)+⋅ ⋅⋅]
Do đó vế phải của (16) là:
h(r1+r2) (xi,yi)+h2[ar2fx′(xi,yi)+αr2y′ify′(xi,yi)]+⋅ ⋅⋅ (18) Bây giờ cho (17) và (18) khác nhau một vô cùng bé cấp O(h3) ta tìm được các
Trang 9Vấn đề xác định bước tính h là rất quan trọng. Nếu muốn có độ chính xác cao thì bước tính h phải nhỏ. Tuy nhiên khi h nhỏ, ta lại tốn thời gian tính toán. Hơn nữa bước hằng số sẽ không thích hợp trên toàn bộ miền tìm nghiệm. Ví dụ nếu đường cong nghiệm ban đầu thay đổi nhanh rồi sau đó gần như không đổi thì ta phải dùng h nhỏ ở đoạn đầu và h lớn ở đoạn sau. đây là chỗ mà các phương pháp thích nghi chiếm ưu thế. Chúng đánh giá sai
số làm tròn tại mỗi lần tích phân và tự động hiệu chỉnh độ lớn của h để sai số nằm trong giới hạn cho phép.
Phương pháp Runge ‐ Kutta thích nghi còn gọi là phương pháp tích phân kết hợp. Các công thức này đi thành cặp: một công thức tích phân bậc m
và một công thức tích phân bậc m+1. Ý tưởng là dùng hai công thức này cải thiện nghiệm trong đoạn [x, x+h]. Gọi kết quả là ym(x+h) và ym+1(x+h) ta có sai
số đối với công thức bậc m là:
E(h) = ym+1(x+h) ‐ ym(x+h) (1)
Chúng ta dùng công thức kết hợp bậc 4 và 5 mà đạo hàm được tính bằng công thức Fehlenberg. Do vậy công thức Runge ‐ Kutta thích nghi còn được gọi là công thức Runge ‐ Kutta ‐ Fehlenberg:
Trang 10i 1
1e(h) E (h)
Trang 13
Để tìm nghiệm của phương trình vi phân ta dùng chương trình ctadaptrk.m:
Đây là công thức bậc 2, giống như công thức
Euler. Ta xem xét phương pháp này vì đây là cơ
sở của phương pháp Burlisch ‐ Stör dùng tìm
nghiệm có độ chính xác cao. Hình bên minh hoạ
công thức điểm giữa đối với phương trình đơn
phương trình ′ =y f(x,y) từ x = x0 đến x = x0 + H với công thức điểm giữa.
Ta chia đoạn tích phân thành n đoạn nhỏ có độ dài mỗi đoạn là =h H / n như hình bên và tính:
y1 =y0 +hf0
y2 =y0 +2hf 1
x‐h h x+h
x y’(x)
Trang 26y′′=f(x,y,y ) y(a)′ = α,y(b)= β
Đây là bài toán tìm nghiệm của phương trình vi
phân khi biết điều kiện biên và được gọi là bài
toán giá trị biên hai điểm. Trong bài toán giá trị
đầu ta có thể bắt đầu tìm nghiệm ở điểm có các
giá trị đầu đã cho và tiếp tục cho các thời điểm
sau. Kỹ thuật này không áp dụng được cho bài
toán giá trị biên vì không có đủ điều kiện đầu ở
các biên để có nghiệm duy nhất. Một cách để khác
phục khó khăn này là cho các giá trị còn thiếu.
Nghiệm tìm được dĩ nhiên sẽ không thoả mãn
điều kiện ở các biên. Tuy nhiên ta có thể căn cứ
vào đó để thay đổi điều kiện đầu trước khi tích
phân lại. Phương pháp này cũng giống như bắn
bia. Trước hết ta bắn rồi xem có trúng đích hay
không, hiệu chỉnh và bắn lại. Do vậy phương
pháp này gọi là phương pháp bắn.
Một phương pháp khác để giải bài toán giá trị biên là phương pháp sai phân hữu hạn trong các đạo hàm được thay bằng các xấp xỉ bằng sai phân hữu hạn tại các nút lưới cách đều. Như vậy ta sẽ nhận được hệ phương trình đại số đối với các sai phân.
Cả hai phương pháp này có một vấn đề chung: chúng làm tăng số phương trình phi tuyến nếu phương trình vi phân là phi tuyến. Các phương trình này được giải bằng phương pháp lặp nên rất tốn thời gian tính toán. Vì vạy việc giải bài toán biên phi tuyến rất khó. Ngoài ra, đối với phương pháp lặp, việc chọn giá trị đầu rất quan trọng. Nó quyết định tính hội tụ của phương pháp lặp.
y′′=f(x,y,y ) y(a)′ = α,y (a) u′ = (2)
Chìa khoá thành công là tìm ra giá trị đúng u. ta có thể thực hiện việc này bằng phương pháp “thử và sai”: cho một giá trị u và giải bài toán giá trị đầu bằng cách đi từ a đến b. Nếu nghiệm giống với điều kiện biên mô tả y(b) = β
Trang 27thì ta đã có nghiệm của bài toán. Nếu không ta phải hiệu chỉnh u và làm lại. Tuy nhiên làm như vậy chưa hay. Do nghiệm của bài toán giá trị đầu phụ thuộc u nên giá trị biên tính được y(b) là hàm của u, nghĩa là:
Do đó u là nghiệm của phương trình:
r(u) = θ(u) ‐ β = 0 (3)
Trong đó θ(u) gọi là số dự biên(hiệu số giữa giá
trị tính được và giá trị biên cho trước). Phương
trình (3) có thể gải bằng các phương pháp tìm
nghiệm trong chương trước. Tuy nhiên phương
pháp chia đôi cung đòi hỏi tính toán lâu còn
Trang 31Nội dung của phương trình Picard là thay cho việc tìm nghiệm đúng của phương trình (2) ta tìm nghiệm gần đúng theo công thức:
Trang 37plot(t, y);