特殊的#

Gamma, Beta and Related Functions#

class sympy.functions.special.gamma_functions.gamma(arg)[源代码]#

伽马函数

\[\Gamma(x):=\int^{\infty}{0}t^{x-1}e^{-t}\mathrm{d}t。\]

解释

这个 gamma 函数实现传递阶乘函数值的函数(即\(\Gamma(n)=(n-1)!当n为整数时为\))。一般来说,\(\Gamma(z)\)定义在整个复平面上,除了负整数处有简单的极点。

实例

>>> from sympy import S, I, pi, gamma
>>> from sympy.abc import x

已知几个特殊值:

>>> gamma(1)
1
>>> gamma(4)
6
>>> gamma(S(3)/2)
sqrt(pi)/2

这个 gamma 函数遵循镜像对称性:

>>> from sympy import conjugate
>>> conjugate(gamma(x))
gamma(conjugate(x))

支持针对\(x\)的差异化:

>>> from sympy import diff
>>> diff(gamma(x), x)
gamma(x)*polygamma(0, x)

还支持系列扩展:

>>> from sympy import series
>>> series(gamma(x), x, 0, 3)
1/x - EulerGamma + x*(EulerGamma**2/2 + pi**2/12) + x**2*(-EulerGamma*pi**2/12 - zeta(3)/3 - EulerGamma**3/6) + O(x**3)

我们可以用数值计算 gamma 在整个复杂平面上任意精度的函数:

>>> gamma(pi).evalf(40)
2.288037795340032417959588909060233922890
>>> gamma(1+I).evalf(20)
0.49801566811835604271 - 0.15494982830181068512*I

参见

lowergamma

下不完全伽马函数。

uppergamma

上不完全伽马函数。

polygamma

多边形函数。

loggamma

对数伽马函数。

digamma

Digamma函数。

trigamma

Trigamma函数。

sympy.functions.special.beta_functions.beta

欧拉贝塔函数。

工具书类

class sympy.functions.special.gamma_functions.loggamma(z)[源代码]#

这个 loggamma 函数实现gamma函数的对数(即\(\log\gamma(x)\))。

实例

已知几个特殊值。对于数值积分参数,我们有:

>>> from sympy import loggamma
>>> loggamma(-2)
oo
>>> loggamma(0)
oo
>>> loggamma(1)
0
>>> loggamma(2)
0
>>> loggamma(3)
log(2)

对于符号值:

>>> from sympy import Symbol
>>> n = Symbol("n", integer=True, positive=True)
>>> loggamma(n)
log(gamma(n))
>>> loggamma(-n)
oo

对于半积分值:

>>> from sympy import S
>>> loggamma(S(5)/2)
log(3*sqrt(pi)/4)
>>> loggamma(n/2)
log(2**(1 - n)*sqrt(pi)*gamma(n)/gamma(n/2 + 1/2))

以及一般的理性论据:

>>> from sympy import expand_func
>>> L = loggamma(S(16)/3)
>>> expand_func(L).doit()
-5*log(3) + loggamma(1/3) + log(4) + log(7) + log(10) + log(13)
>>> L = loggamma(S(19)/4)
>>> expand_func(L).doit()
-4*log(4) + loggamma(3/4) + log(3) + log(7) + log(11) + log(15)
>>> L = loggamma(S(23)/7)
>>> expand_func(L).doit()
-3*log(7) + log(2) + loggamma(2/7) + log(9) + log(16)

这个 loggamma 函数对无穷大有以下限制:

>>> from sympy import oo
>>> loggamma(oo)
oo
>>> loggamma(-oo)
zoo

The loggamma function obeys the mirror symmetry if \(x \in \mathbb{C} \setminus \{-\infty, 0\}\):

>>> from sympy.abc import x
>>> from sympy import conjugate
>>> conjugate(loggamma(x))
loggamma(conjugate(x))

支持针对\(x\)的差异化:

>>> from sympy import diff
>>> diff(loggamma(x), x)
polygamma(0, x)

还支持系列扩展:

>>> from sympy import series
>>> series(loggamma(x), x, 0, 4).cancel()
-log(x) - EulerGamma*x + pi**2*x**2/12 - x**3*zeta(3)/3 + O(x**4)

We can numerically evaluate the loggamma function to arbitrary precision on the whole complex plane:

>>> from sympy import I
>>> loggamma(5).evalf(30)
3.17805383034794561964694160130
>>> loggamma(I).evalf(20)
-0.65092319930185633889 - 1.8724366472624298171*I

参见

gamma

伽马函数。

lowergamma

下不完全伽马函数。

uppergamma

上不完全伽马函数。

polygamma

多边形函数。

digamma

Digamma函数。

trigamma

Trigamma函数。

sympy.functions.special.beta_functions.beta

欧拉贝塔函数。

工具书类

class sympy.functions.special.gamma_functions.polygamma(n, z)[源代码]#

函数 polygamma(n, z) 收益率 log(gamma(z)).diff(n + 1) .

解释

它是\(\mathbb{C}\)上的一个亚纯函数,定义为γ函数对数的\((n+1)\)-阶导数:

\[\psi^{(n)}(z):=\frac{\mathrm{d}^{n+1}}{\mathrm{d}z^{n+1}}\log\Gamma(z)。\]

For \(n\) not a nonnegative integer the generalization by Espinosa and Moll [R358] is used:

\[\psi(s,z) = \frac{\zeta'(s+1, z) + (\gamma + \psi(-s)) \zeta(s+1, z)} {\Gamma(-s)}\]

实例

已知几个特殊值:

>>> from sympy import S, polygamma
>>> polygamma(0, 1)
-EulerGamma
>>> polygamma(0, 1/S(2))
-2*log(2) - EulerGamma
>>> polygamma(0, 1/S(3))
-log(3) - sqrt(3)*pi/6 - EulerGamma - log(sqrt(3))
>>> polygamma(0, 1/S(4))
-pi/2 - log(4) - log(2) - EulerGamma
>>> polygamma(0, 2)
1 - EulerGamma
>>> polygamma(0, 23)
19093197/5173168 - EulerGamma
>>> from sympy import oo, I
>>> polygamma(0, oo)
oo
>>> polygamma(0, -oo)
oo
>>> polygamma(0, I*oo)
oo
>>> polygamma(0, -I*oo)
oo

支持针对\(x\)的差异化:

>>> from sympy import Symbol, diff
>>> x = Symbol("x")
>>> diff(polygamma(0, x), x)
polygamma(1, x)
>>> diff(polygamma(0, x), x, 2)
polygamma(2, x)
>>> diff(polygamma(0, x), x, 3)
polygamma(3, x)
>>> diff(polygamma(1, x), x)
polygamma(2, x)
>>> diff(polygamma(1, x), x, 2)
polygamma(3, x)
>>> diff(polygamma(2, x), x)
polygamma(3, x)
>>> diff(polygamma(2, x), x, 2)
polygamma(4, x)
>>> n = Symbol("n")
>>> diff(polygamma(n, x), x)
polygamma(n + 1, x)
>>> diff(polygamma(n, x), x, 2)
polygamma(n + 2, x)

我们可以重写 polygamma 谐波数函数:

>>> from sympy import harmonic
>>> polygamma(0, x).rewrite(harmonic)
harmonic(x - 1) - EulerGamma
>>> polygamma(2, x).rewrite(harmonic)
2*harmonic(x - 1, 3) - 2*zeta(3)
>>> ni = Symbol("n", integer=True)
>>> polygamma(ni, x).rewrite(harmonic)
(-1)**(n + 1)*(-harmonic(x - 1, n + 1) + zeta(n + 1))*factorial(n)

参见

gamma

伽马函数。

lowergamma

下不完全伽马函数。

uppergamma

上不完全伽马函数。

loggamma

对数伽马函数。

digamma

Digamma函数。

trigamma

Trigamma函数。

sympy.functions.special.beta_functions.beta

欧拉贝塔函数。

工具书类

class sympy.functions.special.gamma_functions.digamma(z)[源代码]#

这个 digamma 函数是 loggamma 功能

\[\psi(x):=\frac{\mathrm{d}}{\mathrm{d}z}\log\Gamma(z)\]

在这种情况下, digamma(z) = polygamma(0, z) .

实例

>>> from sympy import digamma
>>> digamma(0)
zoo
>>> from sympy import Symbol
>>> z = Symbol('z')
>>> digamma(z)
polygamma(0, z)

保留 digamma 事实上:

>>> digamma(0, evaluate=False)
digamma(0)
>>> digamma(z, evaluate=False)
digamma(z)

参见

gamma

伽马函数。

lowergamma

下不完全伽马函数。

uppergamma

上不完全伽马函数。

polygamma

多边形函数。

loggamma

对数伽马函数。

trigamma

Trigamma函数。

sympy.functions.special.beta_functions.beta

欧拉贝塔函数。

工具书类

class sympy.functions.special.gamma_functions.trigamma(z)[源代码]#

这个 trigamma 函数是 loggamma 功能

\[\psi^{(1)}(z):=\frac{\mathrm{d}^{2}}}{\mathrm{d}z^{2}}\log\Gamma(z)。\]

在这种情况下, trigamma(z) = polygamma(1, z) .

实例

>>> from sympy import trigamma
>>> trigamma(0)
zoo
>>> from sympy import Symbol
>>> z = Symbol('z')
>>> trigamma(z)
polygamma(1, z)

保留 trigamma 事实上:

>>> trigamma(0, evaluate=False)
trigamma(0)
>>> trigamma(z, evaluate=False)
trigamma(z)

参见

gamma

伽马函数。

lowergamma

下不完全伽马函数。

uppergamma

上不完全伽马函数。

polygamma

多边形函数。

loggamma

对数伽马函数。

digamma

Digamma函数。

sympy.functions.special.beta_functions.beta

欧拉贝塔函数。

工具书类

class sympy.functions.special.gamma_functions.uppergamma(a, z)[源代码]#

上不完全伽玛函数。

解释

它可以定义为

\[\Gamma(s,x):=\int\u x^\infty t^{s-1}e^{-t}\mathrm{d}t=\Gamma(s)-\Gamma(s,x)。\]

其中\(\gamma(s,x)\)是较低的不完全伽马函数, lowergamma . 这可以证明与

\[\Gamma(s,x)=\Gamma(s)-\frac{x^s}{s}{1F_1\左({s\top s+1}\中|-x\右),\]

其中\({}u 1F_1\)是(汇合)超几何函数。

上不完全伽玛函数本质上也等价于广义指数积分:

\[\运算符名称{E}}{n}(x)=\int{1}^{\infty}{\frac{E^{-xt}}{t^n}\,dt}=x^{n-1}\Gamma(1-n,x)。\]

实例

>>> from sympy import uppergamma, S
>>> from sympy.abc import s, x
>>> uppergamma(s, x)
uppergamma(s, x)
>>> uppergamma(3, x)
2*(x**2/2 + x + 1)*exp(-x)
>>> uppergamma(-S(1)/2, x)
-2*sqrt(pi)*erfc(sqrt(x)) + 2*exp(-x)/sqrt(x)
>>> uppergamma(-2, x)
expint(3, x)/x**2

参见

gamma

伽马函数。

lowergamma

下不完全伽马函数。

polygamma

多边形函数。

loggamma

对数伽马函数。

digamma

Digamma函数。

trigamma

Trigamma函数。

sympy.functions.special.beta_functions.beta

欧拉贝塔函数。

工具书类

[R366]

Abramowitz,Milton;Stegun,Irene A.,eds.(1965年),第6章,第5节,带公式、图表和数学表格的数学函数手册

[R370]

https://en.wikipedia.org/wiki/Exponential#与其他函数的关系

class sympy.functions.special.gamma_functions.lowergamma(a, x)[源代码]#

下不完全伽马函数。

解释

它可以定义为

\[\gamma(s,x):=\int\0^x t^{s-1}e^{-t}\mathrm{d}t=\gamma(s)-\gamma(s,x)。\]

这可以证明与

\[\gamma(s,x)=\frac{x^s}{s}{s}{u 1F_1\左({s\top s+1}\middle |-x\右),\]

其中\({}u 1F_1\)是(汇合)超几何函数。

实例

>>> from sympy import lowergamma, S
>>> from sympy.abc import s, x
>>> lowergamma(s, x)
lowergamma(s, x)
>>> lowergamma(3, x)
-2*(x**2/2 + x + 1)*exp(-x) + 2
>>> lowergamma(-S(1)/2, x)
-2*sqrt(pi)*erf(sqrt(x)) - 2*exp(-x)/sqrt(x)

参见

gamma

伽马函数。

uppergamma

上不完全伽马函数。

polygamma

多边形函数。

loggamma

对数伽马函数。

digamma

Digamma函数。

trigamma

Trigamma函数。

sympy.functions.special.beta_functions.beta

欧拉贝塔函数。

工具书类

[R372]

Abramowitz,Milton;Stegun,Irene A.,eds.(1965年),第6章,第5节,带公式、图表和数学表格的数学函数手册

class sympy.functions.special.gamma_functions.multigamma(x, p)[源代码]#

多元伽玛函数是伽玛函数的推广

\[\Gamma_p(z) = \pi^{p(p-1)/4}\prod_{k=1}^p \Gamma[z + (1 - k)/2].\]

在特殊情况下, multigamma(x, 1) = gamma(x) .

参数:

p :多元伽玛函数的阶或维数

实例

>>> from sympy import S, multigamma
>>> from sympy import Symbol
>>> x = Symbol('x')
>>> p = Symbol('p', positive=True, integer=True)
>>> multigamma(x, p)
pi**(p*(p - 1)/4)*Product(gamma(-_k/2 + x + 1/2), (_k, 1, p))

已知几个特殊值:

>>> multigamma(1, 1)
1
>>> multigamma(4, 1)
6
>>> multigamma(S(3)/2, 1)
sqrt(pi)/2

写作 multigammagamma 功能:

>>> multigamma(x, 1)
gamma(x)
>>> multigamma(x, 2)
sqrt(pi)*gamma(x)*gamma(x - 1/2)
>>> multigamma(x, 3)
pi**(3/2)*gamma(x)*gamma(x - 1)*gamma(x - 1/2)

工具书类

class sympy.functions.special.beta_functions.beta(x, y=None)[源代码]#

β积分被Legendre称为第一类欧拉积分:

\[\mathrm{B}(x,y) \int^{1}_{0} t^{x-1} (1-t)^{y-1} \mathrm{d}t.\]

解释

β函数或欧拉第一积分与伽玛函数密切相关。贝塔函数通常用于概率论和数理统计中。它满足如下特性:

\[\begin{split}\mathrm{B}(a,1)=\frac{1}{a}\\\end{split}\]

因此,对于\(a\)\(b\)的整数值:

\[\mathrm{B}=\frac{(a-1)!(b-1)!}{(a+b-1)!}\]

A special case of the Beta function when \(x = y\) is the Central Beta function. It satisfies properties like:

\[\mathrm{B}(x) = 2^{1 - 2x}\mathrm{B}(x, \frac{1}{2}) \mathrm{B}(x) = 2^{1 - 2x} cos(\pi x) \mathrm{B}(\frac{1}{2} - x, x) \mathrm{B}(x) = \int_{0}^{1} \frac{t^x}{(1 + t)^{2x}} dt \mathrm{B}(x) = \frac{2}{x} \prod_{n = 1}^{\infty} \frac{n(n + 2x)}{(n + x)^2}\]

实例

>>> from sympy import I, pi
>>> from sympy.abc import x, y

β函数遵循镜像对称性:

>>> from sympy import beta, conjugate
>>> conjugate(beta(x, y))
beta(conjugate(x), conjugate(y))

支持对\(x\)\(y\)进行区分:

>>> from sympy import beta, diff
>>> diff(beta(x, y), x)
(polygamma(0, x) - polygamma(0, x + y))*beta(x, y)
>>> diff(beta(x, y), y)
(polygamma(0, y) - polygamma(0, x + y))*beta(x, y)
>>> diff(beta(x), x)
2*(polygamma(0, x) - polygamma(0, 2*x))*beta(x, x)

We can numerically evaluate the Beta function to arbitrary precision for any complex numbers x and y:

>>> from sympy import beta
>>> beta(pi).evalf(40)
0.02671848900111377452242355235388489324562
>>> beta(1 + I).evalf(20)
-0.2112723729365330143 - 0.7655283165378005676*I

参见

gamma

伽马函数。

uppergamma

上不完全伽马函数。

lowergamma

下不完全伽马函数。

polygamma

多边形函数。

loggamma

对数伽马函数。

digamma

Digamma函数。

trigamma

Trigamma函数。

工具书类

误差函数与菲涅耳积分#

class sympy.functions.special.error_functions.erf(arg)[源代码]#

高斯误差函数。

解释

此功能定义为:

\[\mathrm{erf}(x)=\frac{2}{\sqrt{\pi}\int}0^x e^{-t^2}\mathrm{d}t。\]

实例

>>> from sympy import I, oo, erf
>>> from sympy.abc import z

已知几个特殊值:

>>> erf(0)
0
>>> erf(oo)
1
>>> erf(-oo)
-1
>>> erf(I*oo)
oo*I
>>> erf(-I*oo)
-oo*I

一般来说,我们可以从参数中提取-1和\(I\)的因子:

>>> erf(-z)
-erf(z)

误差函数遵循镜像对称性:

>>> from sympy import conjugate
>>> conjugate(erf(z))
erf(conjugate(z))

支持针对\(z\)的差异化:

>>> from sympy import diff
>>> diff(erf(z), z)
2*exp(-z**2)/sqrt(pi)

我们可以在整个复平面上以任意精度数值计算误差函数:

>>> erf(4).evalf(30)
0.999999984582742099719981147840
>>> erf(-4*I).evalf(30)
-1296959.73071763923152794095062*I

参见

erfc

互补误差函数。

erfi

虚误差函数。

erf2

双参数错误函数。

erfinv

反误差函数。

erfcinv

逆互补误差函数。

erf2inv

反二元误差函数。

工具书类

inverse(argindex=1)[源代码]#

Returns the inverse of this function.

class sympy.functions.special.error_functions.erfc(arg)[源代码]#

互补误差函数。

解释

函数定义为:

\[\mathrm{erfc}(x)=\frac{2}{\sqrt{\pi}\int}x^\infty e^{-t^2}\mathrm{d}t\]

实例

>>> from sympy import I, oo, erfc
>>> from sympy.abc import z

已知几个特殊值:

>>> erfc(0)
1
>>> erfc(oo)
0
>>> erfc(-oo)
2
>>> erfc(I*oo)
-oo*I
>>> erfc(-I*oo)
oo*I

误差函数遵循镜像对称性:

>>> from sympy import conjugate
>>> conjugate(erfc(z))
erfc(conjugate(z))

支持针对\(z\)的差异化:

>>> from sympy import diff
>>> diff(erfc(z), z)
-2*exp(-z**2)/sqrt(pi)

它也随之而来

>>> erfc(-z)
2 - erfc(z)

我们可以在整个复平面上以任意精度数值计算互补误差函数:

>>> erfc(4).evalf(30)
0.0000000154172579002800188521596734869
>>> erfc(4*I).evalf(30)
1.0 - 1296959.73071763923152794095062*I

参见

erf

高斯误差函数。

erfi

虚误差函数。

erf2

双参数错误函数。

erfinv

反误差函数。

erfcinv

逆互补误差函数。

erf2inv

反二元误差函数。

工具书类

inverse(argindex=1)[源代码]#

Returns the inverse of this function.

class sympy.functions.special.error_functions.erfi(z)[源代码]#

虚误差函数。

解释

函数erfi定义为:

\[\mathrm{erfi}(x)=\frac{2}{\sqrt{\pi}\int}0^x e^{t^2}\mathrm{d}t\]

实例

>>> from sympy import I, oo, erfi
>>> from sympy.abc import z

已知几个特殊值:

>>> erfi(0)
0
>>> erfi(oo)
oo
>>> erfi(-oo)
-oo
>>> erfi(I*oo)
I
>>> erfi(-I*oo)
-I

一般来说,我们可以从参数中提取-1和\(I\)的因子:

>>> erfi(-z)
-erfi(z)
>>> from sympy import conjugate
>>> conjugate(erfi(z))
erfi(conjugate(z))

支持针对\(z\)的差异化:

>>> from sympy import diff
>>> diff(erfi(z), z)
2*exp(z**2)/sqrt(pi)

我们可以在整个复平面上以任意精度数值计算虚误差函数:

>>> erfi(2).evalf(30)
18.5648024145755525987042919132
>>> erfi(-2*I).evalf(30)
-0.995322265018952734162069256367*I

参见

erf

高斯误差函数。

erfc

互补误差函数。

erf2

双参数错误函数。

erfinv

反误差函数。

erfcinv

逆互补误差函数。

erf2inv

反二元误差函数。

工具书类

class sympy.functions.special.error_functions.erf2(x, y)[源代码]#

双参数错误函数。

解释

此功能定义为:

\[\mathrm{erf2}(x,y)=\frac{2}{\sqrt{\pi}}\int}x^y e^{-t^2}\mathrm{d}t\]

实例

>>> from sympy import oo, erf2
>>> from sympy.abc import x, y

已知几个特殊值:

>>> erf2(0, 0)
0
>>> erf2(x, x)
0
>>> erf2(x, oo)
1 - erf(x)
>>> erf2(x, -oo)
-erf(x) - 1
>>> erf2(oo, y)
erf(y) - 1
>>> erf2(-oo, y)
erf(y) + 1

一般来说,我们可以得出-1的系数:

>>> erf2(-x, -y)
-erf2(x, y)

误差函数遵循镜像对称性:

>>> from sympy import conjugate
>>> conjugate(erf2(x, y))
erf2(conjugate(x), conjugate(y))

支持针对\(x\)\(y\)的差异化:

>>> from sympy import diff
>>> diff(erf2(x, y), x)
-2*exp(-x**2)/sqrt(pi)
>>> diff(erf2(x, y), y)
2*exp(-y**2)/sqrt(pi)

参见

erf

高斯误差函数。

erfc

互补误差函数。

erfi

虚误差函数。

erfinv

反误差函数。

erfcinv

逆互补误差函数。

erf2inv

反二元误差函数。

工具书类

class sympy.functions.special.error_functions.erfinv(z)[源代码]#

反误差函数。erfinv函数定义为:

\[\mathrm{erf}(x)=y\quad\Rightarrow\quad\mathrm{erfinv}(y)=x\]

实例

>>> from sympy import erfinv
>>> from sympy.abc import x

已知几个特殊值:

>>> erfinv(0)
0
>>> erfinv(1)
oo

支持针对\(x\)的差异化:

>>> from sympy import diff
>>> diff(erfinv(x), x)
sqrt(pi)*exp(erfinv(x)**2)/2

我们可以用数值方法计算任意精度的逆误差函数 [-1, 1] :

>>> erfinv(0.2).evalf(30)
0.179143454621291692285822705344

参见

erf

高斯误差函数。

erfc

互补误差函数。

erfi

虚误差函数。

erf2

双参数错误函数。

erfcinv

逆互补误差函数。

erf2inv

反二元误差函数。

工具书类

inverse(argindex=1)[源代码]#

Returns the inverse of this function.

class sympy.functions.special.error_functions.erfcinv(z)[源代码]#

逆互补误差函数。erfcinv函数定义为:

\[\mathrm{erfc}(x)=y\quad\Rightarrow\quad\mathrm{erfcinv}(y)=x\]

实例

>>> from sympy import erfcinv
>>> from sympy.abc import x

已知几个特殊值:

>>> erfcinv(1)
0
>>> erfcinv(0)
oo

支持针对\(x\)的差异化:

>>> from sympy import diff
>>> diff(erfcinv(x), x)
-sqrt(pi)*exp(erfcinv(x)**2)/2

参见

erf

高斯误差函数。

erfc

互补误差函数。

erfi

虚误差函数。

erf2

双参数错误函数。

erfinv

反误差函数。

erf2inv

反二元误差函数。

工具书类

inverse(argindex=1)[源代码]#

Returns the inverse of this function.

class sympy.functions.special.error_functions.erf2inv(x, y)[源代码]#

双参数反误差函数。erf2inv函数定义为:

\[\mathrm{erf2}(x,w)=y\quad\Rightarrow\quad\mathrm{erf2inv}(x,y)=w\]

实例

>>> from sympy import erf2inv, oo
>>> from sympy.abc import x, y

已知几个特殊值:

>>> erf2inv(0, 0)
0
>>> erf2inv(1, 0)
1
>>> erf2inv(0, 1)
oo
>>> erf2inv(0, y)
erfinv(y)
>>> erf2inv(oo, y)
erfcinv(-y)

支持针对\(x\)\(y\)的差异化:

>>> from sympy import diff
>>> diff(erf2inv(x, y), x)
exp(-x**2 + erf2inv(x, y)**2)
>>> diff(erf2inv(x, y), y)
sqrt(pi)*exp(erf2inv(x, y)**2)/2

参见

erf

高斯误差函数。

erfc

互补误差函数。

erfi

虚误差函数。

erf2

双参数错误函数。

erfinv

反误差函数。

erfcinv

逆互补误差函数。

工具书类

class sympy.functions.special.error_functions.FresnelIntegral(z)[源代码]#

菲涅耳积分的基类。

class sympy.functions.special.error_functions.fresnels(z)[源代码]#

菲涅耳积分S。

解释

此函数由定义

\[\运算符名称{S}(z)=\int_0^z\sin{\frac{\pi}{2}t^2}\mathrm{d}t。\]

它是一个完整的函数。

实例

>>> from sympy import I, oo, fresnels
>>> from sympy.abc import z

已知几个特殊值:

>>> fresnels(0)
0
>>> fresnels(oo)
1/2
>>> fresnels(-oo)
-1/2
>>> fresnels(I*oo)
-I/2
>>> fresnels(-I*oo)
I/2

一般来说,我们可以从参数中提取-1和\(i\)的因子:

>>> fresnels(-z)
-fresnels(z)
>>> fresnels(I*z)
-I*fresnels(z)

菲涅耳积分服从镜像对称\(\overline{S(z)}=S(\bar{z})\)

>>> from sympy import conjugate
>>> conjugate(fresnels(z))
fresnels(conjugate(z))

支持针对\(z\)的差异化:

>>> from sympy import diff
>>> diff(fresnels(z), z)
sin(pi*z**2/2)

通过积分定义菲涅耳函数:

>>> from sympy import integrate, pi, sin, expand_func
>>> integrate(sin(pi*z**2/2), z)
3*fresnels(z)*gamma(3/4)/(4*gamma(7/4))
>>> expand_func(integrate(sin(pi*z**2/2), z))
fresnels(z)

我们可以在整个复平面上以任意精度数值计算菲涅耳积分:

>>> fresnels(2).evalf(30)
0.343415678363698242195300815958
>>> fresnels(-2*I).evalf(30)
0.343415678363698242195300815958*I

参见

fresnelc

菲涅耳余弦积分。

工具书类

class sympy.functions.special.error_functions.fresnelc(z)[源代码]#

菲涅耳积分C。

解释

此函数由定义

\[\运算符名称{C}(z)=\int_0^z\cos{\frac{\pi}{2}t^2}\mathrm{d}t。\]

它是一个完整的函数。

实例

>>> from sympy import I, oo, fresnelc
>>> from sympy.abc import z

已知几个特殊值:

>>> fresnelc(0)
0
>>> fresnelc(oo)
1/2
>>> fresnelc(-oo)
-1/2
>>> fresnelc(I*oo)
I/2
>>> fresnelc(-I*oo)
-I/2

一般来说,我们可以从参数中提取-1和\(i\)的因子:

>>> fresnelc(-z)
-fresnelc(z)
>>> fresnelc(I*z)
I*fresnelc(z)

菲涅耳C积分遵循镜像对称性\(\overline{C(z)}=C(\bar{z})\)

>>> from sympy import conjugate
>>> conjugate(fresnelc(z))
fresnelc(conjugate(z))

支持针对\(z\)的差异化:

>>> from sympy import diff
>>> diff(fresnelc(z), z)
cos(pi*z**2/2)

通过积分定义菲涅耳函数:

>>> from sympy import integrate, pi, cos, expand_func
>>> integrate(cos(pi*z**2/2), z)
fresnelc(z)*gamma(1/4)/(4*gamma(5/4))
>>> expand_func(integrate(cos(pi*z**2/2), z))
fresnelc(z)

我们可以在整个复平面上以任意精度数值计算菲涅耳积分:

>>> fresnelc(2).evalf(30)
0.488253406075340754500223503357
>>> fresnelc(-2*I).evalf(30)
-0.488253406075340754500223503357*I

参见

fresnels

菲涅耳正弦积分。

工具书类

指数积分、对数积分和三角积分#

class sympy.functions.special.error_functions.Ei(z)[源代码]#

经典的指数积分。

解释

对于在SymPy中使用,此函数定义为

\[\运算符名称{Ei}(x)=\sum{n=1}^\infty\frac{x^n}{n\,n!}\]

其中\(\gamma\)是Euler Mascheroni常数。

如果\(x\)是极数,则在对数的黎曼曲面上定义了一个解析函数。否则,将在剖切面\(\mathbb{C}\setminus(-\infty,0]\))中定义一个分析函数。

Background

指数积分的名称来源于以下语句:

\[\运算符名称{Ei}(x)=\int{-\infty}^x\frac{e^t}{t}\mathrm{d}t\]

如果积分被解释为一个Cauchy主值,则此语句适用于上面定义的\(x>0\)\(\operatorname{Ei}(x)\)

实例

>>> from sympy import Ei, polar_lift, exp_polar, I, pi
>>> from sympy.abc import x
>>> Ei(-1)
Ei(-1)

这就产生了一个真正的价值:

>>> Ei(-1).n(chop=True)
-0.219383934395520

另一方面,解析延拓不是真实的:

>>> Ei(polar_lift(-1)).n(chop=True)
-0.21938393439552 + 3.14159265358979*I

指数积分在原点处有一个对数分支点:

>>> Ei(x*exp_polar(2*I*pi))
Ei(x) + 2*I*pi

支持差异化:

>>> Ei(x).diff(x)
exp(x)/x

指数积分与许多其他特殊函数有关。例如:

>>> from sympy import expint, Shi
>>> Ei(x).rewrite(expint)
-expint(1, x*exp_polar(I*pi)) - I*pi
>>> Ei(x).rewrite(Shi)
Chi(x) + Shi(x)

参见

expint

广义指数积分。

E1

广义指数积分的特例。

li

对数积分。

Li

偏移对数积分。

Si

正弦积分。

Ci

余弦积分。

Shi

双曲正弦积分。

Chi

双曲余弦积分。

uppergamma

上不完全伽马函数。

工具书类

class sympy.functions.special.error_functions.expint(nu, z)[源代码]#

广义指数积分。

解释

此函数定义为

\[\运算符名称{E}\nu(z)=z^{\nu-1}\Gamma(1-\nu,z),\]

其中\(\Gamma(1-\nu,z)\)是上不完全Gamma函数 (uppergamma

因此对于有正实部的\(z\)我们有

\[\运算符名称{E}\nu(z)\]

这就解释了这个名字。

不完整伽马函数的表示为\(\operatorname{E}\nu(z)\)提供了分析延续。如果\(\nu\)是非正整数,则指数积分是\(z\)的无分支函数,否则原点处有分支点。有关分支行为的详细信息,请参阅不完整的gamma函数文档。

实例

>>> from sympy import expint, S
>>> from sympy.abc import nu, z

支持差异化。关于\(z\)的微分进一步解释了这个名称:对于积分阶,指数积分是指数函数的迭代积分。

>>> expint(nu, z).diff(z)
-expint(nu - 1, z)

关于\(\nu\)的微分没有经典表达式:

>>> expint(nu, z).diff(nu)
-z**(nu - 1)*meijerg(((), (1, 1)), ((0, 0, 1 - nu), ()), z)

在非正整数阶时,指数积分降为指数函数:

>>> expint(0, z)
exp(-z)/z
>>> expint(-1, z)
exp(-z)/z + exp(-z)/z**2

在半整数时,它可简化为误差函数:

>>> expint(S(1)/2, z)
sqrt(pi)*erfc(sqrt(z))/sqrt(z)

在正整数阶时,可以用指数和 expint(1, z) . 使用 expand_func() 为此:

>>> from sympy import expand_func
>>> expand_func(expint(5, z))
z**4*expint(1, z)/24 + (-z**3 + z**2 - 2*z + 6)*exp(-z)/24

广义指数积分本质上等价于不完全伽马函数:

>>> from sympy import uppergamma
>>> expint(nu, z).rewrite(uppergamma)
z**(nu - 1)*uppergamma(1 - nu, z)

因此,它在原点分支:

>>> from sympy import exp_polar, pi, I
>>> expint(4, z*exp_polar(2*pi*I))
I*pi*z**3/3 + expint(4, z)
>>> expint(nu, z*exp_polar(2*pi*I))
z**(nu - 1)*(exp(2*I*pi*nu) - 1)*gamma(1 - nu) + expint(nu, z)

参见

Ei

另一个相关函数称为指数积分。

E1

经典情况下,返回expint(1,z)。

li

对数积分。

Li

偏移对数积分。

Si

正弦积分。

Ci

余弦积分。

Shi

双曲正弦积分。

Chi

双曲余弦积分。

uppergamma

工具书类

sympy.functions.special.error_functions.E1(z)[源代码]#

广义指数积分的经典情形。

解释

这相当于 expint(1, z) .

实例

>>> from sympy import E1
>>> E1(0)
expint(1, 0)
>>> E1(5)
expint(1, 5)

参见

Ei

指数积分。

expint

广义指数积分。

li

对数积分。

Li

偏移对数积分。

Si

正弦积分。

Ci

余弦积分。

Shi

双曲正弦积分。

Chi

双曲余弦积分。

class sympy.functions.special.error_functions.li(z)[源代码]#

经典对数积分。

解释

对于在SymPy中使用,此函数定义为

\[\运算符名称{li}(x)=\int_0^x\frac{1}{\log(t)}\mathrm{d}t\,。\]

实例

>>> from sympy import I, oo, li
>>> from sympy.abc import z

已知几个特殊值:

>>> li(0)
0
>>> li(1)
-oo
>>> li(oo)
oo

支持针对\(z\)的差异化:

>>> from sympy import diff
>>> diff(li(z), z)
1/log(z)

定义 li 通过积分函数:>>>来自sympy import integrate>>>integrate(li(z))z li(z) - Ei(2 对数(z)

>>> integrate(li(z),z)
z*li(z) - Ei(2*log(z))

对数积分也可以定义为 Ei

>>> from sympy import Ei
>>> li(z).rewrite(Ei)
Ei(log(z))
>>> diff(li(z).rewrite(Ei), z)
1/log(z)

我们可以在整个复平面(奇点除外)上数值计算任意精度的对数积分:

>>> li(2).evalf(30)
1.04516378011749278484458888919
>>> li(2*I).evalf(30)
1.0652795784357498247001125598 + 3.08346052231061726610939702133*I

我们甚至可以通过mpmath计算索德纳常数:

>>> from mpmath import findroot
>>> findroot(li, 2)
1.45136923488338

进一步的转换包括重写 li 关于三角积分 SiCiShiChi

>>> from sympy import Si, Ci, Shi, Chi
>>> li(z).rewrite(Si)
-log(I*log(z)) - log(1/log(z))/2 + log(log(z))/2 + Ci(I*log(z)) + Shi(log(z))
>>> li(z).rewrite(Ci)
-log(I*log(z)) - log(1/log(z))/2 + log(log(z))/2 + Ci(I*log(z)) + Shi(log(z))
>>> li(z).rewrite(Shi)
-log(1/log(z))/2 + log(log(z))/2 + Chi(log(z)) - Shi(log(z))
>>> li(z).rewrite(Chi)
-log(1/log(z))/2 + log(log(z))/2 + Chi(log(z)) - Shi(log(z))

参见

Li

偏移对数积分。

Ei

指数积分。

expint

广义指数积分。

E1

广义指数积分的特例。

Si

正弦积分。

Ci

余弦积分。

Shi

双曲正弦积分。

Chi

双曲余弦积分。

工具书类

class sympy.functions.special.error_functions.Li(z)[源代码]#

偏移对数积分。

解释

对于在SymPy中使用,此函数定义为

\[\运算符名称{Li}(x)=\operatorname{Li}(x)-\operatorname{Li}(2)\]

实例

>>> from sympy import Li
>>> from sympy.abc import z

已知以下特殊值:

>>> Li(2)
0

支持针对\(z\)的差异化:

>>> from sympy import diff
>>> diff(Li(z), z)
1/log(z)

移位对数积分可以用\(li(z)\)表示:

>>> from sympy import li
>>> Li(z).rewrite(li)
li(z) - li(2)

我们可以在整个复平面(奇点除外)上数值计算任意精度的对数积分:

>>> Li(2).evalf(30)
0
>>> Li(4).evalf(30)
1.92242131492155809316615998938

参见

li

对数积分。

Ei

指数积分。

expint

广义指数积分。

E1

广义指数积分的特例。

Si

正弦积分。

Ci

余弦积分。

Shi

双曲正弦积分。

Chi

双曲余弦积分。

工具书类

class sympy.functions.special.error_functions.Si(z)[源代码]#

正弦积分。

解释

此函数由定义

\[\运算符名称{Si}(z)=\int_0^z\frac{\sin{t}}{t}\mathrm{d}t。\]

它是一个完整的函数。

实例

>>> from sympy import Si
>>> from sympy.abc import z

正弦积分是\(sin(z)/z\)的反导数:

>>> Si(z).diff(z)
sin(z)/z

它没有分支:

>>> from sympy import exp_polar, I, pi
>>> Si(z*exp_polar(2*I*pi))
Si(z)

正弦积分的行为很像普通正弦乘以 I

>>> Si(I*z)
I*Shi(z)
>>> Si(-z)
-Si(z)

它也可以用指数积分表示,但要注意后者是分支的:

>>> from sympy import expint
>>> Si(z).rewrite(expint)
-I*(-expint(1, z*exp_polar(-I*pi/2))/2 +
     expint(1, z*exp_polar(I*pi/2))/2) + pi/2

它可以重写为sinc函数的形式(根据定义):

>>> from sympy import sinc
>>> Si(z).rewrite(sinc)
Integral(sinc(_t), (_t, 0, z))

参见

Ci

余弦积分。

Shi

双曲正弦积分。

Chi

双曲余弦积分。

Ei

指数积分。

expint

广义指数积分。

sinc

非标准化sinc函数

E1

广义指数积分的特例。

li

对数积分。

Li

偏移对数积分。

工具书类

class sympy.functions.special.error_functions.Ci(z)[源代码]#

余弦积分。

解释

此函数由定义为正\(x\)

\[\运算符名称{Ci}(x)=\gamma+\log{x}\]

其中\(\gamma\)是Euler Mascheroni常数。

我们有

\[\运算符名称{Ci}(z)=\]

它适用于所有极坐标\(z\),因此提供了对数的黎曼曲面的解析延拓。

这个公式同样适用于\(z\in\mathbb{C}\),其中\(\Re(z)>0\)。通过对主分支的提升,我们得到了切复平面上的一个解析函数。

实例

>>> from sympy import Ci
>>> from sympy.abc import z

余弦积分是\(\cos(z)/z\)的基元:

>>> Ci(z).diff(z)
cos(z)/z

它在原点处有一个对数分支点:

>>> from sympy import exp_polar, I, pi
>>> Ci(z*exp_polar(2*I*pi))
Ci(z) + 2*I*pi

余弦积分的行为有点像普通的\(\cos\)乘以\(i\)

>>> from sympy import polar_lift
>>> Ci(polar_lift(I)*z)
Chi(z) + I*pi/2
>>> Ci(polar_lift(-1)*z)
Ci(z) + I*pi

也可以用指数积分表示:

>>> from sympy import expint
>>> Ci(z).rewrite(expint)
-expint(1, z*exp_polar(-I*pi/2))/2 - expint(1, z*exp_polar(I*pi/2))/2

参见

Si

正弦积分。

Shi

双曲正弦积分。

Chi

双曲余弦积分。

Ei

指数积分。

expint

广义指数积分。

E1

广义指数积分的特例。

li

对数积分。

Li

偏移对数积分。

工具书类

class sympy.functions.special.error_functions.Shi(z)[源代码]#

Sinh积分。

解释

此函数由定义

\[\运算符名称{Shi}(z)=\int_0^z\frac{\sinh{t}}{t}\mathrm{d}t。\]

它是一个完整的函数。

实例

>>> from sympy import Shi
>>> from sympy.abc import z

Sinh积分是\(\Sinh(z)/z\)的基元:

>>> Shi(z).diff(z)
sinh(z)/z

它没有分支:

>>> from sympy import exp_polar, I, pi
>>> Shi(z*exp_polar(2*I*pi))
Shi(z)

\(\sinh\)积分与普通的\(\sinh\)在乘以\(i\)时的行为非常相似:

>>> Shi(I*z)
I*Si(z)
>>> Shi(-z)
-Shi(z)

它也可以用指数积分表示,但要注意后者是分支的:

>>> from sympy import expint
>>> Shi(z).rewrite(expint)
expint(1, z)/2 - expint(1, z*exp_polar(I*pi))/2 - I*pi/2

参见

Si

正弦积分。

Ci

余弦积分。

Chi

双曲余弦积分。

Ei

指数积分。

expint

广义指数积分。

E1

广义指数积分的特例。

li

对数积分。

Li

偏移对数积分。

工具书类

class sympy.functions.special.error_functions.Chi(z)[源代码]#

Cosh积分。

解释

此函数由定义为正\(x\)

\[\运算符名称{Chi}(x)=\gamma+\log{x}\]

其中\(\gamma\)是Euler Mascheroni常数。

我们有

\[\运算符名称{Chi}(z)=\operatorname{Ci}\左(e^{i\pi/2}z\右)\]

它适用于所有极坐标\(z\),因此提供了对数的黎曼曲面的解析延拓。通过对主分支的提升,我们得到了切复平面上的一个解析函数。

实例

>>> from sympy import Chi
>>> from sympy.abc import z

\(\cosh\)积分是\(\cosh(z)/z\)的原语:

>>> Chi(z).diff(z)
cosh(z)/z

它在原点处有一个对数分支点:

>>> from sympy import exp_polar, I, pi
>>> Chi(z*exp_polar(2*I*pi))
Chi(z) + 2*I*pi

在与\(i\)相乘的情况下,\(\cosh\)积分的行为有点像普通的\(\cosh\)

>>> from sympy import polar_lift
>>> Chi(polar_lift(I)*z)
Ci(z) + I*pi/2
>>> Chi(polar_lift(-1)*z)
Chi(z) + I*pi

也可以用指数积分表示:

>>> from sympy import expint
>>> Chi(z).rewrite(expint)
-expint(1, z)/2 - expint(1, z*exp_polar(I*pi))/2 - I*pi/2

参见

Si

正弦积分。

Ci

余弦积分。

Shi

双曲正弦积分。

Ei

指数积分。

expint

广义指数积分。

E1

广义指数积分的特例。

li

对数积分。

Li

偏移对数积分。

工具书类

贝塞尔型函数#

class sympy.functions.special.bessel.BesselBase(nu, z)[源代码]#

贝塞尔型函数的抽象基类。

这个类是为了减少代码重复。用sel型函数的所有可微项表示为sel型函数。

这里,贝塞尔型函数假定有一个复参数。

若要使用此基类,请定义类属性 _a_b 这样的话 2*F_n' = -_a*F_{{n+1}} + b*F_{{n-1}} .

property argument#

贝塞尔型函数的参数。

property order#

贝塞尔型函数的阶。

class sympy.functions.special.bessel.besselj(nu, z)[源代码]#

第一类贝塞尔函数。

解释

\(\nu\)阶贝塞尔函数定义为满足贝塞尔微分方程的函数

\[z^2\frac{\mathrm{d}^2 w}{\mathrm{d}z^2}\]

劳伦特展开

\[J\nu(z)=z^\nu\左(\frac{1}{\Gamma(\nu+1)2^\nu}+O(z^2)\right),\]

if \(\nu\) is not a negative integer. If \(\nu=-n \in \mathbb{Z}_{<0}\) is a negative integer, then the definition is

\[J{n}(z)=(-1)^n J\n(z)。\]

实例

创建贝塞尔函数对象:

>>> from sympy import besselj, jn
>>> from sympy.abc import z, n
>>> b = besselj(n, z)

与众不同:

>>> b.diff(z)
besselj(n - 1, z)/2 - besselj(n + 1, z)/2

根据球面贝塞尔函数重写:

>>> b.rewrite(jn)
sqrt(2)*sqrt(z)*jn(n - 1/2, z)/sqrt(pi)

访问参数和参数:

>>> b.order
n
>>> b.argument
z

工具书类

[R424]

Abramowitz,Milton;Stegun,Irene A.,eds.(1965年),“第9章”,数学函数手册,包括公式、图表和数学表格

[R425]

Luke,Y.L.(1969),《特殊函数及其逼近》,第1卷

class sympy.functions.special.bessel.bessely(nu, z)[源代码]#

第二类贝塞尔函数。

解释

订单\(\nu\)的Bessel\(Y\)函数定义为

\[Y\nu(z)=\lim{\mu\到\nu}\frac{J\mu(z)\cos(\pi\mu)\]

其中,\(J_\mu(z)\)是第一类贝塞尔函数。

它是贝塞尔方程的一个解,与\(J\nu\)线性无关。

实例

>>> from sympy import bessely, yn
>>> from sympy.abc import z, n
>>> b = bessely(n, z)
>>> b.diff(z)
bessely(n - 1, z)/2 - bessely(n + 1, z)/2
>>> b.rewrite(yn)
sqrt(2)*sqrt(z)*yn(n - 1/2, z)/sqrt(pi)

工具书类

class sympy.functions.special.bessel.besseli(nu, z)[源代码]#

第一类修正贝塞尔函数。

解释

贝塞尔函数是修正贝塞尔方程的解

\[z^2\frac{\mathrm{d}^2 w}{\mathrm{d}z^2}\]

它可以定义为

\[I\nu(z)=I^-\nu}J\nu(iz),\]

其中,\(J\nu(z)\)是第一类贝塞尔函数。

实例

>>> from sympy import besseli
>>> from sympy.abc import z, n
>>> besseli(n, z).diff(z)
besseli(n - 1, z)/2 + besseli(n + 1, z)/2

工具书类

class sympy.functions.special.bessel.besselk(nu, z)[源代码]#

第二类修正贝塞尔函数。

解释

订单\(\nu\)的Bessel\(K\)函数定义为

\[K\nu(z)=\lim{\mu\ to\nu}\frac{\pi}{2}\]

其中,\(I\mu(z)\)是第一类修正贝塞尔函数。

它是修正贝塞尔方程的一个解,与\(Y\nu\)线性无关。

实例

>>> from sympy import besselk
>>> from sympy.abc import z, n
>>> besselk(n, z).diff(z)
-besselk(n - 1, z)/2 - besselk(n + 1, z)/2

工具书类

class sympy.functions.special.bessel.hankel1(nu, z)[源代码]#

第一类Hankel函数。

解释

此函数定义为

\[(1)}=J\nu(z)+iY\nu(z),\]

其中,\(J_2;u(z)\)是第一类贝塞尔函数,\(Y\nu(z)\)是第二类贝塞尔函数。

它是贝塞尔方程的解。

实例

>>> from sympy import hankel1
>>> from sympy.abc import z, n
>>> hankel1(n, z).diff(z)
hankel1(n - 1, z)/2 - hankel1(n + 1, z)/2

工具书类

class sympy.functions.special.bessel.hankel2(nu, z)[源代码]#

第二类汉克尔函数。

解释

此函数定义为

\[H\nu ^{(2)}=J\nu(z)-iY\nu(z),\]

其中,\(J_2;u(z)\)是第一类贝塞尔函数,\(Y\nu(z)\)是第二类贝塞尔函数。

它是贝塞尔方程的一个解,与\(H\nu^{(1)}\)线性无关。

实例

>>> from sympy import hankel2
>>> from sympy.abc import z, n
>>> hankel2(n, z).diff(z)
hankel2(n - 1, z)/2 - hankel2(n + 1, z)/2

工具书类

class sympy.functions.special.bessel.jn(nu, z)[源代码]#

第一类球面贝塞尔函数。

解释

这个函数是球面贝塞尔方程的解

\[z^2\frac{\mathrm{d}^2 w}{\mathrm{d}z^2}\]

它可以定义为

\[j\nu(z)=\sqrt{\frac{\pi}{2z}}j{\nu+\frac{1}{2}}(z),\]

其中,\(J\nu(z)\)是第一类贝塞尔函数。

积分级球面贝塞尔函数的计算公式如下:

\[jün(z)=f_n(z)\sin{z}+(-1)^{n+1}f{-n-1}(z)\cos{z},\]

其中系数\(f_n(z)\)可用作 sympy.polys.orthopolys.spherical_bessel_fn() .

实例

>>> from sympy import Symbol, jn, sin, cos, expand_func, besselj, bessely
>>> z = Symbol("z")
>>> nu = Symbol("nu", integer=True)
>>> print(expand_func(jn(0, z)))
sin(z)/z
>>> expand_func(jn(1, z)) == sin(z)/z**2 - cos(z)/z
True
>>> expand_func(jn(3, z))
(-6/z**2 + 15/z**4)*sin(z) + (1/z - 15/z**3)*cos(z)
>>> jn(nu, z).rewrite(besselj)
sqrt(2)*sqrt(pi)*sqrt(1/z)*besselj(nu + 1/2, z)/2
>>> jn(nu, z).rewrite(bessely)
(-1)**nu*sqrt(2)*sqrt(pi)*sqrt(1/z)*bessely(-nu - 1/2, z)/2
>>> jn(2, 5.2+0.3j).evalf(20)
0.099419756723640344491 - 0.054525080242173562897*I

工具书类

class sympy.functions.special.bessel.yn(nu, z)[源代码]#

第二类球面贝塞尔函数。

解释

这个函数是球面Bessel方程的另一个解,与\(j_n\)线性无关。它可以定义为

\[y\nu(z)=\sqrt{\frac{\pi}{2z}}y{\nu+\frac{1}{2}}(z),\]

其中,\(Y\nu(z)\)是第二类贝塞尔函数。

对于整型订单\(n\)\(y\u n\)使用以下公式计算:

\[y{n(z)=(-1)^{n+1}j{-n-1}(z)\]

实例

>>> from sympy import Symbol, yn, sin, cos, expand_func, besselj, bessely
>>> z = Symbol("z")
>>> nu = Symbol("nu", integer=True)
>>> print(expand_func(yn(0, z)))
-cos(z)/z
>>> expand_func(yn(1, z)) == -cos(z)/z**2-sin(z)/z
True
>>> yn(nu, z).rewrite(besselj)
(-1)**(nu + 1)*sqrt(2)*sqrt(pi)*sqrt(1/z)*besselj(-nu - 1/2, z)/2
>>> yn(nu, z).rewrite(bessely)
sqrt(2)*sqrt(pi)*sqrt(1/z)*bessely(nu + 1/2, z)/2
>>> yn(2, 5.2+0.3j).evalf(20)
0.18525034196069722536 + 0.014895573969924817587*I

工具书类

sympy.functions.special.bessel.jn_zeros(n, k, method='sympy', dps=15)[源代码]#

第一类球面贝塞尔函数的零点。

参数:

n :整数

贝塞尔函数阶

k :整数

要返回的0数

解释

这将返回一个从\(jn\)\(k\)-th零的零数组。

  • method = "sympy": uses mpmath.besseljzero

  • method = "scipy": uses the SciPy's sph_jn and newton to find all roots, which is faster than computing the zeros using a general numerical solver, but it requires SciPy and only works with low precision floating point numbers. (The function used with method="sympy" is a recent addition to mpmath; before that a general solver was used.)

实例

>>> from sympy import jn_zeros
>>> jn_zeros(2, 4, dps=5)
[5.7635, 9.095, 12.323, 15.515]

参见

jn, yn, besselj, besselk, bessely

class sympy.functions.special.bessel.marcumq(m, a, b)[源代码]#

马尔库姆Q函数。

解释

Marcum Q函数是由

\[Q{m(a,b)=a^{-m+1}\int{b}^{\infty}x^{m}e^-\frac{a^{2}}{2}-\frac{x^{2}}{2}}}I{m-1}\左(a x\右)\,dx\]

实例

>>> from sympy import marcumq
>>> from sympy.abc import m, a, b
>>> marcumq(m, a, b)
marcumq(m, a, b)

特殊值:

>>> marcumq(m, 0, b)
uppergamma(m, b**2/2)/gamma(m)
>>> marcumq(0, 0, 0)
0
>>> marcumq(0, a, 0)
1 - exp(-a**2/2)
>>> marcumq(1, a, a)
1/2 + exp(-a**2)*besseli(0, a**2)/2
>>> marcumq(2, a, a)
1/2 + exp(-a**2)*besseli(0, a**2)/2 + exp(-a**2)*besseli(1, a**2)

支持与\(a\)\(b\)的差异化:

>>> from sympy import diff
>>> diff(marcumq(m, a, b), a)
a*(-marcumq(m, a, b) + marcumq(m + 1, a, b))
>>> diff(marcumq(m, a, b), b)
-a**(1 - m)*b**m*exp(-a**2/2 - b**2/2)*besseli(m - 1, a*b)

工具书类

艾利函数#

class sympy.functions.special.bessel.AiryBase(*args)[源代码]#

Airy函数的抽象基类。

这个类是为了减少代码重复。

class sympy.functions.special.bessel.airyai(arg)[源代码]#

第一类的Airy函数\(\operatorname{Ai}\)

解释

Airy函数\(\operatorname{Ai}(z)\)定义为满足Airy微分方程的函数

\[\frac{\mathrm{d}^2 w(z)}{\mathrm{d}z^2}-zw(z)=0。\]

相当于,真的\(z\)

\[\运算符名称{Ai}(z):=\frac{1}{\pi}\]

实例

创建Airy函数对象:

>>> from sympy import airyai
>>> from sympy.abc import z
>>> airyai(z)
airyai(z)

已知几个特殊值:

>>> airyai(0)
3**(1/3)/(3*gamma(2/3))
>>> from sympy import oo
>>> airyai(oo)
0
>>> airyai(-oo)
0

Airy函数遵循镜像对称性:

>>> from sympy import conjugate
>>> conjugate(airyai(z))
airyai(conjugate(z))

支持针对\(z\)的差异化:

>>> from sympy import diff
>>> diff(airyai(z), z)
airyaiprime(z)
>>> diff(airyai(z), z, 2)
z*airyai(z)

还支持系列扩展:

>>> from sympy import series
>>> series(airyai(z), z, 0, 3)
3**(5/6)*gamma(1/3)/(6*pi) - 3**(1/6)*z*gamma(2/3)/(2*pi) + O(z**3)

我们可以在整个复平面上对Airy函数进行任意精度的数值计算:

>>> airyai(-2).evalf(50)
0.22740742820168557599192443603787379946077222541710

根据超几何函数重写\(\operatorname{Ai}(z)\)

>>> from sympy import hyper
>>> airyai(z).rewrite(hyper)
-3**(2/3)*z*hyper((), (4/3,), z**3/9)/(3*gamma(1/3)) + 3**(1/3)*hyper((), (2/3,), z**3/9)/(3*gamma(2/3))

参见

airybi

第二类Airy函数。

airyaiprime

第一类Airy函数的导数。

airybiprime

第二类Airy函数的导数。

工具书类

class sympy.functions.special.bessel.airybi(arg)[源代码]#

第二种类型的Airy函数\(\operatorname{Bi}\)

解释

Airy函数\(\operatorname{Bi}(z)\)定义为满足Airy微分方程的函数

\[\frac{\mathrm{d}^2 w(z)}{\mathrm{d}z^2}-zw(z)=0。\]

相当于,真的\(z\)

\[\运算符名称{Bi}(z):=\frac{1}{\pi}\]

实例

创建Airy函数对象:

>>> from sympy import airybi
>>> from sympy.abc import z
>>> airybi(z)
airybi(z)

已知几个特殊值:

>>> airybi(0)
3**(5/6)/(3*gamma(2/3))
>>> from sympy import oo
>>> airybi(oo)
oo
>>> airybi(-oo)
0

Airy函数遵循镜像对称性:

>>> from sympy import conjugate
>>> conjugate(airybi(z))
airybi(conjugate(z))

支持针对\(z\)的差异化:

>>> from sympy import diff
>>> diff(airybi(z), z)
airybiprime(z)
>>> diff(airybi(z), z, 2)
z*airybi(z)

还支持系列扩展:

>>> from sympy import series
>>> series(airybi(z), z, 0, 3)
3**(1/3)*gamma(1/3)/(2*pi) + 3**(2/3)*z*gamma(2/3)/(2*pi) + O(z**3)

我们可以在整个复平面上对Airy函数进行任意精度的数值计算:

>>> airybi(-2).evalf(50)
-0.41230258795639848808323405461146104203453483447240

根据超几何函数重写\(\operatorname{Bi}(z)\)

>>> from sympy import hyper
>>> airybi(z).rewrite(hyper)
3**(1/6)*z*hyper((), (4/3,), z**3/9)/gamma(1/3) + 3**(5/6)*hyper((), (2/3,), z**3/9)/(3*gamma(2/3))

参见

airyai

第一类Airy函数。

airyaiprime

第一类Airy函数的导数。

airybiprime

第二类Airy函数的导数。

工具书类

class sympy.functions.special.bessel.airyaiprime(arg)[源代码]#

第一类Airy函数的导数\(\operatorname{Ai}^\prime\)

解释

Airy函数\(\operatorname{Ai}^\prime(z)\)定义为函数

\[\运算符名称{Ai}^\prime(z):=\frac{\mathrm{d}\operatorname{Ai}(z)}{\mathrm{d}z}。\]

实例

创建Airy函数对象:

>>> from sympy import airyaiprime
>>> from sympy.abc import z
>>> airyaiprime(z)
airyaiprime(z)

已知几个特殊值:

>>> airyaiprime(0)
-3**(2/3)/(3*gamma(1/3))
>>> from sympy import oo
>>> airyaiprime(oo)
0

Airy函数遵循镜像对称性:

>>> from sympy import conjugate
>>> conjugate(airyaiprime(z))
airyaiprime(conjugate(z))

支持针对\(z\)的差异化:

>>> from sympy import diff
>>> diff(airyaiprime(z), z)
z*airyai(z)
>>> diff(airyaiprime(z), z, 2)
z*airyaiprime(z) + airyai(z)

还支持系列扩展:

>>> from sympy import series
>>> series(airyaiprime(z), z, 0, 3)
-3**(2/3)/(3*gamma(1/3)) + 3**(1/3)*z**2/(6*gamma(2/3)) + O(z**3)

我们可以在整个复平面上对Airy函数进行任意精度的数值计算:

>>> airyaiprime(-2).evalf(50)
0.61825902074169104140626429133247528291577794512415

根据超几何函数重写\(\operatorname{Ai}^\prime(z)\)

>>> from sympy import hyper
>>> airyaiprime(z).rewrite(hyper)
3**(1/3)*z**2*hyper((), (5/3,), z**3/9)/(6*gamma(2/3)) - 3**(2/3)*hyper((), (1/3,), z**3/9)/(3*gamma(1/3))

参见

airyai

第一类Airy函数。

airybi

第二类Airy函数。

airybiprime

第二类Airy函数的导数。

工具书类

class sympy.functions.special.bessel.airybiprime(arg)[源代码]#

第一类Airy函数的导数\(\operatorname{Bi}^\prime\)

解释

Airy函数\(\operatorname{Bi}^\prime(z)\)定义为函数

\[\operatiorName{Bi}^\prime(z):=\frac{\mathrm{d}\operatiorName{Bi}(z){\mathrm{d}z}。\]

实例

创建Airy函数对象:

>>> from sympy import airybiprime
>>> from sympy.abc import z
>>> airybiprime(z)
airybiprime(z)

已知几个特殊值:

>>> airybiprime(0)
3**(1/6)/gamma(1/3)
>>> from sympy import oo
>>> airybiprime(oo)
oo
>>> airybiprime(-oo)
0

Airy函数遵循镜像对称性:

>>> from sympy import conjugate
>>> conjugate(airybiprime(z))
airybiprime(conjugate(z))

支持针对\(z\)的差异化:

>>> from sympy import diff
>>> diff(airybiprime(z), z)
z*airybi(z)
>>> diff(airybiprime(z), z, 2)
z*airybiprime(z) + airybi(z)

还支持系列扩展:

>>> from sympy import series
>>> series(airybiprime(z), z, 0, 3)
3**(1/6)/gamma(1/3) + 3**(5/6)*z**2/(6*gamma(2/3)) + O(z**3)

我们可以在整个复平面上对Airy函数进行任意精度的数值计算:

>>> airybiprime(-2).evalf(50)
0.27879516692116952268509756941098324140300059345163

根据超几何函数重写\(\operatorname{Bi}^\prime(z)\)

>>> from sympy import hyper
>>> airybiprime(z).rewrite(hyper)
3**(5/6)*z**2*hyper((), (5/3,), z**3/9)/(6*gamma(2/3)) + 3**(1/6)*hyper((), (1/3,), z**3/9)/gamma(1/3)

参见

airyai

第一类Airy函数。

airybi

第二类Airy函数。

airyaiprime

第一类Airy函数的导数。

工具书类

B样条曲线#

sympy.functions.special.bsplines.bspline_basis(d, knots, n, x)#

第n\(-条B样条,每节\)x\(度\)d$。

参数:

d :整数

bspline度数

:整数值列表

bspline节点列表

n :整数

\(n\)-第次B样条

x :符号

解释

B样条是阶数为d$的分段多项式。它们被定义在一组结上,这是一组整数或浮点数。

实例

第0次样条曲线在单个间隔上的值为1:

>>> from sympy import bspline_basis
>>> from sympy.abc import x
>>> d = 0
>>> knots = tuple(range(5))
>>> bspline_basis(d, knots, 0, x)
Piecewise((1, (x >= 0) & (x <= 1)), (0, True))

为了一个给定的 (d, knots)len(knots)-d-1 定义的B样条曲线,由 n (从0开始)。

下面是一个三次B样条曲线的示例:

>>> bspline_basis(3, tuple(range(5)), 0, x)
Piecewise((x**3/6, (x >= 0) & (x <= 1)),
          (-x**3/2 + 2*x**2 - 2*x + 2/3,
          (x >= 1) & (x <= 2)),
          (x**3/2 - 4*x**2 + 10*x - 22/3,
          (x >= 2) & (x <= 3)),
          (-x**3/6 + 2*x**2 - 8*x + 32/3,
          (x >= 3) & (x <= 4)),
          (0, True))

通过重复节点,可以在B样条曲线及其导数中引入不连续性:

>>> d = 1
>>> knots = (0, 0, 2, 3, 4)
>>> bspline_basis(d, knots, 0, x)
Piecewise((1 - x/2, (x >= 0) & (x <= 2)), (0, True))

构造和计算B样条函数非常耗时。如果需要多次计算B样条曲线,最好先对其进行lambdify:

>>> from sympy import lambdify
>>> d = 3
>>> knots = tuple(range(10))
>>> b0 = bspline_basis(d, knots, 0, x)
>>> f = lambdify(x, b0)
>>> y = f(0.5)

工具书类

sympy.functions.special.bsplines.bspline_basis_set(d, knots, x)[源代码]#

返回 len(knots)-d-1 B样条曲线 x 程度的 d 具有 .

参数:

d :整数

bspline度数

:整数列表

bspline节点列表

x :符号

解释

此函数返回分段多项式的列表 len(knots)-d-1 次B样条 d 对于给定的结。此函数调用 bspline_basis(d, knots, n, x) 对于不同的值 n .

实例

>>> from sympy import bspline_basis_set
>>> from sympy.abc import x
>>> d = 2
>>> knots = range(5)
>>> splines = bspline_basis_set(d, knots, x)
>>> splines
[Piecewise((x**2/2, (x >= 0) & (x <= 1)),
           (-x**2 + 3*x - 3/2, (x >= 1) & (x <= 2)),
           (x**2/2 - 3*x + 9/2, (x >= 2) & (x <= 3)),
           (0, True)),
Piecewise((x**2/2 - x + 1/2, (x >= 1) & (x <= 2)),
          (-x**2 + 5*x - 11/2, (x >= 2) & (x <= 3)),
          (x**2/2 - 4*x + 8, (x >= 3) & (x <= 4)),
          (0, True))]

参见

bspline_basis

sympy.functions.special.bsplines.interpolating_spline(d, x, X, Y)[源代码]#

度返回样条 d ,穿过给定的 XY 价值观。

参数:

d :整数

Bspline的度严格大于等于1

x :符号

X : list of strictly increasing real values

样条曲线通过的X坐标列表

Y : list of real values

list of corresponding Y coordinates through which the spline passes

解释

此函数返回一个分段函数,使每个部分都是不大于 d .价值 d 必须为1或更大,并且 X 必须严格增加。

实例

>>> from sympy import interpolating_spline
>>> from sympy.abc import x
>>> interpolating_spline(1, x, [1, 2, 4, 7], [3, 6, 5, 7])
Piecewise((3*x, (x >= 1) & (x <= 2)),
        (7 - x/2, (x >= 2) & (x <= 4)),
        (2*x/3 + 7/3, (x >= 4) & (x <= 7)))
>>> interpolating_spline(3, x, [-2, 0, 1, 3, 4], [4, 2, 1, 1, 3])
Piecewise((7*x**3/117 + 7*x**2/117 - 131*x/117 + 2, (x >= -2) & (x <= 1)),
        (10*x**3/117 - 2*x**2/117 - 122*x/117 + 77/39, (x >= 1) & (x <= 4)))

Riemann-Zeta及其相关函数#

class sympy.functions.special.zeta_functions.zeta(s, a=None)[源代码]#

Hurwitz-zeta函数(或Riemann-zeta函数)。

解释

对于\(\operatorname{Re}(a)>0\)\(\operatorname{Re}(s)>1\),此函数定义为

\[\zeta(s,a)=\sum{n=0}^\infty\frac{1}{(n+a)^s},\]

where the standard choice of argument for \(n + a\) is used. For fixed \(a\) not a nonpositive integer the Hurwitz zeta function admits a meromorphic continuation to all of \(\mathbb{C}\); it is an unbranched function with a simple pole at \(s = 1\).

Hurwitz-zeta函数是Lerch超验的一个特例:

\[\zeta(s,a)=\Phi(1,s,a)。\]

此公式为\(s\)\(a\)(也为\(\operatorname{Re}(a)<0\))的所有可能值定义了分析延续,请参阅的文档 lerchphi 以获取分支行为的描述。

If no value is passed for \(a\) a default value of \(a = 1\) is assumed, yielding the Riemann zeta function.

实例

对于\(a=1\),Hurwitz-zeta函数可简化为著名的Riemann-zeta函数:

\[\zeta(s,1)=\zeta(s)=\sum{n=1}^\infty\frac{1}{n^s}。\]
>>> from sympy import zeta
>>> from sympy.abc import s
>>> zeta(s, 1)
zeta(s)
>>> zeta(s)
zeta(s)

Riemann-zeta函数也可以用Dirichlet-eta函数表示:

>>> from sympy import dirichlet_eta
>>> zeta(s).rewrite(dirichlet_eta)
dirichlet_eta(s)/(1 - 2**(1 - s))

The Riemann zeta function at nonnegative even and negative integer values is related to the Bernoulli numbers and polynomials:

>>> zeta(2)
pi**2/6
>>> zeta(4)
pi**4/90
>>> zeta(0)
-1/2
>>> zeta(-1)
-1/12
>>> zeta(-4)
0

具体公式如下:

\[\zeta(2n) = -\frac{(2\pi i)^{2n} B_{2n}}{2(2n)!}\]
\[\zeta(-n,a) = -\frac{B_{n+1}(a)}{n+1}\]

在奇数正整数处没有已知的闭式表达式,但可以进行数值计算:

>>> zeta(3).n()
1.20205690315959

\(\zeta(s,a)\)相对于\(a\)的导数可以计算:

>>> from sympy.abc import a
>>> zeta(s, a).diff(a)
-s*zeta(s + 1, a)

但是,对于\(s\)的导数没有有用的闭式表达式:

>>> zeta(s, a).diff(s)
Derivative(zeta(s, a), s)

Hurwitz-zeta函数可以用Lerch超验来表示, lerchphi

>>> from sympy import lerchphi
>>> zeta(s, a).rewrite(lerchphi)
lerchphi(1, s, a)

工具书类

class sympy.functions.special.zeta_functions.dirichlet_eta(s, a=None)[源代码]#

Dirichlet-eta函数。

解释

For \(\operatorname{Re}(s) > 0\) and \(0 < x \le 1\), this function is defined as

\[\eta(s, a) = \sum_{n=0}^\infty \frac{(-1)^n}{(n+a)^s}.\]

It admits a unique analytic continuation to all of \(\mathbb{C}\) for any fixed \(a\) not a nonpositive integer. It is an entire, unbranched function.

It can be expressed using the Hurwitz zeta function as

\[\eta(s, a) = \zeta(s,a) - 2^{1-s} \zeta\left(s, \frac{a+1}{2}\right)\]

and using the generalized Genocchi function as

\[\eta(s, a) = \frac{G(1-s, a)}{2(s-1)}.\]

In both cases the limiting value of \(\log2 - \psi(a) + \psi\left(\frac{a+1}{2}\right)\) is used when \(s = 1\).

实例

>>> from sympy import dirichlet_eta, zeta
>>> from sympy.abc import s
>>> dirichlet_eta(s).rewrite(zeta)
Piecewise((log(2), Eq(s, 1)), ((1 - 2**(1 - s))*zeta(s), True))

参见

zeta

工具书类

[R457]

Peter Luschny, "An introduction to the Bernoulli function", https://arxiv.org/abs/2009.06743

class sympy.functions.special.zeta_functions.polylog(s, z)[源代码]#

多段对数函数。

解释

For \(|z| < 1\) and \(s \in \mathbb{C}\), the polylogarithm is defined by

\[\运算符名称{Li}}us(z)=\sum{n=1}^\infty\frac{z^n}{n^s},\]

其中参数的标准分支用于\(n\)。它允许在\(z=1\)(特别是不在初始定义表上)、\(z=0\)\(z=\infty\)处分支的分析延拓。

polylogarithm的名称来自这样一个事实:对于\(s=1\),polylogarithm与普通对数相关(参见示例),并且

\[\运算符名称{Li}}{s+1}(z)=\]

多段法则是Lerch先验论的一个特例:

\[\运算符名{Li}{s}(z)=z\Phi(z,s,1)。\]

实例

对于\{0,1,-1\}\(中的\)z\,多段对数将使用其他函数自动表示:

>>> from sympy import polylog
>>> from sympy.abc import s
>>> polylog(s, 0)
0
>>> polylog(s, 1)
zeta(s)
>>> polylog(s, -1)
-dirichlet_eta(s)

如果\(s\)是负整数、\(0\)\(1\),则可以使用初等函数来表示多段对数。可以使用 expand_func()

>>> from sympy import expand_func
>>> from sympy.abc import z
>>> expand_func(polylog(1, z))
-log(1 - z)
>>> expand_func(polylog(0, z))
z/(1 - z)

\(z\)相关的衍生工具可以闭合形式计算:

>>> polylog(s, z).diff(z)
polylog(s - 1, z)/z

多段法则可以用勒奇超越性来表达:

>>> from sympy import lerchphi
>>> polylog(s, z).rewrite(lerchphi)
z*lerchphi(z, s, 1)

参见

zeta, lerchphi

class sympy.functions.special.zeta_functions.lerchphi(*args)[源代码]#

Lerch超越(Lerch phi函数)。

解释

For \(\operatorname{Re}(a) > 0\), \(|z| < 1\) and \(s \in \mathbb{C}\), the Lerch transcendent is defined as

\[\Phi(z,s,a)=\sum{n=0}^\infty\frac{z^n}{(n+a)^s},\]

其中参数的标准分支用于\(n+a\),并通过解析延续用于参数的其他值。

一个常用的相关函数是Lerch zeta函数,由

\[L(q,s,a)=\Phi(e^{2\pi iq},s,a)。\]

解析延拓与分枝行为

可以证明

\[\φ(z,s,a)=z\Phi(z,s,a+1)+a^{-s}。\]

这提供了对\(\operatorname{Re}(a)\le 0\)的分析延续。

现在假设\(\operatorname{Re}(a)>0\)。积分表示

\[\φ0(z,s,a)=\int\0^\infty\frac{t^{s-1}e^-at}{1-ze^{-t}}\]

提供\(\mathbb{C}-[1,\infty)\)的分析延续。最后,对于(1,\infty)\(中的\)x\我们发现

\[\lim{\epsilon\到0^+}\Phi_0(x+i\epsilon,s,a)\]

\(\log{x}\)\(\log{\log{x}\)使用标准分支(需要使用\(\log{\log{x}}\)的分支来计算\(\log{x}^{s-1}\))。这就是解析延拓的结论。因此,Lerch超越在\{0,1,infty\}\(和\)a\ in\mathbb{z}{\le0}\(中分支。对于固定的\)z,在这些分支点之外的\(z,它是\)s$的一个完整函数。

实例

Lerch超越函数是一个相当普遍的函数,因此它不会自动求值为更简单的函数。使用 expand_func() 为了达到这个目的。

如果\(z=1\),则Lerch超验约化为Hurwitz-zeta函数:

>>> from sympy import lerchphi, expand_func
>>> from sympy.abc import z, s, a
>>> expand_func(lerchphi(1, s, a))
zeta(s, a)

更一般地说,如果\(z\)是统一的根,那么Lerch超越可以归结为Hurwitz-zeta函数的总和:

>>> expand_func(lerchphi(-1, s, a))
zeta(s, a/2)/2**s - zeta(s, a/2 + 1/2)/2**s

如果\(a=1\),则Lerch Superivate简化为多段对数:

>>> expand_func(lerchphi(z, s, 1))
polylog(s, z)/z

更一般地说,如果\(a\)是理性的,那么Lerch Superivate可以归结为多段对数的总和:

>>> from sympy import S
>>> expand_func(lerchphi(z, s, S(1)/2))
2**(s - 1)*(polylog(s, sqrt(z))/sqrt(z) -
            polylog(s, sqrt(z)*exp_polar(I*pi))/sqrt(z))
>>> expand_func(lerchphi(z, s, S(3)/2))
-2**s/z + 2**(s - 1)*(polylog(s, sqrt(z))/sqrt(z) -
                      polylog(s, sqrt(z)*exp_polar(I*pi))/sqrt(z))/z

关于\(z\)\(a\)的衍生工具可以封闭形式计算:

>>> lerchphi(z, s, a).diff(z)
(-a*lerchphi(z, s, a) + lerchphi(z, s - 1, a))/z
>>> lerchphi(z, s, a).diff(a)
-s*lerchphi(z, s + 1, a)

参见

polylog, zeta

工具书类

[R458]

Bateman,H.;Erdelyi,A.(1953),高等超越函数,第一卷,纽约:麦格劳-希尔。第1.11条。

class sympy.functions.special.zeta_functions.stieltjes(n, a=None)[源代码]#

表示Stieltjes常数,\(\gamma{k}\),出现在Riemann-zeta函数的Laurent级数展开中。

实例

>>> from sympy import stieltjes
>>> from sympy.abc import n, m
>>> stieltjes(n)
stieltjes(n)

第零个stieltjes常数:

>>> stieltjes(0)
EulerGamma
>>> stieltjes(0, 1)
EulerGamma

对于广义stieltjes常数:

>>> stieltjes(n, m)
stieltjes(n, m)

常量仅为大于等于0的整数定义:

>>> stieltjes(-1)
zoo

工具书类

超几何函数#

class sympy.functions.special.hyper.hyper(ap, bq, z)[源代码]#

广义超几何函数由一系列定义,其中连续项的比值是求和指数的有理函数。当收敛时,它继续解析到最大的可能域。

解释

超几何函数依赖于两个参数向量,称为分子参数\(a_p\),分母参数\(b_q\)。$z也有一个参数。系列的定义是

\[\begin{split}{}}u pF_q\左(\begin{matrix}a_1,\cdots,a_p\\b_1,\cdots,b_q\end{matrix}\end{split}\]

其中\((a)_n=(a)(a+1)\cdots(a+n-1)\)表示上升阶乘。

如果\(b_q\)中的一个是非正整数,则该系列是未定义的,除非\(a_q\)中的一个是更大(即大小较小)的非正整数。如果\(b_q\)中没有一个是非正整数,而\(a_q\)中有一个是非正整数,则级数将缩减为多项式。为了简化下面的讨论,我们假设\(a_p\)\(b_q\)都不是非正整数。有关详细信息,请参阅参考资料。

对于所有\(z\)if\(p\le q\),级数收敛,因此在本例中定义了一个完整的单值函数。如果\(p=q+1\),则级数收敛于$ |z| <1\(,并可继续解析为半平面。如果\)p>q+1\(,则所有\)z$的级数是发散的。

请注意超几何函数构造函数当前所做的 not 检查参数是否实际产生定义良好的函数。

实例

参数\(a_p\)\(b_q\)可以作为任意ITerable传递,例如:

>>> from sympy import hyper
>>> from sympy.abc import x, n, a
>>> h = hyper((1, 2, 3), [3, 4], x); h
hyper((1, 2), (4,), x)
>>> hyper((3, 1, 2), [3, 4], x, evaluate=False)  # don't remove duplicates
hyper((1, 2, 3), (3, 4), x)

还有漂亮的打印(使用Unicode看起来更好):

>>> from sympy import pprint
>>> pprint(h, use_unicode=False)
  _
 |_  /1, 2 |  \
 |   |     | x|
2  1 \  4  |  /

参数必须始终是ITerable,即使它们是长度为1或0的向量:

>>> hyper((1, ), [], x)
hyper((1,), (), x)

当然,它们可能是变量(但是如果它们依赖于\(x\),那么您不应该期望实现太多的功能):

>>> hyper((n, a), (n**2,), x)
hyper((a, n), (n**2,), x)

超几何函数推广了许多命名的特殊函数。功能 hyperexpand() 尝试使用命名的特殊函数来表示超几何函数。例如:

>>> from sympy import hyperexpand
>>> hyperexpand(hyper([], [], x))
exp(x)

您也可以使用 expand_func()

>>> from sympy import expand_func
>>> expand_func(x*hyper([1, 1], [2], -x))
log(x + 1)

更多示例:

>>> from sympy import S
>>> hyperexpand(hyper([], [S(1)/2], -x**2/4))
cos(x)
>>> hyperexpand(x*hyper([S(1)/2, S(1)/2], [S(3)/2], x**2))
asin(x)

我们有时也可以 hyperexpand() 参数函数:

>>> from sympy.abc import a
>>> hyperexpand(hyper([-a], [], x))
(1 - x)**a

工具书类

[R462]

Luke,Y.L.(1969),《特殊函数及其逼近》,第1卷

property ap#

超几何函数的分子参数。

property argument#

超几何函数的自变量。

property bq#

超几何函数的分母参数。

property convergence_statement#

返回z轴上级数收敛的条件。

property eta#

与级数收敛性有关的量。

property radius_of_convergence#

计算定义级数的收敛半径。

解释

注意,即使不是这样 oo ,仍然可以用解析延拓法在收敛半径外计算函数。但是如果这个值为零,那么这个函数实际上并没有在其他地方定义。

实例

>>> from sympy import hyper
>>> from sympy.abc import z
>>> hyper((1, 2), [3], z).radius_of_convergence
1
>>> hyper((1, 2, 3), [4], z).radius_of_convergence
0
>>> hyper((1, 2), (3, 4), z).radius_of_convergence
oo
class sympy.functions.special.hyper.meijerg(*args)[源代码]#

Meijer G函数由一个类似于逆Mellin变换的Mellin-Barnes型积分定义。它推广了超几何函数。

解释

The Meijer G-function depends on four sets of parameters. There are "numerator parameters" \(a_1, \ldots, a_n\) and \(a_{n+1}, \ldots, a_p\), and there are "denominator parameters" \(b_1, \ldots, b_m\) and \(b_{m+1}, \ldots, b_q\). Confusingly, it is traditionally denoted as follows (note the position of \(m\), \(n\), \(p\), \(q\), and how they relate to the lengths of the four parameter vectors):

\[\begin{split}G{p,q}^{m,n}\左(\begin{matrix}au 1),\cdots,a_n&a{n+1},\ cdots,a_p\\\end{split}\]

然而,在SymPy中,四个参数向量始终是单独可用的(参见示例),因此不需要跟踪G符号上的装饰子脚本和超级脚本。

G函数定义为以下积分:

\[\frac{1}{2\pii}\int}L\frac{\prod{j=1}^m\Gamma(b_j-s)\]

其中\(\Gamma(z)\)是伽马函数。有三种可能的轮廓,我们在这里将不作详细描述(见参考文献)。如果积分沿着其中一个以上的方向收敛,则定义一致。这些等高线都将\(\Gamma(1-a_j+s)\)的极点与\(\Gamma(b_k-s)\)的极点分开,因此特别是如果在某些\(j\le n\)\(k\le m\)\(a_j-b_k\in\mathbb{Z}{>0}\),则G函数是未定义的。

其中一条等值线产生收敛积分的条件很复杂,我们这里不做说明,见参考文献。

请注意当前Meijer G函数构造函数 not 检查所有收敛条件。

实例

您可以传递四个参数:

>>> from sympy import meijerg, Tuple, pprint
>>> from sympy.abc import x, a
>>> pprint(meijerg((1, 2), (a, 4), (5,), [], x), use_unicode=False)
 __1, 2 /1, 2  4, a |  \
/__     |           | x|
\_|4, 1 \ 5         |  /

或作为两个嵌套向量:

>>> pprint(meijerg([(1, 2), (3, 4)], ([5], Tuple()), x), use_unicode=False)
 __1, 2 /1, 2  3, 4 |  \
/__     |           | x|
\_|4, 1 \ 5         |  /

与超几何函数一样,参数可以作为任意的Iterable传递。长度为0和1的向量也必须作为Iterable传递。参数不需要是常量,但是如果它们依赖于参数,那么就不需要太多实现的功能。

参数的所有子向量都可用:

>>> from sympy import pprint
>>> g = meijerg([1], [2], [3], [4], x)
>>> pprint(g, use_unicode=False)
 __1, 1 /1  2 |  \
/__     |     | x|
\_|2, 2 \3  4 |  /
>>> g.an
(1,)
>>> g.ap
(1, 2)
>>> g.aother
(2,)
>>> g.bm
(3,)
>>> g.bq
(3, 4)
>>> g.bother
(4,)

Meijer G-函数推广了超几何函数。在某些情况下,它可以用超几何函数来表示,使用Slater定理。例如:

>>> from sympy import hyperexpand
>>> from sympy.abc import a, b, c
>>> hyperexpand(meijerg([a], [], [c], [b], x), allow_hyper=True)
x**c*gamma(-a + c + 1)*hyper((-a + c + 1,),
                             (-b + c + 1,), -x)/gamma(-b + c + 1)

因此,Meijer G-函数也包含了许多命名函数作为特殊情况。你可以用 expand_func()hyperexpand() 用指定的特殊函数重写Meijer G函数。例如:

>>> from sympy import expand_func, S
>>> expand_func(meijerg([[],[]], [[0],[]], -x))
exp(x)
>>> hyperexpand(meijerg([[],[]], [[S(1)/2],[0]], (x/2)**2))
sin(x)/sqrt(pi)

工具书类

[R464]

Luke,Y.L.(1969),《特殊函数及其逼近》,第1卷

property an#

第一组分子参数。

property aother#

第二组分子参数。

property ap#

组合分子参数。

property argument#

Meijer G-函数的自变量。

property bm#

第一组分母参数。

property bother#

第二组分母参数。

property bq#

组合分母参数。

property delta#

与积分收敛区域有关的量,c.f.参考文献。

get_period()[源代码]#

返回一个数字\(P\),这样$G(x 实验(一) P) )==G(x)$。

实例

>>> from sympy import meijerg, pi, S
>>> from sympy.abc import z
>>> meijerg([1], [], [], [], z).get_period()
2*pi
>>> meijerg([pi], [], [], [], z).get_period()
oo
>>> meijerg([1, 2], [], [], [], z).get_period()
oo
>>> meijerg([1,1], [2], [1, S(1)/2, S(1)/3], [1], z).get_period()
12*pi
integrand(s)[源代码]#

得到定义被积函数D(s)。

property is_number#

如果表达式仅包含数值数据,则返回true。

property nu#

与积分收敛区域有关的量,c.f.参考文献。

class sympy.functions.special.hyper.appellf1(a, b1, b2, c, x, y)[源代码]#

这是两个变量的Appell超几何函数,如下所示:

\[F 1(a,b 1,b 2,c,x,y)=\sum{m=0}^{\infty}\sum{n=0}^{\infty}\]

实例

>>> from sympy import appellf1, symbols
>>> x, y, a, b1, b2, c = symbols('x y a b1 b2 c')
>>> appellf1(2., 1., 6., 4., 5., 6.)
0.0063339426292673
>>> appellf1(12., 12., 6., 4., 0.5, 0.12)
172870711.659936
>>> appellf1(40, 2, 6, 4, 15, 60)
appellf1(40, 2, 6, 4, 15, 60)
>>> appellf1(20., 12., 10., 3., 0.5, 0.12)
15605338197184.4
>>> appellf1(40, 2, 6, 4, x, y)
appellf1(40, 2, 6, 4, x, y)
>>> appellf1(a, b1, b2, c, x, y)
appellf1(a, b1, b2, c, x, y)

工具书类

椭圆积分#

class sympy.functions.special.elliptic_integrals.elliptic_k(m)[源代码]#

第一类完全椭圆积分,由

\[K(m)=F\左(\tfrac{\pi}{2}\middle | m\右)\]

其中,\(F\ left(z\ middle | m\ right)\)是第一类勒让德不完全椭圆积分。

解释

函数\(K(m)\)是复平面上沿区间\((1,\infty)\)分支切割的单值函数。

注意,我们的符号用参数\(m\)而不是椭圆模(偏心率)\(k\)来定义不完全椭圆积分。在本例中,参数\(m\)定义为\(m=k^2\)

实例

>>> from sympy import elliptic_k, I
>>> from sympy.abc import m
>>> elliptic_k(0)
pi/2
>>> elliptic_k(1.0 + I)
1.50923695405127 + 0.625146415202697*I
>>> elliptic_k(m).series(n=3)
pi/2 + pi*m/8 + 9*pi*m**2/128 + O(m**3)

参见

elliptic_f

工具书类

class sympy.functions.special.elliptic_integrals.elliptic_f(z, m)[源代码]#

第一类Legendre不完全椭圆积分,由

\[左(z\中| m\右)=\]

解释

\(z=\pi/2\)时,此函数可化为第一类完整的椭圆积分,\(K(m)\)

注意,我们的符号用参数\(m\)而不是椭圆模(偏心率)\(k\)来定义不完全椭圆积分。在本例中,参数\(m\)定义为\(m=k^2\)

实例

>>> from sympy import elliptic_f, I
>>> from sympy.abc import z, m
>>> elliptic_f(z, m).series(z)
z + z**5*(3*m**2/40 - m/30) + m*z**3/6 + O(z**6)
>>> elliptic_f(3.0 + I/2, 1.0 + I)
2.909449841483 + 1.74720545502474*I

参见

elliptic_k

工具书类

class sympy.functions.special.elliptic_integrals.elliptic_e(m, z=None)[源代码]#

使用两个参数\(z\)\(m\)调用,计算第二类不完整椭圆积分,由

\[E\左(z\中| m\右)=\int_0^z\sqrt{1-m\sin^2 t}dt\]

使用单个参数\(m\)调用,计算第二类Legendre完全椭圆积分

\[E(m)=E\左(\tfrac{\pi}{2}\middle | m\右)\]

解释

函数\(E(m)\)是复平面上沿区间\((1,\infty)\)分支切割的单值函数。

注意,我们的符号用参数\(m\)而不是椭圆模(偏心率)\(k\)来定义不完全椭圆积分。在本例中,参数\(m\)定义为\(m=k^2\)

实例

>>> from sympy import elliptic_e, I
>>> from sympy.abc import z, m
>>> elliptic_e(z, m).series(z)
z + z**5*(-m**2/40 + m/30) - m*z**3/6 + O(z**6)
>>> elliptic_e(m).series(n=4)
pi/2 - pi*m/8 - 3*pi*m**2/128 - 5*pi*m**3/512 + O(m**4)
>>> elliptic_e(1 + I, 2 - I/2).n()
1.55203744279187 + 0.290764986058437*I
>>> elliptic_e(0)
pi/2
>>> elliptic_e(2.0 - I)
0.991052601328069 + 0.81879421395609*I

工具书类

class sympy.functions.special.elliptic_integrals.elliptic_pi(n, m, z=None)[源代码]#

用三个参数\(n\)\(z\)\(m\)调用,计算第三类Legendre不完全椭圆积分,由

\[\Pi\左(n;z\中| m\右)=\int_0^z\frac{dt}\]

使用两个参数\(n\)\(m\)调用,计算第三种完整的椭圆积分:

\[\左(n\中| m\右)=\]

解释

注意,我们的符号用参数\(m\)而不是椭圆模(偏心率)\(k\)来定义不完全椭圆积分。在本例中,参数\(m\)定义为\(m=k^2\)

实例

>>> from sympy import elliptic_pi, I
>>> from sympy.abc import z, n, m
>>> elliptic_pi(n, z, m).series(z, n=4)
z + z**3*(m/6 + n/3) + O(z**4)
>>> elliptic_pi(0.5 + I, 1.0 - I, 1.2)
2.50232379629182 - 0.760939574180767*I
>>> elliptic_pi(0, 0)
pi/2
>>> elliptic_pi(1.0 - I/3, 2.0 + I)
3.29136443417283 + 0.32555634906645*I

工具书类

马修函数#

class sympy.functions.special.mathieu_functions.MathieuBase(*args)[源代码]#

Mathieu函数的抽象基类。

这个类是为了减少代码重复。

class sympy.functions.special.mathieu_functions.mathieus(a, q, z)[源代码]#

马修正弦函数\(S(a,q,z)\)

解释

该函数是Mathieu微分方程的一个解:

\[y(x)^{\prime\prime}+(a-2q\cos(2x))y(x)=0\]

另一个解是Mathieu余弦函数。

实例

>>> from sympy import diff, mathieus
>>> from sympy.abc import a, q, z
>>> mathieus(a, q, z)
mathieus(a, q, z)
>>> mathieus(a, 0, z)
sin(sqrt(a)*z)
>>> diff(mathieus(a, q, z), z)
mathieusprime(a, q, z)

参见

mathieuc

马修余弦函数。

mathieusprime

马修正弦函数的导数。

mathieucprime

余弦函数的导数。

工具书类

class sympy.functions.special.mathieu_functions.mathieuc(a, q, z)[源代码]#

Mathieu余弦函数\(C(a,q,z)\)

解释

该函数是Mathieu微分方程的一个解:

\[y(x)^{\prime\prime}+(a-2q\cos(2x))y(x)=0\]

另一个解决方案是Mathieu正弦函数。

实例

>>> from sympy import diff, mathieuc
>>> from sympy.abc import a, q, z
>>> mathieuc(a, q, z)
mathieuc(a, q, z)
>>> mathieuc(a, 0, z)
cos(sqrt(a)*z)
>>> diff(mathieuc(a, q, z), z)
mathieucprime(a, q, z)

参见

mathieus

马修正弦函数

mathieusprime

马修正弦函数的导数

mathieucprime

Mathieu余弦函数的导数

工具书类

class sympy.functions.special.mathieu_functions.mathieusprime(a, q, z)[源代码]#

Mathieu Sine函数的导数\(S^{\prime}(a,q,z)\)

解释

该函数是Mathieu微分方程的一个解:

\[y(x)^{\prime\prime}+(a-2q\cos(2x))y(x)=0\]

另一个解是Mathieu余弦函数。

实例

>>> from sympy import diff, mathieusprime
>>> from sympy.abc import a, q, z
>>> mathieusprime(a, q, z)
mathieusprime(a, q, z)
>>> mathieusprime(a, 0, z)
sqrt(a)*cos(sqrt(a)*z)
>>> diff(mathieusprime(a, q, z), z)
(-a + 2*q*cos(2*z))*mathieus(a, q, z)

参见

mathieus

马修正弦函数

mathieuc

马修余弦函数

mathieucprime

Mathieu余弦函数的导数

工具书类

class sympy.functions.special.mathieu_functions.mathieucprime(a, q, z)[源代码]#

Mathieu余弦函数的导数\(C^{\prime}(a,q,z)\)

解释

该函数是Mathieu微分方程的一个解:

\[y(x)^{\prime\prime}+(a-2q\cos(2x))y(x)=0\]

另一个解决方案是Mathieu正弦函数。

实例

>>> from sympy import diff, mathieucprime
>>> from sympy.abc import a, q, z
>>> mathieucprime(a, q, z)
mathieucprime(a, q, z)
>>> mathieucprime(a, 0, z)
-sqrt(a)*sin(sqrt(a)*z)
>>> diff(mathieucprime(a, q, z), z)
(-a + 2*q*cos(2*z))*mathieuc(a, q, z)

参见

mathieus

马修正弦函数

mathieuc

马修余弦函数

mathieusprime

马修正弦函数的导数

工具书类

正交多项式#

本模块主要实现特殊正交多项式。

另请参见函数.组合.数字其中包含一些组合多项式。

雅可比多项式#

class sympy.functions.special.polynomials.jacobi(n, a, b, x)[源代码]#

雅可比多项式\(P\u n^{\left(\alpha,\beta\right)}(x)\)

解释

jacobi(n, alpha, beta, x) gives the \(n\)th Jacobi polynomial in \(x\), \(P_n^{\left(\alpha, \beta\right)}(x)\).

雅可比多项式在$ [-1, 1] \(相对于重量\)\left(1-x\ right)^\alpha\ left(1+x\ right)^\beta$。

实例

>>> from sympy import jacobi, S, conjugate, diff
>>> from sympy.abc import a, b, n, x
>>> jacobi(0, a, b, x)
1
>>> jacobi(1, a, b, x)
a/2 - b/2 + x*(a/2 + b/2 + 1)
>>> jacobi(2, a, b, x)
a**2/8 - a*b/4 - a/8 + b**2/8 - b/8 + x**2*(a**2/8 + a*b/4 + 7*a/8 + b**2/8 + 7*b/8 + 3/2) + x*(a**2/4 + 3*a/4 - b**2/4 - 3*b/4) - 1/2
>>> jacobi(n, a, b, x)
jacobi(n, a, b, x)
>>> jacobi(n, a, a, x)
RisingFactorial(a + 1, n)*gegenbauer(n,
    a + 1/2, x)/RisingFactorial(2*a + 1, n)
>>> jacobi(n, 0, 0, x)
legendre(n, x)
>>> jacobi(n, S(1)/2, S(1)/2, x)
RisingFactorial(3/2, n)*chebyshevu(n, x)/factorial(n + 1)
>>> jacobi(n, -S(1)/2, -S(1)/2, x)
RisingFactorial(1/2, n)*chebyshevt(n, x)/factorial(n)
>>> jacobi(n, a, b, -x)
(-1)**n*jacobi(n, b, a, x)
>>> jacobi(n, a, b, 0)
gamma(a + n + 1)*hyper((-n, -b - n), (a + 1,), -1)/(2**n*factorial(n)*gamma(a + 1))
>>> jacobi(n, a, b, 1)
RisingFactorial(a + 1, n)/factorial(n)
>>> conjugate(jacobi(n, a, b, x))
jacobi(n, conjugate(a), conjugate(b), conjugate(x))
>>> diff(jacobi(n,a,b,x), x)
(a/2 + b/2 + n/2 + 1/2)*jacobi(n - 1, a + 1, b + 1, x)

工具书类

sympy.functions.special.polynomials.jacobi_normalized(n, a, b, x)[源代码]#

雅可比多项式\(P\u n^{\left(\alpha,\beta\right)}(x)\)

参数:

n :整次多项式

a :α值

b :β值

x :符号

解释

jacobi_normalized(n, alpha, beta, x) gives the \(n\)th Jacobi polynomial in \(x\), \(P_n^{\left(\alpha, \beta\right)}(x)\).

雅可比多项式在$ [-1, 1] \(相对于重量\)\left(1-x\ right)^\alpha\ left(1+x\ right)^\beta$。

此函数返回标准化的多项式:

\[\内景{-1}^{1}\]

实例

>>> from sympy import jacobi_normalized
>>> from sympy.abc import n,a,b,x
>>> jacobi_normalized(n, a, b, x)
jacobi(n, a, b, x)/sqrt(2**(a + b + 1)*gamma(a + n + 1)*gamma(b + n + 1)/((a + b + 2*n + 1)*factorial(n)*gamma(a + b + n + 1)))

工具书类

Gegenbauer多项式#

class sympy.functions.special.polynomials.gegenbauer(n, a, x)[源代码]#

Gegenbauer多项式\(C\u n^{\left(\alpha\right)}(x)\)

解释

gegenbauer(n, alpha, x) gives the \(n\)th Gegenbauer polynomial in \(x\), \(C_n^{\left(\alpha\right)}(x)\).

The Gegenbauer polynomials are orthogonal on \([-1, 1]\) with respect to the weight \(\left(1-x^2\right)^{\alpha-\frac{1}{2}}\).

实例

>>> from sympy import gegenbauer, conjugate, diff
>>> from sympy.abc import n,a,x
>>> gegenbauer(0, a, x)
1
>>> gegenbauer(1, a, x)
2*a*x
>>> gegenbauer(2, a, x)
-a + x**2*(2*a**2 + 2*a)
>>> gegenbauer(3, a, x)
x**3*(4*a**3/3 + 4*a**2 + 8*a/3) + x*(-2*a**2 - 2*a)
>>> gegenbauer(n, a, x)
gegenbauer(n, a, x)
>>> gegenbauer(n, a, -x)
(-1)**n*gegenbauer(n, a, x)
>>> gegenbauer(n, a, 0)
2**n*sqrt(pi)*gamma(a + n/2)/(gamma(a)*gamma(1/2 - n/2)*gamma(n + 1))
>>> gegenbauer(n, a, 1)
gamma(2*a + n)/(gamma(2*a)*gamma(n + 1))
>>> conjugate(gegenbauer(n, a, x))
gegenbauer(n, conjugate(a), conjugate(x))
>>> diff(gegenbauer(n, a, x), x)
2*a*gegenbauer(n - 1, a + 1, x)

工具书类

切比雪夫多项式#

class sympy.functions.special.polynomials.chebyshevt(n, x)[源代码]#

第一类切比雪夫多项式,\(T\n(x)\)

解释

chebyshevt(n, x) gives the \(n\)th Chebyshev polynomial (of the first kind) in \(x\), \(T_n(x)\).

The Chebyshev polynomials of the first kind are orthogonal on \([-1, 1]\) with respect to the weight \(\frac{1}{\sqrt{1-x^2}}\).

实例

>>> from sympy import chebyshevt, diff
>>> from sympy.abc import n,x
>>> chebyshevt(0, x)
1
>>> chebyshevt(1, x)
x
>>> chebyshevt(2, x)
2*x**2 - 1
>>> chebyshevt(n, x)
chebyshevt(n, x)
>>> chebyshevt(n, -x)
(-1)**n*chebyshevt(n, x)
>>> chebyshevt(-n, x)
chebyshevt(n, x)
>>> chebyshevt(n, 0)
cos(pi*n/2)
>>> chebyshevt(n, -1)
(-1)**n
>>> diff(chebyshevt(n, x), x)
n*chebyshevu(n - 1, x)

工具书类

class sympy.functions.special.polynomials.chebyshevu(n, x)[源代码]#

第二类切比雪夫多项式。

解释

chebyshevu(n, x) gives the \(n\)th Chebyshev polynomial of the second kind in x, \(U_n(x)\).

The Chebyshev polynomials of the second kind are orthogonal on \([-1, 1]\) with respect to the weight \(\sqrt{1-x^2}\).

实例

>>> from sympy import chebyshevu, diff
>>> from sympy.abc import n,x
>>> chebyshevu(0, x)
1
>>> chebyshevu(1, x)
2*x
>>> chebyshevu(2, x)
4*x**2 - 1
>>> chebyshevu(n, x)
chebyshevu(n, x)
>>> chebyshevu(n, -x)
(-1)**n*chebyshevu(n, x)
>>> chebyshevu(-n, x)
-chebyshevu(n - 2, x)
>>> chebyshevu(n, 0)
cos(pi*n/2)
>>> chebyshevu(n, 1)
n + 1
>>> diff(chebyshevu(n, x), x)
(-x*chebyshevu(n, x) + (n + 1)*chebyshevt(n + 1, x))/(x**2 - 1)

工具书类

class sympy.functions.special.polynomials.chebyshevt_root(n, k)[源代码]#

chebyshev_root(n, k) returns the \(k\)th root (indexed from zero) of the \(n\)th Chebyshev polynomial of the first kind; that is, if \(0 \le k < n\), chebyshevt(n, chebyshevt_root(n, k)) == 0.

实例

>>> from sympy import chebyshevt, chebyshevt_root
>>> chebyshevt_root(3, 2)
-sqrt(3)/2
>>> chebyshevt(3, chebyshevt_root(3, 2))
0
class sympy.functions.special.polynomials.chebyshevu_root(n, k)[源代码]#

chebyshevu_root(n, k) returns the \(k\)th root (indexed from zero) of the \(n\)th Chebyshev polynomial of the second kind; that is, if \(0 \le k < n\), chebyshevu(n, chebyshevu_root(n, k)) == 0.

实例

>>> from sympy import chebyshevu, chebyshevu_root
>>> chebyshevu_root(3, 2)
-sqrt(2)/2
>>> chebyshevu(3, chebyshevu_root(3, 2))
0

勒让德多项式#

class sympy.functions.special.polynomials.legendre(n, x)[源代码]#

legendre(n, x) gives the \(n\)th Legendre polynomial of \(x\), \(P_n(x)\)

解释

The Legendre polynomials are orthogonal on \([-1, 1]\) with respect to the constant weight 1. They satisfy \(P_n(1) = 1\) for all \(n\); further, \(P_n\) is odd for odd \(n\) and even for even \(n\).

实例

>>> from sympy import legendre, diff
>>> from sympy.abc import x, n
>>> legendre(0, x)
1
>>> legendre(1, x)
x
>>> legendre(2, x)
3*x**2/2 - 1/2
>>> legendre(n, x)
legendre(n, x)
>>> diff(legendre(n,x), x)
n*(x*legendre(n, x) - legendre(n - 1, x))/(x**2 - 1)

工具书类

class sympy.functions.special.polynomials.assoc_legendre(n, m, x)[源代码]#

assoc_legendre(n, m, x) gives \(P_n^m(x)\), where \(n\) and \(m\) are the degree and order or an expression which is related to the nth order Legendre polynomial, \(P_n(x)\) in the following manner:

\[P^m(x)=(-1)^m(1-x^2)^{\frac{m}{2}}\]

解释

Associated Legendre polynomials are orthogonal on \([-1, 1]\) with:

  • weight \(= 1\) for the same \(m\) and different \(n\).

  • weight \(= \frac{1}{1-x^2}\) for the same \(n\) and different \(m\).

实例

>>> from sympy import assoc_legendre
>>> from sympy.abc import x, m, n
>>> assoc_legendre(0,0, x)
1
>>> assoc_legendre(1,0, x)
x
>>> assoc_legendre(1,1, x)
-sqrt(1 - x**2)
>>> assoc_legendre(n,m,x)
assoc_legendre(n, m, x)

工具书类

赫米特多项式#

class sympy.functions.special.polynomials.hermite(n, x)[源代码]#

hermite(n, x) gives the \(n\)th Hermite polynomial in \(x\), \(H_n(x)\).

解释

Hermite多项式在\((-\infty,\infty)\)上与权重\(\exp\left(-x^2\right)\)正交。

实例

>>> from sympy import hermite, diff
>>> from sympy.abc import x, n
>>> hermite(0, x)
1
>>> hermite(1, x)
2*x
>>> hermite(2, x)
4*x**2 - 2
>>> hermite(n, x)
hermite(n, x)
>>> diff(hermite(n,x), x)
2*n*hermite(n - 1, x)
>>> hermite(n, -x)
(-1)**n*hermite(n, x)

工具书类

class sympy.functions.special.polynomials.hermite_prob(n, x)[源代码]#

hermite_prob(n, x) gives the \(n\)th probabilist's Hermite polynomial in \(x\), \(He_n(x)\).

解释

The probabilist's Hermite polynomials are orthogonal on \((-\infty, \infty)\) with respect to the weight \(\exp\left(-\frac{x^2}{2}\right)\). They are monic polynomials, related to the plain Hermite polynomials (hermite) by

\[He_n(x) = 2^{-n/2} H_n(x/\sqrt{2})\]

实例

>>> from sympy import hermite_prob, diff, I
>>> from sympy.abc import x, n
>>> hermite_prob(1, x)
x
>>> hermite_prob(5, x)
x**5 - 10*x**3 + 15*x
>>> diff(hermite_prob(n,x), x)
n*hermite_prob(n - 1, x)
>>> hermite_prob(n, -x)
(-1)**n*hermite_prob(n, x)

The sum of absolute values of coefficients of \(He_n(x)\) is the number of matchings in the complete graph \(K_n\) or telephone number, A000085 in the OEIS:

>>> [hermite_prob(n,I) / I**n for n in range(11)]
[1, 1, 2, 4, 10, 26, 76, 232, 764, 2620, 9496]

工具书类

拉盖尔多项式#

class sympy.functions.special.polynomials.laguerre(n, x)[源代码]#

Returns the \(n\)th Laguerre polynomial in \(x\), \(L_n(x)\).

参数:

n :内景

Degree of Laguerre polynomial. Must be \(n \ge 0\).

实例

>>> from sympy import laguerre, diff
>>> from sympy.abc import x, n
>>> laguerre(0, x)
1
>>> laguerre(1, x)
1 - x
>>> laguerre(2, x)
x**2/2 - 2*x + 1
>>> laguerre(3, x)
-x**3/6 + 3*x**2/2 - 3*x + 1
>>> laguerre(n, x)
laguerre(n, x)
>>> diff(laguerre(n, x), x)
-assoc_laguerre(n - 1, 1, x)

工具书类

class sympy.functions.special.polynomials.assoc_laguerre(n, alpha, x)[源代码]#

Returns the \(n\)th generalized Laguerre polynomial in \(x\), \(L_n(x)\).

参数:

n :内景

Degree of Laguerre polynomial. Must be \(n \ge 0\).

阿尔法 :表达式

任意表达。为 alpha=0 将生成正则拉盖尔多项式。

实例

>>> from sympy import assoc_laguerre, diff
>>> from sympy.abc import x, n, a
>>> assoc_laguerre(0, a, x)
1
>>> assoc_laguerre(1, a, x)
a - x + 1
>>> assoc_laguerre(2, a, x)
a**2/2 + 3*a/2 + x**2/2 + x*(-a - 2) + 1
>>> assoc_laguerre(3, a, x)
a**3/6 + a**2 + 11*a/6 - x**3/6 + x**2*(a/2 + 3/2) +
    x*(-a**2/2 - 5*a/2 - 3) + 1
>>> assoc_laguerre(n, a, 0)
binomial(a + n, a)
>>> assoc_laguerre(n, a, x)
assoc_laguerre(n, a, x)
>>> assoc_laguerre(n, 0, x)
laguerre(n, x)
>>> diff(assoc_laguerre(n, a, x), x)
-assoc_laguerre(n - 1, a + 1, x)
>>> diff(assoc_laguerre(n, a, x), a)
Sum(assoc_laguerre(_k, a, x)/(-a + n), (_k, 0, n - 1))

工具书类

球谐函数#

class sympy.functions.special.spherical_harmonics.Ynm(n, m, theta, phi)[源代码]#

球谐函数定义为

\[Y\n^m(\theta,\varphi):=\sqrt{\frac{(2n+1)(n-m)!}{4\pi(n+m)!}}\]

解释

Ynm() 给出了\(\theta\)\(\varphi\)\(Y\u n^m(\theta,\varphi)\)中阶为\(n\)\(m\)的球谐函数。这四个参数如下:\(n\geq 0\)一个整数,\(m\)一个整数,这样\(-n\leq m\leq n\)可以保存。这两个角度是实值的\(\theta\in [0, \pi] \)\(\varphi\英寸 [0, 2\pi] \).

实例

>>> from sympy import Ynm, Symbol, simplify
>>> from sympy.abc import n,m
>>> theta = Symbol("theta")
>>> phi = Symbol("phi")
>>> Ynm(n, m, theta, phi)
Ynm(n, m, theta, phi)

已知几种对称性,顺序如下:

>>> Ynm(n, -m, theta, phi)
(-1)**m*exp(-2*I*m*phi)*Ynm(n, m, theta, phi)

以及角度:

>>> Ynm(n, m, -theta, phi)
Ynm(n, m, theta, phi)
>>> Ynm(n, m, theta, -phi)
exp(-2*I*m*phi)*Ynm(n, m, theta, phi)

对于特定整数\(n\)\(m\),我们可以将谐波计算为更有用的表达式:

>>> simplify(Ynm(0, 0, theta, phi).expand(func=True))
1/(2*sqrt(pi))
>>> simplify(Ynm(1, -1, theta, phi).expand(func=True))
sqrt(6)*exp(-I*phi)*sin(theta)/(4*sqrt(pi))
>>> simplify(Ynm(1, 0, theta, phi).expand(func=True))
sqrt(3)*cos(theta)/(2*sqrt(pi))
>>> simplify(Ynm(1, 1, theta, phi).expand(func=True))
-sqrt(6)*exp(I*phi)*sin(theta)/(4*sqrt(pi))
>>> simplify(Ynm(2, -2, theta, phi).expand(func=True))
sqrt(30)*exp(-2*I*phi)*sin(theta)**2/(8*sqrt(pi))
>>> simplify(Ynm(2, -1, theta, phi).expand(func=True))
sqrt(30)*exp(-I*phi)*sin(2*theta)/(8*sqrt(pi))
>>> simplify(Ynm(2, 0, theta, phi).expand(func=True))
sqrt(5)*(3*cos(theta)**2 - 1)/(4*sqrt(pi))
>>> simplify(Ynm(2, 1, theta, phi).expand(func=True))
-sqrt(30)*exp(I*phi)*sin(2*theta)/(8*sqrt(pi))
>>> simplify(Ynm(2, 2, theta, phi).expand(func=True))
sqrt(30)*exp(2*I*phi)*sin(theta)**2/(8*sqrt(pi))

我们可以从两个角度区分函数:

>>> from sympy import Ynm, Symbol, diff
>>> from sympy.abc import n,m
>>> theta = Symbol("theta")
>>> phi = Symbol("phi")
>>> diff(Ynm(n, m, theta, phi), theta)
m*cot(theta)*Ynm(n, m, theta, phi) + sqrt((-m + n)*(m + n + 1))*exp(-I*phi)*Ynm(n, m + 1, theta, phi)
>>> diff(Ynm(n, m, theta, phi), phi)
I*m*Ynm(n, m, theta, phi)

此外,我们可以计算复共轭:

>>> from sympy import Ynm, Symbol, conjugate
>>> from sympy.abc import n,m
>>> theta = Symbol("theta")
>>> phi = Symbol("phi")
>>> conjugate(Ynm(n, m, theta, phi))
(-1)**(2*m)*exp(-2*I*m*phi)*Ynm(n, m, theta, phi)

为了获得球坐标中的已知表达式,我们使用完全展开:

>>> from sympy import Ynm, Symbol, expand_func
>>> from sympy.abc import n,m
>>> theta = Symbol("theta")
>>> phi = Symbol("phi")
>>> expand_func(Ynm(n, m, theta, phi))
sqrt((2*n + 1)*factorial(-m + n)/factorial(m + n))*exp(I*m*phi)*assoc_legendre(n, m, cos(theta))/(2*sqrt(pi))

参见

Ynm_c, Znm

工具书类

sympy.functions.special.spherical_harmonics.Ynm_c(n, m, theta, phi)[源代码]#

共轭球谐函数定义为

\[\上横线{Y\u n^m(\theta,\varphi)}:=(-1)^m Y\u n^{-m}(\theta,\varphi)。\]

实例

>>> from sympy import Ynm_c, Symbol, simplify
>>> from sympy.abc import n,m
>>> theta = Symbol("theta")
>>> phi = Symbol("phi")
>>> Ynm_c(n, m, theta, phi)
(-1)**(2*m)*exp(-2*I*m*phi)*Ynm(n, m, theta, phi)
>>> Ynm_c(n, m, -theta, phi)
(-1)**(2*m)*exp(-2*I*m*phi)*Ynm(n, m, theta, phi)

对于特定整数\(n\)\(m\),我们可以将谐波计算为更有用的表达式:

>>> simplify(Ynm_c(0, 0, theta, phi).expand(func=True))
1/(2*sqrt(pi))
>>> simplify(Ynm_c(1, -1, theta, phi).expand(func=True))
sqrt(6)*exp(I*(-phi + 2*conjugate(phi)))*sin(theta)/(4*sqrt(pi))

参见

Ynm, Znm

工具书类

class sympy.functions.special.spherical_harmonics.Znm(n, m, theta, phi)[源代码]#

实球谐函数定义为

\[Z\n^m(\theta,\varphi):=\]

以简化形式给出

\[Z\n^m(\theta,\varphi)=\]

实例

>>> from sympy import Znm, Symbol, simplify
>>> from sympy.abc import n, m
>>> theta = Symbol("theta")
>>> phi = Symbol("phi")
>>> Znm(n, m, theta, phi)
Znm(n, m, theta, phi)

对于特定整数n和m,我们可以将谐波计算为更有用的表达式:

>>> simplify(Znm(0, 0, theta, phi).expand(func=True))
1/(2*sqrt(pi))
>>> simplify(Znm(1, 1, theta, phi).expand(func=True))
-sqrt(3)*sin(theta)*cos(phi)/(2*sqrt(pi))
>>> simplify(Znm(2, 1, theta, phi).expand(func=True))
-sqrt(15)*sin(2*theta)*cos(phi)/(4*sqrt(pi))

参见

Ynm, Ynm_c

工具书类

张量函数#

sympy.functions.special.tensor_functions.Eijk(*args, **kwargs)[源代码]#

代表Levi Civita符号。

这是与的兼容性包装 LeviCivita() .

参见

LeviCivita

sympy.functions.special.tensor_functions.eval_levicivita(*args)[源代码]#

评估Levi Civita符号。

class sympy.functions.special.tensor_functions.LeviCivita(*args)[源代码]#

代表Levi Civita符号。

解释

对于偶数排列的索引,它返回1;对于奇数排列,它返回1;对于其他所有的索引(重复索引),它返回0。

因此它代表一个交替的伪张量。

实例

>>> from sympy import LeviCivita
>>> from sympy.abc import i, j, k
>>> LeviCivita(1, 2, 3)
1
>>> LeviCivita(1, 3, 2)
-1
>>> LeviCivita(1, 2, 2)
0
>>> LeviCivita(i, j, k)
LeviCivita(i, j, k)
>>> LeviCivita(i, j, i)
0

参见

Eijk

class sympy.functions.special.tensor_functions.KroneckerDelta(i, j, delta_range=None)[源代码]#

离散的,或Kronecker,delta函数。

参数:

i :数字,符号

delta函数的第一个索引。

j :数字,符号

delta函数的第二个索引。

解释

接受两个整数\(i\)\(j\)的函数。如果\(i\)\(j\)不相等,则返回\(0\),如果\(i\)\(j\)相等,则返回\(1\)

实例

整数索引示例:

>>> from sympy import KroneckerDelta
>>> KroneckerDelta(1, 2)
0
>>> KroneckerDelta(3, 3)
1

符号索引:

>>> from sympy.abc import i, j, k
>>> KroneckerDelta(i, j)
KroneckerDelta(i, j)
>>> KroneckerDelta(i, i)
1
>>> KroneckerDelta(i, i + 1)
0
>>> KroneckerDelta(i, i + 1 + k)
KroneckerDelta(i, i + k + 1)

参见

eval, DiracDelta

工具书类

classmethod eval(i, j, delta_range=None)[源代码]#

计算离散增量函数。

实例

>>> from sympy import KroneckerDelta
>>> from sympy.abc import i, j, k
>>> KroneckerDelta(i, j)
KroneckerDelta(i, j)
>>> KroneckerDelta(i, i)
1
>>> KroneckerDelta(i, i + 1)
0
>>> KroneckerDelta(i, i + 1 + k)
KroneckerDelta(i, i + k + 1)

#间接试验

property indices_contain_equal_information#

如果指数高于或低于费米,则返回True。

实例

>>> from sympy import KroneckerDelta, Symbol
>>> a = Symbol('a', above_fermi=True)
>>> i = Symbol('i', below_fermi=True)
>>> p = Symbol('p')
>>> q = Symbol('q')
>>> KroneckerDelta(p, q).indices_contain_equal_information
True
>>> KroneckerDelta(p, q+1).indices_contain_equal_information
True
>>> KroneckerDelta(i, p).indices_contain_equal_information
False
property is_above_fermi#

如果δ在费米之上不为零,则为真。

实例

>>> from sympy import KroneckerDelta, Symbol
>>> a = Symbol('a', above_fermi=True)
>>> i = Symbol('i', below_fermi=True)
>>> p = Symbol('p')
>>> q = Symbol('q')
>>> KroneckerDelta(p, a).is_above_fermi
True
>>> KroneckerDelta(p, i).is_above_fermi
False
>>> KroneckerDelta(p, q).is_above_fermi
True
property is_below_fermi#

如果Delta在费米以下不为零,则为真。

实例

>>> from sympy import KroneckerDelta, Symbol
>>> a = Symbol('a', above_fermi=True)
>>> i = Symbol('i', below_fermi=True)
>>> p = Symbol('p')
>>> q = Symbol('q')
>>> KroneckerDelta(p, a).is_below_fermi
False
>>> KroneckerDelta(p, i).is_below_fermi
True
>>> KroneckerDelta(p, q).is_below_fermi
True
property is_only_above_fermi#

如果Delta限制在费米以上,则为真。

实例

>>> from sympy import KroneckerDelta, Symbol
>>> a = Symbol('a', above_fermi=True)
>>> i = Symbol('i', below_fermi=True)
>>> p = Symbol('p')
>>> q = Symbol('q')
>>> KroneckerDelta(p, a).is_only_above_fermi
True
>>> KroneckerDelta(p, q).is_only_above_fermi
False
>>> KroneckerDelta(p, i).is_only_above_fermi
False
property is_only_below_fermi#

如果Delta限制在费米以下,则为真。

实例

>>> from sympy import KroneckerDelta, Symbol
>>> a = Symbol('a', above_fermi=True)
>>> i = Symbol('i', below_fermi=True)
>>> p = Symbol('p')
>>> q = Symbol('q')
>>> KroneckerDelta(p, i).is_only_below_fermi
True
>>> KroneckerDelta(p, q).is_only_below_fermi
False
>>> KroneckerDelta(p, a).is_only_below_fermi
False
property killable_index#

返回在最终表达式中首选替换的索引。

解释

替代的指数是费米能级信息较少的指数。如果索引包含相同的信息,“a”优先于“b”。

实例

>>> from sympy import KroneckerDelta, Symbol
>>> a = Symbol('a', above_fermi=True)
>>> i = Symbol('i', below_fermi=True)
>>> j = Symbol('j', below_fermi=True)
>>> p = Symbol('p')
>>> KroneckerDelta(p, i).killable_index
p
>>> KroneckerDelta(p, a).killable_index
p
>>> KroneckerDelta(i, j).killable_index
j
property preferred_index#

返回首选保留在最终表达式中的索引。

解释

首选指数是包含更多费米能级信息的指数。如果索引包含相同的信息,“a”优先于“b”。

实例

>>> from sympy import KroneckerDelta, Symbol
>>> a = Symbol('a', above_fermi=True)
>>> i = Symbol('i', below_fermi=True)
>>> j = Symbol('j', below_fermi=True)
>>> p = Symbol('p')
>>> KroneckerDelta(p, i).preferred_index
i
>>> KroneckerDelta(p, a).preferred_index
a
>>> KroneckerDelta(i, j).preferred_index
i