SymPy - Đơn giản hóa
Sympy có khả năng đơn giản hóa các biểu thức toán học một cách mạnh mẽ. Có nhiều chức năng trong SymPy để thực hiện nhiều loại đơn giản hóa khác nhau. Một hàm tổng quát được gọi là simplefy () ở đó cố gắng đạt được dạng đơn giản nhất của một biểu thức.
đơn giản hóa
Chức năng này được định nghĩa trong mô-đun precision.simplify. simplefy () cố gắng áp dụng heuristics thông minh để làm cho biểu thức đầu vào “đơn giản hơn”. Đoạn mã sau đây cho thấy đơn giản hóa biểu thức $ sin ^ 2 (x) + cos ^ 2 (x) $.
>>> from sympy import *
>>> x=Symbol('x')
>>> expr=sin(x)**2 + cos(x)**2
>>> simplify(expr)
Đoạn mã trên cho kết quả sau:
1
mở rộng
Mở rộng () là một trong những hàm đơn giản hóa phổ biến nhất trong SymPy, được sử dụng để mở rộng các biểu thức đa thức. Ví dụ -
>>> a,b=symbols('a b')
>>> expand((a+b)**2)
Đoạn mã trên cho kết quả tương đương với biểu thức bên dưới:
$a^2 + 2ab + b^2$
>>> expand((a+b)*(a-b))
Đoạn mã trên cho kết quả tương đương với biểu thức bên dưới:
$a^2 - b^2$
Hàm expand () làm cho các biểu thức lớn hơn chứ không phải nhỏ hơn. Thông thường là như vậy, nhưng thường thì một biểu thức sẽ trở nên nhỏ hơn khi gọi hàm expand () trên đó.
>>> expand((x + 1)*(x - 2) - (x - 1)*x)
Đoạn mã trên cho kết quả sau:
-2
hệ số
Hàm này nhận một đa thức và nhân nó thành nhân tử bất khả quy trên các số hữu tỉ.
>>> x,y,z=symbols('x y z')
>>> expr=(x**2*z + 4*x*y*z + 4*y**2*z)
>>> factor(expr)
Đoạn mã trên cho kết quả tương đương với biểu thức bên dưới:
$z(x + 2y)^2$
>>> factor(x**2+2*x+1)
Đoạn mã trên cho kết quả tương đương với biểu thức bên dưới:
$(x + 1)^2$
Hàm factor () ngược lại với hàm expand (). Mỗi nhân tố được trả về bởi factor () được đảm bảo là không thể quy đổi. Hàm factor_list () trả về đầu ra có cấu trúc hơn.
>>> expr=(x**2*z + 4*x*y*z + 4*y**2*z)
>>> factor_list(expr)
Đoạn mã trên cho kết quả tương đương với biểu thức bên dưới:
(1, [(z, 1), (x + 2*y, 2)])
sưu tầm
Hàm này thu thập các số hạng bổ sung của một biểu thức đối với danh sách biểu thức lên đến lũy thừa với số mũ hữu tỷ.
>>> expr=x*y + x - 3 + 2*x**2 - z*x**2 + x**3
>>> expr
Đoạn mã trên cho kết quả tương đương với biểu thức bên dưới:
$x^3 + x^2z + 2x^2 + xy + x - 3$
Hàm collect () trên biểu thức này cho kết quả như sau:
>>> collect(expr,x)
Đoạn mã trên cho kết quả tương đương với biểu thức bên dưới:
$x^3 + x^2(2 - z) + x(y + 1) - 3$
>>> expr=y**2*x + 4*x*y*z + 4*y**2*z+y**3+2*x*y
>>> collect(expr,y)
Đoạn mã trên cho kết quả tương đương với biểu thức bên dưới:
$Y^3+Y^2(x+4z)+y(4xz+2x)$
hủy bỏ
Hàm hủy () sẽ nhận bất kỳ hàm hữu tỉ nào và đưa nó vào dạng chính tắc chuẩn, p / q, trong đó p và q là các đa thức khai triển không có nhân tử chung. Các hệ số hàng đầu của p và q không có mẫu số tức là chúng là số nguyên.
>>> expr1=x**2+2*x+1
>>> expr2=x+1
>>> cancel(expr1/expr2)
Đoạn mã trên cho kết quả tương đương với biểu thức bên dưới:
$x+1$
>>> expr = 1/x + (3*x/2 - 2)/(x - 4)
>>> expr
Đoạn mã trên cho kết quả tương đương với biểu thức bên dưới:
$\frac{\frac{3x}{2} - 2}{x - 4} + \frac{1}{x}$
>>> cancel(expr)
Đoạn mã trên cho kết quả tương đương với biểu thức bên dưới:
$\frac{3x^2 - 2x - 8}{2x^2 - 8}$
>>> expr=1/sin(x)**2
>>> expr1=sin(x)
>>> cancel(expr1*expr)
Đoạn mã trên cho kết quả tương đương với biểu thức bên dưới:
$\frac{1}{\sin(x)}$
trigsimp
Hàm này được sử dụng để đơn giản hóa các nhận dạng lượng giác. Có thể lưu ý rằng quy ước đặt tên cho các hàm lượng giác nghịch đảo là thêm một dấu a vào phía trước tên của hàm. Ví dụ, cosin nghịch đảo, hoặc cosin cung, được gọi là acos ().
>>> from sympy import trigsimp, sin, cos
>>> from sympy.abc import x, y
>>> expr = 2*sin(x)**2 + 2*cos(x)**2
>>> trigsimp(expr)
2
Hàm trigsimp sử dụng phương pháp heuristics để áp dụng nhận dạng lượng giác phù hợp nhất.
quyền hạn
Hàm này làm giảm biểu thức đã cho bằng cách kết hợp các lũy thừa với các cơ số và số mũ tương tự.
>>> expr=x**y*x**z*y**z
>>> expr
Đoạn mã trên cho kết quả tương đương với biểu thức bên dưới:
$x^y x^z y^z$
>>> powsimp(expr)
Đoạn mã trên cho kết quả tương đương với biểu thức bên dưới:
$x^{y+z} y^z$
Bạn có thể tạo powsimp () chỉ kết hợp các cơ sở hoặc chỉ kết hợp các số mũ bằng cách thay đổi kết hợp = 'cơ sở' hoặc kết hợp = 'exp'. Theo mặc định, kết hợp = 'tất cả', nghĩa là cả hai. Nếu lực lượng là Đúng thì các cơ sở sẽ được kết hợp mà không cần kiểm tra các giả định.
>>> powsimp(expr, combine='base', force=True)
Đoạn mã trên cho kết quả tương đương với biểu thức bên dưới:
$x^y(xy)^z$
combsimp
Biểu thức tổ hợp liên quan đến giai thừa một nhị thức có thể được đơn giản hóa bằng cách sử dụng hàm combsimp (). SymPy cung cấp một hàm giai thừa ()
>>> expr=factorial(x)/factorial(x - 3)
>>> expr
Đoạn mã trên cho kết quả tương đương với biểu thức bên dưới:
$\frac{x!}{(x - 3)!}$
Để đơn giản hóa biểu thức tổ hợp trên, chúng ta sử dụng hàm combsimp () như sau:
>>> combsimp(expr)
Đoạn mã trên cho kết quả tương đương với biểu thức bên dưới:
$x(x-2)(x-1)$
Nhị thức (x, y) là số cách chọn y mục từ tập hợp x mục phân biệt. Nó cũng thường được viết là xCy.
>>> binomial(x,y)
Đoạn mã trên cho kết quả tương đương với biểu thức bên dưới:
$(\frac{x}{y})$
>>> combsimp(binomial(x+1, y+1)/binomial(x, y))
Đoạn mã trên cho kết quả tương đương với biểu thức bên dưới:
$\frac{x + 1}{y + 1}$
logcombine
Hàm này nhận logarit và kết hợp chúng bằng cách sử dụng các quy tắc sau:
- log (x) + log (y) == log (x * y) nếu cả hai đều dương
- a * log (x) == log (x ** a) nếu x dương và a thực
>>> logcombine(a*log(x) + log(y) - log(z))
Đoạn mã trên cho kết quả tương đương với biểu thức bên dưới:
$a\log(x) + \log(y) - \log(z)$
Nếu tham số lực của hàm này được đặt thành True thì các giả định ở trên sẽ được coi là giữ nguyên nếu không có giả định nào được áp dụng cho một đại lượng.
>>> logcombine(a*log(x) + log(y) - log(z), force=True)
Đoạn mã trên cho kết quả tương đương với biểu thức bên dưới:
$\log\frac{x^a y}{z}$