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

Báo Cáo Bài Tập Lớn.docx

16 5 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

TRƯỜNG ĐẠI HỌC CÔNG NGHIỆP VIỆT – HUNG KHOA CÔNG NGHỆ THÔNG TIN BÁO CÁO HỌC PHẦN LINUX VÀ PHẦN MỀM MÃ NGUỒN MỞ NEWTON’S DIVIDED DIFFERENCE INTERPOLATING POLYNOMIALS HÀ NỘI, NĂM 2023 TRƯỜNG ĐẠI HỌC CÔN[.]

TRƯỜNG ĐẠI HỌC CÔNG NGHIỆP VIỆT – HUNG KHOA CÔNG NGHỆ THÔNG TIN BÁO CÁO HỌC PHẦN LINUX VÀ PHẦN MỀM MÃ NGUỒN MỞ NEWTON’S DIVIDED-DIFFERENCE INTERPOLATING POLYNOMIALS HÀ NỘI, NĂM 2023 TRƯỜNG ĐẠI HỌC CÔNG NGHIỆP VIỆT – HUNG KHOA CÔNG NGHỆ THÔNG TIN BÁO CÁO HỌC PHẦN LINUX VÀ PHẦN MỀM MÃ NGUỒN MỞ CHUYÊN NGÀNH: CÔNG NGHỆ THƠNG TIN Giảng viên mơn Sinh viên thực : : Lớp : Hà Đăng Toàn Lương Văn Tứ - 1900734 Phạm Đức Hưởng – 1900629 K4318CNT2 HÀ NỘI, NĂM 2023 LỜI NĨI ĐẦU Bạn thường xun có hội ước tính giá trị trung gian điểm liệu xác Phương pháp phổ biến sử dụng cho mục đích phép nội suy đa thức Nhắc lại công thức chung đa thức bậc n f(x) = a0 + a1x + a2x2 + + anxn (Eq) Với n + điểm liệu, tồn đa thức bậc n qua tất điểm Chẳng hạn, có đường thẳng (tức đa thức bậc nhất) nối hai điểm (Hình a) Tương tự, có parabol kết nối ba điểm (b) Nội suy đa thức bao gồm việc xác định đa thức bậc n phù hợp với n + điểm liệu Đa thức sau cung cấp cơng thức để tính giá trị trung gian Mặc dù có đa thức bậc n thỏa mãn n + điểm, có nhiều dạng tốn học khác để biểu diễn đa thức Trong chương này, mô tả hai phương án phù hợp để thực máy tính đa thức Newton MỤC LỤC PHẦN 1: CƠ SỞ LÝ THUYẾT .1 1.1 Tổng quan Newton’s divided-difference interpolating polynomial 1.2 Phép nội suy tuyến tính .1 1.3 Nội suy bậc hai 1.4 Dạng Tổng quát Đa thức Nội suy Newton 1.5 Sai số đa thức nội suy Newton 1.6 Thuật tốn máy tính cho đa thức nội suy Newton .6 PHẦN 2: MƠ PHỎNG CÁCH GIẢI BÀI TỐN ĐA THỨC NỘI SUY CỦA NEWTON BẰNG NGƠN NGỮ LẬP TRÌNH PYTHON 2.1 Giới thiệu ngơn ngữ lập trình Python 2.2 Xây dựng chương trình .8 2.2.1 Phép nội suy tuyến tính 2.2.2 Nội suy bậc hai 2.2.3 Dạng Tổng quát Sai số đa thức nội suy Newton PHẦN 1: CƠ SỞ LÝ THUYẾT 1.1 Tổng quan Newton’s divided-difference interpolating polynomial Như nêu trên, có nhiều dạng khác để biểu diễn đa thức nội suy Đa thức nội suy sai phân chia Newton dạng phổ biến hữu ích Trước trình bày phương trình tổng qt, chúng tơi giới thiệu phiên cấp cấp hai cách giải thích trực quan đơn giản chúng 1.2 Phép nội suy tuyến tính Hình thức nội suy đơn giản nối hai điểm liệu đường thẳng Kỹ thuật này, gọi phép nội suy tuyến tính, mơ tả đồ thị hình (1.1) Sử dụng tam giác đồng dạng: f 1( x)−f ( x 0) f ( x 1)−f ( x 0) = x−x x 1− x Mà xếp lại để mang lại f ( x )=f ( x ) + (1.1) f ( x ) −f ( x ) ( x −x 0) x 1−x Đó cơng thức nội suy tuyến tính Kí hiệu f1(x) cho biết đa thức nội suy bậc Lưu ý bên cạnh việc biểu thị hệ số góc đường nối điểm, thuật ngữ [f(x1) - f(x0)]/(x1 - x0) phép chia hữu hạn Mô tả đồ họa phép nội suy tuyến tính Các khu vực tơ bóng biểu thị tam giác tương tự sử dụng để lấy cơng thức nội suy tuyến tính Hình 1.1 Đồ thị phép nội suy tuyến tính Hai phép nội suy tuyến tính để ước tính ln Lưu ý cách khoảng nhỏ mang lại kết tốt ước lượng Hình 1.2 1.3 Nội suy bậc hai f2(x) = b0 + b1(x - x0) + b2(x - x0)(x - x1) (1.3) Lưu ý phương trình (1.3) dường khác với đa thức tổng quát [Eq] hai phương trình tương đương Điều hiển thị cách nhân số hạng biểu thức (1.3) để mang lại f2(x) = b0 + b1x - b1x0 + b2x2 + b2x0x1 - b2xx0 - b2xx1 f2(x) = a0 + a1x + a2x2 với a0 = b0 - b1x0 + b2x0x1 a1 = b1 - b2x0 - b2x1 a = b2 Do đó, phương trình (Eq) (1.3) công thức thay thế, tương đương đa thức bậc hai nối ba điểm Một thủ tục đơn giản sử dụng để xác định giá trị hệ số Đối với b0, phương trình (1.3) với x = x0 dùng để tính b0 = f(x0) (1.4) Phương trình (1.4) thay thành phương trình (1.3), đánh giá x = x1 cho b 1= f ( x1 ) −f (x 0) (1.5) x 1−x Cuối cùng, phương trình (1.4) (1.5) thay thành phương trình (18.3), ước tính x = x2 giải (sau số thao tác đại số) cho f ( x )−f (x ) f ( x1 ) −f (x ) − x 2−x x 1−x b 2= x 2−x (1.6) Lưu ý rằng, giống trường hợp nội suy tuyến tính, b biểu thị hệ số góc đường nối điểm x0 x1 Do đó, hai điều khoản phương trình (1.3) tương đương với phép nội suy tuyến tính từ x đến x1, định trước biểu thức (1.2) Thuật ngữ cuối cùng, b2(x - x0)(x - x1), đưa độ cong bậc hai vào công thức Việc sử dụng phép nội suy bậc hai để ước lượng ln Phép nội suy tuyến tính từ x = đến đưa vào để so sánh Hình 1.3 Sử dụng phép nội suy bậc hai 1.4 Dạng Tổng quát Đa thức Nội suy Newton Phân tích trước khái qt hóa để phù hợp với đa thức bậc n cho n + điểm liệu Đa thức bậc n fn(x) = b0 + b1(x - x0) + + bn(x - x0)(x - x1) (x – xn-1) (1.7) Như thực trước với phép nội suy tuyến tính bậc hai, điểm liệu sử dụng để đánh giá hệ số b 0, b1, , bn Đối với đa thức bậc n, cần có n + điểm liệu: [x 0, f(x0)], [x1, f(x1)], , [xn, f(xn)] Chúng sử dụng điểm liệu phương trình sau để đánh giá hệ số: b0 = f(x0) (1.8) b1 = f [x1, x0] (1.9) b2 = f [x2, x1, x0] (1.10) bn = f[xn, xn-1, , x1, x0] (1.11) Trong đánh giá chức đặt ngoặc đơn khác biệt chia hữu hạn Ví dụ: khác biệt chia hữu hạn biểu thị chung f [x i , x j ]= f ( x i )−f ( x j) x i−x j (1.12) Sự khác biệt chia hữu hạn thứ hai, đại diện cho khác biệt hai khác biệt chia đầu tiên, thường biểu thị f [ x i , x j , x k ]= f [ x i , x j ]−f [x j , x k ] x i−x k (1.13) Tương tự, hiệu chia hữu hạn thứ n f [ x n , x n−1 , … , x , x ] = f [ x n , x n−1 , … , x1 ]−f [ x n−1 , x n−2 , … , x ] x n−x (1.14) Hình 1.4 Mơ tả đồ họa chất đệ quy khác biệt chia hữu hạn Những khác biệt sử dụng để đánh giá hệ số phương trình (1.8) đến (1.11), sau thay vào phương trình (1.7) để mang lại đa thức nội suy (1.15) Được gọi đa thức nội suy sai phân chia Newton Cần lưu ý không cần thiết điểm liệu sử dụng biểu thức (1.15) đặt cách giá trị hoành độ thiết phải theo thứ tự tăng dần, minh họa ví dụ sau Ngồi ra, ý cách phương trình (1.12) đến (1.14) đệ quy—tức là, chênh lệch bậc cao tính cách lấy chênh lệch chênh lệch bậc thấp (Hình 1.4) Tài sản khai thác chúng tơi phát triển chương trình máy tính hiệu Sec 1.15 để triển khai phương thức 1.5 Sai số đa thức nội suy Newton Lưu ý cấu trúc phương trình (1.15) tương tự khai triển chuỗi Taylor theo nghĩa số hạng thêm vào cách để nắm bắt hành vi bậc cao hàm Các số hạng sai phân hữu hạn chia đó, đại diện cho xấp xỉ đạo hàm bậc cao Do đó, với chuỗi Taylor, hàm thực đa thức bậc n, đa thức nội suy bậc n dựa n + điểm liệu mang lại kết xác Ngồi ra, trường hợp chuỗi Taylor, thu cơng thức cho lỗi cắt ngắn Nhớ lại từ phương trình (1.16) sai số cắt ngắn chuỗi Taylor biểu thị chung là: (1.16) Trong dó ₤ khoảng xi đến xi+1 Đối với đa thức nội suy bậc n, mối quan hệ tương tự cho lỗi (1.17) Trong ₤ khoảng chứa ẩn số liệu Để công thức sử dụng, hàm đề cập phải biết khả vi Điều thường không xảy May mắn thay, có sẵn cơng thức thay không yêu cầu kiến thức trước chức Thay vào đó, sử dụng phép chia hữu hạn để tính gần đạo hàm thứ (n + 1), Rn = f[x, xn, xn-1, , x0](x - x0)(x - x1) (x - xn) (1.18) Trong f[x, xn, xn-1, , x0] hiệu chia hết hạn thứ (n + 1) Bởi phương trình (1.18) chứa f(x) chưa biết, nên khơng thể giải lỗi Tuy nhiên, có sẵn điểm liệu bổ sung f(x n+1), phương trình (1.18) sử dụng để ước tính sai số, sau (1.19) Từ ví dụ trước từ phương trình (1.19), rõ ràng ước lượng sai số cho đa thức bậc n tương đương với hiệu bậc (n + 1) dự đốn bậc n Đó Rn = fn+1(x) - fn(x) (1.20) Nói cách khác, số gia thêm vào trường hợp thứ tự n để tạo trường hợp thứ tự (n + 1) [nghĩa là, phương trình (1.19)] hiểu ước tính sai số thứ tự n Điều nhìn thấy rõ ràng cách xếp lại phương trình (1.20) Fn+1(x) = fn(x) + Rn Tính hợp lệ cách tiếp cận xác định dựa thực tế chuỗi đồng quy mạnh Đối với tình vậy, dự đoán bậc (n + 1) phải gần với giá trị thực nhiều so với dự đoán bậc n Do đó, phương trình (1.20) phù hợp với định nghĩa tiêu chuẩn sai số biểu thị khác biệt giá trị thực giá trị gần Tuy nhiên, lưu ý tất ước tính lỗi khác cho phương pháp lặp giới thiệu thời điểm xác định dự đoán trừ dự đốn trước đó, phương trình (1.20) biểu thị dự đoán tương lai trừ dự đốn Điều có nghĩa chuỗi hội tụ nhanh, ước lượng sai số phương trình (1.20) nhỏ sai số thực Điều thể chất lượng hấp dẫn ước tính lỗi sử dụng làm tiêu chí dừng Tuy nhiên, mơ tả phần sau, đa thức nội suy bậc cao nhạy cảm với lỗi liệu - nghĩa chúng yếu Khi sử dụng để nội suy, chúng thường mang lại dự đoán khác biệt đáng kể so với giá trị thực Bằng cách “nhìn phía trước” để phát lỗi, phương trình (1.20) nhạy cảm với phân kỳ Như vậy, có giá trị loại phân tích liệu khám phá mà đa thức Newton phù hợp 1.6 Thuật tốn máy tính cho đa thức nội suy Newton Ba thuộc tính làm cho đa thức nội suy Newton hấp dẫn ứng dụng máy tính: Như phương trình (1.7), phiên bậc cao phát triển cách thêm số hạng vào phương trình bậc thấp Điều tạo điều kiện thuận lợi cho việc đánh giá số phiên theo thứ tự khác chương trình Khả đặc biệt có giá trị bậc đa thức khơng biết trước Bằng cách thêm thuật ngữ cách tuần tự, xác định đạt đến điểm lợi suất giảm dần—nghĩa việc thêm thuật ngữ bậc cao khơng cịn cải thiện đáng kể ước tính số trường hợp thực làm giảm giá trị ước tính Các phương trình sai số thảo luận phần (3) hữu ích việc đưa tiêu chí khách quan để xác định điểm số hạng giảm dần Các sai phân hữu hạn chia tạo thành hệ số đa thức [Eqs (1.8)đến (1.11)] tính tốn cách hiệu Đó là, phương trình (1.14) Hình 1.4, chênh lệch bậc thấp sử dụng để tính tốn chênh lệch bậc cao Bằng cách sử dụng thơng tin xác định trước này, hệ số tính tốn cách hiệu Các thuật tốn Hình 1.6 chứa sơ đồ Ước tính lỗi [Eq (1.19)] kết hợp đơn giản vào thuật tốn máy tính cách thức dự đốn xây dựng Hình 1.6 Một thuật toán cho đa thức nội suy Newton viết mã giả Tất đặc điểm khai thác kết hợp thành thuật tốn tổng qt để thực đa thức Newton (Hình 1.6) Lưu ý thuật toán bao gồm hai phần: Phần thứ xác định hệ số từ phương trình (1.6), phần thứ hai xác định dự đoán sai số liên quan chúng PHẦN 2: MƠ PHỎNG CÁCH GIẢI BÀI TỐN ĐA THỨC NỘI SUY CỦA NEWTON BẰNG NGƠN NGỮ LẬP TRÌNH PYTHON 2.1 Giới thiệu ngơn ngữ lập trình Python Python ngơn ngữ lập trình sáng tạo Guido Van Rossum – chuyên gia lập trình người Hà Lan vào năm 1991 Người sáng lập muốn Python ngôn ngữ dễ hiểu tương đồng với tiếng anh Nhờ vậy, thân thiện với người dùng, khơng khó để người làm quen Python phần mềm mã nguồn mở (open source) Do đó, đóng góp để phát triển Python, giúp ngơn ngữ ngày trở nên phổ biến mạnh mẽ Ngồi ra, Python chạy nhiều tảng hệ điều hành khác UNIX, MS – DOS, Mac OS, Windows Linux… 2.2 Xây dựng chương trình 2.2.1 Phép nội suy tuyến tính import numpy as np import matplotlib.pyplot as plt x1 = float(input("Nhập giá trị x1: ")) y1 = float(input("Nhập giá trị y1: ")) x2 = float(input("Nhập giá trị x2: ")) y2 = float(input("Nhập giá trị y2: ")) x_new = np.linspace(x1, x2, 1000) y_new = (y2 - y1) / (x2 - x1) * (x_new - x1) + y1 plt.plot([x1, x2], [y1, y2], 'o', label='known points') plt.plot(x_new, y_new, label='interpolated function') plt.xlabel('x') plt.ylabel('y') plt.title('Linear interpolation') plt.legend() plt.show() VD: (0, 1); (6, 1.791759) Hình 2.1 Nội suy bậc (tuyến tính) nối hai điểm 2.2.2 Nội suy bậc hai import numpy as np import matplotlib.pyplot as plt x1 = float(input("Nhập giá trị x1: ")) y1 = float(input("Nhập giá trị y1: ")) x2 = float(input("Nhập giá trị x2: ")) y2 = float(input("Nhập giá trị y2: ")) x3 = float(input("Nhập giá trị x3: ")) y3 = float(input("Nhập giá trị y3: ")) x_new = np.linspace(x1, x3, 1000) a = ((y2 - y1) / ((x2 - x1) * (x2 - x3))) - ((y3 - y1) / ((x3 - x1) * (x2 - x3))) b = ((y2 - y1) / (x2 - x1)) - a * (x1 + x2) c = y1 - a * x1**2 - b * x1 y_new = a * x_new**2 + b * x_new + c plt.plot([x1, x2, x3], [y1, y2, y3], 'o', label='known points') plt.plot(x_new, y_new, label='interpolated function') plt.xlabel('x') plt.ylabel('y') plt.title('Quadratic interpolation') plt.legend() plt.show() VD: (1, 0); (4, 1.386294); (6, 1.791759) Hình 2.2 Nội suy bậc nối ba điểm 2.2.3 Dạng Tổng quát Sai số đa thức nội suy Newton import numpy as np import matplotlib.pyplot as plt def newton_interpolation(x, y): "Tính đa thức nội suy Newton cho điểm (x, y) " n = len(x) a = y.copy() for j in range(1, n): for i in range(n-1, j-1, -1): a[i] = (a[i] - a[i-1]) / (x[i] - x[i-j]) return a n = int(input("Nhập số điểm: ")) x = np.zeros(n) y = np.zeros(n) for i in range(n): x[i] = float(input(f"Nhập x{i}: ")) y[i] = float(input(f"Nhập y{i}: ")) a = np.zeros((n,n)) a[:,0] = y for j in range(1,n): for i in range(n-j): a[i][j] = (a[i+1][j-1] - a[i][j-1]) / (x[i+j] - x[i]) x_new = np.linspace(x[0], x[-1], 1000) y_new = np.zeros_like(x_new) for i in range(n): p = a[0][i] for j in range(i): p *= (x_new - x[j]) y_new += p error = np.abs(y_new - np.interp(x_new, x, y)) plt.plot(x, y, 'o', label='known points') plt.plot(x_new, y_new, label='interpolated function') plt.xlabel('x') plt.ylabel('y') plt.title('General Form of Newton’s Interpolating Polynomials') plt.legend() plt.show() VD: (1, 0); (4, 1.386294); (5, 1.609438); (6, 1.791759) Hình 2.3 Nội suy bậc nối điểm sai số TÀI LIỆU THAM KHẢO Linear and Nonlinear Programming Springer, 2008 https://wikipedia.org Giáo trình quy hoạch tuyến tính - Ts Nguyễn Phú Vinh

Ngày đăng: 08/08/2023, 12:53

Xem thêm:

w