超几何展开#
本页介绍如何 hyperexpand()
以及相关的代码工作。有关用法,请参阅symplify模块的文档。
超几何函数展开算法#
本节介绍用于扩展超几何函数的算法。大部分都是基于文件 [Roach1996] 和 [Roach1997].
回想一下,超几何函数(最初)定义为
结果是有一些微分算子可以改变 \(a_p\) 和 \(p_q\) 整数参数。如果已知一系列这样的运算符来转换索引集 \(a_r^0\) 和 \(b_s^0\) 进入之内 \(a_p\) 和 \(b_q\) ,那么我们就说这对了 \(a_p, b_q\) 可从 \(a_r^0, b_s^0\) . 因此,我们的总体策略如下:给定一组 \(a_p, b_q\) 试着找一个原点 \(a_r^0, b_s^0\) 我们知道一个表达式,然后将微分算子序列应用到已知表达式中,以找到我们感兴趣的超几何函数的表达式。
符号#
在下面,符号 \(a\) 将始终表示分子参数和符号 \(b\) 将始终表示分母参数。下标 \(p, q, r, s\) 表示该长度的向量,例如。 \(a_p\) 表示的向量 \(p\) 分子参数。下标 \(i\) 和 \(j\) 表示“运行索引”,因此它们通常应与“for all”一起使用 \(i\) ". 例如。 \(a_i < 4\) 为了所有 \(i\) . 大写下标 \(I\) 和 \(J\) 表示选定的、固定的索引。例如 \(a_I > 0\) 如果一个指数的不等式成立,则为真 \(I\) 我们目前感兴趣。
递增和递减指数#
假设 \(a_i \ne 0\) . 集合 \(A(a_i) = \frac{{z}}{{a_i}}\frac{{\mathrm{{d}}}}{{dz}}+1\) . 很容易证明这一点 \(A(a_i) {{}}_p F_q\left({{a_p \atop b_q}} \middle| z \right) = {{}}_p F_q\left({{a_p + e_i \atop b_q}} \middle| z \right)\) 在哪里 \(e_i\) 是第i个单位向量。类似于 \(b_j \ne 1\) 我们出发了 \(B(b_j) = \frac{{z}}{{b_j-1}} \frac{{\mathrm{{d}}}}{{dz}}+1\) 找到 \(B(b_j) {{}}_p F_q\left({{a_p \atop b_q}} \middle| z \right) = {{}}_p F_q\left({{a_p \atop b_q - e_i}} \middle| z \right)\) . 因此,只要不超过零,我们就可以随意增加指数的上限和下限。这个 \(A(a_i)\) 和 \(B(b_j)\) 被称为移位运算符。
很容易证明这一点 \(\frac{{\mathrm{{d}}}}{{dz}} {{}}_p F_q\left({{a_p \atop b_q}} \middle| z \right) = \frac{{a_1 \cdots a_p}}{{b_1 \cdots b_q}} {{}}_p F_q\left({{a_p + 1 \atop b_q + 1}} \middle| z \right)\) 在哪里 \(a_p + 1\) 是矢量 \(a_1 + 1, a_2 + 1, \ldots\) 同样地 \(b_q + 1\) . 将其与移位算子相结合,我们得到了超几何微分方程的一种形式: \(\left[ \frac{{\mathrm{{d}}}}{{dz}} \prod_{{j=1}}^q B(b_j) - \frac{{a_1 \cdots a_p}}{{(b_1-1) \cdots (b_q-1)}} \prod_{{i=1}}^p A(a_i) \right] {{}}_p F_q\left({{a_p \atop b_q}} \middle| z \right) = 0\) . 如果定义了所有的移位运算符,也就是说,如果没有 \(a_i = 0\) 而且没有 \(b_j = 1\) . 清除分母并乘以z,我们得出以下等式: \(\left[ z\frac{{\mathrm{{d}}}}{{dz}} \prod_{{j=1}}^q \left(z\frac{{\mathrm{{d}}}}{{dz}} + b_j-1 \right) - z \prod_{{i=1}}^p \left( z\frac{{\mathrm{{d}}}}{{\mathrm{{d}}z}} + a_i \right) \right] {{}}_p F_q\left({{a_p \atop b_q}} \middle| z\right) = 0\) . 即使我们的推导并没有显示出来,但是可以检查这个等式在 \({{}}_p F_q\) 定义。
注意,在适当的条件下 \(a_I, b_J\) ,每个操作员 \(A(a_i)\) , \(B(b_j)\) 和 \(z\frac{{\mathrm{{d}}}}{{\mathrm{{d}}z}}\) 可以用 \(A(a_I)\) 或 \(B(b_J)\) . 我们的下一个目标是写出超几何微分方程,如下所示: \([X A(a_I) - r] {{}}_p F_q\left({{a_p \atop b_q}} \middle| z\right) = 0\) ,对于某些操作员 \(X\) 还有一些常数 \(r\) 待定。如果 \(r \ne 0\) ,那么我们可以写为 \(\frac{{-1}}{{r}} X {{}}_p F_q\left({{a_p + e_I \atop b_q}} \middle| z\right) = {{}}_p F_q\left({{a_p \atop b_q}} \middle| z\right)\) ,等等 \(\frac{{-1}}{{r}}X\) 撤消 \(A(a_I)\) ,因此称为逆移位运算符。
现在 \(A(a_I)\) 如果存在 \(a_I \ne 0\) 然后 \(z\frac{{\mathrm{{d}}}}{{\mathrm{{d}}z}} = a_I A(a_I) - a_I\) . 同时观察所有操作员 \(A(a_i)\) , \(B(b_j)\) 和 \(z\frac{{\mathrm{{d}}}}{{\mathrm{{d}}z}}\) 通勤。我们有 \(\prod_{{i=1}}^p \left( z\frac{{\mathrm{{d}}}}{{\mathrm{{d}}z}} + a_i \right) = \left(\prod_{{i=1, i \ne I}}^p \left( z\frac{{\mathrm{{d}}}}{{\mathrm{{d}}z}} + a_i \right)\right) a_I A(a_I)\) ,这给了我们上半部分 \(X\) . 另一半没有这么好的表情。我们发现 \(z\frac{{\mathrm{{d}}}}{{dz}} \prod_{{j=1}}^q \left(z\frac{{\mathrm{{d}}}}{{dz}} + b_j-1 \right) = \left(a_I A(a_I) - a_I\right) \prod_{{j=1}}^q \left(a_I A(a_I) - a_I + b_j - 1\right)\) . 由于上半年没有常数项,我们推断 \(r = -a_I\prod_{{j=1}}^q(b_j - 1 -a_I)\) .
这告诉我们在什么条件下我们可以“不转移” \(A(a_I)\) ,即什么时候 \(a_I \ne 0\) 和 \(r \ne 0\) . 替代 \(a_I - 1\) 对于 \(a_I\) 然后告诉我们在什么条件下我们可以减少指数 \(a_I\) . 做类似的分析 \(B(a_J)\) ,我们得出以下规则:
索引 \(a_I\) 如果 \(a_I \ne 1\) 和 \(a_I \ne b_j\) 为了所有 \(b_j\) .
索引 \(b_J\) 如果 \(b_J \ne -1\) 和 \(b_J \ne a_i\) 为了所有 \(a_i\) .
结合移位算子存在的条件(如上所述),我们由此建立了博弈规则!
订单缩减#
注意,如果 \(a_I = b_J\) ,我们有 \({{}}_p F_q\left({{a_p \atop b_q}} \middle| z \right) = {{}}_{{p-1}} F_{{q-1}}\left({{a_p^* \atop b_q^*}} \middle| z \right)\) 在哪里 \(a_p^*\) 方法 \(a_p\) 具有 \(a_I\) 省略,类似于 \(b_q^*\) . 我们称之为订单缩减。
事实上,我们可以做得更好。如果 \(a_I - b_J \in \mathbb{{Z}}_{{>0}}\) ,那么很容易看出 \(\frac{{(a_I)_n}}{{(b_J)_n}}\) 实际上是一个多项式 \(n\) . 这也很容易看出 \((z\frac{{\mathrm{{d}}}}{{\mathrm{{d}}z}})^k z^n = n^k z^n\) . 结合这两种说法,我们发现:
如果 \(a_I - b_J \in \mathbb{{Z}}_{{>0}}\) ,则存在一个多项式 \(p(n) = p_0 + p_1 n + \cdots\) (学位) \(a_I - b_J\) 这样 \(\frac{{(a_I)_n}}{{(b_J)_n}} = p(n)\) 和 \({{}}_p F_q\left({{a_p \atop b_q}} \middle| z \right) = \left(p_0 + p_1 z\frac{{\mathrm{{d}}}}{{\mathrm{{d}}z}} + p_2 \left(z\frac{{\mathrm{{d}}}}{{\mathrm{{d}}z}}\right)^2 + \cdots \right) {{}}_{{p-1}} F_{{q-1}}\left({{a_p^* \atop b_q^*}} \middle| z \right)\) .
因此任何一组参数 \(a_p, b_q\) 可从一组参数访问 \(c_r, d_s\) 在哪里? \(c_i - d_j \in \mathbb{{Z}}\) 暗示 \(c_i < d_j\) . 这样一组参数 \(c_r, d_s\) 被称为合适的。我们的已知公式数据库应该只包含合适的来源。原因有二:首先,从合适的原点开始工作比较容易,其次,可以从一个低阶公式中推导出一个不合适原点的公式,我们应该把它放到数据库中。
在参数空间中移动#
我们还需要研究以下问题:假设 \(a_p, b_q\) 和 \(a_p^0, b_q^0\) 都是合适的,而且 \(a_i - a_i^0 \in \mathbb{{Z}}\) , \(b_j - b_j^0 \in \mathbb{{Z}}\) . 什么时候 \(a_p, b_q\) 可从 \(a_p^0, b_q^0\) ? 很明显,我们可以独立地处理与mod 1不一致的所有参数。所以假设 \(a_i\) 和 \(b_j\) 与…一致 \(r\) mod 1,全部 \(i\) 和 \(j\) . 同样的情况也会发生 \(a_i^0\) 和 \(b_j^0\) .
如果 \(r \ne 0\) ,然后是任何类似的 \(a_p, b_q\) 可从任何 \(a_p^0, b_q^0\) . 要看到这个注意,存在常量 \(c, c^0\) ,等于mod 1,这样 \(a_i < c < b_j\) 为了所有 \(i\) 和 \(j\) ,以及类似的 \(a_i^0 < c^0 < b_j^0\) .如果 \(n = c - c^0 > 0\) 然后我们先把所有 \(b_j^0\) \(n\) 时间上升,然后类似地向上移动 \(a_i^0\) \(n\) 时代。如果 \(n < 0\) 然后我们先把 \(a_i^0\) 然后调低 \(b_j^0\) . 这就归结为情况 \(c = c^0\) . 但显然我们现在可以在 \(a_i^0\) 只要我们把他们控制在 \(c\) ,对于 \(b_j^0\) 只要我们让它们比 \(c\) . 因此 \(a_p, b_q\) 可从 \(a_p^0, b_q^0\) .
如果 \(r = 0\) 那么问题就更复杂了。WLOG no参数为零。我们现在有一个额外的复杂问题:没有参数可以通过零。因此 \(a_p, b_q\) 可从 \(a_p^0, b_q^0\) 当且仅当 \(a_i < 0\) 等于 \(a_i^0 < 0\) ,对于 \(b_i\) 和 \(b_i^0\) . 但在一组合适的参数中 \(b_j > 0\) ! 这是因为超几何函数是未定义的,如果 \(b_j\) 是一个非正整数 \(a_i\) 比 \(b_j\) . 因此 \(b_j \le 0\) 总是零。
因此,我们可以关联到每一个合适的参数集 \(a_p, b_q\) ,其中没有 \(a_i = 0\) ,以下不变量:
对于每一个 \(r \in [0, 1)\) 号码 \(\alpha_r\) 参数的 \(a_i \equiv r \pmod{{1}}\) 同样,和 \(\beta_r\) 参数的 \(b_i \equiv r \pmod{{1}}\) .
数字 \(\gamma\) 整数的 \(a_i\) 具有 \(a_i < 0\) .
以上推理表明 \(a_p, b_q\) 可从 \(a_p^0, b_q^0\) 当且仅当不变量 \(\alpha_r, \beta_r, \gamma\) 大家都同意。因此,特别是“可及自”是一个关于适当参数的对称关系,没有零。
应用运算符#
如果一切顺利,那么对于给定的一组参数,我们会在数据库中找到一个原点,我们有一个很好的公式。我们现在必须(潜在地)对它应用许多微分算子。如果我们盲目地这样做,结果会非常混乱。这是因为在超几何类型函数中,导数通常表示为两个相邻函数的和。因此,如果我们计算 \(N\) 导数,那么答案将包括 \(2N\) 连续函数!这显然是不可取的。事实上,我们从超几何微分方程中知道我们最需要的 \(\max(p, q+1)\) 表示所有导数的连续函数。
因此,我们将使用 \(\mathbb{{C}}(z)\) -模块基础:来源 \(a_r^0, b_s^0\) 我们要么存储(特别漂亮的答案)要么计算一组 \(N\) 功能(通常 \(N = \max(r, s+1)\) )其中任何一个的导数都是 \(\mathbb{{C}}(z)\) -它们的线性组合。在公式中,我们存储一个向量 \(B\) 属于 \(N\) 函数,矩阵 \(M\) 还有一个向量 \(C\) 后两个条目 \(\mathbb{{C}}(z)\) ),具有以下属性:
\({}_r F_s\left({a_r^0 \atop b_s^0} \middle| z \right) = C B\)
\(z\frac{{\mathrm{{d}}}}{{\mathrm{{d}}z}} B = M B\) .
然后我们可以计算出任意多个导数,我们最终得到 \(\mathbb{{C}}(z)\) -最多线性组合 \(N\) 特殊功能。
如上所述, \(B\) , \(M\) 和 \(C\) 可以全部存储(对于特别漂亮的答案)或从单个 \({{}}_p F_q\) 公式。
松散的末端#
本文主要介绍了超几何函数算法。还有一些进一步的技巧,在超展开.py源文件。文中还介绍了对Meijer G-函数的扩展。
有限合流的Meijer G-函数#
Slater定理本质上评估了 \(G\) -函数为残数之和。如果所有极点都是简单的,则得到的级数可以被认为是超几何级数。因此 \(G\) -函数可以作为超几何函数的和来计算。
如果极点不简单,则得到的级数不是超几何的。这被称为“合流”或“对数”情况(后者是因为结果序列往往包含对数)。答案以一种复杂的方式取决于各种极点的多重性,而且没有公认的符号来表示它(据我所知)。但是,如果多极数有限,我们可以计算 \(G\) 函数是超几何函数加上有限多个额外项的和。我找不到任何好的参考,这就是为什么我在这里解决它。
调用常规设置。我们定义
在哪里? \(L\) 轮廓的起点和终点是 \(+\infty\) ,包括 \(\Gamma(b_j - s)\) 对于 \(j = 1, \ldots, n\) 一旦在负方向,没有其他极点。同时假定积分是绝对收敛的。
对于任何复数 \(a, b\) ,我们写道 \(a \equiv b \pmod{{1}}\) 当且仅当存在整数时 \(k\) 这样的话 \(a - b = k\) . 因此存在双极iff \(a_i \equiv a_j \pmod{{1}}\) 对某些人来说 \(i \ne j \le n\) .
我们现在假设 \(b_j \equiv a_i \pmod{{1}}\) 对于 \(i \le m\) , \(j > n\) 然后 \(b_j < a_i\) . 这意味着相关伽马函数的商不是多项式,并且总是可以通过“降阶”来实现。定一个复数 \(c\) 这样的话 \(\{{b_i | b_i \equiv c \pmod{{1}}, i \le m\}}\) 不是空的。将此集合枚举为 \(b, b+k_1, \ldots, b+k_u\) 用 \(k_i\) 非负整数。类似地列举 \(\{{a_j | a_j \equiv c \pmod{{1}}, j > n\}}\) 作为 \(b + l_1, \ldots, b + l_v\) . 然后 \(l_i > k_j\) 为了所有 \(i, j\) . 对于有限汇流,我们需要假设 \(v \ge u\) 尽管如此 \(c\) .
让 \(c_1, \ldots, c_w\) 与众不同 \(\pmod{{1}}\) 并耗尽 \(b_i\) . 我声称
在哪里? \(F_j(z)\) 超几何函数是超几何函数 \(R_j(z)\) 是一个有限和,两者都将在后面指定。与每一个 \(c_j\) 有一系列的极点,大多数是有限的多个极点。这就是 \(j\) -第个术语来自。
所以再修好 \(c\) ,列举相关 \(b_i\) 作为 \(b, b + k_1, \ldots, b + k_u\) . 我们来看看 \(a_j\) 对应于 \(a + l_1, \ldots, a + l_u\) . 其他的 \(a_i\) 没有特殊待遇。相应的gamma函数的极点为(潜在的) \(s = b + r\) 对于 \(r = 0, 1, \ldots\) . 为了 \(r \ge l_u\) ,被积函数的极点是简单的。我们就这样定了
我们最后需要调查其他两极。设置 \(r = l_u + t\) , \(t \ge 0\) . 计算表明
在哪里? \(\delta_i = l_i - k_i\) .
阿尔索
和
因此
何处 \(*\) 意思是省略我们特别处理过的条款。
我们就这样到达
在哪里? \(C\) 指定残留物中独立于 \(t\) . (这个结果也可以通过转换所有 \(l_u\) 等回到 \(a_* - b_*\) ,但这样做仍然需要更多的符号,对计算没有帮助。)
扩展超几何表#
向表格中添加新公式很简单。在文件的顶端 sympy/simplify/hyperexpand.py
,有一个函数名为 add_formulae()
. 其中嵌套了两个helper, add(ap, bq, res)
和 addb(ap, bq, B, C, M)
,以及dummys a
, b
, c
和 z
.
添加新公式的第一步是使用 add(ap, bq, res)
. 这个声明 hyper(ap, bq, z) == res
. 在这里 ap
和 bq
可能会用傻瓜 a
, b
和 c
作为自由符号。例如众所周知的公式 \(\sum_0^\infty \frac{{(-a)_n z^n}}{{n!}} = (1-z)^a\) 由以下行声明: add((-a, ), (), (1-z)**a)
.
根据提供的信息,矩阵 \(B\) , \(C\) 和 \(M\) 将进行计算,并且该公式现在在展开超几何函数时可用。下一个测试文件 sympy/simplify/tests/test_hyperexpand.py
尤其是测试 test_formulae()
. 这将对新添加的公式进行数值测试。如果失败了,输入的内容(大概)有一个错误。
由于所有新添加的公式可能都比较复杂,自动计算的基础可能是相当不理想的(除了观察非常混乱的输出之外,没有什么好的方法来测试这一点)。在这种情况下,矩阵 \(B\) , \(C\) 和 \(M\) 应该手工计算。然后是帮手 addb
可用于声明具有手动计算基础的超几何公式。
一个例子#
因为到目前为止,这个解释可能是非常理论化的,而且很难理解,所以我们现在来看看一个明确的例子。我们取菲涅耳函数 \(C(z)\) 它遵循以下超几何表示:
首先,我们尝试使用(simpler)函数将此公式添加到查找表中 add(ap, bq, res)
. 前两个参数只是包含 \({{}}_{{1}}F_{{2}}\) . 这个 res
争论有点复杂。我们只知道 \(C(z)\) 依据 \({{}}_{{1}}F_{{2}}(\ldots | f(z))\) 具有 \(f\) 函数 \(z\) ,在我们的例子中
我们需要的是一个公式,其中超几何函数只有 \(z\) 作为论据 \({{}}_{{1}}F_{{2}}(\ldots | z)\) . 我们介绍了新的复合符号 \(w\) 并搜索函数 \(g(w)\) 这样的话
持有。然后我们可以替换 \(z\) 在里面 \(C(z)\) 通过 \(g(w)\) . 在我们的例子中,函数 \(g\) 可能看起来像
我们主要通过猜测和测试结果得到这些函数。因此,我们继续计算 \(f(g(w))\) (天真地简化)
真的回来了 \(w\) . (对于分支函数,我们必须注意分支切割。如果那样的话我们采取 \(w\) 为正实数并检查公式。如果我们的发现是积极的 \(w\) ,然后更换 exp
在任何分支函数中 exp_polar
我们得到的是正确的 \(all\) \(w\) )因此我们可以将公式写成
微不足道的
这正是第三个参数所需要的, res
在 add
. 最后,将此规则添加到表中的整个函数调用如下所示:
add([S(1)/4],
[S(1)/2, S(5)/4],
fresnelc(exp(pi*I/4)*root(z,4)*2/sqrt(pi)) / (exp(pi*I/4)*root(z,4)*2/sqrt(pi))
)
使用这个规则,我们会发现它是有效的,但是从简单性和包含的特殊函数实例的数量来看,结果并不理想。我们可以通过另一种方式将公式添加到查找表中,从而获得更好的结果。为此,我们使用(更复杂的)函数 addb(ap, bq, B, C, M)
. 前两个参数也是包含 \({{}}_{{1}}F_{{2}}\) . 其余三个是本页前面提到的矩阵。
我们知道 \(n = \max{{\left(p, q+1\right)}}\) -阶导数可以表示为低阶导数的线性组合。矩阵 \(B\) 包含基础 \(\{{B_0, B_1, \ldots\}}\) 而且是有型的 \(n \times 1\) . 最好的办法 \(B_i\) 是拿第一个 \(n = \max(p, q+1)\) 的表达式的导数 \({{}}_p F_q\) 把有用的东西拿出来。我们发现 \(n = \max{{\left(1, 2+1\right)}} = 3\) . 为了计算导数,我们必须使用算符 \(z\frac{{\mathrm{{d}}}}{{\mathrm{{d}}z}}\) . 第一个基本要素 \(B_0\) 设置为的表达式 \({{}}_1 F_2\) 自上而下:
接下来我们计算 \(z\frac{{\mathrm{{d}}}}{{\mathrm{{d}}z}} B_0\) . 为此,我们可以直接使用SymPy!
>>> from sympy import Symbol, sqrt, exp, I, pi, fresnelc, root, diff, expand
>>> z = Symbol("z")
>>> B0 = sqrt(pi)*exp(-I*pi/4)*fresnelc(2*root(z,4)*exp(I*pi/4)/sqrt(pi))/\
... (2*root(z,4))
>>> z * diff(B0, z)
z*(cosh(2*sqrt(z))/(4*z) - sqrt(pi)*exp(-I*pi/4)*fresnelc(2*z**(1/4)*exp(I*pi/4)/sqrt(pi))/(8*z**(5/4)))
>>> expand(_)
cosh(2*sqrt(z))/4 - sqrt(pi)*exp(-I*pi/4)*fresnelc(2*z**(1/4)*exp(I*pi/4)/sqrt(pi))/(8*z**(1/4))
很好地格式化了这个结果
计算我们找到的二阶导数
>>> from sympy import (Symbol, cosh, sqrt, pi, exp, I, fresnelc, root,
... diff, expand)
>>> z = Symbol("z")
>>> B1prime = cosh(2*sqrt(z))/4 - sqrt(pi)*exp(-I*pi/4)*\
... fresnelc(2*root(z,4)*exp(I*pi/4)/sqrt(pi))/(8*root(z,4))
>>> z * diff(B1prime, z)
z*(-cosh(2*sqrt(z))/(16*z) + sinh(2*sqrt(z))/(4*sqrt(z)) + sqrt(pi)*exp(-I*pi/4)*fresnelc(2*z**(1/4)*exp(I*pi/4)/sqrt(pi))/(32*z**(5/4)))
>>> expand(_)
sqrt(z)*sinh(2*sqrt(z))/4 - cosh(2*sqrt(z))/16 + sqrt(pi)*exp(-I*pi/4)*fresnelc(2*z**(1/4)*exp(I*pi/4)/sqrt(pi))/(32*z**(1/4))
可以打印为
我们看到了共同的模式,可以收集碎片。因此,选择是有意义的 \(B_1\) 和 \(B_2\) 具体如下:
(这与基础形成对比 \(B = \left(B_0, B_1^\prime, B_2^\prime\right)\) 如果我们使用 add(ap, bq, res)
)
因为它必须保持住 \({{}}_p F_q\left(\cdots \middle| z \right) = C B\) 的条目 \(C\) 很明显
最后我们要计算 \(3 \times 3\) 矩阵 \(M\) 这样的话 \(z\frac{{\mathrm{{d}}}}{{\mathrm{{d}}z}} B = M B\) 持有。这很简单。我们已经计算了第一部分 \(z\frac{{\mathrm{{d}}}}{{\mathrm{{d}}z}} B_0\) 以上。这给了我们第一排 \(M\) . 第二排是:
>>> from sympy import Symbol, cosh, sqrt, diff
>>> z = Symbol("z")
>>> B1 = cosh(2*sqrt(z))
>>> z * diff(B1, z)
sqrt(z)*sinh(2*sqrt(z))
第三个呢
>>> from sympy import Symbol, sinh, sqrt, expand, diff
>>> z = Symbol("z")
>>> B2 = sinh(2*sqrt(z))*sqrt(z)
>>> expand(z * diff(B2, z))
sqrt(z)*sinh(2*sqrt(z))/2 + z*cosh(2*sqrt(z))
现在我们计算了这个矩阵的条目
请注意 \(C\) 和 \(M\) 通常应该是 \(z\) ,具有有理系数。为了向的查找表中添加新公式,我们只需执行以下操作 hyperexpand
.
实现的超几何公式#
算法的一个重要部分是一个相对大的超几何函数表示表。下面自动生成的列表包含在SymPy中实现的所有表示(当然还有更多的表示是从它们派生的)。这些公式主要取自 [Luke1969] 和 [Prudnikov1990]. 它们都经过了数字测试。
工具书类#
凯利·B·罗奇。超几何函数表示。1996年国际符号与代数计算研讨会论文集,第301-308页,纽约,1996年。ACM公司。
凯利·B·罗奇。Meijer G函数表示。1997年国际符号与代数计算研讨会论文集,205-211页,纽约,1997年。ACM公司。
Luke,Y.L.(1969),《特殊函数及其逼近》,第1卷。
A、 P.Prudnikov,余。A、 Brychkov和O.I.Marichev(1990年)。积分与级数:更多特殊函数,第3卷,戈登和突破科学出版社。