Tính gần đúng giá trị hàm số bằng đa thức nội suy với ngôn ngữ lập trình c

43 42 0
Tính gần đúng giá trị hàm số bằng đa thức nội suy với ngôn ngữ lập trình c

Đ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

Nội suy hàm số TRƯỜNG ĐẠI HỌC VINH KHOA TOÁN HỌC TÍNH GẦN ĐÚNG GIÁ TRỊ HÀM SỐ BẰNG ĐA THỨC NỘI SUY VỚI NGƠN NGỮ LẬP TRÌNH C KHĨA LUẬN TỐT NGHIỆP ĐẠI HỌC CHUYÊN NGÀNH TOÁN - TIN HỌC ỨNG DỤNG Vinh, tháng năm 2012 SVTH: Đậu Thanh Sang Lớp: 49B-Toán Tin ứng dụng Nội suy hàm số TRƯỜNG ĐẠI HỌC VINH KHOA TOÁN HỌC KHÓA LUẬN TỐT NGHIỆP ĐẠI HỌC TÍNH GẦN ĐÚNG GIÁ TRỊ HÀM SỐ BẰNG ĐA THỨC NỘI SUY VỚI NGÔN NGỮ LẬP TRÌNH C Người hướng dẫn : ThS Nguyễn Thanh Diệu Người thực : Đậu Thanh Sang Lớp : 49B - Toán - Tin học ứng dụng MSSV : 0851090364 Vinh, tháng năm 2012 SVTH: Đậu Thanh Sang Lớp: 49B-Toán Tin ứng dụng Nội suy hàm số Mục lục Mở đầu Chương : Nội suy hàm số đa thức nội suy Lagrange 1.1 Đa thức nội suy 1.2 Nội suy hàm số đa thức nội suy Lagrange Chương : Nội suy hàm số đa thức nội suy Newton 17 2.1 Đa thức nội suy Newton với mốc nội suy không cách 17 2.2 Đa thức nội suy Newton với mốc nội suy cách 24 Chương : Một số ứng dụng phép nội suy 34 3.1 Tính gần đạo hàm 34 3.2 Tính gần tích phân 36 Kết luận 40 Tài liệu tham khảo 41 SVTH: Đậu Thanh Sang Lớp: 49B-Toán Tin ứng dụng Nội suy hàm số MỞ ĐẦU Trong thực tế ứng dụng, dẫn đến phải làm việc với hàm số y = f(x) với b yêu cầu tính f ( x*); f ( x*);  f ( x)dx Trong nhiều trường hợp, hàm (n) a f ( x) biết biểu thức giải tích phức tạp biết giá trị hàm số yi  f ( xi ) số điểm xi  [a,b] Khi đó, việc tính giá trị gặp phải khó khăn Khơng nhiều trường hợp hàm số f có từ thực nghiệm nên hệ số thường số gần Trong trường hợp đó, việc tính giá trị khơng khó thực mà cịn khơng có ý nghĩa ứng dụng Do đó, người ta thường tìm cách thay hàm số f hàm số g có dạng quen thuộc mà việc tính giá trị đạo hàm, tích phân hàm g dễ thực đồng thời kết tính hàm g sai khác kết hàm f lượng không đáng kể Một phương pháp thường sử dụng để tìm hàm g phép nội suy hàm số Phép nội suy hàm số phương pháp xây dựng điểm liệu dựa vào tập rời rạc điểm liệu biết Các liệu có nhờ việc lấy mẫu, thí nghiệm, phép thử…từ người ta cố gắng xây dựng hàm mà khớp gần với liệu Có nhiều phương pháp nội suy hàm số xây dựng Chúng ta kể đến phương pháp như: Nội suy hàm số đa thức nội suy Lagrange, Nội suy hàm số đa thức nội suy Newton… Ngày nay, có nhiều ngơn ngữ lập trình hỗ trợ việc tính tốn kể đến ngơn ngữ lập trình như: Pascal, C, C++ , C# … Các kết phép nội suy nghiên cứu ứng dụng rộng rãi Trên lý thuyết nội suy hàm số ngơn ngữ lập trình quen thuộc, chúng SVTH: Đậu Thanh Sang Lớp: 49B-Toán Tin ứng dụng Nội suy hàm số chọn đề tài nghiên cứu cho khóa luận “Nội suy hàm số để tính giá trị hàm số điểm với ngơn ngữ lập trình C” Mục đích khóa luận viết chương trình nội suy hàm số ngơn ngữ C Với mục đích đó, Khóa luận trình bày thành chương Chương Nội suy hàm số đa thức nội suy Lagrange Nội dung phần trình bày phương pháp nơi suy hàm số sử dụng đa thức nội suy Lagrange với mốc nội suy cách mốc nội suy khơng cách Cài đặt thuật tốn sử dụng máy tính ngơn ngữ C Chương Nội suy hàm số đa thức nội suy Newton Nội dung phần trình bày phương pháp nội suy hàm số sử dụng đa thức nội suy Newton với mốc nội suy cách mốc nội suy khơng cách Cài đặt thuật tốn sử dụng máy tính ngơn ngữ C Chương Một số ứng dụng phép nội suy hàm số Nội dung phần trình bày số ứng dụng phép nội suy hàm số Sử dụng đa thức nội suy để tính gần đạo hàm tính gần tích phân Khóa luận thực trường Đại học Vinh, hướng dẫn ThS.Nguyễn Thanh Diệu Em xin bày tỏ lòng biết ơn sâu sắc tới Thầy nhiệt tình hướng dẫn dành cho em suốt trình hình thành khóa luận Nhân dịp em xin trân trọng cảm ơn Ban chủ nhiệm khoa Tốn, thầy giáo khoa Tốn trường Đại học Vinh, gia đình bạn bè tạo điều kiện thuận lợi để em học tập hồn thành khóa luận Mặc dù có nhiều cố gắng, song khóa luận khơng tránh khỏi thiếu sót Em mong nhận ý kiến đóng góp thầy, giáo bạn đọc để khóa luận hồn thiện Sinh viên Đậu Thanh Sang SVTH: Đậu Thanh Sang Lớp: 49B-Toán Tin ứng dụng Nội suy hàm số CHƯƠNG NỘI SUY HÀM SỐ BẰNG ĐA THỨC NỘI SUY LAGRANGE 1.1 Đa thức nội suy Định nghĩa 1.1.1 Giả sử y = f(x) tương ứng giá trị khác x0, x1,…, xn giá trị y0, y1,…, yn Các giá trị x0, x1,…, xn gọi mốc nội suy Đa thức Pn(x) gọi đa thức nội suy hàm f(x) theo mốc nội suy x0, x1,…, xn Pn(x) thỏa mãn: + Pn(x) đa thức bậc n + Pn(xi) = yi (i= 1, n ) Rn(x) = f(x) – Pn(x) gọi sai số nội suy Định lý 1.1.1 Đa thức nội suy Pn(x) hàm số y = f(x) với mốc nội suy x0, x1,…, xn có Chứng minh Giả sử y = f(x) với mốc nội suy cho có hai đa thức nội suy Pn(x) Qn(x) Khi Pn(x) – Qn(x) đa thức có bậc khơng lớn n có (n+1) nghiệm khác nhau,đó nghiệm x0, x1,…,xn Điều chứng tỏ Pn(x) – Qn(x) đa thức 0,tức là: Pn(x) – Qn(x) = hay Pn(x) = Qn(x) (đpcm) Nội suy hàm số đa thức đại số Trên đoạn [a,b] cho tập nút a  x0 < x1 n) hệ (1.1) vô nghiệm(vô định).Khi m = n hệ (1.1) có định thức : A= x0 x0n x1 x1n xn xnn =  (x i  xj)  0 i  j  n Suy phương trình (1.1) có nghiệm nhất, nghiệm hệ số cần tìm 1.2 Nội suy hàm số đa thức nội suy Lagrange 1.2.1 Đa thức nội suy Lagrange với mốc nội suy không cách 1.2.1.1 Xây dựng đa thức nội suy Lagrange Giả sử [a, b] cho n+1 giá trị khác đối số x0, x1,…, xn biết hàm số y = f(x) giá trị tương ứng: f(xi) = yi Bây ta xây dựng đa thức nội suy P(x) bậc không cao n thỏa mãn điều kiện: P(xi) = yi (i= 0, n ) theo cách Lagrange Trước hết xây dựng đa thức Pi(x) thỏa mãn điều kiện: 1 0 Pi(x) =  ij =  i j i j (1.2) Vì đa thức Pi(xj) phải triệt tiêu điểm x0, …, xi-1, xi+1,…, xn nên Pi(xj) viết dạng: SVTH: Đậu Thanh Sang Lớp: 49B-Toán Tin ứng dụng Nội suy hàm số Pi(x) = Ai(x - x0)…(x - xi-1)(x - xi+1)…(x - xn) (1.3) đó, Ai số phải tìm Đặt x = xi ,trong (1.3) xét điều kiện (1.2) ta có: 1= Pi(xi) = Ai(x - x0)…(x - xi-1)(x - xi+1)…(x - xn) (x - x )(x - x i-1 )(x - x i 1 )(x - x n ) suy ra, Ai = Thay vào (1.3) ta được: Pi(x) = (x - x ) (x - x i-1 )(x - x i1 ) (x - x n ) (x i - x ) (x i - x i-1 )(x i - x i1 ) (x i - x n ) (1.4) Đa thức (1.4) gọi đa thức Lagrange Đặt P(x) = n  y P ( x) i 1 (1.5) i i Dễ thấy bậc đa P(x) không cao n điều kiện (1.2) ta được: n P(x) = (x - x )(x - x i-1 )(x - x i1 )(x - x n ) yi i - x )(x i - x i-1 )(x i - x i 1 )(x - x n )  (x i 1 (1.6) Đa thức (1.6) đa thức nội suy Lagrange 1.2.1.2 Đánh giá sai số phương pháp Định lý 1.2.1 (Định lý Rolle) Cho f : [a,b]  R, f liên tục khả vi khoảng [a,b] Giả sử f(a) = f(b) tồn c  [a,b] cho f ‘(c)=0 Chứng minh Do f liên tục [a,b] nên: M = sup { f(x) : x  [a,b] } m = inf { f(x) : x  [a,b] } hữu hạn f đạt giá trị M m [a,b].Xét trường hợp: + Trường hợp 1: M = m Khi f(x)= const [a,b] Do dó f ‘(x)  với x (a,b) chọn c thuộc [a,b] + Trường hợp 2: M  m SVTH: Đậu Thanh Sang Lớp: 49B-Toán Tin ứng dụng Nội suy hàm số Do f(a) = f(b) nên phải có c  (a,b) cho f(c) = M f(c) = m suy f ‘(c) = Đánh giá sai số Để đánh giá độ lệch đa thức nội suy Lagrange P(x) hàm số f(x) điểm x  xi (i= 0, n ) ta chứng minh định lý sau: Định lý 1.2.2 Nếu hàm số y = f(x) có đạo hàm liên tục đến cấp n+1 [a,b] chứa tất mốc nội suy xi (i= 0, n ) sai số nội suy Rn(x) = f(x) – P(x) có dạng: R(x) = f ' ( )  ( x) (n  1)! (1.7)   [a,b],  phụ thuộc vào x  (x) = (x - x0)(x – x1)…(x - xn) = n (x  x ) i i 0 Chứng minh - Xét hàm số phụ sau: F(z):= R(z) - k  (z) đó:  (x) = (1.8) n (z  x ) i i 0 -Tìm số k: Hàm số F(z) có nghiệm thứ n+2 điểm cố định x [a,b] không trùng với mốc nội suy Vì vậy, F(x) =  f(x) – P(x) - k  (x) = suy k = f ( x)  P( x)  ( x)   ( x) (1.9) Mặt khác: F(xi) = (i= 0, n ) nên F(z) có n+2 nghiệm phân biệt x0, x1, x2,…, xn Theo định lý Rolle (định lý 1.2.2): F’(z) có n+1 nghiệm [a,b] F”(z) có khơng n nghiệm [a,b] SVTH: Đậu Thanh Sang Lớp: 49B-Toán Tin ứng dụng Nội suy hàm số Tiếp tục làm ta thấy [a,b] đạo hàm F(n+1)(z) có nghiệm   [a,b] nghĩa là: F(  ) = Vì P(n+1)(z) =  ( n1) ( z ) = (n+1)! nên theo (1.8) ta có: F(n+1)(z) = f(n+1)(z) – k.(n+1)! Tại z =  ta được: F(n+1)(  ) = f(n+1)(  ) – k.(n+1)! = 0, suy k = f ( n1) ( ) (n  1)! (1.10) Từ (1.9) (1.10) suy ra: f ( n1) ( ) f ( x)  P( x) f ( n1) ( ) =  f(x) – P(x)=  (x) (n  1)! (n  1)!  ( x) Suy ra, R(x) = f(x) – P(x) = f ( n1) ( )  ( x) (n  1)! (1.11) (đpcm) Gọi M = sup f n1 ( x) ta nhận đánh giá sai số sau sai số tuyệt đối a  x b đa thức nội suy Lagrange: R(x) = f ( x)  P( x)  M (x - x )(x x )(x - x n ) (n  1)! 1.2.1.3 Thuật tốn chương trình máy tính a Thuật tốn nội suy Lagrange Bài toán Cho bảng giá trị (xi, yi) (i= 0, n ) Tính giá trị đa thức nội suy Lagrange P(x) ta điểm x cho trước theo công thức: n n i 0 k 0 f = P(x) =  yi  Input: x, xi, yi ik x  xi xi  xk (i= 0, n ) Ouput: Giá trị hàm số f x Giải thuật: 1.Khởi tạo f = for k =  n SVTH: Đậu Thanh Sang Lớp: 49B-Toán Tin ứng dụng 10 Nội suy hàm số Đa thức nội suy tìm dạng “hai tiến, lùi”: P(x) = a0 + a1(x – x0) + a2(x – x0)(x – x1) + a3(x – x -1)(x – x0)(x – x1)+ +…+a2n-1(x – x –(n-1)) … (x – x -1)(x – x0) … (x – xn-1) + + a2n(x – x –(n-1)) … (x – x -1)(x – x0) (x – x1) … (x – xn-1) (x – xn) Cho x = x0  a0 = y0; x = x1  a1 = x = x-1  a2 = Tổng quát: a2i-1 = Đặt biến t = 2 y 1 ; 2!h y ; 1!h … 2i 1 y(i 1) (2i  1)! h ; a2i = i 1 2i y i (2i )!h 2i (i= 1, n ) x  x0 ta có h P(x) = P(x + th) =y0 + t t (t  1) (t  1)t (t  1)  y0 +  y-1 +  y-1 + 3! 1! 2! + (t  1)t (t  1)(t  2) (t  2)(t  1)t (t  1)(t  2)  y-2 +  y-2 +…+ 4! 5! + (t  n  1) (t  1)t (t  1) (t  n  1) n1  y-(n-1) + (2n  1)! + (t  n  1) (t  1)t (t  1) (t  n) n  y-n (2n)! 2.2.4.2 Công thức nội suy Gauss II Ta tìm cơng thức nội suy dạng “một tiến, lùi” P(x) = a0 + a1(x – x0) + a2(x – x-1)(x – x0) + a3(x – x -1)(x – x0)(x – x1)+ +…+a2n-1(x – x –(n-1)) … (x – x -1)(x – x0) … (x – xn-1) + + a2n(x – x –n) … (x – x -1)(x – x0) (x – x1) … (x – xn-1) Cho x = xi (i= 0, n ) ta có : a0 = y0; a2 = a1 = y 1 ; 1! h 3 y 2 2 y 1 ;a = ; 3!h 2!h SVTH: Đậu Thanh Sang Lớp: 49B-Toán Tin ứng dụng 29 Nội suy hàm số … 2i 1 y i a2i-1 = ; (2i  1)!h 2i 1 Tổng quát: Đặt biến t = 2i y i a2i = (2i )!h 2i (i= 1, n ) x  x0 ta có h P(x) = P(x + th) =y0 + t t (t  1) (t  1)t (t  1)  y-1 +  y-1 +  y-2 + 2! 3! 1! + (t  2)(t  1)t (t  1) (t  n  1) (t  1)t (t  1) (t  n  1) n1  y-2 +…+  y-n+ 4! (2n  1)! + (t  n)(t  n  1) (t  1)t (t  1) (t  n  1) n  y-n (2n)! 2.2.4.3 Công thức nội suy Strirling Đặt t = x  x0 lấy trung bình cộng hai cơng thức Gauss I, II ta công h thức Strirling: P(x) = P(x + th) =y0 + t2 t (t  1) 3 y2  3 y1 t y 1  y0 + 2 y-1 + + 1! 3! 2! t (t  1) t (t  1)(t  2 ) 5 y3  5 y 2  y-2 + + + …+ 5! 4! 2 n 1 n 1 t (t  1)(t  2 ) (t  (n  1) )  yn   y( n1) + + (2n  1)! + t (t  12 ) (t  (n  1) ) n  y-n (2n)! 2.2.5 Đánh giá sai số Giả sử hàm số y = f(x) có đạo hàm liên tục đến cấp n+1 [a,b] chứa tất mốc nội suy cách đều: xi = x0 + hi (i= 0, n ) Đặt x = x0 + ht  t = x  x0 thay vào công thức (1.7) ta công thức h sai số đa thức nội suy Newton tiến xuất phát từ mốc x0 hàm số f(x) trường hợp mốc nội suy cách đều: SVTH: Đậu Thanh Sang Lớp: 49B-Toán Tin ứng dụng 30 Nội suy hàm số f ( n1) ( ) (n+1) R(x) = h t(t – 1)…(t – n) (n  1)! Tương tự đặt x = xn + ht, nghĩa t = x  xn công thức (1.7) ta h công thức sai số đa thức nội suy Newton lùi xuất phát từ mốc xn hàm số f(x) trường hợp mốc nội suy cách đều: R(x) = f ( n1) ( ) (n+1) h t(t + 1)…(t + n) (n  1)!  có giá trị trung gian mốc nội suy x0, x1, …,xn x 2.2.6 Thuật tốn chương trình máy tính 2.2.6.1 Thuật tốn Input : x, x0 ,yi ,h (i= 0, n ) Output : giá trị hàm số f điểm x Giải thuật: Khởi tạo: t = (x – x0) / h 2.1 for i =  n Di = yi+1 – yi 2.2 f = y0 + t * D0 2.3 for j =  n for i =  n – j Di = Di+1 - Di t = t(t – j + 1) / j 2.4 f = f + t * D0 return f 2.2.6.2 Sơ đồ khối Tính tốn theo cơng thức nội suy Newton tiến với mốc nội suy cách máy tính dựa vào sơ đồ khối sau: SVTH: Đậu Thanh Sang Lớp: 49B-Toán Tin ứng dụng 31 Nội suy hàm số Input x0, h, x, y0 0n t = (x – x0)/ h i = 0, 1,…,n - Di = yi+1 – yi f = y0 + t * D0 j = 2,3,…,n i = 0,1,…,n - j Di = Di+1 – Di t = t(t – j + 1)/j f = f + t * D0 Print f End SVTH: Đậu Thanh Sang Lớp: 49B-Toán Tin ứng dụng 32 Nội suy hàm số 2.2.6.3 Chương trình #include #include // Hàm nhập mốc nội suy void nhap_CD(float &x0, float y[100], float &h, int &n) { int i; printf("\n nhap moc noi suy dau tien:"); scanf("%f ", &x0); printf("\n nhap khoang cach giua cac moc noi suy:"); scanf("%f ", &h); printf("\n nhap cac gia tri tai moc noi suy:"); for(i = 0; i

Ngày đăng: 16/09/2021, 17:32

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

Tài liệu liên quan