- SymPy 教程
- SymPy - 主页
- SymPy - 简介
- SymPy - 安装
- SymPy - 符号计算
- SymPy - 数字
- SymPy - 符号
- SymPy - 替换
- SymPy - sympify() 函数
- SymPy - evalf() 函数
- SymPy - Lambdify() 函数
- SymPy - 逻辑表达式
- SymPy - 查询
- SymPy - 简化
- SymPy - 导数
- SymPy - 集成
- SymPy - 矩阵
- SymPy - 函数类
- SymPy - 四元数
- SymPy - 求解器
- SymPy - 绘图
- SymPy - 实体
- SymPy - 套装
- SymPy - 打印
- SymPy 有用资源
- SymPy - 快速指南
- SymPy - 有用的资源
- SymPy - 讨论
SymPy - 简化
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$
您可以通过更改combine='base'或combine='exp'来使powsimp()仅组合基数或仅组合指数。默认情况下,combine='all',两者兼而有之。如果force为True,则将组合碱基而不检查假设。
>>> powsimp(expr, combine='base', force=True)
上面的代码片段给出了相当于下面表达式的输出 -
$x^y(xy)^z$
梳子
涉及阶乘和二项式的组合表达式可以使用combsimp()函数进行简化。SymPy提供了一个factorial()函数
>>> 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}$