Hướng dẫn how to create a polynomial function in python - cách tạo một hàm đa thức trong python

Tôi khuyên bạn nên sử dụng

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
4 và
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
5, trong đó các hệ số là
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
6.

Ví dụ: để đại diện cho

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
7:

p1 = numpy.poly1d([3,2,1])

Và với đối tượng

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
8 kết quả, bạn có thể hoạt động bằng cách sử dụng
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
9,
139
139
139
0, v.v.

print(p1*p1)
#   4      3      2
#9 x + 12 x + 10 x + 4 x + 1

Nếu bạn muốn xây dựng các chức năng của riêng mình, giả sử rằng P chứa các hệ số theo thứ tự:

139
139
139
1:

def eval_polynomial(p,x):
    return sum((a*x**i for i,a in enumerate(p)))

def multiply_by_one_term(p, a, k):
    return [0]*k + [a*i for i in p]

Ghi chú

Hàm đánh giá của tôi sử dụng theo cấp số nhân, có thể tránh được với quy tắc của Horner, như được đăng trong một câu trả lời khác, có sẵn trong hàm

139
139
139
2 của Numpy

Bài đăng Matlab

Đa thức có thể được biểu diễn dưới dạng 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 ra 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 bạn dễ dàng có được sự phái sinh và tích phân của đa thức.

Xem xét: \ (y = 2x^2 - 1 \). Chúng tôi biết đạo hàm là \ (4x \). Ở đây chúng tôi tính toán đạo hàm và đánh giá nó ở 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 hợp 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 để chúng tôi tính toán 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.roots.

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)

print(p1*p1)
#   4      3      2
#9 x + 12 x + 10 x + 4 x + 1
0

Có các ứ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 khối \ (f (v) = v^3 - \ frac {p n b + n r t} {p} v^2 + \ frac {n^2 a} {p} v - \ frac {n^3 a b} {p} = 0 \), trong đó \ (a \) và \ (b \) là hằng số, \ (p \) là áp suất, \ (r \) là hằng số khí, \ ( T \) là nhiệt độ tuyệt đối và \ (n \) là số nốt ruồi. Rễ 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 đó.

print(p1*p1)
#   4      3      2
#9 x + 12 x + 10 x + 4 x + 1
1

print(p1*p1)
#   4      3      2
#9 x + 12 x + 10 x + 4 x + 1
2

Lưu ý rằng chỉ có một gốc là có thật (và thậm chí sau đó, chúng ta phải interpet 0.J là không tưởng tượng. Ngoài ra, trong một đa thức khối, chỉ có thể có hai gốc tưởng tượng). Trong trường hợp này có nghĩa là chỉ có một pha hiện tại.

1. Tóm tắt Summary

Các đa thức trong numpy thậm chí còn tốt hơn ở 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. Nếu không, chúng tương đương về mặt chức năng.

Bản quyền (c) 2013 của John Kitchin. Xem giấy phép để biết thông tin về sao chép.

Nguồn chế độ org

Bởi Bernd Klein. Sửa đổi lần cuối: 16 tháng 2 năm 2022.Bernd Klein. Last modified: 16 Feb 2022.

Trên trang này

Giới thiệu

Nếu bạn đã đến trường trung học, bạn sẽ gặp phải các thuật ngữ chức năng đa thức và đa thức. Chương này của hướng dẫn Python của chúng tôi hoàn toàn về đa thức, tức là chúng tôi sẽ xác định một lớp để xác định đa thức. Sau đây là một ví dụ về đa thức với độ 4:polynomial and polynomial function. This chapter of our Python tutorial is completely on polynomials, i.e. we will define a class to define polynomials. The following is an example of a polynomial with the degree 4:

$$ p (x) = x^4 - 4 \ cdot x^2 + 3 \ cdot x $$

Bạn sẽ phát hiện ra rằng có rất nhiều điểm tương đồng với số nguyên. Chúng tôi sẽ xác định các hoạt động số học khác nhau cho các đa thức trong lớp của chúng tôi, như bổ sung, trừ, nhân và chia. Lớp đa thức của chúng tôi cũng sẽ cung cấp phương tiện để tính toán đạo hàm và tích phân của đa thức. Chúng tôi sẽ không bỏ lỡ âm mưu đa thức.

Có rất nhiều beaty trong đa thức và trên hết là cách chúng có thể được thực hiện như một lớp Python. Chúng tôi muốn nói cảm ơn Drew Shanon, người đã cho phép chúng tôi sử dụng bức tranh tuyệt vời của anh ấy, coi toán học là nghệ thuật!

Hướng dẫn how to create a polynomial function in python - cách tạo một hàm đa thức trong python

Giới thiệu toán học ngắn

Chúng tôi sẽ chỉ đối phó với đa thức trong một không xác định (còn được gọi là biến) x. Một dạng chung của đa thức trong một không xác định trông như thế này:

$$ a_n \ cdot x^n + a_ {n-1} \ cdot x^{n-1} + \ ldots + a_2 \ cdot x^2 + a_1 \ cdot x + a_0 $$

Trong đó $ a_0, a_1, ... a_n $ là các hằng số - số nguyên không âm - và $ x $ là không xác định hoặc biến. Thuật ngữ "không xác định" có nghĩa là $ x $ đại diện cho không có giá trị cụ thể, nhưng bất kỳ giá trị nào có thể được thay thế cho nó.

Biểu thức này thường được viết với toán tử tổng:

$$ \ sum_ {k = 0}^{n} a_k \ cdot x^k = a_n \ cdot x^n + a_ {n-1} \ cdot x^{n-1} + \ ldot ^2 + a_1 \ cdot x + a_0 $$

Hàm đa thức là một hàm có thể được xác định bằng cách đánh giá một đa thức. Một hàm F của một đối số có thể được định nghĩa là:

$$ f (x) = \ sum_ {k = 0}^{n} a_k \ cdot x^k $$

Các chức năng đa thức với Python

Thật dễ dàng để thực hiện các hàm đa thức trong Python. Như một ví dụ, chúng tôi xác định hàm đa thức được đưa ra trong phần giới thiệu của chương này, tức là $ p (x) = x^4 - 4 \ cdot x^2 + 3 \ cdot x $

Mã Python cho hàm đa thức này trông như thế này:

print(p1*p1)
#   4      3      2
#9 x + 12 x + 10 x + 4 x + 1
3

Chúng ta có thể gọi chức năng này giống như bất kỳ chức năng nào khác:

print(p1*p1)
#   4      3      2
#9 x + 12 x + 10 x + 4 x + 1
4

OUTPUT:

print(p1*p1)
#   4      3      2
#9 x + 12 x + 10 x + 4 x + 1
5

print(p1*p1)
#   4      3      2
#9 x + 12 x + 10 x + 4 x + 1
6

Đào tạo Python sống

Hướng dẫn how to create a polynomial function in python - cách tạo một hàm đa thức trong python

Các khóa học trực tuyến sắp tới

Ghi danh ở đây

Lớp đa thức

Chúng tôi sẽ xác định bây giờ là một lớp cho các hàm đa thức. Chúng tôi sẽ xây dựng một ý tưởng mà chúng tôi đã phát triển trong chương về các nhà trang trí hướng dẫn Python của chúng tôi, nơi chúng tôi giới thiệu các nhà máy đa thức.polynomial factories.

Một đa thức được xác định duy nhất bởi các hệ số của nó. Điều này có nghĩa là, một thể hiện của lớp đa thức của chúng tôi cần một danh sách hoặc tuple để xác định các hệ số.

print(p1*p1)
#   4      3      2
#9 x + 12 x + 10 x + 4 x + 1
7

Chúng ta có thể khởi tạo đa thức của hàm đa thức ví dụ trước đây như sau:

print(p1*p1)
#   4      3      2
#9 x + 12 x + 10 x + 4 x + 1
8

OUTPUT:

print(p1*p1)
#   4      3      2
#9 x + 12 x + 10 x + 4 x + 1
9

Đã xác định biểu diễn chuỗi chính tắc của một đa thức với hàm repr, chúng tôi cũng muốn xác định một đầu ra có thể được sử dụng để tạo một phiên bản thân thiện hơn với mọi người. Chúng tôi viết một bản trình bày latex có thể được sử dụng để in chức năng theo cách đẹp:repr function, we also want to define an output which could be used to create a version which is more friendly for people. We write a LaTex represention which can be used to print the function in a beatiful way:

def eval_polynomial(p,x):
    return sum((a*x**i for i,a in enumerate(p)))

def multiply_by_one_term(p, a, k):
    return [0]*k + [a*i for i in p]
0

def eval_polynomial(p,x):
    return sum((a*x**i for i,a in enumerate(p)))

def multiply_by_one_term(p, a, k):
    return [0]*k + [a*i for i in p]
1

OUTPUT:

def eval_polynomial(p,x):
    return sum((a*x**i for i,a in enumerate(p)))

def multiply_by_one_term(p, a, k):
    return [0]*k + [a*i for i in p]
2

Nếu chúng ta sử dụng nó trong latex, nó sẽ trông như thế này:

$ p_0 = x^4-4x^2+3x $

$ p_1 = 2x $

$ p_2 = 4x^2+x-1 $

$ p_3 = 3x^4-5x^2+2x+7 $

$ p_4 = -42 $

Cho đến nay, chúng tôi đã xác định đa thức, nhưng những gì chúng tôi thực sự cần là các hàm đa thức. Đối với mục đích này, chúng tôi biến các trường hợp của lớp đa thức thành các thiết bị gọi bằng cách xác định phương thức cuộc gọi.polynomials, but what we actually need are polynomial functions. For this purpose, we turn instances of the Polynomial class into callables by defining the call method.

def eval_polynomial(p,x):
    return sum((a*x**i for i,a in enumerate(p)))

def multiply_by_one_term(p, a, k):
    return [0]*k + [a*i for i in p]
3

Bây giờ có thể gọi một thể hiện của lớp chúng tôi như một hàm. Chúng tôi gọi nó với một đối số và thể hiện, - có thể gọi được, - hoạt động giống như một hàm đa thức:

def eval_polynomial(p,x):
    return sum((a*x**i for i,a in enumerate(p)))

def multiply_by_one_term(p, a, k):
    return [0]*k + [a*i for i in p]
4

OUTPUT:

def eval_polynomial(p,x):
    return sum((a*x**i for i,a in enumerate(p)))

def multiply_by_one_term(p, a, k):
    return [0]*k + [a*i for i in p]
5

Chỉ để giải trí, chúng ta hãy vẽ đồ thị chức năng được xác định trước đó:

def eval_polynomial(p,x):
    return sum((a*x**i for i,a in enumerate(p)))

def multiply_by_one_term(p, a, k):
    return [0]*k + [a*i for i in p]
6

Trước khi chúng tôi tinh chỉnh lớp học của mình, chúng tôi hãy sử dụng một biến thể hiệu quả hơn về mặt số lượng để tính toán đa thức. Chúng tôi sẽ sử dụng thuật toán này trong phương thức

139
139
139
3 của chúng tôi. Chúng tôi đã giới thiệu biến thể này trong chương của chúng tôi về trang trí.

Mỗi đa thức

$ f (x) = \ sum_ {k = 0}^{n} a_k \ cdot x^k $

cũng có thể được viết dưới dạng

$ f (x) = (a_n x + x_ {n-1}) x + \ cdot + a_1) x + a_0 $

Để thấy rõ rằng chúng tương đương, chúng tôi viết lại định nghĩa lớp của mình, nhưng gọi nó là

139
139
139
4 để chúng tôi có thể sử dụng cả hai phiên bản:

def eval_polynomial(p,x):
    return sum((a*x**i for i,a in enumerate(p)))

def multiply_by_one_term(p, a, k):
    return [0]*k + [a*i for i in p]
7

Chúng tôi sẽ kiểm tra cả hai lớp bằng cách so sánh kết quả:

def eval_polynomial(p,x):
    return sum((a*x**i for i,a in enumerate(p)))

def multiply_by_one_term(p, a, k):
    return [0]*k + [a*i for i in p]
8

OUTPUT:

Có thể xác định bổ sung và trừ cho đa thức. Tất cả những gì chúng ta phải làm là thêm hoặc trừ các hệ số có cùng số mũ từ cả hai đa thức.

Nếu chúng ta có các hàm đa thức $ f (x) = \ sum_ {k = 0}^{n} a_k \ cdot x^k $ và $ g (x) = \ sum_ {k = 0}^{n} b_k \ cdot x^k $, bổ sung được định nghĩa là

$$ (f + g) (x) = \ sum_ {k = 0}^{n} (a_k + b_k) \ cdot x^k $$

và phép trừ tương ứng được định nghĩa là

$$ (f -g) (x) = \ sum_ {k = 0}^{n} (a_k - b_k) \ cdot x^k $$

Trước khi chúng ta có thể thêm các phương thức __add__ và __sub__, cần thiết để bổ sung và trừ, chúng ta thêm một zip_longest (). Nó hoạt động tương tự như ZIP cho hai tham số, nhưng nó không dừng lại nếu một trong các trình lặp bị kiệt sức nhưng thay vào đó sử dụng "fillvalue".

def eval_polynomial(p,x):
    return sum((a*x**i for i,a in enumerate(p)))

def multiply_by_one_term(p, a, k):
    return [0]*k + [a*i for i in p]
9

OUTPUT:

Chúng tôi sẽ thêm trình tạo này vào lớp của chúng tôi như một phương thức tĩnh. Bây giờ chúng tôi có khả năng thêm các phương thức __add__ và __sub__. Chúng tôi sẽ cần máy phát

139
139
139
5 từ itertools.
139
139
139
5 lấy và số lượng lặp tùy ý và tham số từ khóa
139
139
139
7. Nó tạo ra một trình lặp tập hợp các phần tử từ mỗi lần lặp. Nếu các vòng lặp có độ dài không đồng đều, các giá trị bị thiếu sẽ được lấp đầy bằng fillvalue. Lặp lại tiếp tục cho đến khi có thể cạn kiệt lâu nhất.

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
0

Nó là cực kỳ dễ dàng để thêm sự khác biệt vào lớp của chúng tôi. Về mặt toán học, nó được định nghĩa là

$$ f '(x) = \ sum_ {k = 0}^{n} k \ cdot a_k \ cdot x^{k-1} $$

if

$$ f (x) = \ sum_ {k = 0}^{n} a_k \ cdot x^k $$

Điều này có thể dễ dàng thực hiện trong phương pháp 'phái sinh' của chúng tôi:

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
1

Chơi xung quanh một chút:

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
2

OUTPUT:

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
3

Đào tạo Python sống

Hướng dẫn how to create a polynomial function in python - cách tạo một hàm đa thức trong python

Các khóa học trực tuyến sắp tới

Ghi danh ở đây

Làm thế nào để bạn viết một chương trình đa thức trong Python?

Chương trình Python để tính toán một phương trình đa thức..
Nhập mô -đun toán học ..
Lấy các hệ số của phương trình đa thức và lưu trữ nó trong danh sách ..
Lấy giá trị của x ..
Sử dụng một vòng lặp và trong khi vòng lặp để tính toán giá trị của biểu thức đa thức cho ba thuật ngữ đầu tiên và lưu trữ nó trong một biến tổng ..

Làm thế nào để bạn tạo ra một đa thức trong numpy?

Gói đa thức, được giới thiệu trong Numpy 1.4.... Làm thế nào để….

Làm thế nào để bạn tìm thấy một đa thức trong Python?

Cách tiếp cận: Áp dụng chức năng NP.poly1d () trên mảng và lưu trữ nó trong một biến.Tìm rễ bằng cách nhân biến với rễ hoặc r (từ khóa được xây dựng) và in kết quả để có được gốc của đa thức đã cho.