SymPy – 简化

SymPy – 简化

Sympy具有强大的简化数学表达式的能力。在SymPy中,有许多函数可以进行各种类型的简化操作。其中有一个叫simplify()的通用函数,它试图得出一个表达式的最简单形式。

简化

这个函数定义在sympy.simplify模块中。 simplify()试图应用智能启发式方法来使输入的表达式 “更简单”。下面的代码显示了简化表达式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)])

collect

这个函数收集一个表达式的加法项,相对于一个有理指数的幂级表达式的列表。

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

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}}{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^y x^z y^z

>>> powsimp(expr)

上述代码片断给出的输出等同于以下表达式 −

x^{y+z} y^z

你可以通过改变combined=’base’或combined=’exp’使powsimp()只合并基数或只合并指数。默认情况下,combined=’all’,两者都做。如果force为True,那么基数将被合并,而不检查假设。

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

上述代码片断给出的输出等同于以下表达式 −

$x^y(xy)^z*

combsimp

涉及阶乘和二项式的组合表达式可以通过使用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

这个函数采用对数,并使用以下规则将它们结合起来−

  • 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^a y}{z}

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程