1. Trang chủ
  2. » Luận Văn - Báo Cáo

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

111 23 0

Đ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

Thông tin cơ bản

Định dạng
Số trang 111
Dung lượng 596,03 KB

Nội dung

TRƯỜNG ĐẠI HỌC SƯ PHẠM ĐÀ NẴNG KHOA TOÁN −−− −−− HUỲNH THỊ NHƯ HUỆ DỰ BÁO VÀ HIỆU CHỈNH VỚI CẶP PHƯƠNG PHÁP ADAMS - BASHFORTH 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/2014 Mục lục Lời nói đầu Kiến thức chuẩn bị 1.1 1.2 Bài toán Cauchy cách tiếp cận lời giải số toán Cauchy 1.2.1 Bài toán 1.2.2 Tiếp cận lời giải số toán Cauchy 1.3 Định lý tồn nghiệm 1.4 Phương pháp số tổng quát 12 11 1.4.1 Cấp xác phương pháp số 13 1.4.2 Sự hội tụ phương pháp số 14 1.4.3 Tính phù hợp phương pháp số 15 1.5 Phương pháp lặp đơn giải phương trình phi tuyến 1.6 Đa thức nội suy Newton lùi tới mốc cách 19 1.7 Phương trình Riccati 21 1.8 Phương trình vi phân 19 1.7.1 Dạng tắc phương trình Riccati 21 1.7.2 Một số tính chất phương trình Riccati 22 1.7.3 Dạng đặc biệt phương trình Riccati 22 Phương pháp Runge - Kutta 24 Xây dựng phương pháp Adams hiển phương pháp Milne - Simpson 27 −2− 2.1 2.2 2.3 Phương pháp tuyến tính k bước 27 2.1.1 Tính phù hợp phương pháp tuyến tính k bước 28 2.1.2 Tính zero ổn định phương pháp tuyến tính k bước 30 2.1.3 Sự hội tụ phương pháp tuyến tính đa bước 30 2.1.4 Cấp xác phương pháp tuyến tính đa bước 31 Cơng thức Adams - Bashforth 32 2.2.1 Xây dựng công thức 32 2.2.2 Một vài phương pháp Adams - Bashforth 35 2.2.3 Các phương pháp Adams - Bashforth bậc cao 42 Phương pháp Milne - Simpson 46 2.3.1 Giới thiệu 46 2.3.2 Đa thức đặc trưng thứ 49 2.3.3 Cấp xác hội tụ phương pháp Milne - Simpson 49 Dự báo hiệu chỉnh với cặp phương pháp Adams - Bashforth Milne – Simpson 3.1 54 Dự báo phương pháp Adams - Bashforth hai bước, hiệu chỉnh phương pháp Milne - Simpson hai bước 54 3.2 3.1.1 Bài toán 54 3.1.2 Thuật toán 55 3.1.3 Áp dụng thuật toán giải tập 56 Dự báo phương pháp Adams - Bashforth ba bước, hiệu chỉnh phương pháp Milne - Simpson hai bước 68 3.3 3.2.1 Bài toán 68 3.2.2 Thuật toán 68 3.2.3 Áp dụng thuật toán giải số toán 70 Dự báo phương pháp Adams - Bashforth bước hiệu chỉnh phương pháp Milne - Simpson bước 81 3.3.1 Bài toán 81 −3− 3.3.2 Thuật toán 81 3.3.3 Áp dụng thuật toán giải tập 83 Phụ lục 93 Kết luận 104 Tài liệu tham khảo 105 −4− Lời nói đầu Nhiều hệ thống vật lý phức tạp biểu diễn phương trình vi phân phương trình vi phân thường khơng thể tìm nghiệm giải tích Trong kỹ thuật, người ta thường sử dụng giá trị thu việc giải gần hệ phương trình vi phân theo phương pháp Mặc dù có lịch sử phát triển hàng trăm năm, giải số phương trình vi phân thường thu hút quan tâm mạnh mẽ nhà toán học nhà nghiên cứu ứng dụng Trong phương pháp số giải phương trình vi phân người ta thường cố gắng tìm phương pháp hữu hiệu bảo đảm hội tụ, tính ổn định tính xác cao Để làm điều người ta thường kết hợp phương pháp tuyến tính đa bước để nhận phương pháp hội tụ độ xác cao Trong khóa luận tơi sử dụng cặp phương pháp Adams - Bashforth Minle - Simpson 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 nhằm tăng độ xác cho nghiệm Bố cục khóa luận gồm chương phụ lục: Chương trình bày số khái niệm giải số phương trình −5− vi phân kiến thức chuẩn bị có liên quan Chương trình bày cặp phương pháp tuyến tính sử dụng làm cặp phương pháp dự báo hiệu chỉnh Adams - Bashforth Milne – Simpson Chương nêu thuật toán dự báo hiệu chỉnh với cặp phương pháp Adams - Bashforth Milne – Simpson để giải số phương trình vi phân Để minh họa kiểm chứng lý thuyết tơi lập trình tính tốn Maple vào số ví dụ cụ thể Các kết cho bảng cách chi tiết với đồ thị nghiệm Tôi xin gửi lời cảm ơn sâu sắc đến thầy Nguyễn Hoàng Thành người giới thiệu đề tài hướng dẫn tơi suốt thời gian thực khóa luận Tôi xin chân thành cảm ơn thầy Tôn Thất Tú, người hướng dẫn tận tình giúp đỡ tơi cài đặt làm quen với phần mềm Maple Cuối xin chân thành cảm ơn ban chủ nhiệm khoa, thầy khoa Tốn thầy cô trường giảng dạy, giúp đỡ năm học qua Chính thầy xây dựng cho kiến thức tảng kiến thức chun mơn để tơi hồn thành luận văn công việc sau Do thời gian thực khơng nhiều kiến thức cịn hạn chế nên khơng tránh sai sót thực khóa luận tơi mong nhận góp ý thầy để tơi hồn thiện Tơi xin chân thành cảm ơn! −6− Đà Nẵng, ngày 20 tháng năm 2012 Sinh viên Huỳnh Thị Như Huệ −7− Chương Kiến thức chuẩn bị 1.1 Phương trình vi phân Định nghĩa 1.1 Phương trình có dạng F (x, y, y , ., y (n) ) = gọi phương trình vi phân cấp n Trong y = y(x) hàm cần phải tìm Hàm y = ϕ(x) gọi nghiệm phương trình vi phân ta ta thay y = ϕ(x), y = ϕ (x) y (n) = ϕ(n) (x) ta nhận đẳng thức F (x, ϕ(x), ϕ (x), , ϕ(n) (x)) = 1.2 Bài toán Cauchy cách tiếp cận lời giải số toán Cauchy 1.2.1 Bài tốn Trong khóa luận này, ta đề cập đến phương pháp số để giải tốn tìm giá trị ban đầu Phương trình vi phân cấp cao hay hệ phương trình vi phân cấp cao ln viết dạng hệ phương trình vi phân cấp ta luôn giả sử điều thực Bài tốn giá trị ban đầu hay cịn gọi tốn Cauchy hệ phương trình vi phân cấp có dạng:  y = f (x, y) y(a) = η (1.1) Với f : [a, b] × Rm → Rm y : [a, b] → Rm η = (y1 (a), y2 (a), , yn (a)) 1.2.2 Tiếp cận lời giải số toán Cauchy 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 (1.1) tập rời rạc [a, b] Chia [a, b] thành tập điểm {xi }N i=0 cho    xi = a + ih    i = 0, N    b−a  h = N Tham số h gọi độ dài bước nhảy Giả sử y(x) nghiệm hệ phương trình (1.1) Gọi yn xấp xỉ y(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ị N {yn }N n=0 xấp xỉ nghiệm y(x) tập rời rạc {xn }n=0 Phương pháp số để giải toán (1.1) hệ sai phân k + giá trị xấp xỉ {yn+1−i }ki=0 {y(xn+1−i )}ki=0 để từ ta tính −9− giá trị {yn }N n=0 biết k giá trị ban đầu k gọi số bước phương pháp  yn+1 = yn + hf (xn , yn ) Ví dụ 1.1 Phương pháp Euler hiển: y(x ) = y 0  y = f (x, y) = x2 − y Áp dụng cho toán: với x ∈ [0, 1], h = 0, 05 y(0) = Ta kết sau: y1 = y0 + 0, 05f (x0 , y0 ) = + 0, 05.0 = y2 = y1 + 0, 05f (x1 , y1 ) = + 0, 05(x21 − y12 ) = 0, 05.0, 052 = 0, 000125 y3 = y2 +0, 05f (x2 , y2 ) = 0, 000125+0, 05.(0, 12 −0, 0001252 ) = 0, 000625 y4 = y3 +0, 05f (x3 , y3 ) = 0, 000625+0, 05.(0, 152 −0, 0006252 ) = 0, 00175 y5 = y4 + 0, 05f (x4 , y4 ) = 0, 00175 + 0, 05.(0, 22 − 0, 001752 ) = 0, 00375 Ví dụ 1.2 Phương pháp  Euler ẩn: yn+1 = yn + hf (xn+1 , yn+1 ) y = f (x, y) = x − y Áp dụng cho toán: với x ∈ [0, 10], h = 0, y(0) = Ta có kết sau: y1 = y0 + hf (x1 , y1 ) = + 0, 5(0, − y1 ) = 0, 833333 ⇔ y1 = y2 = y1 + hf (x2 , y2 ) = + 0, 5(1 − y2 ) ⇔ y2 = y3 = y2 + hf (x3 , y3 ) = = 0, 88889 + 0, 5(1, − y3 ) − 10 − Hình 3.20: Đồ thị biểu diễn nghiệm maple tính − 97 − Phụ lục Chương trình giải Maple Code Bài tốn > restart; Digits:=20: ham:=-y+x^2; n:=1000; a:=0; b:=1; y0:=1; 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: > 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]): Y[z-1][3]:=yh[z-1]+h*((1/2)*f(x[z-1],Y[z-1][1]) − 98 − -(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[3]:=evalf(yd[2]+(h/12)*(23*f(x[2],yd[2])-16*f(x[1], yd[1])+5*f(x[0],yh[0])),20); H[3][0]:=yd[3]: H[3][1]:=evalf(yh[1]+(h/3)*(f(x[3],H[3][0])+4*f(x[2],yh[2]) +f(x[1],yh[1])),20); i:=1: while abs(H[3][i]-H[3][i-1])>epsilon i:=i+1; H[3][i]:=evalf(yd[1]+(h/3)*(f(x[3],H[3][i-1])+4*f(x[2], yh[2])+f(x[1],yh[1])),20); if i>nmax then break; end if; end do; yh[3]:=H[3][i]; > for i from to n yd[i]:=evalf(yh[i-1]+(h/12)*(23*f(x[i-1],yh[i-1]) -16*f(x[i-2],yh[i-2])+5*f(x[i-3],yh[i-3])),20); 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; − 99 − 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 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)),20): 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.15f %20.15f %20.15f %20.15f %20.15f\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 maple tính"): − 100 − 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 maple tính"): 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 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]("x^2-y")], ["Nhap a= ", TextField[a]("0"), " b= ", TextField[b] ("1")], ["Nhap n= ", TextField[n]("1000"), " y0= ", TextField [y0]("1")], [Button("Thoat", Shutdown([f,a,b,n,y0]))] ]): − 101 − >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: >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]): 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[3]:=evalf(yd[2]+(h/2)*(3*f(x[2],yd[2])-f(x[1],yh[1])), 20); H[3][0]:=yd[3]: H[3][1]:=evalf(yh[1]+(h/3)*(f(x[3],H[3][0])+4*f(x[2],yh[2]) +f(x[1],yh[1])),20); − 102 − i:=1: while abs(H[3][i]-H[3][i-1])>epsilon i:=i+1; H[3][i]:=evalf(yd[1]+(h/3)*(f(x[3],H[3][i-1])+4*f(x[2], yh[2])+f(x[1],yh[1])),20); if i>nmax then break; end if; end do; yh[3]:=H[3][i]; >for i from to n yd[i]:=evalf(yh[i-1]+(h/2)*(3*f(x[i-1],yh[i-1])-f(x[i-2], yh[i-2])),20); 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 print(‘Khơng tìm nghiệm xác Maple cho nghiệm sốbằng 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= − 103 − 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.15f %20.15f %20.15f %20.15f %20.15f\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 maple tính"): 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 maple tính"): 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"): − 104 − plots[display](p1,p2); Đối với toán 6,7 ta dùng code trên, thay hàm f (x, y) hàm toán 6,7 chọn giá trị y0 , giá trị n thích hợp Code Bài tốn >restart; with(Maplets[Elements]): Digits:=20: >GD:=Maplet([ ["Nhap ham f(x,y)= ",TextField[f]("x-exp(y)")], [ "Nhap a= ", TextField[a]("0"), " b= ", TextField[b] ("1")], [ "Nhap n= ", TextField[n]("1000"), " 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]); y0:=y[0]; 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: >yh[0]:=evalf(y0,20): − 105 − 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]): 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]:=evalf(yd[3]+(h/2)*(3*f(x[3],yd[3])-f(x[2],yd[2])), 20); 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],y[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],y[0])) ,20); if i>nmax then break; end if; end do; yh[4]:=H[4][i]; >for i from to n yd[i]:=evalf(yh[i-1]+(h/2)*(3*f(x[i-1],yh[i-1])-f(x[i-2], yh[i-2])),20); − 106 − 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; 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", − 107 − "y du bao","y hieu chinh","y Maple","yM-yd","yM-yh"); >for i from to 10 printf("%10.3f %20.15f %20.15f %20.15f %20.10f %20 15f\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 maple tính"): 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 maple tính"): 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 9,10 ta dùng code trên, thay hàm f (x, y) hàm toán 9,10 chọn giá trị y0 , giá trị n thích hợp − 108 − Kết luận Khóa luận tìm hiểu hệ thống khái niệm kiến thức sở mơn phương pháp số giải phương trình vi phân Ơ chương em có trình bày cách xây dựng phương pháp Adams Bashforth phương pháp Milne - Simpson đưa số phương pháp Adams - Bashforth bậc cao tiến hành xét hội tụ, tính cấp xác Sử dụng cặp phương pháp Adams - Bashforth Milne - Simpson để giải phương trình vi phân thường với việc sử dụng phương pháp Runge - Kutta nấc tính giá trị y1 , y2 , y3 sau dự báo hiệu chỉnh cặp phương pháp Adams - Bashforth Milne - Simpson, kết hiệu chỉnh thu tốt, giá trị hiệu chỉnh gần với giá trị nghiệm xác với sai số nhỏ − 109 − Tài liệu tham khảo [1] Phạm Kỳ Anh, Giải tích số, Nhà xuất ĐHQG Hà Nội, 2000 [2] Butcher J C., On the convergence of numerical solutions to ordinary differential equation, Math Comp, 20 pp - 10, 1996 [3] Chartres B A and Stepleman R S., General theoty of convergence for numerical methods, SIAM J Numer Anal, 9, pp 476 - 492, 1972 [4] Dahlquits G., Convergence and stability in the numerical integration of ordinary differential equation, Math Scand, 4, pp 33 53, 1956 [5] Nguyễn Hữu Điển, Latex với gói lệnh phần mềm cơng cụ, NXB ĐHQG Hà Nội [6] Gear C W., Hybrid method for innitial value problems in ordinary differential equation, Math Comp, 20, pp - 10,1965 [7] Henrici P., Discrete variable methods in ordinary differential equation, Wiley, New York, 1962 [8] 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 [9] Arieh Iserles, A first course in the numerical analysis of differential equation (second edition), Cambridge University Press, New York, 2009 − 110 − [10] J.D Lambert, Numerical methods for ordinary differential systems, John Wiley and Sons Ltd, 1993 [11] Ma ăkela M., Nevanlinna O and Sipia ă A H., the concepts of convergence, consistency and stability in connexton with some numerical method, Numer Math, 22, pp 261 - 274, 1974 [12] Spijker M N., and stability of - step - by - step method for the numerical solution of innitial value problems, Numer Math, 8, pp 161 - 177, 1966 − 111 − ... 49 Dự báo hiệu chỉnh với cặp phương pháp Adams - Bashforth Milne – Simpson 3.1 54 Dự báo phương pháp Adams - Bashforth hai bước, hiệu chỉnh phương pháp Milne - Simpson hai bước... bước để nhận phương pháp hội tụ độ xác cao Trong khóa luận tơi sử dụng cặp phương pháp Adams - Bashforth Minle - Simpson 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. .. Bashforth Milne – Simpson Chương nêu thuật toán dự báo hiệu chỉnh với cặp phương pháp Adams - Bashforth Milne – Simpson để giải số phương trình vi phân Để minh họa kiểm chứng lý thuyết tơi lập trình

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

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w