Nghiệm của đa thức là các giá trị đầu vào của biểu thức đa thức đặt bằng 0. Nói cách khác, các roots (nghiệm) của một đa thức là các giá trị của biến độc lập mà khi thay vào biểu thức đa thức, giá trị của biểu thức sẽ bằng 0. Để tìm nghiệm của một đa thức, ta cần giải phương trình tương ứng với đa thức đó. Tùy vào bậc của đa thức, phương trình sẽ có những hình thức giải khác nhau.
TRƯỜNG ĐẠI HỌC CÔNG NGHIỆP VIỆT - HUNG KHOA CÔNG NGHỆ THÔNG TIN BÁO CÁO KẾT THÚC HỌC PHẦN LINUX VÀ PHẦN MỀM MÃ NGUỒN MỞ 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 : Hà Đăng Tồn Sinh viên thực : Nguyễn Văn Chiến 1900699 : Mào Quốc Huy 1900730 Lớp : K4318CNT2 HÀ NỘI, NĂM 2023 LỜI MỞ ĐẦU Xin chào chào mừng đến với báo cáo tơi phương pháp tìm nghiệm chia đơi phương pháp Bairstow giải tốn số học Phương pháp chia đôi phương pháp đơn giản hiệu để tìm nghiệm hàm số Nó sử dụng để tìm kiếm nghiệm khoảng giá trị xác định biến độc lập Phương pháp phương pháp giải toán số học sử dụng rộng rãi lĩnh vực khác Tuy nhiên, phương pháp chia đôi phương pháp để tìm nghiệm hàm số Phương pháp Bairstow phương pháp khác hiệu giải tốn tìm nghiệm hàm số Phương pháp Bairstow sử dụng để giải phương trình bậc cao cách áp dụng thuật tốn tìm nghiệm đa thức Trong báo cáo này, tơi trình bày bước thực phương pháp chia đôi phương pháp Bairstow, đưa ví dụ minh họa để giúp bạn hiểu rõ phương pháp Báo cáo giúp bạn hiểu áp dụng phương pháp chia đôi phương pháp Bairstow để giải tốn tìm nghiệm lĩnh vực khác Hy vọng báo cáo giúp bạn hiểu rõ phương pháp áp dụng chúng vào giải tốn tìm nghiệm thực tế NHẬN XÉT CỦA GIẢNG VIÊN …………………………………………………………………………………… …………………………………………………………………………………… …………………………………………………………………………………… …………………………………………………………………………………… …………………………………………………………………………………… …………………………………………………………………………………… …………………………………………………………………………………… …………………………………………………………………………………… …………………………………………………………………………………… …………………………………………………………………………………… …………………………………………………………………………………… …………………………………………………………………………………… …………………………………………………………………………………… …………………………………………………………………………………… …………………………………………………………………………………… …………………………………………………………………………………… …………………………………………………………………………………… …………………………………………………………………………………… Hà Nội, ngày… tháng… năm 2023 GIẢNG VIÊN MỤC LỤC PHẦN A: TÌM HIỂU ĐỀ TÀI 1.Ngôn ngữ Python Giới thiệu phương pháp chia đôi bairstow 2.1 Nghiệm đa thức gì? 2.2 Phương pháp chia đôi 2.3 Phương pháp Bairstow PHẦN B: XÂY DỰNG CHƯƠNG TRÌNH 1.Cách thức hoạt động phương pháp chia đôi 2.Xây dựng chương trình phương pháp chia đôi 2.1.Hướng dẫn sử dụng: 3.Cách thức hoạt động phương pháp Bairstow 4.Xây dựng chương trình phương pháp Bairstow PHẦN A: TÌM HIỂU ĐỀ TÀI Ngơn ngữ Python Ngơn ngữ lập trình Python ngơn ngữ lập trình thơng dịch, tạo Guido van Rossum vào năm 1991 Python thiết kế để đọc dễ hiểu dễ sử dụng, cho phép lập trình viên tập trung vào giải vấn đề thay phải quan tâm đến cú pháp Python sử dụng rộng rãi khoa học liệu trí tuệ nhân tạo, tính đơn giản, dễ học cộng đồng phát triển mạnh mẽ So sánh với số ngơn ngữ lập trình khác: Python so với Java: Python ngơn ngữ lập trình cao cấp, có cú pháp đơn giản so với Java sử dụng rộng rãi khoa học liệu trí tuệ nhân tạo Java sử dụng rộng rãi ứng dụng doanh nghiệp lớn ứng dụng máy tính Python so với C++: Python ngơn ngữ lập trình thơng dịch, dễ học có cú pháp đơn giản so với C++ C++ sử dụng rộng rãi ứng dụng hệ thống ứng dụng máy tính địi hỏi hiệu suất cao Python so với JavaScript: Python ngơn ngữ lập trình thông dịch, sử dụng chủ yếu phát triển web khoa học liệu JavaScript ngôn ngữ lập trình phía máy khách sử dụng rộng rãi phát triển web Tóm lại, Python ngơn ngữ lập trình thơng dịch, đơn giản dễ học, sử dụng rộng rãi khoa học liệu trí tuệ nhân tạo So với ngơn ngữ khác, Python có cú pháp đơn giản thường sử dụng cho dự án có tính phân tích liệu cao ứng dụng web Giới thiệu phương pháp chia đôi bairstow 2.1 Nghiệm đa thức gì? Định nghĩa Nghiệm đa thức giá trị đầu vào biểu thức đa thức đặt Nói cách khác, roots (nghiệm) đa thức giá trị biến độc lập mà thay vào biểu thức đa thức, giá trị biểu thức Để tìm nghiệm đa thức, ta cần giải phương trình tương ứng với đa thức Tùy vào bậc đa thức, phương trình có hình thức giải khác Ví dụ, đa thức bậc sau: ax + b = Thì phương trình tương ứng là: ax = -b x = -b/a Vậy nghiệm đa thức bậc `-b/a` Nếu đa thức bậc hai sau: ax^2 + bx + c = Thì phương trình tương ứng là: x = (-b ± sqrt (b^2 - 4ac)) / 2a Vậy nghiệm đa thức bậc hai giá trị xác định cơng thức Các đa thức bậc cao giải phương pháp khác công thức Newton-Raphson, phương pháp chia đôi, hay sử dụng công thức đặc biệt tương ứng với loại đa thức Trong hàm, tính giá trị delta dựa hệ số truyền vào, sau kiểm tra delta để xác định số lượng giá trị nghiệm Nếu delta âm, tức đa thức khơng có nghiệm, trả mảng rỗng Nếu delta 0, trả mảng chứa nghiệm Nếu delta dương, tính tốn hai nghiệm phân biệt trả mảng chứa hai giá trị 2.2 Phương pháp chia đôi Phương pháp chia đôi (Bisection method): Dùng để tìm nghiệm đa thức khoảng xác định cách liên tục chia khoảng đơi kiểm tra giá trị đa thức điểm chia Ta định nghĩa hàm số cách sử dụng phương thức def truyền tham số a, b, c vào hàm Sau đó, ta nhập hệ số đa thức giá trị hai đầu khoảng cần tìm nghiệm từ bàn phím hàm input() Tiếp theo, ta kiểm tra xem khoảng có nghiệm khơng - khơng in thơng báo kết thúc chương trình Nếu có nghiệm, ta sử dụng vịng lặp while để tiến hành phương pháp chia đơi, tìm giá trị trung bình khoảng cần tìm nghiệm kiểm tra xem giá trị có nghiệm khơng Nếu đúng, ta kết thúc vòng lặp in kết Nếu không, ta tiếp tục cập nhật khoảng cần tìm nghiệm tiếp tục vịng lặp Cuối cùng, ta sử dụng phương thức format() để in kết với độ xác hai chữ số sau dấu chấm Phương pháp chia đôi phương pháp giải phương trình cách sử dụng tính chất hàm số liên tục để xác định giá trị nghiệm Cụ thể, để áp dụng phương pháp chia đôi để tìm nghiệm đa thức, ta cần thực bước sau: Xác định khoảng cách điểm trục số mà hàm số có giá trị dương âm Điều giúp giới hạn khoảng cần tìm kiếm nghiệm Chia khoảng thành phần cách tìm giá trị trung bình hai điểm cuối khoảng Tính giá trị hàm số điểm trung bình Nếu giá trị gần 0, ta tìm nghiệm Nếu không, ta lựa chọn khoảng cần tìm kiếm nghiệm cách giữ lại khoảng chứa nghiệm loại bỏ khoảng không chứa nghiệm Lặp lại bước khoảng cần tìm kiếm nhỏ đủ xác với số chữ số thập phân ta mong muốn Phương pháp chia đôi áp dụng cho tất loại đa thức, nhiên, với đa thức đặc biệt đa thức bậc hai cơng thức giải phương trình bậc hai cho ta nhanh chóng giá trị nghiệm xác 2.3 Phương pháp Bairstow Phương pháp Bairstow phương pháp số để giải phương trình đa thức bậc cao Phương pháp đặt tên theo tên nhà toán học người Anh J C Bairstow Phương pháp Bairstow phương pháp số phức tạp, cho phép tìm nghiệm phương trình đa thức bậc cao cách nhanh chóng xác Phương pháp Bairstow phương pháp lặp để tìm nghiệm đa thức bậc cao Phương pháp dựa việc sử dụng đa thức bậc thấp để xấp xỉ đa thức ban đầu Phương pháp Bairstow cách tiếp cận lặp lặp lại liên quan lỏng lẻo đến phương pháp Müller Newton Raphson Trước bắt đầu mô tả toán học kỹ thuật này,nhớ lại dạng nhân tử đa thức: Nếu chia cho thừa số khơng phải (ví dụ: x + 6), thương đa thức bậc bốn Tuy nhiên, trường hợp này, phần lại dẫn đến Trên sở điều trên, xây dựng thuật tốn để xác định gốc đa thức: (1) đoán giá trị cho x = 1, (2) chia đa thức cho nhân tử x 1, (3) xác định xem có phần dư hay khơng Nếu khơng, dự đốn hồn hảo gốc t Nếu có phần cịn lại, dự đốn điều chỉnh cách có hệ thống quy trình lặp lại phần lại biến gốc xác định sau hoàn thành, toàn quy trình lặp lại để thương số xác định gốc khác Phương pháp Bairstow thường dựa cách tiếp cận Do đó, phụ thuộc vào q trình tốn học chia đa thức cho thừa số Nhớ lại từ thảo luận giảm phát đa thức phép chia tổng hợp liên quan đến việc chia đa thức cho thừa số x Ví dụ, đa thức tổng quát: chia cho thừa số x - t để thu đa thức bậc hai thấp bậc: với số dư R = b0, hệ số tính phép truy hồi mối quan hệ: Lưu ý t nghiệm đa thức ban đầu, phần dư b0 Để cho phép đánh giá nghiệm phức, phương pháp Bairstow chia đa thức theo hệ số bậc hai x2 - rx - s Nếu điều thực với kết đa thức với phần lại Như với phép chia tổng hợp thông thường, mối quan hệ truy hồi đơn giản sử dụng để thực phép chia cho thừa số bậc hai: Hệ số bậc hai giới thiệu phép xác định nghiệm phức Điều liên quan đến thực tế là, hệ số đa thức ban đầu thực, nghiệm phức xuất cặp liên hợp Nếu x²- rxs ước xác đa thức, nghiệm phức xác định công thức bậc hai Do đó, phương pháp rút gọn thành việc xác định giá trị r s làm cho thừa số bậc hai trở thành ước số xác Nói cách khác, chúng tơi tìm kiếm giá trị làm cho số hạng cịn lại khơng Kiểm tra phương trình dẫn đến kết luận để phần dư khơng, bo b, phải khơng Bởi dự đoán ban đầu giá trị r s không dẫn đến kết này, nên phải xác định cách có hệ thống để sửa đổi dự đốn cho bo b tiến dần đến Để làm điều này, phương pháp Bairstow sử dụng chiến lược tương tự phương pháp Newton-Raphson Bởi bo b hàm r s, nên chúng khai triển cách sử dụng chuỗi Taylor, [gọi lại phương trình giá trị phía bên tay phải đánh giá r s Lưu ý số hạng cấp hai cấp cao bị bỏ qua Điều thể giả định ngầm định -r -s đủ nhỏ để số hạng bậc cao không đáng kể Một cách khác để diễn đạt giả định nói đốn ban đầu gần với giá trị r s gốc Những thay đổi, Ar As, cần thiết để cải thiện dự đốn chúng tơi ước tính cách đặt phương trình (7.33) Nếu đạo hàm riêng b's xác định được, hệ gồm hai phương trình giải đồng thời cho hai ẩn số, Ar As Bairstow đạo hàm riêng thu phép chia tổng hợp b theo kiểu tương tự cách mà thân b suy ra: abo/arc ₁, abo/as ab₁/ar = c2 ab/as c3 Do đó, đạo hàm riêng, abo/as ab ₁, abo/as ab₁/ar = c2 ab/as c3 Do đó, đạo hàm riêng/ar = c2 ab/as c3 Do đó, đạo hàm riêng có phép chia tổng hợp b's Sau đó, đạo hàm riêng thay thành phương trình PHẦN B: XÂY DỰNG CHƯƠNG TRÌNH Chương trình viết ngơn ngữ Python sử dụng để tìm nghiệm đa thức khoảng nghiệm phương pháp chia đôi phương pháp Bairstow Cách thức hoạt động phương pháp chia đôi Phương pháp chia đôi phương pháp đơn giản để tìm nghiệm hàm số liên tục khoảng xác định Phương pháp dựa việc chia khoảng cần tìm nghiệm thành hai khoảng nhau, sau chọn khoảng mà giá trị hàm số có dấu trái với giá trị hàm số điểm khoảng ban đầu Quá trình lặp lại giá trị nghiệm tìm đạt độ xác mong muốn Dưới thuật tốn tìm nghiệm phương pháp chia đôi: Chọn khoảng [a, b] chứa nghiệm cần tìm, cho f(a) f(b) có dấu trái Tính điểm trung gian c = (a + b) / Nếu f(c) = độ dài khoảng [a, b] nhỏ sai số cho trước, dừng thuật toán trả c Nếu f(a) f(c) có dấu trái nhau, chọn khoảng [a, c] quay lại bước Ngược lại, f(c) f(b) có dấu trái nhau, chọn khoảng [c, b] quay lại bước Lưu ý phương pháp chia đơi đảm bảo tìm nghiệm khoảng cho, tất nghiệm hàm số Để đảm bảo kết hợp lý, ta cần chọn khoảng ban đầu cho nghiệm cần tìm nằm giá trị hàm số khơng thay đổi q nhiều khoảng Ngồi ra, ta cần chọn sai số cho trước cho đảm bảo độ xác mong muốn kết Xây dựng chương trình phương pháp chia đơi 2.1 Hướng dẫn sử dụng: Bước 1: Nhập vào số lượng hệ số đa thứctương ứng Ví dụ: Bước 2: Nhập giá trị hệ số biến x: Ví dụ: Bước 3: Nhập vào khoảng giá trị tìm kiếm sai số cho phép: Ví dụ: Kết hiển thị hình Ví dụ: Cách thức hoạt động phương pháp Bairstow Cách thực phương pháp Bairstow Phương pháp Bairstow bắt đầu cách giả sử đa thức có hai nghiệm ảo liên tiếp gần với hai số thực Sau đó, phương pháp sử dụng phương pháp Newton-Raphson để tìm nghiệm ảo giảm bớt bậc đa thức cách chia cho hai đa thức bậc tìm Quá trình lặp lại đa thức cịn hai bậc khơng thể giảm bớt Bước 1: Chọn hai số thực làm giá trị hệ số ẩn đa thức Bước 2: Giải hệ phương trình tuyến tính cách sử dụng thuật tốn Gauss để tìm hệ số đa thức Bước 3: Tính tốn sai số hệ số ẩn cách sử dụng định lý Cramer Bước 4: Nếu sai số nhỏ ngưỡng cho trước, kết thúc thuật toán Nếu không, tiếp tục lặp lại từ bước với giá trị hệ số ẩn Phương pháp Bairstow giải phương trình đa thức bậc cao với độ xác cao Tuy nhiên, tốn tính tốn so với phương pháp giải trực tiếp Xây dựng chương trình phương pháp Bairstow Để minh họa phương pháp Bairstow, giải phương trình đa thức bậc sau: 2x^5 + 3x^4 - 3x^3 + 4x^2 - 5x - = Chúng ta sử dụng ngôn ngữ Python để giải toán Dưới đoạn code Python cho phương pháp Bairstow: import numpy as np def bairstow(a, r, s, tol): n = len(a) b = [0] * n c = [0] * n while n > 2: b[n - 1] = a[n - 1] b[n - 2] = a[n - 2] + r * b[n - 1] for i in range(n - 3, -1, -1): b[i] = a[i] + r * b[i + 1] + s * b[i + 2] c[n - 1] = b[n - 1] c[n - 2] = b[n - 2] + r * c[n - 1] for i in range(n - 3, -1, -1): c[i] = b[i] + r * c[i + 1] + s * c[i + 2] D = c[1] ** - c[0] * c[2] dr = (b[1] * c[2] - b[0] * c[3]) / D ds = (b[0] * c[2] - b[1] * c[1]) / D r += dr s += ds if abs(dr / r) < tol and abs(ds / s) < tol: break n -= if n == 2: D = b[1] ** - * b[0] * b[2] x1 = (-b[1] + np.sqrt(-D)) / (2 * b[2]) x2 = (-b[1] - np.sqrt(-D)) / (2 * b[2]) return [x1, x2] elif n == 1: return [-b[0] / b[1]] else: return [] a = [2, 3, -3, 4, -5, -6] r = s = tol = 1e-6 roots = bairstow(a, r, s, tol) print("The roots are:", roots) Output: The roots are: [-0.23653574560598847, 3.378916697986941] Dòng import numpy as np để sử dụng thư viện numpy cho tính tốn số học Hàm bairstow() nhận tham số đầu vào danh sách a chứa hệ số đa thức, hai giá trị r s để khởi tạo phép lặp, giá trị tol cho độ xác mong muốn kết Hàm sử dụng hai danh sách b c để lưu trữ giá trị tạm thời tính tốn giá trị r s Trong vòng lặp while, hàm thực phép lặp Bairstow để tìm giá trị r s Các giá trị b c tính tốn vịng lặp for cách sử dụng giá trị trước b c Sau giá trị r s tính tốn, giá trị tuyệt đối dr/r ds/s so sánh với độ xác mong muốn tol để xác định xem phép lặp có tiếp tục hay không Cuối cùng, hàm trả danh sách nghiệm đa thức, tính tốn cách giải phương trình bậc 1, danh sách rỗng khơng có nghiệm Trong đoạn code cuối cùng, hàm bairstow() gọi với giá trị đầu vào cụ thể để tìm nghiệm đa thức a = 2x^5 + 3x^4 - 3x^3 + 4x^2 - 5x - Kết in hình Phương pháp Bairstow phương pháp hiệu để giải phương trình đa thức bậc cao với độ xác cao Tuy nhiên, phương pháp tốn tính tốn so với phương pháp giải trực tiếp Chúng ta sử dụng ngơn ngữ Python để thực phương pháp Bairstow giải tốn tìm nghiệm đa thức bậc cao 10