17.6 特殊函数

 
a = airy (z)
a = airy (k, z)
a = airy (k, z, scale)
[a, ierr] = airy (…)

计算第一类与第二类艾里函数及其导数。

 K   函数          缩放因子(若 scale 为真)
---  --------      ---------------------------------------
 0   Ai (Z)        exp ((2/3) * Z * sqrt (Z))
 1   dAi(Z)/dZ     exp ((2/3) * Z * sqrt (Z))
 2   Bi (Z)        exp (-abs (real ((2/3) * Z * sqrt (Z))))
 3   dBi(Z)/dZ     exp (-abs (real ((2/3) * Z * sqrt (Z))))

函数调用 airy (z) 等价于 airy (0, z)

可选的第三个输入参数 scale 决定是否应用上述缩放。默认值为 false(不缩放)。

结果 a 的大小与 z 相同。

可选的输出参数 ierr 包含以下状态信息,其大小与结果相同。

  1. 正常返回。
  2. 输入错误,返回 NaN
  3. 溢出,返回 Inf
  4. 参数约化导致有效位数损失,精度不足机器精度的一半。
  5. 参数约化导致有效位数损失,输出可能不准确。
  6. 错误——未进行计算,算法终止条件未满足,返回 NaN
 
J = besselj (alpha, x)
J = besselj (alpha, x, opt)
[J, ierr] = besselj (…)

计算第一类贝塞尔函数。

贝塞尔函数的阶数 alpha 必须为实数。求值点 x 可以是复数。

如果可选参数 opt 为 1 或 true,则结果 J 乘以 exp (-abs (imag (x)))

如果 alpha 是标量,则结果的大小与 x 相同。如果 x 是标量,则结果的大小与 alpha 相同。如果 alpha 是行向量而 x 是列向量,则结果是一个矩阵,其行数为 length (x),列数为 length (alpha)。否则,alphax 必须符合维度要求,结果大小与之相同。

如果指定了输出参数,ierr 包含以下状态信息,其大小与结果相同。

  1. 正常返回。
  2. 输入错误,返回 NaN
  3. 溢出,返回 Inf
  4. 参数约化导致有效位数损失,精度不足机器精度的一半。
  5. 参数约化导致有效位数损失,输出可能不准确。
  6. 错误——未进行计算,算法终止条件未满足,返回 NaN

另请参阅:besselybesselibesselkbesselh

 
Y = bessely (alpha, x)
Y = bessely (alpha, x, opt)
[Y, ierr] = bessely (…)

计算第二类贝塞尔函数。

贝塞尔函数的阶数 alpha 必须为实数。求值点 x 可以是复数。

如果可选参数 opt 为 1 或 true,则结果 Y 乘以 exp (-abs (imag (x)))

如果 alpha 是标量,则结果的大小与 x 相同。如果 x 是标量,则结果的大小与 alpha 相同。如果 alpha 是行向量而 x 是列向量,则结果是一个矩阵,其行数为 length (x),列数为 length (alpha)。否则,alphax 必须符合维度要求,结果大小与之相同。

如果指定了输出参数,ierr 包含以下状态信息,其大小与结果相同。

  1. 正常返回。
  2. 输入错误,返回 NaN
  3. 溢出,返回 Inf
  4. 参数约化导致有效位数损失,精度不足机器精度的一半。
  5. 参数约化导致完全失去有效位数,返回 NaN
  6. 错误——未进行计算,算法终止条件未满足,返回 NaN

另请参阅:besseljbesselibesselkbesselh

 
I = besseli (alpha, x)
I = besseli (alpha, x, opt)
[I, ierr] = besseli (…)

计算第一类修正贝塞尔函数。

贝塞尔函数的阶数 alpha 必须为实数。求值点 x 可以是复数。

如果可选参数 opt 为 1 或 true,则结果 I 乘以 exp (-abs (real (x)))

如果 alpha 是标量,则结果的大小与 x 相同。如果 x 是标量,则结果的大小与 alpha 相同。如果 alpha 是行向量而 x 是列向量,则结果是一个矩阵,其行数为 length (x),列数为 length (alpha)。否则,alphax 必须符合维度要求,结果大小与之相同。

如果指定了输出参数,ierr 包含以下状态信息,其大小与结果相同。

  1. 正常返回。
  2. 输入错误,返回 NaN
  3. 溢出,返回 Inf
  4. 参数约化导致有效位数损失,精度不足机器精度的一半。
  5. 参数约化导致完全失去有效位数,返回 NaN
  6. 错误——未进行计算,算法终止条件未满足,返回 NaN

另请参阅:besselkbesseljbesselybesselh

 
K = besselk (alpha, x)
K = besselk (alpha, x, opt)
[K, ierr] = besselk (…)

计算第二类修正贝塞尔函数。

贝塞尔函数的阶数 alpha 必须为实数。求值点 x 可以是复数。

如果可选参数 opt 为 1 或 true,则结果 K 乘以 exp (x)

如果 alpha 是标量,则结果的大小与 x 相同。如果 x 是标量,则结果的大小与 alpha 相同。如果 alpha 是行向量而 x 是列向量,则结果是一个矩阵,其行数为 length (x),列数为 length (alpha)。否则,alphax 必须符合维度要求,结果大小与之相同。

如果指定了输出参数,ierr 包含以下状态信息,其大小与结果相同。

  1. 正常返回。
  2. 输入错误,返回 NaN
  3. 溢出,返回 Inf
  4. 参数约化导致有效位数损失,精度不足机器精度的一半。
  5. 参数约化导致完全失去有效位数,返回 NaN
  6. 错误——未进行计算,算法终止条件未满足,返回 NaN

另请参阅:besselibesseljbesselybesselh

 
H = besselh (alpha, x)
H = besselh (alpha, k, x)
H = besselh (alpha, k, x, opt)
[H, ierr] = besselh (…)

计算第三类贝塞尔函数(汉克尔函数)。

贝塞尔函数的阶数 alpha 必须为实数。汉克尔函数的类型由 k 指定,可以是第一类(k = 1)或第二类(k = 2)。默认值为第一类汉克尔函数。求值点 x 可以是复数。

如果可选参数 opt 为 1 或 true,则当 k = 1 时结果乘以 exp (-I*x),当 k = 2 时乘以 exp (I*x)

如果 alpha 是标量,则结果的大小与 x 相同。如果 x 是标量,则结果的大小与 alpha 相同。如果 alpha 是行向量而 x 是列向量,则结果是一个矩阵,其行数为 length (x),列数为 length (alpha)。否则,alphax 必须符合维度要求,结果大小与之相同。

如果指定了输出参数,ierr 包含以下状态信息,其大小与结果相同。

  1. 正常返回。
  2. 输入错误,返回 NaN
  3. 溢出,返回 Inf
  4. 参数约化导致有效位数损失,精度不足机器精度的一半。
  5. 参数约化导致完全失去有效位数,返回 NaN
  6. 错误——未进行计算,算法终止条件未满足,返回 NaN

另请参阅:besseljbesselybesselibesselk

 
y = beta (a, b)

计算实数输入 ab 的 Beta 函数。

Beta 函数的定义为:

beta (a, b) = gamma (a) * gamma (b) / gamma (a + b).

Beta 函数的值可能变得非常大,因此使用输出的对数通常比直接使用函数本身更有用。请参阅 betaln,了解如何高效计算 Beta 函数的对数。

另请参阅:betalnbetaincbetaincinv

 
I = betainc (x, a, b)
I = betainc (x, a, b, tail)

计算不完全 Beta 函数。

其定义为:

                          x
                          /
                  1       |
I_x (a, b) = ----------  | t^(a-1) (1-t)^(b-1) dt
              beta (a,b)  |
                          /
                         0

其中实数 x 在区间 [0,1] 内。输入参数 ab 必须为实数且严格为正(> 0)。如果其中一个输入不是标量,则其他输入必须为标量或具有兼容的维度。

默认情况下,tail"lower",计算从 0 到 x 积分的不完全 Beta 函数。如果 tail"upper",则计算从 x 到 1 积分的互补函数。这两种选择的关系为:

betainc (x, a, b, "upper") = 1 - betainc (x, a, b, "lower")。

betainc 使用比简单减法更精密的算法,以确保在 "lower" 值很小时也能获得数值精确的结果。

参考文献:A. Cuyt, V. Brevik Petersen, B. Verdonk, H. Waadeland, W.B. Jones, Handbook of Continued Fractions for Special Functions, 第 18 章。

另请参阅:betabetaincinvbetaln

 
x = betaincinv (y, a, b)
x = betaincinv (y, a, b, "lower")
x = betaincinv (y, a, b, "upper")

计算归一化不完全 Beta 函数的反函数。

归一化不完全 Beta 函数的定义为:

                          x
                          /
                  1       |
I_x (a, b) = ----------  | t^(a-1) (1-t)^(b-1) dt
              beta (a,b)  |
                          /
                         0

如果两个输入是标量,则对另一个输入的每个元素返回 betaincinv (y, a, b) 的结果。

如果两个或更多输入不是标量,则它们的大小必须一致,betaincinv 将逐元素应用。

变量 y 必须在区间 [0,1] 内,而 ab 必须为实数且严格为正。

默认情况下,tail"lower",计算从 0 到 x 积分的不完全 Beta 函数的反函数。如果 tail"upper",则对从 x 到 1 积分的互补函数求逆。

该函数通过标准的牛顿法求解以下方程来计算:

y - betainc (x, a, b) = 0

另请参阅:betaincbetabetaln

 
lnb = betaln (a, b)

计算实数输入 ab 的 Beta 函数的自然对数。

betaln 定义为:

betaln (a, b) = log (beta (a, b))

其计算方式旨在减少下溢的发生。

Beta 函数的值可能变得非常大,因此使用输出的对数通常比直接使用函数本身更有用。

另请参阅:betabetaincbetaincinvgammaln

 
b = bincoeff (n, k)

返回 nk 的二项式系数。

二项式系数的定义为:

 /   \
 | n |    n (n-1) (n-2) ... (n-k+1)
 |   |  = -------------------------
 | k |               k!
 \   /

例如:

bincoeff (5, 2)
   ⇒  10

在大多数情况下,对于小的标量整数参数,nchoosek 函数更快。它还会在参数较大时警告精度损失。

另请参阅:nchoosek

 
k = commutation_matrix (m, n)

返回交换矩阵 K(m,n),它是唯一的 m*nm*n 矩阵,满足对所有 mn 矩阵 AK(m,n) * vec(A) = vec(A')

如果只给一个参数 m,则返回 K(m,m)

参见 Magnus 和 Neudecker, Matrix Differential Calculus with Applications in Statistics and Econometrics, 1988。

 
y = cosint (x)

计算余弦积分函数:

            +oo
            /
Ci (x) = - | (cos (t)) / t dt
            /
           x

其等价定义为:

                             x
                             /
                             |  cos (t) - 1
Ci (x) = gamma + log (x) +  |  -------------  dt
                             |        t
                             /
                            0

参考文献:

M. Abramowitz 和 I.A. Stegun, Handbook of Mathematical Functions, 1964。

另请参阅:sinintexpintcos

 
d = duplication_matrix (n)

返回复制矩阵 Dn,它是唯一的 N^2N*(N+1)/2 矩阵,满足对所有对称 NN 矩阵 ADn * vech (A) = vec (A)

参见 Magnus 和 Neudecker, Matrix Differential Calculus with Applications in Statistics and Econometrics, 1988。

 
v = dawson (z)

计算道森函数(缩放虚误差函数)。

道森函数的定义为:

(sqrt (pi) / 2) * exp (-z^2) * erfi (z)

另请参阅:erfcerferfcxerfierfinverfcinv

 
[sn, cn, dn, err] = ellipj (u, m)
[sn, cn, dn, err] = ellipj (u, m, tol)

计算复自变量 u 和实参数 m 的雅可比椭圆函数 sncndn

如果 m 是标量,则结果的大小与 u 相同。如果 u 是标量,则结果的大小与 m 相同。如果 u 是列向量而 m 是行向量,则结果是一个矩阵,其行数为 length (u),列数为 length (m)。否则,um 的大小必须一致,结果大小与输入相同。

u 的值可以是复数。m 的值必须满足 0 ≤ m ≤ 1。

可选的输入参数 tol 当前被忽略(MATLAB 使用它来实现更快但精度较低的近似)。

如果指定了输出参数,err 包含以下状态信息,其大小与结果相同。

  1. 正常返回。
  2. 错误——未进行计算,算法终止条件未满足,返回 NaN

参考文献:Milton Abramowitz 和 Irene A Stegun, Handbook of Mathematical Functions, 第 16 章(第 16.4、16.13 和 16.15 节), Dover, 1965。

另请参阅:ellipke

 
k = ellipke (m)
k = ellipke (m, tol)
[k, e] = ellipke (…)

计算第一类 K(m) 和第二类 E(m) 的完全椭圆积分。

m 必须是标量或实数数组,满足 -Inf ≤ m ≤ 1。

可选的输入参数 tol 控制算法的停止容差,默认为 eps (class (m))。可以增大容差以进行更快但精度较低的近似计算。

当只使用一个输出参数调用时,只返回第一类椭圆积分。

数学说明:

第一类椭圆积分的定义为:

         1
          /               dt
K (m) = | ------------------------------
          / sqrt ((1 - t^2)*(1 - m*t^2))
         0

第二类椭圆积分的定义为:

         1
          /  sqrt (1 - m*t^2)
E (m) = |  ------------------ dt
          /  sqrt (1 - t^2)
         0

参考文献:Milton Abramowitz 和 Irene A. Stegun, Handbook of Mathematical Functions, 第 17 章, Dover, 1965。

另请参阅:ellipj

 
v = erf (z)

计算误差函数。

误差函数的定义为:

                        z
               2        /
erf (z) = --------- *  | e^(-t^2) dt
           sqrt (pi)    /
                     t=0

另请参阅:erfcerfcxerfidawsonerfinverfcinv

 
v = erfc (z)

计算互补误差函数。

互补误差函数的定义为 1 - erf (z)

另请参阅:erfcinverfcxerfidawsonerferfinv

 
v = erfcx (z)

计算缩放互补误差函数。

缩放互补误差函数的定义为:

exp (z^2) * erfc (z)

另请参阅:erfcerferfidawsonerfinverfcinv

 
v = erfi (z)

计算虚误差函数。

虚误差函数的定义为:

-i * erf (i*z)

另请参阅:erfcerferfcxdawsonerfinverfcinv

 
y = erfinv (x)

计算反误差函数。

反误差函数的定义满足:

erf (y) == x

另请参阅:erferfcerfcxerfidawsonerfcinv

 
y = erfcinv (x)

计算反互补误差函数。

反互补误差函数的定义满足:

erfc (y) == x

另请参阅:erfcerferfcxerfidawsonerfinv

 
y = expint (x)

计算指数积分。

指数积分的定义为:

           +oo
           /
           | exp (-t)
E_1 (x) = | -------- dt
           |    t
           /
          x

注意:为保持兼容性,此函数使用 MATLAB 对指数积分的定义。大多数其他资料将此特定值称为 E_1 (x),而将指数积分定义为:

            +oo
            /
            | exp (-t)
Ei (x) = - | -------- dt
            |    t
            /
          -x

对于 x 的正实数值,这两种定义的关系为 E_1 (-x) = -Ei (x) - i*pi

参考文献:

M. Abramowitz 和 I.A. Stegun, Handbook of Mathematical Functions, 1964。

N. Bleistein 和 R.A. Handelsman, Asymptotic expansions of integrals, 1986。

另请参阅:cosintsinintexp

 
v = gamma (z)

计算 Gamma 函数。

Gamma 函数的定义为:

             infinity
             /
gamma (z) = | t^(z-1) exp (-t) dt.
             /
          t=0

编程说明:即使对于较小的输入值,Gamma 函数的值也可能变得非常大。在许多情况下,使用 Gamma 函数的自然对数(gammaln)进行计算可能更可取,以最大程度减少精度损失。最终结果即为 exp (result_using_gammaln)

另请参阅:gammaincgammalnfactorial

 
y = gammainc (x, a)
y = gammainc (x, a, tail)

计算归一化不完全 Gamma 函数。

其定义为:

                                x
                        1       /
gammainc (x, a) = ---------    | exp (-t) t^(a-1) dt
                   gamma (a)    /
                             t=0

x 趋近于无穷大时,其极限值为 1。标准记号是 P(a,x),参见 Abramowitz 和 Stegun (6.5.1)。

如果 a 是标量,则对 x 的每个元素返回 gammainc (x, a),反之亦然。

如果 xa 都不是标量,则 xa 的大小必须一致,gammainc 将逐元素应用。a 的元素必须为非负。

默认情况下,tail"lower",计算从 0 到 x 积分的不完全 Gamma 函数。如果 tail"upper",则计算从 x 到无穷大积分的互补函数。

如果 tail"scaledlower",则下不完全 Gamma 函数乘以 gamma(a+1)*exp(x)/(x^a)。如果 tail"scaledupper",则上不完全 Gamma 函数乘以相同的量。

参考文献:

M. Abramowitz 和 I.A. Stegun, Handbook of mathematical functions, Dover publications, Inc., 1972。

W. Gautschi, "A computational procedure for incomplete gamma functions", ACM Trans. Math Software, 第 5 卷, 第 4 期, 第 466–481 页, 2012。

W. H. Press, S. A. Teukolsky, W. T. Vetterling, 和 B. P. Flannery, Numerical Recipes in Fortran 77, 第 1 卷, 第 6.2 章, 1992。

另请参阅:gammagammaincinvgammaln

 
x = gammaincinv (y, a)
x = gammaincinv (y, a, tail)

计算归一化不完全 Gamma 函数的反函数。

归一化不完全 Gamma 函数的定义为:

                                x
                        1       /
gammainc (x, a) = ---------    | exp (-t) t^(a-1) dt
                   gamma (a)    /
                             t=0

并且对于每个非负 x 值,有 gammaincinv (gammainc (x, a), a) = x。如果 a 是标量,则对 y 的每个元素返回 gammaincinv (y, a),反之亦然。

如果 ya 都不是标量,则 ya 的大小必须一致,gammaincinv 将逐元素应用。变量 y 必须在区间 [0,1] 内,而 a 必须为实数且为正。

默认情况下,tail"lower",计算从 0 到 x 积分的不完全 Gamma 函数的反函数。如果 tail"upper",则对从 x 到无穷大积分的互补函数求逆。

该函数通过牛顿法求解以下方程来计算:

y - gammainc (x, a) = 0

参考文献:A. Gil, J. Segura, 和 N. M. Temme, "Efficient and accurate algorithms for the computation and inversion of the incomplete gamma function ratios", SIAM J. Sci. Computing, 第 34 卷, 第 A2965–A2981 页, 2012。

另请参阅:gammaincgammagammaln

 
p = legendre (n, x)
p = legendre (n, x, normalization)

计算 x 处的连带勒让德函数(勒让德函数)。

自变量 n 是标量整数,指定勒让德函数的次数。x 可以是标量、向量或矩阵,且 x 必须位于 [-1, 1] 区间内。

结果 legendre (n, x) 的大小为 n+1 乘 size (x)。返回值的每一行对应 m 的不同值,其中 m 从 0 到 n。值 legendre (0, x) 是常数 1。

如果提供了可选的第三个参数 normalization,则其必须是以下字符串之一:

"unnorm"

无归一化。连带勒让德函数是 n 次和 m 阶的经典勒让德函数。归一化使得 legendre (n, 1) 为负的 delta 函数(当 m 为奇数时)且不等于 1。这对应 Handbook of Mathematical Functions (公式 8.6.1) 中的定义。

"sch"

施密特半归一化。连带勒让德函数与 Handbook of Mathematical Functions (公式 8.11.1) 中定义的相关勒让德函数相关,通过以下方式:

对于 n 次和 m 阶的勒让德函数

NP(x) = P(x) * (-1)^m * (2 * (n-m)! / (n+m)!)^0.5
"norm"

完全归一化。连带勒让德函数与 Handbook of Mathematical Functions (公式 8.11.2) 中定义的相关勒让德函数相关,通过以下方式:

对于 n 次和 m 阶的勒让德函数

NP(x) = P(x) * (-1)^m * [(n+0.5)*(n-m)!/(n+m)!]^0.5
 
y = gammaln (x)
y = lgamma (x)

返回 x 的 Gamma 函数的自然对数。

编程说明:lgammagammaln 的别名,在 Octave 中可以使用任一名称。

另请参阅:gammagammainc

 
y = psi (z)
y = psi (k, z)

计算 psi(多伽玛)函数。

多伽玛函数是 Gamma 函数对数的 k 阶导数。如果未指定,k 默认为零。值为零时计算 digamma 函数,值为 1 时计算 trigamma 函数,依此类推。

digamma 函数的定义为:

psi (z) = d (log (gamma (z))) / dx

当计算 digamma 函数(k 等于零)时,z 可以是任意实数或复数值。然而,对于多伽玛函数(k 大于 0),z 必须为实数且非负。

另请参阅:gammagammaincgammaln

 
y = sinint (x)

计算正弦积分函数:

           x
           /
Si (x) =  | sin (t) / t dt
           /
          0

参考文献:M. Abramowitz 和 I.A. Stegun, Handbook of Mathematical Functions, 1964。

另请参阅:cosintexpintsin


版权所有 © 2024-2026 Octave中文网

ICP备案/许可证号:黑ICP备2024030411号-2