Dự báo và hiệu chỉnh với cặp phương pháp nystrom và milne – simpson để giải số phương trình vi phân thường

69 18 0
Dự báo và hiệu chỉnh với cặp phương pháp nystrom và milne – simpson để giải số phương trình vi phân thường

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

TRƯỜNG ĐẠI HỌC SƯ PHẠM ĐÀ NẴNG KHOA TOÁN −−− −−− NGUYỄN THỊ THẢO NGUYÊN DỰ BÁO VÀ HIỆU CHỈNH VI CP PHNG PHP ă NYSTROM V MILNE - SIMPSON ĐỂ GIẢI SỐ PHƯƠNG TRÌNH VI PHÂN THƯỜNG Chuyên ngành: Sư phạm Tốn KHĨA LUẬN TỐT NGHIỆP HỆ ĐẠI HỌC CHÍNH QUY Người hướng dẫn: Th.S NGUYỄN HỒNG THÀNH Đà Nẵng, 5/2012 Mục lục −2− Lời nói đầu Giải tích số mơn tốn học chun nghiên cứu phép giải gần số phương trình, tốn xấp xỉ hàm Việc tìm nghiệm hay nghiệm giải tích số phương trình vi phân khó khăn lớp phương trình vi phân tìm nghiệm giải tích hẹp Giải tích số cung cấp phương pháp giải cho tốn mà khơng có lời giải giải tích Mặc dù có lịch sử phát triển hàng trăm năm phương pháp số giải phương trình vi phân thu hút quan tâm mạnh mẽ nhà toán học nhà nghiên cứu toán học ứng dụng Cho đến phương pháp số giải phương trình vi phân có thành tựu lớn khối lượng kiến thức đồ sộ in nhiều tài liệu sách, báo, có nhiều tên tuổi lĩnh vực nh: Euler, Milne - Simpson, Nystroăm, J.D.Lambert, Arieh Iserles, Butcher, Trong giải tích số, người ta thường cố gắng tìm phương pháp hữu hiệu bảo đảm hội tụ có cấp xác cao Đề tài nghiên cứu phương pháp dự báo – hiu chnh vi cp phng phỏp Nystroăm v Milne Simpson với hi vọng làm tăng độ xác nghiệm xấp xỉ toán Cauchy phương trình vi phân thường Khóa luận gồm chương: Chương 1: Trình bày số khái niệm sở giải số phương trình vi phân −3− Chương 2: Trỡnh by cỏc phng phỏp s Nystroăm v Milne Simpson để giải số phương trình vi phân thường Chng 3: S dng cỏc phng phỏp s Nystroăm v Milne – Simpson để giải số phương trình vi phân thường Ở em lập trình tính tốn Maple vào số ví dụ cụ thể Cuối em xin chân thành cảm ơn thầy hướng dẫn Th.S Nguyễn Hoàng Thành, giới thiệu đề tài, cung cấp tài liệu hướng dẫn em suốt trình thực đề tài mình, hướng dẫn cho em cài đặt sử dụng Latex giúp em thu nhiều kiến thức bổ ích q trình hồn thành luận văn Em xin chân thành cảm ơn thầy Tôn Thất Tú hướng dẫn, giúp em sử dụng phần mềm Maple Đồng thời em xin gửi lời cảm ơn đến thầy khoa Tốn, trường Đại học Sư phạm Đà Nẵng tạo điều kiện giúp đỡ em hoàn thành luận văn Đà Nẵng, ngày 20 tháng năm 2012 Sinh viên Nguyễn Thị Thảo Nguyên −4− Chương Kiến thức sở 1.1 Phương trình vi phân Định nghĩa 1.1 Phương trình vi phân phương trình chứa ẩn hàm số đạo hàm Một phương trình vi phân cấp n thường có dạng y (n) = f (x, y, y , ., y (n−1) ) F (x, y, y , ., y (n−1) ) = Nghiệm phương trình vi phân hàm số y = ϕ(x) cho thay y = ϕ(x) vào phương trình vi phân ta đẳng thức 1.2 Bài toán Cauchy cách tiếp cận lời giải số Trong luận văn này, ta đề cập đến phương pháp số để giải tốn tìm giá trị ban đầu Bài tốn tìm giá trị ban đầu cịn gọi tốn Cauchy tốn tìm y(x) cho  y = f (x, y) y(a) = η (1.1) với f : [a, b] × Rn → Rn , y : [a, b] × Rn → Rn , η = (y1 (a), y2 (a), , yn (a)) 1.2.1 Định lý tồn nghiệm Định lý 1.1 (Xem [10]) Cho f : [a, b] × Rn → Rn ánh xạ liên tục D = [a, b] × Rn thỏa mãn điều kiện Lipschitz theo biến y, nghĩa tồn L ≥ cho f (x, y) − f (x, y1 ) ≤ L y − y1 , ∀(x, y), (x, y1 ) ∈ D (1.2) Khi tốn Cauchy (??) tồn nghiệm y(x) liên tục khả vi D 1.2.2 Tiếp cận lời giải số Tất phương pháp số mà đề cập khóa luận sử dụng tìm nghiệm y(x) tốn Cauchy (??) tập rời rạc [a, b] Đó chia nhỏ [a, b] thành N phần b−a điểm chia {xi }N i=0 định nghĩa xi = + ih, i = 0, N , h = N Tham số h gọi bước nhảy Giả sử y(x) nghiệm hệ (??), đặt yn xấp xỉ nghiệm y(xn ) (??) xn Ký hiệu yn ≈ y(xn ) Mục đích ta tìm phương pháp hữu hiệu để tính dãy giá trị xấp N xỉ {yn }N n=0 nghiệm (??) tập rời rạc {xn }n=0 Định nghĩa 1.2 Nghiệm số dãy xấp xỉ nghiệm toán (??) tập rời rạc [a, b] Định nghĩa 1.3 (Xem [10]) Phương pháp số giải toán (??) hệ sai phân k + giá trị xấp xỉ {yn+i }ki=1 {y(xn+i )}ki=1 để từ ta tính giá trị {yi }N i=0 , với k số bước  y = f (x, y) = y Ví dụ 1.1 Cho với x ∈ [0, ], h = 0, 05 y(0) = Tính y(0, 05) biết −6−  yn+1 = yn + hf (xn , yn ) • Phương pháp Euler hiển y(x ) = y 0 Ta có y0 = y(0) = y1 = y0 + 0, 05(y0 )2 = + 0, 05.12 = 1, 05 y2 = y1 + 0, 05(y1 )2 = 1, 05 + 0, 05(1, 05)2 = 1, 105 y3 = y2 + 0, 05(y2 )2 = 1, 105 + 0, 05(1, 105)2 = 1, 166 y4 = y3 + 0, 05(y3 )2 = 1, 166 + 0, 05(1, 166)2 = 1, 234 y5 = y4 + 0, 05(y4 )2 = 1, 234 + 0, 05(1, 234)2 = 1, 31 • Phương pháp Euler ẩn yn+1 = yn + hf (xn+1 , yn+1 ) Ta có y0 = y1 = y0 + 0, 05(y1 )2 = + 0, 05(y1 )2 ⇔ y1 = 1, 056 y2 = y1 + 0, 05(y2 )2 = 1, 056 + 0, 05(y2 )2 ⇔ y2 = 0, 994 y3 = y2 + 0, 05(y3 )2 = 0, 994 + 0, 05(y3 )2 ⇔ y3 = 1, 063 y4 = y3 + 0, 05(y4 )2 = 1, 063 + 0, 05(y4 )2 ⇔ y4 = 0, 986 y5 = y4 + 0, 05(y5 )2 = 0, 986 + 0, 05(y5 )2 ⇔ y5 = 1, 072  y = f (x, y) = xy Ví dụ 1.2 Cho y(0) = với x ∈ [0, 1], h = 0, 05 Tính y(0, 05) Dùng phương pháp Euler ẩn Ta có y0 = y1 = y0 + 0, 05x1 y1 = + 0, 05(0 + 0, 05)y1 ⇔ y1 = y2 = y1 + 0, 05x2 y2 = 1, 0025 + 0, 05(0 + 2.0, 05)y2 1, 0025 = 1, 0075 0, 995 y3 = y2 + 0, 05x3 y3 = 1, 0075 + 0, 05(0 + 3.0, 05)y3 ⇔ y2 = ⇔ y3 = 1, 0075 = 1, 015 0, 9925 −7− = 1, 0025 0, 9975 1.3 Phương pháp số tổng quát Định nghĩa 1.4 (Xem [10]) Phương pháp số tổng quát thường có dạng k yn+1 = αj yn+1−j + hφf (yn+1 , yn , , yn+1−k , xn+1−k , h) (1.3) j=1 k gọi số bước phương pháp (??), h gọi bước nhảy phương pháp (??) Với k = phương pháp số (??) gọi phương pháp số bước, k ≥ phương pháp số (??) gọi phương pháp số đa bước Nếu φf khơng phụ thuộc vào yn+1 phương pháp số (??) phương pháp hiển Nếu φf phụ thuộc vào yn+1 phương pháp số (??) phương pháp ẩn Ví dụ 1.3 a Phương pháp số yn+1 = yn + hf (xn , yn ) phương pháp hiển bước b Phương pháp số yn+1 = yn + hf (xn+1 , yn+1 )là phương pháp ẩn bước c Phương pháp số h yn+1 = yn + [f (xn , yn ) + f (xn+1 , yn+1 )] phương pháp số bước d Phương pháp số h yn+1 = yn + [2f (xn , yn ) + f (xn+1 , yn+1 )] phương pháp số bước e Phương pháp số h yn+1 = yn−1 + [f (xn+1 , yn+1 ) + 4f (xn , yn ) + f (xn−1 , yn−1 )] phương pháp ẩn bước −8− 1.3.1 Cấp xác phương pháp số Định nghĩa 1.5 (Xem [10]) Phương pháp số (??) gọi phương pháp có cấp xác p k y(xn+1 ) − [ αj y(xn+1−j ) + hφf (y(xn+1 ), y(xn ), , y(xn+1−k ), xn+1−k , h)] j=1 = o(hp+1 ) với o(hp+1 ) vô bé bậc với hp+1 h → Ví dụ 1.4 a Phương pháp Euler hiển yn+1 = yn + hf (xn , yn ) phương pháp có cấp xác p = Ta có y(xn+1 ) = y(xn + h) = y(xn ) + hy (xn ) + o(h2 ) ⇒ y(xn+1 ) − y(xn ) = hy (xn ) + o(h2 ) y(xn+1 ) − y(xn ) − hf (xn , y(xn )) = o(h2 ) b Phương pháp Euler ẩn yn+1 = yn + hf (xn+1 , yn+1 ) phương pháp có cấp xác p = y(xn+1 ) − [y(xn ) + hf (xn+1 , y(xn+1 ))] = y(xn + h) − y(xn ) − hy (xn+1 ) = y(xn ) + hy (xn ) + o(h2 ) − y(xn ) − hy (xn + h) = y(xn ) + hy (xn ) + o(h2 ) − y(xn ) − h[y (xn ) + o(h)] = o(h2 ) c Phương pháp Euler cải tiến ( Phương pháp Euler hình thang) h yn+1 = yn + [f (xn , yn ) + f (xn+1 , yn+1 )] phương pháp có cấp xác p = h Ta có y(xn+1 ) − y(xn ) − [f (xn , y(xn )) + f (xn+1 , y(xn+1 ))] h = y(xn+1 ) − y(xn ) − [y (xn ) + y (xn+1 )] h = y(xn + h) − y(xn ) − [y (xn ) + y (xn + h)] h2 h = y(xn )+hy (xn )+ y (xn )+o(h3 )−y(xn )− [y (xn )+y (xn )+hy (xn ) 2 +o(h )] = o(h3 ) −9− 1.3.2 Tính phù hợp phương pháp số k αj yn+1−j +hφf (yn+1 , yn , , yn+1−k , xn+1−k , h) Đặt R(xn+1 ) = y(xn+1 )− j=1 Định nghĩa 1.6 R(xn+1 ) gọi sai số chặt cụt Định nghĩa 1.7 (Xem [10]) Phương pháp số (??) gọi phù hợp R(xn+1 ) =0 h→0 h Hệ 1.1 (Xem [10]) Phương pháp số (??) có cấp xác p ≥ lim phù hợp Ví dụ 1.5 Áp dụng hệ quả, cấp xác phương pháp lớn nên ta có a Phương pháp Euler hiển phù hợp b Phương pháp Euler ẩn phù hợp c Phương pháp Euler cải tiến ( hình thang) phù hợp Định nghĩa 1.8 Đa thức đặc trưng thứ phương pháp số (??) đa thức có dạng k k αj tk−j ρ(t) = t − j=1 Ví dụ 1.6 a Đa thức đặc trưng thứ phương pháp Euler ρ(t) = t − b Đa thức đặc trưng phương pháp số h yn+1 = yn−1 + [f (xn+1 , yn+1 ) + 4f (xn , yn ) + f (xn−1 , yn−1 )] ρ(t) = t2 − Định lý 1.2 (Xem [10]) Phương pháp số (??) phù hợp   ρ(1) = ⇔ φf (yn+1 , , yn+1−k , xn+1−k , h)   = f (xn+1−k , yn+1−k ) ρ (1) − 10 − Hiệu chỉnh y4 phương pháp Milne - Simpson bước lần thứ y41 = y2 + h [29f (x4 , y4 )+124f (x3 , y3 )+24f (x2 , y2 )+4f (x1 , y1 )−f (x0 , y0 )] 90 = 1, 00080032091543 Hiệu chỉnh y4 phương pháp Milne - Simpson bước lần thứ y42 = y2 + h [29f (x4 , y41 )+124f (x3 , y3 )+24f (x2 , y2 )+4f (x1 , y1 )−f (x0 , y0 )] 90 = 1, 00080032091930 Ta có y42 − y41 = 3, 87.10−12 > ε Hiệu chỉnh y4 phương pháp Milne - Simpson bước lần thứ y43 = y2 + h [29f (x4 , y42 ) + 124f (x3 , y3 ) + 24f (x2 , y2 ) + 4f (x1 , y1 ) 90 −f (x0 , y0 )] = 1, 00080032091930 Ta có y43 − y42 = < ε Dừng hiệu chỉnh y4 , y4∗ = 1, 00080032091930 Tương tự ta dự báo hiệu chỉnh giá trị lại, ta đưa bảng sau với số giá trị x y dự báo y hiệu chỉnh y xác yc-yd yc-yh 1 0 0,1 1,0050124311 1,0050125217 1,0050125209 0,89.10−7 8.10−10 0,2 1,0202011451 1,0202013409 1,0202013400 1,95.10−7 9.10−10 0,3 1,0460275499 1,0460278608 1,0460278599 3,1.10−7 9.10−10 0,4 1,0832866264 1,0832870686 1,0832870677 4,42.10−7 9.10−10 0,5 1,1331478573 1,1331484541 1,1331484531 5,96.10−7 10.10−10 0,6 1,1972165805 1,1972173642 1,1972173631 7,83.10−7 11.10−10 0,7 1,2776202999 1,2776213144 1,2776213132 10,13.10−7 12.10−10 0,8 1,3771264617 1,3771277656 1,3771277643 13,02.10−7 13.10−10 0,9 1,4993008297 1,4993025015 1,4993025001 16,7.10−7 14.10−10 1,6487191282 1,6487212723 1,6487212707 21,42.10−7 16.10−10 − 55 − Nhận xét 3.5 Bài toán làm rõ phần nhận xét trên, sai số giá trị xác với giá trị hiệu chỉnh nhỏ nhiều sai số giá trị xác với giá trị dự báo, cặp dự báo hiệu chỉnh toán tốt, làm rõ phần mục đích hiệu chỉnh khóa luận Bài toán  y = f (x, y) = x2 y Giải toán y(0) = đoạn ≤ x ≤ Nghiệm giải tích tốn x y(x) = e Chia đoạn [0, 1] thành 100 đoạn nhau, h = 0, 01 Chọn ε = 10−20 Tính giá trị y1 phương pháp Runge - Kutta hiển bốn nấc   Y01 = y0     h    Y02 = y0 + f (x0 , Y01 )     h Y03 = y0 + h[ f (x0 , Y01 ) − f (x0 + , Y02 )] 2    h   Y04 = y0 + h[ f (x0 + , Y02 ) − f (x0 − h, Y03 )]   3    h   y1 = y0 + h[ f (x0 , Y01 ) + f (x0 + , Y02 ) + f (x0 + h, Y04 )] 6 Ta có    Y01 =       Y =1    02 Y03 = 0, 999999625      Y04 = 1, 000000000000125      y1 = 1, 00000033333333 − 56 − Tương tự dùng phương pháp Runge - Kutta hiển bốn nấc ta tính y2 , y3 y2 = 1, 00000266667019 y3 = 1, 00000900004075 D bỏo y4 bng phng phỏp Nystroăm bc y4 = y2 + 2hf (x3 , y3 ) = 1, 00002066683219 Hiệu chỉnh y4 phương pháp Milne - Simpson bước lần thứ y41 = y2 + h [29f (x4 , y4 )+124f (x3 , y3 )+24f (x2 , y2 )+4f (x1 , y1 )−f (x0 , y0 )] 90 = 1, 00002133355787 Hiệu chỉnh y4 phương pháp Milne - Simpson bước lần thứ y42 = y2 + h [29f (x4 , y41 )+124f (x3 , y3 )+24f (x2 , y2 )+4f (x1 , y1 )−f (x0 , y0 )] 90 = 1, 00002133356130 Ta có y42 − y41 = 3, 43.10−12 > ε Hiệu chỉnh y4 phương pháp Milne - Simpson bước lần thứ y43 = y2 + h [29f (x4 , y42 )+124f (x3 , y3 )+24f (x2 , y2 )+4f (x1 , y1 )−f (x0 , y0 )] 90 = 1, 00002133356130 Ta có y43 − y42 = < ε Dừng hiệu chỉnh y4 , y4∗ = 1, 00002133356130 Tương tự ta dự báo hiệu chỉnh giá trị lại, ta đưa bảng sau với số giá trị − 57 − x y dự báo y hiệu chỉnh y xác yc-yd yc-yh 1 0 0,1 1,0003327206 1,0003333889 1,0003333889 6,68.10−7 0,2 1,0026695434 1,0026702254 1,0026702254 6,82.10−7 0,3 1,0090399003 1,0090406218 1,0090406218 7,22.10−7 0,4 1,0215617135 1,0215625157 1,0215625157 8,03.10−7 0,5 1,0425459623 1,0425469052 1,0425469052 9,43.10−7 0,6 1,0746541752 1,0746553441 1,0746553441 11,69.10−7 0,7 1,1211242541 1,1211257712 1,1211257712 15,17.10−7 0,8 1,1860932745 1,1860953181 1,1860953180 20,44.10−7 10−10 0,9 1,2750657878 1,2750686242 1,2750686241 28,36.10−7 10−10 1,3956083883 1,3956124252 1,3956124251 40,36.10−7 10−10 Bài toán  y = f (x, y) = x2 − y Giải toán y(0) = đoạn ≤ x ≤ Chia đoạn [0, 1] thành 100 đoạn nhau, h = 0, 01 Chọn ε = 10−20 Tính giá trị y1 phương pháp Runge - Kutta hiển bốn nấc   Y01 = y0     h    Y02 = y0 + f (x0 , Y01 )     h Y03 = y0 + h[ f (x0 , Y01 ) − f (x0 + , Y02 )] 2    h   Y04 = y0 + h[ f (x0 + , Y02 ) − f (x0 − h, Y03 )]   3    h   y1 = y0 + h[ f (x0 , Y01 ) + f (x0 + , Y02 ) + f (x0 + h, Y04 )] 6 − 58 − Ta có    Y01 =       Y =0    02 Y03 = −3, 75.10−7      Y04 = 4, 6875.10−16      y1 = 3, 33333333333334.10−7 Tương tự dùng phương pháp Runge - Kutta hiển bốn nấc ta tính y2 = 0, 00000266666664333333 y3 = 0, 00000899999963000001 D bỏo y4 bng phng phỏp Nystroăm bc y4 = y2 + 2hf (x3 , y3 ) = 0, 0000206666650233334632 Hiệu chỉnh y4 phương pháp Milne - Simpson bước lần thứ y41 = y2 + h [29f (x4 , y4 )+124f (x3 , y3 )+24f (x2 , y2 )+4f (x1 , y1 )−f (x0 , y0 )] 90 = 0, 0000213333307987411 Hiệu chỉnh y4 phương pháp Milne - Simpson bước lần thứ y42 = y2 + h [29f (x4 , y41 )+124f (x3 , y3 )+24f (x2 , y2 )+4f (x1 , y1 )−f (x0 , y0 )] 90 = 0, 0000213333307085190 Ta có y42 − y41 = 9.10−14 > ε Hiệu chỉnh y4 phương pháp Milne - Simpson bước lần thứ y43 = y2 + h [29f (x4 , y42 )+124f (x3 , y3 )+24f (x2 , y2 )+4f (x1 , y1 )−f (x0 , y0 )] 90 = 0, 0000213333307085190 Ta có y43 − y42 = < ε − 59 − Dừng hiệu chỉnh y4 , y4∗ = 0, 0000213333307085190 Tương tự ta dự báo hiệu chỉnh giá trị lại, ta đưa bảng sau với số giá trị x y dự báo y hiệu chỉnh y Maple yM-yd yM-yh 0 0 0 0,1 0,0003326652 0,0003333317 0,0003333317 6,66.10−7 0,2 0,0026657983 0,0026664635 0,0026664635 6,65.10−7 0,3 0,0089958715 0,0089965303 0,0089965303 6,58.10−7 6,4.10−7 0,5 0,0415425230 0,0415431266 0,0415431266 6,03.10−7 0,6 0,0715585829 0,0715591195 0,0715591195 5,36.10−7 4,3.10−7 0,8 0,1674181669 0,1674184459 0,1674184459 2,79.10−7 0,9 0,2356980082 0,2356980903 0,2356980903 0,82.10−7 1,5.10−7 0,4 0,0213067261 0,0213073673 0,0213073673 0,7 0,1130444351 0,1130448655 0,1130448655 0,3183663970 0,3183662467 0,3183662467 Nhận xét 3.6 Bài toán cho ta thấy sai số giá trị nghiệm maple tính Runge - Kutta 4-5 với giá trị hiệu chỉnh nhỏ nhiều sai số giá trị nghiệm maple tính với giá trị dự báo, cặp dự báo hiệu chỉnh toán tốt, làm rõ phần mục đích hiệu chỉnh khóa luận, q trình hiệu chỉnh làm cho giá trị nghiệm hiệu chỉnh gần với nghiệm gần hơn, có ý nghĩa quan trọng giải gần phương trình vi phân mà giải tích khơng tìm lời giải giải tích − 60 − Phụ lục Chương trình giải Maple Code Bài toán > restart; with(Maplets[Elements]): > GD:=Maplet([ ["Nhap ham f(x,y)= ",TextField[f]("-2*y+xsin(x)")], [ "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 to n x[i]:=a+i*h: 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): − 61 − yd[0]:=evalf(y0,20): y01:=evalf(yh[0]+h1*f(x[0],yd[0]),20); yd[1]:=evalf(yd[0]+2*h1*f(x01, y01), 20): H[1][0]:=yd[1]: H[1][1]:=evalf(yd[0]+(h1/3)*(f(x[1],H[1][0]) +4*f(x01,y01)+f(x[0],yd[0])),20): i:=1: while abs(H[1][i]-H[1][i-1])>epsilon i:=i+1; H[1][i]:=evalf(yd[0]+(h1/3)*(f(x[1],H[1][i-1]) +4*f(x01,y01)+f(x[0],yd[0])),20): if i>nmax then break; end if; end do: yh[1]:=H[1][i]: >for i from to n yd[i]:=yh[i-2]+2*h*f(x[i-1],yh[i-1]); H[i][0]:=yd[i]; H[i][1]:=evalf(yh[i-2]+(h/3)*(f(x[i],H[i][0]) +4*f(x[i-1],yh[i-1])+f(x[i-2],yh[i-2])),20): j:=1: while abs(H[i][j]-H[i][j-1])>epsilon j:=j+1; H[i][j]:=evalf(yh[i-2]+(h/3)*(f(x[i],H[i][j-1]) +4*f(x[i-1],yh[i-1])+f(x[i-2],yh[i-2])),20); 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 − 62 − print(‘Không tìm nghiệm xác Maple cho nghiệm số phương pháp Runge-Kutta bậc 4-5 để làm 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)),25): else ngh:=unapply(rhs(rs[1]),t): print(‘Nghiệm xác giải 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 to 10 printf("%10.3f %20.10f %20.10f %20.10f %20.10f %20.10f\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 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); >p1:=plot(ngh(t),t=a b,color=red,legend="Nghiệm xác"): plots[display](p1); >p2:=plot([seq([x[i],yh[i]],i=0 n)],color=blue, legend="Nghiệm hiệu chỉnh"): plots[display](p2); >p1:=plot([seq([x[i],yd[i]],i=0 n)],color=blue, legend="Nghiệm dự báo"): p2:=plot([seq([x[i],yh[i]],i=0 n)],color=red, legend="Nghiệm hiệu chỉnh"): − 63 − plots[display](p1,p2); Đối với toán 2,3,4 ta dùng code trên, thay hàm f (x, y) hàm toán 2,3,4 Code Bài toán >restart; with(Maplets[Elements]): Digits:=20: >GD:=Maplet([ ["Nhap ham f(x,y)= ",TextField[f]("-cos(x)*y")], [ "Nhap a= ", TextField[a]("0"), " b= ", TextField[b]("1")], [ "Nhap n= ", TextField[n]("100"), " y0= ", TextField[y0]("1")], [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:= 1e-19; nmax:=100: >for i from to n x[i]:=a+i*h: end do: >yh[0]:=evalf(y0,20): yd[0]:=evalf(y0,20): for z from to Y[z-1][1]:=yh[z-1]: Y[z-1][2]:=yh[z-1]+(1/2)*h*f(x[z-1],Y[z-1][1]): − 64 − Y[z-1][3]:=yh[z-1]+h*((1/2)*f(x[z-1],Y[z-1][1]) -(3/2)*f(x[z-1]+(1/2)*h,Y[z-1][2])): Y[z-1][4]:=yh[z-1]+h*((4/3)*f(x[z-1]+(1/2)*h,Y[z-1][2]) -(1/3)*f(x[z-1]-h,Y[z-1][3])): yd[z]:=evalf(yh[z-1]+h*((1/6)*f(x[z-1],Y[z-1][1])+ (2/3)*f(x[z-1]+(1/2)*h,Y[z-1][2]) +(1/6)*f(x[z-1]+h,Y[z-1][4])),15): yh[z]:=yd[z]: end do: >yd[4]:=yd[2]+2*h*f(x[3],yd[3]); H[4][0]:=yd[4]: H[4][1]:=evalf(yh[2]+(h/90)*(29*f(x[4],H[4][0])+124*f(x[3],yh[3]) +24*f(x[2],yh[2])+4*f(x[1],yh[1])-f(x[0],yh[0])),20); i:=1: while abs(H[4][i]-H[4][i-1])>epsilon i:=i+1; H[4][i]:=evalf(yd[2]+(h/90)*(29*f(x[4],H[4][i-1]) +124*f(x[3],yh[3]) +24*f(x[2],yh[2]) +4*f(x[1],yh[1])-f(x[0],yh[0])),20); if i>nmax then break; end if; end do; yh[4]:=H[4][i]; >for i from to n yd[i]:=yh[i-2]+2*h*f(x[i-1],yh[i-1]); H[i][0]:=yd[i]; H[i][1]:=evalf(yh[i-2]+(h/90)*(29*f(x[i],H[i][0]) +124*f(x[i-1],yh[i-1])+24*f(x[i-2],yh[i-2]) +4*f(x[i-3],yh[i-3])-f(x[i-4],yh[i-4])),20): j:=1: while abs(H[i][j]-H[i][j-1])>epsilon j:=j+1; − 65 − H[i][j]:=evalf(yh[i-2]+(h/90)*(29*f(x[i],H[i][j-1]) +124*f(x[i-1],yh[i-1])+24*f(x[i-2],yh[i-2]) +4*f(x[i-3],yh[i-3])-f(x[i-4],yh[i-4])),20); 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 nghiệm xác Maple cho nghiệm số phương pháp Runge-Kutta bậc 4-5 để làm 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)),25): else ngh:=unapply(rhs(rs[1]),t): print(‘Nghiệm xác giải 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 to 10 printf("%10.3f %20.10f %20.10f %20.10f %20.10f %20.10f\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 xác"): p2:=plot([seq([x[i],yh[i]],i=0 n)],color=blue,style=point, legend="Nghiệm hiệu chỉnh"): − 66 − plots[display](p1,p2); >p1:=plot(ngh(t),t=a b,color=red,legend="Nghiệm xác"): plots[display](p1); >p2:=plot([seq([x[i],yh[i]],i=0 n)],color=blue, legend="Nghiệm hiệu chỉnh"): plots[display](p2); >p1:=plot([seq([x[i],yd[i]],i=0 n)],color=blue, legend="Nghiệm dự báo"): p2:=plot([seq([x[i],yh[i]],i=0 n)],color=red, legend="Nghiệm hiệu chỉnh"): plots[display](p1,p2); Đối với toán 6,7,8 ta dùng code trên, thay hàm f (x, y) hàm toán 6,7,8 chọn giá trị y0 , giá trị n thích hợp − 67 − Kết luận Khóa luận tìm hiểu khái niệm sở giải tích số, nêu phương pháp số để giải phương trình vi phân thường, trình bày rõ ràng cách thành lp cỏc phng phỏp s Nystroăm v Milne Simpson, ó nờu c mt s phng phỏp Nystroăm v Milne – Simpson để giải phương trình vi phân thường Ứng dng cp phng phỏp d bỏo v hiu chnh Nystroăm Milne – Simpson để giải số phương trình vi phân thường, cặp phương pháp cho kết hiệu chỉnh tốt, có giá trị hiệu chỉnh gần với nghiệm xác Hi vọng khóa luận nghiên cứu sâu nữa, để tìm hiu cỏc phng phỏp s Nystroăm v Milne Simpson, cặp phương pháp đem lại hiệu chỉnh nghiệm tốt nhất, đưa số phương pháp bậc cao − 68 − Tài liệu tham khảo [1] Phạm Kỳ Anh, Giải tích số, Nhà xuất DHQD Hà Nội, 2000 [2] Butcher.J.C (John Charles), Numerical methods for ordinary differential equations (second edition), John Wiley & Sons, Ltd, 2008 [3] Dahlquits, Convergence and stability in the numerical integration of ordinary differential equation, Math Scand 4, 1956, pp 33 - 53 [4] Phạm Văn Hạp, Lê Đình Thịnh, Phương pháp tính thuật tốn, NXB Giáo dục, 2000 [5] Henrici, Discrete variable methods in ordinary differential equation, Wiley, New York, 1962 [6] Nguyễn Thế Hồn, Cơ sở phương trình vi phân lý thuyết ổn định, NXB Giáo dục, 2000 [7] Dỗn Tam Hịe, Tốn học tính tốn, NXB Giáo dục,2005 [8] Isaascon and H.B Keller, Analysis of numerical methods, Wiley, New York, 1966 [9] Arieh Iserles, A first course in the numerical analysis of differential equation (second edition), Cambridge University Press, New York, 2009 [10] J.D Lambert, Numerical methods for ordinary differential systems, John Wiley and Sons Ltd, 1993 [11] B V Ramana, Higher engineering mathematics, McGraw-Hill , 2006 − 69 − ... nhảy phương pháp (??) Với k = phương pháp số (??) gọi phương pháp số bước, k ≥ phương pháp số (??) gọi phương pháp số đa bước Nếu φf không phụ thuộc vào yn+1 phương pháp số (??) phương pháp hiển... phương trình vi phân thường Khóa luận gồm chương: Chương 1: Trình bày số khái niệm sở giải số phương trình vi phân −3− Chương 2: Trình bày cỏc phng phỏp s Nystroăm v Milne Simpson giải số phương. .. sai số giá trị dự báo với giá trị nghiệm maple tính, từ cho thấy giá trị hiệu chỉnh tốt nhiều so với giá trị dự báo, có ý nghĩa quan trọng vi? ??c giải gần phương trình vi phân phương pháp số −

Ngày đăng: 08/05/2021, 20:59

Từ khóa liên quan

Tài liệu cùng người dùng

  • Đang cập nhật ...

Tài liệu liên quan