Python có thể giải phương trình đa thức không?

Đ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 đôi

Cho 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

  1. Tìm trung điểm của 'a' và 'b', giả sử c
  2. Nếu f[c]=0 thì c là nghiệm
  3. 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 Newton

Vì 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

  1. 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
139
0

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
139
1

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
139
2

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ợp

Phé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
139
3

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
139
4Cách sử dụng mã của tôi
139
139
139
5

Đầ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ẽ

Làm thế nào để đóng góp

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

Làm cách nào để giải một phương trình trong Python?

Thủ thuật Python với số phức và đánh giá chuỗi .
def Solve_linear[phương trình,var='x']. biểu thức = phương trình. thay thế ["=","-["]+"]" được nhóm = eval[biểu thức. thay thế[var,'1j']].
biểu thức = phương trình. thay thế ["="," - ["]+"]"
được nhóm = eval[biểu thức. thay thế[var,'1j']
trở lại nhóm. thực/nhóm. tưởng tượng

Phương pháp tốt nhất để giải phương trình đa thức là gì?

Tính thừa số và thuộc tính tích bằng 0 cho phép chúng ta giải các phương trình. Để giải phương trình đa thức, trước tiên hãy viết nó ở dạng chuẩn. Khi nó bằng 0, hãy tính nó và sau đó đặt từng hệ số biến bằng 0. Nghiệm của phương trình thu được là nghiệm của phương trình ban đầu.

Có thể tạo đa thức từ gốc trong Python không?

Để tạo đa thức monic với các nghiệm đã cho, hãy sử dụng đa thức. phương thức polyfromroots[] trong Python Numpy . Phương thức trả về mảng 1-D của các hệ số của đa thức Nếu tất cả các nghiệm là thực thì out cũng là thực, ngược lại thì phức.

Mô hình nào được sử dụng để giải các bài toán về đa thức?

Mô hình tuyến tính, bậc hai và lập phương .

Chủ Đề