Đa thức có thể được biểu diễn dưới dạng một danh sách các hệ số. Ví dụ: đa thức \[4*x^3 + 3*x^2 -2*x + 10 = 0\] có thể được biểu diễn dưới dạng [4, 3, -2, 10]. Dưới đây là một số cách để tạo một đối tượng đa thức và đánh giá nó
import numpy as np ppar = [4, 3, -2, 10] p = np.poly1d[ppar] print p[3] print np.polyval[ppar, 3] x = 3 print 4*x**3 + 3*x**2 -2*x + 10
139 139 139
numpy giúp dễ dàng lấy đạo hàm và tích phân của đa thức
Xem xét. \[y = 2x^2 - 1\]. Chúng ta biết đạo hàm là \[4x\]. Ở đây chúng tôi tính đạo hàm và đánh giá nó tại x=4
import numpy as np p = np.poly1d[[2, 0, -1]] p2 = np.polyder[p] print p2 print p2[4]
4 x 16
Tích phân của đa thức trước là \[\frac{2}{3} x^3 - x + c\]. Chúng tôi giả sử \[C=0\]. Hãy tính tích phân \[\int_2^4 2x^2 - 1 dx\]
import numpy as np p = np.poly1d[[2, 0, -1]] p2 = np.polyint[p] print p2 print p2[4] - p2[2]
3 0.6667 x - 1 x 35.3333333333
Một lý do để sử dụng đa thức là dễ dàng tìm thấy tất cả các gốc bằng cách sử dụng numpy. rễ
import numpy as np print np.roots[[2, 0, -1]] # roots are +- sqrt[2] # note that imaginary roots exist, e.g. x^2 + 1 = 0 has two roots, +-i p = np.poly1d[[1, 0, 1]] print np.roots[p]
[ 0.70710678 -0.70710678] [ 0.+1.j 0.-1.j]
Có những ứng dụng của đa thức trong nhiệt động lực học. Phương trình van der waal là một đa thức bậc ba \[f[V] = V^3 - \frac{p n b + n R T}{p} V^2 + \frac{n^2 a}{p}V - \frac . Các gốc của phương trình này cho bạn biết thể tích của khí ở những điều kiện đó
________số 8
[ 5.09432376+0.j 4.40066810+1.43502848j 4.40066810-1.43502848j]
Lưu ý rằng chỉ có một gốc là thực [và thậm chí sau đó, chúng ta phải xen vào 0. j không phải là tưởng tượng. Ngoài ra, trong một đa thức bậc ba, chỉ có thể có hai nghiệm ảo]. Trong trường hợp này, điều đó có nghĩa là chỉ có một giai đoạn hiện tại
1 Tóm tắt
Đa thức trong numpy thậm chí còn tốt hơn trong Matlab, bởi vì bạn có một đối tượng đa thức hoạt động giống như một hàm. Mặt khác, chúng có chức năng tương đương
Chúng tôi không có bất kỳ công thức xác định trước nào để giải đa thức bậc hơn 3. Phương pháp số là công cụ toán học có thể được sử dụng để tìm nghiệm gần đúng của đa thức
Vì vậy, về cơ bản, chúng tôi đang triển khai một thuật toán kết hợp phương pháp số và phép chia tổng hợp để giải phương trình đa thức. Kiểm tra mã của tôi ở đây
Việc triển khai của chúng tôi lấy danh sách các hệ số của đa thức làm đầu vào và đưa ra tất cả các nghiệm của nó
Ta có thể sử dụng phương pháp Chia đôi để tìm nghiệm của đa thức. Nhưng chúng ta chưa sử dụng phương pháp Chia đôi trong bài toán này. Trước khi thảo luận về lý do tại sao, trước tiên chúng ta hãy xem phương pháp Chia đôi là gì
phương pháp chia đôiCho một hàm f[x] và hai số 'a' và 'b'
giả định
1. f[x] liên tục trên khoảng [a,b]
2. Và f[a] * f[b]
Dung dịch
- Tìm trung điểm của 'a' và 'b', giả sử c
- Nếu f[c]=0 thì c là nghiệm
- Khác.
1. Nếu f[a]*f[c] < 0 thì gốc nằm giữa [a, c]. Lặp lại các bước với khoảng mới [a, c]
2. Khác f[b]*f[c] < 0 thì căn nằm giữa [b, c]. Lặp lại các bước với khoảng mới [b, c]
Thuận lợi
Chúng tôi biết chúng tôi đang ở gần giải pháp như thế nào vì chúng tôi đang lặp lại quy trình với khoảng thời gian ngày càng nhỏ hơn đưa chúng tôi đến gần giải pháp hơn
Nhược điểm
Nhược điểm của việc sử dụng phương pháp Chia đôi là chúng ta không thể tìm thấy nhiều nghiệm của một đa thức.
Một nhược điểm lớn khác là tìm các khoảng [a,b]. Các khoảng phải được một chút gần với gốc. Quan trọng nhất, chỉ có một gốc rơi vào khoảng đó. Ví dụ: nếu chúng ta đang đưa ra một khoảng thời gian lớn và nếu có nhiều hơn một nghiệm rơi trong cùng một khoảng thời gian, thuật toán sẽ dừng lại
Do đó chúng ta cần một thuật toán tốt hơn để giải quyết vấn đề này một cách hiệu quả
Phương pháp NewtonVì phương pháp Chia đôi không phù hợp với chúng tôi, chúng tôi sử dụng phương pháp của Newton để tìm ra một trong các nghiệm của bất kỳ đa thức đã cho nào
Có các phương pháp Số khác như phương pháp Secant để tìm nghiệm của đa thức. Tuy nhiên, phương pháp của Newton tương đối dễ dàng hơn và không yêu cầu nhiều đầu vào hơn
Bây giờ chúng ta hãy thảo luận về phương pháp của Newton là gì
Giả sử chúng ta muốn tìm nghiệm của hàm f[x] [một hàm đa thức bậc bất kỳ trong trường hợp này], và giả sử chúng ta tìm được dự đoán ban đầu cho nghiệm này, giả sử x0. Dự đoán ban đầu này hầu như luôn luôn sai và vì vậy chúng tôi muốn tìm một ước tính gần đúng hơn. Điều này có thể được thực hiện bằng cách vẽ tiếp tuyến của f[x] tại x0
Phương trình tiếp tuyến tại x0 là
y = f[x0] + f′[x0] [x−x0]
Dưới đây là đồ thị hiển thị tiếp tuyến
Ta có thể thấy rằng tiếp tuyến tại x0 gần nghiệm hơn nhiều. Hãy gọi điểm mới này là x1 [là giá trị gần đúng mới của chúng ta]
Bây giờ chúng ta biết tọa độ của xấp xỉ mới. tôi. e. , [x1, 0]. Chúng tôi thay thế giá trị này trong phương trình ban đầu của chúng tôi và đánh giá x1 như sau
0 = f[x0] + f′[x0] [x1−x0]
x1−x0 = − f[x0] / f′[x0]
x1 = x0 − f[x0] / f′[x0]
Do đó, ta có thể tìm ra nghiệm, miễn là f’[x0]. = 0
Bây giờ chúng tôi lặp lại quy trình này một lần nữa để tìm xấp xỉ tốt hơn cho x1 như sau. Giả sử giá trị gần đúng tiếp theo là x2. Ta tính x2 như sau
x2 = x1 − f[x1] / f′[x1]
Phương pháp của Newton là, cho một hàm f[x]=0, và xn là một xấp xỉ của f[x] và f’[x]. = 0 , thì phép tính gần đúng tiếp theo là
x{n+1} = xn − f[xn] / f′[xn]
Sử dụng phương pháp của Newton, chúng tôi tìm thấy một nghiệm của một phương trình đã cho. Phương pháp của Newton là lặp đi lặp lại trong tự nhiên. Nó chạy trong một vòng lặp ngày càng tiến gần đến giải pháp tối ưu nhất
Nhược điểm của việc sử dụng phương pháp Newton là
1. f’[x] không được bằng 0 và
2. Chúng ta cần tìm giá trị gần đúng ban đầu [x0] bằng cách nào đó
3. Chúng ta cần tìm đạo hàm của f[x] cho mỗi xấp xỉ
Bây giờ hãy xem cách chúng ta sử dụng phương pháp của Newton trong vấn đề này
- Hàm đầu vào [về cơ bản là một danh sách các hệ số], được chuyển đổi thành một biểu thức tượng trưng bằng cách sử dụng hàm symbol_fn[]
139 139 1390
2. Biểu thức tượng trưng được đánh giá bằng cách sử dụng đánh giá_sym_exp[]
139 139 1391
3. Hàm newtons_method[] là một triển khai của phương thức Newton, đưa ra một gốc của biểu thức tượng trưng. Chúng tôi đang sử dụng sympy để tìm đạo hàm đầu tiên của f[x]
139 139 1392
Bây giờ, chúng ta có một phương trình và một nghiệm của nó
4. Sử dụng phương pháp của Newton, chúng tôi tìm thấy một gốc của x nói x=5. Chúng tôi đang chuyển đổi gốc này thành một thừa số, x-5 [để thực hiện phép chia tổng hợp]
5. Sử dụng thừa số từ bước trên, chúng ta có thể giảm đa thức bậc n xuống bậc n-1 bằng cách sử dụng phép chia tổng hợp
phân chia tổng hợp là gì?
Bộ phận tổng hợpPhép chia tổng hợp là một phương pháp chia đa thức. Trong trường hợp này, chúng ta đang sử dụng phép chia tổng hợp để giảm bậc của đa thức đi một bậc mỗi lần, với nghiệm mà ta có được từ phương pháp của Newton
Hãy lấy một ví dụ về đa thức bậc ba để giải thích cách hoạt động của phép chia tổng hợp
x³-9x²+26x-24=0
Giả sử, phương pháp Newton của chúng ta xác định 3 là một trong các nghiệm của đa thức này
Phép chia tổng quát của đa thức như sau
Bây giờ, hãy xem cách phép chia tổng hợp hoạt động cho cùng một ví dụ
Đầu tiên, chúng ta phải lấy tất cả các hệ số của đa thức và viết nó bên trong ký hiệu phép chia hình chữ “L”
Đặt thừa số 3 ở vế trái
Lấy hệ số đầu tiên [hệ số hàng đầu] không thay đổi
Bây giờ nhân giá trị mang xuống này với hệ số 3 và đặt kết quả vào cột tiếp theo [bên trong ký hiệu chia]. Bây giờ thêm cột và đặt tổng ở dưới cùng của biểu tượng chia
Bây giờ nhân giá trị mang xuống trước đó với hệ số để nhận giá trị tiếp theo
Lặp lại điều này cho đến khi chúng tôi đạt được số cuối cùng
Nếu giá trị của cột cuối cùng là 0 thì x-3 là nhân tử của đa thức này. tôi. e. , 3 thực tế là nghiệm của đa thức này
139 139 1393
Giá trị thương số sẽ là x²-6x+8 [nhỏ hơn một bậc so với đa thức thực tế]
Bây giờ chúng ta đưa đa thức bậc hai [n-1=2] này làm đầu vào cho phương pháp của Newton để lấy một nghiệm của phương trình này
Ta lặp lại phép chia tổng hợp cho đa thức bậc 2 mới với căn đã cho theo phương pháp Newton, để được đa thức bậc thấp hơn
Chúng tôi lặp lại điều này cho đến khi chúng tôi nhận được tất cả các nghiệm của đa thức
139 139 1394Cách sử dụng mã của tôi
139 139 1395
Đầu ra của giải quyết_any_poly. pyTools được sử dụng để giải quyết vấn đề này
1. Matplotlib. Để trực quan hóa đa thức với các nghiệm
2. Sympy. Để có được đạo hàm đầu tiên của một hàm để thực hiện phương pháp của Newton. Chúng ta có thể loại bỏ sự phụ thuộc của Sympy bằng cách sử dụng Phương pháp sai phân hữu hạn.
3. Numpy
4. Krita để vẽ
Dự án này có thể được mở rộng để giải các phương trình với các số hạng phi tuyến tính như sin, cosin và hàm mũ bằng cách sử dụng khai triển chuỗi Taylor