📜  SymPy-简化

📅  最后修改于: 2020-11-05 04:43:30             🧑  作者: Mango


Sympy具有简化数学表达式的强大功能。 SymPy中有许多功能可以执行各种简化。那里有一个通用的称为simple()的函数,它试图得出最简单的表达式形式。

简化

此函数在sympy.simplify模块中定义。 simple()尝试应用智能启发式方法来使输入表达式“更简单”。以下代码显示简化表达式$ sin ^ 2(x)+ cos ^ 2(x)$。

>>> from sympy import * 
>>> x=Symbol('x')
>>> expr=sin(x)**2 + cos(x)**2 
>>> simplify(expr)

上面的代码片段给出了以下输出-

1个

扩大

expand()是SymPy中最常见的简化函数之一,用于扩展多项式表达式。例如-

>>> a,b=symbols('a b') 
>>> expand((a+b)**2)

上面的代码片段给出的输出等于下面的表达式-

$ a ^ 2 + 2ab + b ^ 2 $

>>> expand((a+b)*(a-b))

上面的代码片段给出的输出等于下面的表达式-

$ a ^ 2-b ^ 2 $

expand()函数使表达式更大,而不是更小。通常是这种情况,但通常在调用expand()时表达式会变小。

>>> expand((x + 1)*(x - 2) - (x - 1)*x)

上面的代码片段给出了以下输出-

-2

因子

该函数采用多项式并将其分解为有理数上的不可约因子。

>>> x,y,z=symbols('x y z') 
>>> expr=(x**2*z + 4*x*y*z + 4*y**2*z) 
>>> factor(expr)

上面的代码片段给出的输出等于下面的表达式-

$ z(x + 2y)^ 2 $

>>> factor(x**2+2*x+1)

上面的代码片段给出的输出等于下面的表达式-

$(x + 1)^ 2 $

factor()函数与expand()相反。保证factor()返回的每个因子都是不可约的。 factor_list()函数返回更结构化的输出。

>>> expr=(x**2*z + 4*x*y*z + 4*y**2*z) 
>>> factor_list(expr)

上面的代码片段给出的输出等于下面的表达式-

(1,[[(z,1),(x + 2 * y,2)])

收藏

此函数针对表达式列表收集表达式的加法项,直到具有有理指数的幂。

>>> expr=x*y + x - 3 + 2*x**2 - z*x**2 + x**3 
>>> expr

上面的代码片段给出的输出等于下面的表达式-

$ x ^ 3 + x ^ 2z + 2x ^ 2 + xy + x-3 $

该表达式的collect()函数结果如下-

>>> collect(expr,x)

上面的代码片段给出的输出等于下面的表达式-

$ 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)

上面的代码片段给出的输出等于下面的表达式-

$ Y ^ 3 + Y ^ 2(x + 4z)+ y(4xz + 2x)$

取消

cancel()函数将采用任何有理函数并将其置于标准规范形式p / q中,其中p和q是没有公因子的扩展多项式。 p和q的前导系数没有分母,即它们是整数。

>>> expr1=x**2+2*x+1 
>>> expr2=x+1 
>>> cancel(expr1/expr2)

上面的代码片段给出的输出等于下面的表达式-

$ x + 1 $

>>> expr = 1/x + (3*x/2 - 2)/(x - 4) 
>>> expr

上面的代码片段给出的输出等于下面的表达式-

$ \ frac {\ frac {3x} {2}-2} {x-4} + \ frac {1} {x} $

>>> cancel(expr)

上面的代码片段给出的输出等于下面的表达式-

$ \ frac {3x ^ 2-2x-8} {2x ^ 2-8} $

>>> expr=1/sin(x)**2 
>>> expr1=sin(x) 
>>> cancel(expr1*expr)

上面的代码片段给出的输出等于下面的表达式-

$ \ frac {1} {\ sin(x)} $

Trigsimp

此函数用于简化三角恒等式。可能需要注意的是,反三角函数的命名约定是在函数名称的前面添加a。例如,反余弦或反余弦称为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

trigsimp函数使用试探法来应用最合适的三角身份。

powersimp

此函数通过将幂与相似的基数和指数相结合来减少给定的表达式。

>>> expr=x**y*x**z*y**z 
>>> expr

上面的代码片段给出的输出等于下面的表达式-

$ x ^ yx ^ zy ^ z $

>>> powsimp(expr)

上面的代码片段给出的输出等于下面的表达式-

$ x ^ {y + z} y ^ z $

您可以通过更改combin =’base’或Combine =’exp’来使powsimp()仅合并基数或仅合并指数。默认情况下,Combine =’all’同时执行这两个操作。如果force为True,则将合并基数而不检查假设。

>>> powsimp(expr, combine='base', force=True)

上面的代码片段给出的输出等于下面的表达式-

$ x ^ y(xy)^ z $

康普斯

通过使用combsimp()函数,可以简化涉及阶乘二项式的组合表达式。 SymPy提供了阶乘函数

>>> expr=factorial(x)/factorial(x - 3) 
>>> expr

上面的代码片段给出的输出等于下面的表达式-

$ \ frac {x!} {(x-3)!} $

为了简化上述组合表达式,我们使用combsimp()函数,如下所示:

>>> combsimp(expr)

上面的代码片段给出的输出等于下面的表达式-

$ x(x-2)(x-1)$

二项式(x,y)是从一组x个不同的项目中选择y个项目的方式的数量。它也经常写为xCy。

>>> binomial(x,y)

上面的代码片段给出的输出等于下面的表达式-

$(\ frac {x} {y})$

>>> combsimp(binomial(x+1, y+1)/binomial(x, y))

上面的代码片段给出的输出等于下面的表达式-

$ \ frac {x + 1} {y + 1} $

罗格班

此函数采用对数并使用以下规则将它们组合起来-

  • log(x)+ log(y)== log(x * y)如果两者均为正
  • a * log(x)== log(x ** a)如果x为正数且a为实数
>>> logcombine(a*log(x) + log(y) - log(z))

上面的代码片段给出的输出等于下面的表达式-

$ a \ log(x)+ \ log(y)-\ log(z)$

如果此函数的力参数设置为True,则如果没有关于数量的假设,将假设上述假设成立。

>>> logcombine(a*log(x) + log(y) - log(z), force=True)

上面的代码片段给出的输出等于下面的表达式-

$ \ log \ frac {x ^ ay} {z} $