📅  最后修改于: 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)} $
此函数用于简化三角恒等式。可能需要注意的是,反三角函数的命名约定是在函数名称的前面添加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函数使用试探法来应用最合适的三角身份。
此函数通过将幂与相似的基数和指数相结合来减少给定的表达式。
>>> 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} $
此函数采用对数并使用以下规则将它们组合起来-
>>> 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} $