【SymPy】(一)SymPy简介
【SymPy】(二)使用SymPy需要避开的坑
【SymPy】(三)基本操作(四)打印
(六)微积分
from sympy import *
x, y, z = symbols('x y z')
本文代码在Jupyter QtConsole中执行。
1 导数Derivatives
计算表达式的导数,使用diff
函数。
diff
可以同时求多次导数。若要求多次导,可根据需要多次传递变量,或者在变量后面传递一个数字。如:
你也可以一次对许多变量求偏导。只需按顺序传递每个变量,使用与单变量导数相同的语法。
diff
也可以作为方法调用:
要创建未计算的导数,请使用Derivative
类。它的语法与diff
相同。
要计算未计算的导数,请使用doit
方法。
可以使用元组(x,n)
创建未指定次数的导数,其中n
是导数相对于x
的求导次数。
2 积分 Integrals
要计算积分,使用integrate()
。有两种积分,定积分和不定积分。要计算一个不定积分,只需在表达式后面传递变量。
注意,SymPy不定积分的结果不包括积分常数。如果你想,你可以自己加一个。
注: ∞ ∞ ∞在SymPy中是 oo
要计算定积分,请传递参数(积分变量、下限、上限)
。
例如,计算:
∫
0
∞
e
−
x
d
x
\int_{0}^{\infty} e^{-x} d x
∫0∞e−xdx
与不定积分一样,可以传递多个限制元组来执行多重积分。例如,计算
∫
−
∞
∞
∫
−
∞
∞
e
−
x
2
−
y
2
d
x
d
y
\int_{-\infty}^{\infty} \int_{-\infty}^{\infty} e^{-x^{2}-y^{2}} d x d y
∫−∞∞∫−∞∞e−x2−y2dxdy
如果integrate
无法计算积分,它将返回一个未赋值的Integral
对象。
Integrate
使用不断改进的强大算法来计算定积分和不定积分,下面是其功能的示例:
3 极限 Limits
SymPy可以用limit
函数计算符号极限。
计算
lim x → x 0 f ( x ) \lim _{x \rightarrow x_{0}} f(x) x→x0limf(x)
的语法为: limit(f(x), x, x0)
,如:
当要计算的点是间断点时,应使用limit
而不是sub
。另外,像
∞
−
∞
∞−∞
∞−∞和
∞
∞
∞∞
∞∞这样的结果返回nan
(不是数字)。例如
像Derivative
和 Integral
一样,极限也有一个未赋值的对应项,Limit
。要计算它,可使用doit
。
若要仅计算一侧的限制,请传递“+
”或“-
”作为限制的第四个参数。例如,计算
lim
x
→
0
+
1
x
\lim _{x \rightarrow 0^{+}} \frac{1}{x}
x→0+limx1
另一侧:
SymPy可以计算函数围绕一点的渐近级数展开。
4 级数展开 Series Expansion
SymPy可以计算函数在一点的渐近级数展开。
计算
f
(
x
)
f(x)
f(x)在
x
=
x
0
x=x_0
x=x0点附近的
n
n
n次方展开式,使用f(x).series(x,x0,n)
。
x0
和n
可以省略,在这种情况下,将使用默认值x0=0
和n=6
。
末尾的 O ( x 4 ) O(x^4) O(x4)表示 x = 0 x=0 x=0时的 Landau 阶项(不要与计算机科学中使用的大 O O O表示法混淆,后者通常表示 x = ∞ x=∞ x=∞时的Landau 阶项)。这意味着所有的 x x x项的幂大于或等于 x 4 x^4 x4被省略。
O
(
.
)
O(.)
O(.)自动地吸收比它高阶的项。在Sympy中它可以在 series
之外创建和操作。
如果你不需要
O
(
)
O()
O(),可使用removeO
方法。
O O O表示法支持0之外的任意极限点
5 有限差分 Finite differences
如果我们想要一个表达式来估计一条曲线的导数,那么对于这条曲线,我们缺少一个封闭形式的表示,或者对于这条曲线,我们还不知道它的函数值。一种方法是使用有限差分法。
如果已经有一个Derivative
实例,则可以使用as_finite_difference
方法生成任意阶导数的近似值:
在这里,一阶导数用差分在 x x x附近近似,用步长1等距计算。
我们可以使用任意步长(可以包含符号表达式):
如果你只是对权重感兴趣,可以手动执行以下操作:
如果觉得使用finite_diff_weights
看起来比较复杂,而Derivative
实例的as_finite_difference
方法不够灵活,那么可以使用 apply_finite_diff
,
它以 order
, x_list
, y_list
和x0
作为参数:
未完待续:
【SymPy】(七)方程求解
【SymPy】(八)矩阵
【SymPy】(九)高级表达式操作