超几何展开#

本页介绍如何 hyperexpand() 以及相关的代码工作。有关用法,请参阅symplify模块的文档。

超几何函数展开算法#

本节介绍用于扩展超几何函数的算法。大部分都是基于文件 [Roach1996][Roach1997].

回想一下,超几何函数(最初)定义为

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

结果是有一些微分算子可以改变 \(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\) 函数是超几何函数加上有限多个额外项的和。我找不到任何好的参考,这就是为什么我在这里解决它。

调用常规设置。我们定义

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

在哪里? \(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\) . 我声称

\[G(z)=-\sum{j=1}^w(F_j(z)+R_j(z)),\]

在哪里? \(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(z)=\sum{R=0}^{l_-1}res{s=R+b}。\]

我们最后需要调查其他两极。设置 \(r = l_u + t\)\(t \ge 0\) . 计算表明

\[\frac{\Gamma(k_i-l_-t)}{\Gamma(l_i-l_-t)}\]

在哪里? \(\delta_i = l_i - k_i\) .

阿尔索

\[\伽马射线=\]

\[res{s=b+l\u+t}\Gamma(b-s)=-\frac{(-1)^{l{u+t}}{(l_u+t)!}\]

因此

\[res{s=b+l\u+t}=&-z^{b+l\u}\]

何处 \(*\) 意思是省略我们特别处理过的条款。

我们就这样到达

\[F(z)=C\乘以{}{p+1}F{q}\左(\]

在哪里? \(C\) 指定残留物中独立于 \(t\) . (这个结果也可以通过转换所有 \(l_u\) 等回到 \(a_* - b_*\) ,但这样做仍然需要更多的符号,对计算没有帮助。)

扩展超几何表#

向表格中添加新公式很简单。在文件的顶端 sympy/simplify/hyperexpand.py ,有一个函数名为 add_formulae() . 其中嵌套了两个helper, add(ap, bq, res)addb(ap, bq, B, C, M) ,以及dummys abcz .

添加新公式的第一步是使用 add(ap, bq, res) . 这个声明 hyper(ap, bq, z) == res . 在这里 apbq 可能会用傻瓜 abc 作为自由符号。例如众所周知的公式 \(\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)\) 它遵循以下超几何表示:

\[C(z)=z\cdot{1}F{2}\左。\left(\]

首先,我们尝试使用(simpler)函数将此公式添加到查找表中 add(ap, bq, res) . 前两个参数只是包含 \({{}}_{{1}}F_{{2}}\) . 这个 res 争论有点复杂。我们只知道 \(C(z)\) 依据 \({{}}_{{1}}F_{{2}}(\ldots | f(z))\) 具有 \(f\) 函数 \(z\) ,在我们的例子中

\[f(z)=-\frac{\pi^2 z^4}{16}\,。\]

我们需要的是一个公式,其中超几何函数只有 \(z\) 作为论据 \({{}}_{{1}}F_{{2}}(\ldots | z)\) . 我们介绍了新的复合符号 \(w\) 并搜索函数 \(g(w)\) 这样的话

\[f(g(w))=w\]

持有。然后我们可以替换 \(z\) 在里面 \(C(z)\) 通过 \(g(w)\) . 在我们的例子中,函数 \(g\) 可能看起来像

\[{\r}{\r}{\r}{4}\r}\r}{4}\r}\r}{4}\r}\r},。\]

我们主要通过猜测和测试结果得到这些函数。因此,我们继续计算 \(f(g(w))\) (天真地简化)

\[\begin{split}f(g(w))&=-\frac{\pi^2 g(w)^4}{16}\\\end{split}\]

真的回来了 \(w\) . (对于分支函数,我们必须注意分支切割。如果那样的话我们采取 \(w\) 为正实数并检查公式。如果我们的发现是积极的 \(w\) ,然后更换 exp 在任何分支函数中 exp_polar 我们得到的是正确的 \(all\) \(w\) )因此我们可以将公式写成

\[{{g}(左)}(\]

微不足道的

\[{}{1}F{2}\左。\left(\]

这正是第三个参数所需要的, resadd . 最后,将此规则添加到表中的整个函数调用如下所示:

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\) 自上而下:

\[B{0=\frac{\sqrt{\pi}\exp\left(-\frac{\mathbf{\imath}\pi}{4}\right)\]

接下来我们计算 \(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=\]

(这与基础形成对比 \(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\) 很明显

\[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]. 它们都经过了数字测试。

\[\begin{split}{{}{0}F{0}\左(\begin{matrix}\\\结束{matrix}\middle}{z}\right)}=e^{z}\end{split}\]
\[\begin{split}{{}{1}F{0}\左(\begin{matrix}a\\\ end{matrix}\middle}{z}\right)}=\左(1-z\右)^{-a}\end{split}\]
\[\begin{split}{{}{2}F{1}\左(\begin{matrix}a,a-\frac{1}{2}\\2a\结束{matrix}\middle}{z}\right)}=2^{2a-1}\左(\sqrt{1-z}+1\右)^{1-2a}\end{split}\]
\[\begin{split}{{}{2}F{1}\左(\begin{matrix}1,1\\2\end{matrix}\middle}{z}\right)}=-\frac{\log{\left(1-z\ right)}{z}\end{split}\]
\[\begin{split}{{}{2}F{1}\左(\begin{matrix}\frac{1}{2},1\\\frac{3}{2}\end{matrix}\middle}{z}\right)}=\frac{\operatorname{atanh}\left(\sqrt{z}\right)}{\sqrt{z}}}{\sqrt{z}}}\end{split}\]
\[\begin{split}{{{{{{{{{{{{{{{{{{{矩阵}{1{1{1}{2},{1}{2}\\\分形{3}{3}{2}{2}最后{矩阵}中间{z{右右右)}}}}}}}}}}{基本asin}{左{左{z{右右右)}}}}}{{{{{{{{}}\end{split}\]
\[\begin{split}{{{{{{{{{{{{{2}F{1}F{1{矩阵}一、一、一、二{一{2}\\\分形{1}{2}\结束{矩阵{矩阵}\中间{中间{z{z{右方)右方)}{瓦斯{z{1}右右方)^{2 a}}{2}{2}{2}{2}{2{1{1{1{1{1{1{z}\右)^{-2a}}{2}\end{split}\]
\[\begin{split}{{}{2}F{1}\左(\begin{matrix}a,-a\\\frac{1}{2}\end{matrix}\middle}{z}\right)}=\cos{\left(2a\operatorname{asin}{\left(\sqrt{z}\right)}\right)}\end{split}\]
\[\begin{split}{{}{2}F{1}\左(\begin{matrix}1,1\\\frac{3}{2}\end{matrix}\middle}{z}\right)}=\frac{\operatorname{asin}{\left(\sqrt{z}\right)}{\sqrt{z}\sqrt{1-z}\end{split}\]
\[\begin{split}{{}{2}F{1}\左(\begin{matrix}\frac{1}{2}、\frac{1}{2}\\1\结束{matrix}\middle}{z}\right)}=\frac{2k\左(z\右)}{\pi}\end{split}\]
\[\begin{split}{{}{2}F{1}\左(\begin{matrix}-\frac{1}{2}、\frac{1}{2}\\1\结束{matrix}\middle}{z}\right)}=\frac{2e\左(z\右)}{\pi}\end{split}\]
\[\begin{split}{{{{{{{{{{{{{{{3{3}{3}{1{1}{1}{2}2}1、1、1、1\\\frag{1{1{2}、2、2、端{矩阵}中中部124{z}\右方)}}{2\sqrt{z{z{操作员}生{ATANANH{左(\sqrt{z{z{右}右)}2}{3{3{3}+\frac{2}{3}-\frac{\log{\left(1-z\右)}}{3z}\end{split}\]
\[{{{{{{{{{{{{{{{{3}{3{3}{1}{2}2}1、1、1、2、2、2、2、2、2、2、1、1、2、2、2终点{矩阵{矩阵}\中{中{z}右}}}}{16{9 z{9 z{9 z{9 z}\右方}\右方{4{4{4{4{4{4{左{左{左{左{2{\sqrt{1-z}{2}+\frac{1}{2}\right)}{3z}+\frac{16}{9z}\]
\[\begin{split}{{}{1}F{1}\左(\begin{matrix}1\\b\end{matrix}\middle{z}\right)}=z^{1-b}\左(b-1\右)e^{z}\gamma\左(b-1,z\右)\end{split}\]
\[{{{{{{{{{{{{{{{{{{{}}左{开始{矩阵}二{中中{z{z{右})}四{四{四{四{三{二}{z{二{二{二}二}二}二{二{二{二{二}我的{二}}}}}}{1}{2}}\左(\frac{z}{2}\right)\Gamma\left(a+\frac{1}{2}\右)\]
\[\begin{split}{{}{1}F{1}\left(\begin{matrix}a\\a+1\end{matrix}\middle{z}\right)}=a\左(z e^{i\pi}\右)^{-a}\gamma\左(a,z e^{i\pi}\右)\end{split}\]
\[\begin{split}{{{{{{{{{{{}{1}{1}由{开始{矩阵}}{1{1{2}\\\分形{1}{2}{最后{矩阵}\中间中部124{z}\右}}{z{右)}}本{z}i sqrt{P P P}操作员}{erf{左(\sqrt{z{z}i\右)由右)}}{z{z{z{i{i{}\end{split}\]
\[\begin{split}{{}_{1}F_{2}\left(\begin{matrix} 1 \\ \frac{3}{4}, \frac{5}{4} \end{matrix}\middle| {z} \right)} = \frac{\sqrt{\pi} \left(i \sinh{\left(2 \sqrt{z} \right)} S\left(\frac{2 \sqrt[4]{z} e^{\frac{i \pi}{4}}}{\sqrt{\pi}}\right) + \cosh{\left(2 \sqrt{z} \right)} C\left(\frac{2 \sqrt[4]{z} e^{\frac{i \pi}{4}}}{\sqrt{\pi}}\right)\right) e^{- \frac{i \pi}{4}}}{2 \sqrt[4]{z}}\end{split}\]
\[{{{{{{{{{{{}{2}F{2}左(\开始{矩阵}}\frac{1{1{2}2}、一、一+1\终结{矩阵{矩阵{中间{中间124{z{z}右右)}}}{一i\sqrt{\pi}\sqrt{{1}{1{z{z{z{z}}}}{{z}}}}}}}{{{{左(\sqrt{z}i\ right)}{2a-1}-\frac{a\left(ze^{i\pi}\right)^{-a}\gamma\left(a,zse^{i\pi}\right)}{2a-1}\]
\[\begin{split}{{}{2}F{2}\左(\begin{matrix}1,1\\2,2\end{matrix}\middle}{z}\right)}=\frac{-\log{\left(z\ right)}+\operatorname{Ei}{\left(z\ right)}{z}-\frac{\gamma}{z}\end{split}\]
\[\begin{split}{{}{0}F{1}\左(\begin{matrix}\\\frac{1}{2}\end{matrix}\middle}{z}\right)}=\cosh{\left(2\sqrt{z}\right)}\end{split}\]
\[\begin{split}{{}{0}F{1}\左(\begin{matrix}\\b\end{matrix}\middle}{z}\right)}=z^{\frac{1}{2}-\frac{b}{2}}I{b-1}\左(2\sqrt{z}\right)\Gamma\left(b\right)\end{split}\]
\[\begin{split}{{}_{0}F_{3}\left(\begin{matrix} \\ \frac{1}{2}, a, a + \frac{1}{2} \end{matrix}\middle| {z} \right)} = 2^{- 2 a} z^{\frac{1}{4} - \frac{a}{2}} \left(I_{2 a - 1}\left(4 \sqrt[4]{z}\right) + J_{2 a - 1}\left(4 \sqrt[4]{z}\right)\right) \Gamma\left(2 a\right)\end{split}\]
\[\begin{split}{{}_{0}F_{3}\left(\begin{matrix} \\ a, 2 a, a + \frac{1}{2} \end{matrix}\middle| {z} \right)} = \left(2 \sqrt{z} e^{\frac{i \pi}{2}}\right)^{1 - 2 a} I_{2 a - 1}\left(2 \sqrt{2} \sqrt[4]{z} e^{\frac{i \pi}{4}}\right) J_{2 a - 1}\left(2 \sqrt{2} \sqrt[4]{z} e^{\frac{i \pi}{4}}\right) \Gamma^{2}\left(2 a\right)\end{split}\]
\[\begin{split}{{}_{1}F_{2}\left(\begin{matrix} a \\ 2 a, a - \frac{1}{2} \end{matrix}\middle| {z} \right)} = 2 \cdot 4^{a - 1} z^{1 - a} I_{a - \frac{3}{2}}\left(\sqrt{z}\right) I_{a - \frac{1}{2}}\left(\sqrt{z}\right) \Gamma\left(a - \frac{1}{2}\right) \Gamma\left(a + \frac{1}{2}\right) - 4^{a - \frac{1}{2}} z^{\frac{1}{2} - a} I^{2}_{a - \frac{1}{2}}\left(\sqrt{z}\right) \Gamma^{2}\left(a + \frac{1}{2}\right)\end{split}\]
\[{{{{{{{{{{{{{{{1}{1}{1{1}{2}{2}{2}{矩阵{矩阵}\中部中部{{z{z{右{z{右}{1 b}左(1-b\右)I{1-b}左{b}左(\sqrt{z}z}\右)I{b-1}1}左}左(\sqrt{z}右)}}}右)}}}}}}{\sin{\左(b\pi\右)}}\]
\[\begin{split}{{{{{{{{{{{}{1}F{2{1}左{开始{矩阵}{1{2}\\frac{3}{2},{3{3}{2}{2}最后{矩阵}中间{z{右右)右)}}{瓦斯{操作者{石{石{左{左{左(2\sqrt{z z{右)右)}}}}{2{2}{2{2}z}}\end{split}\]
\[\begin{split}{{}_{1}F_{2}\left(\begin{matrix} \frac{3}{4} \\ \frac{3}{2}, \frac{7}{4} \end{matrix}\middle| {z} \right)} = \frac{3 \sqrt{\pi} e^{- \frac{3 i \pi}{4}} S\left(\frac{2 \sqrt[4]{z} e^{\frac{i \pi}{4}}}{\sqrt{\pi}}\right)}{4 z^{\frac{3}{4}}}\end{split}\]
\[\begin{split}{{}_{1}F_{2}\left(\begin{matrix} \frac{1}{4} \\ \frac{1}{2}, \frac{5}{4} \end{matrix}\middle| {z} \right)} = \frac{\sqrt{\pi} e^{- \frac{i \pi}{4}} C\left(\frac{2 \sqrt[4]{z} e^{\frac{i \pi}{4}}}{\sqrt{\pi}}\right)}{2 \sqrt[4]{z}}\end{split}\]
\[\begin{split}{{}_{2}F_{3}\left(\begin{matrix} a, a + \frac{1}{2} \\ b, 2 a, 2 a - b + 1 \end{matrix}\middle| {z} \right)} = \left(\frac{\sqrt{z}}{2}\right)^{1 - 2 a} I_{2 a - b}\left(\sqrt{z}\right) I_{b - 1}\left(\sqrt{z}\right) \Gamma\left(b\right) \Gamma\left(2 a - b + 1\right)\end{split}\]
\[\begin{split}{{}_{2}F_{3}\left(\begin{matrix} 1, 1 \\ \frac{3}{2}, 2, 2 \end{matrix}\middle| {z} \right)} = \frac{- \log{\left(2 \sqrt{z} \right)} + \operatorname{Chi}\left(2 \sqrt{z}\right)}{z} - \frac{\gamma}{z}\end{split}\]
\[\begin{split}{{}{3}F{3}\left(\begin{matrix}1,1,a\\2,2,a+1\结束{matrix}\middle}{z}\右)}=\frac{a\左(-z\右)^{-a}\left(\Gamma\ left(a\ right)-\Gamma\left(a\ right)-\Gamma\left(a\right)-\Gamma\left(a,-右图:右图{\log{\le左(a-1\right)^{{2}{frac{a(1-a\right)的左(\log{\le左(左(z\右)的(z\right)}+\operatorname{E}{1}左(z\右)右(z\右)+\伽马\右)的γ\右)}{z\左(a{2}2 a a+2 a+1+1\右)右){frac{z{z}{z}}{z{z}{左{左{2{2{2{2{左}-2a+1\右)}+\frac{a}{z\左(a^{2}-2a+1\右)}\end{split}\]

工具书类#

[Roach1996]

凯利·B·罗奇。超几何函数表示。1996年国际符号与代数计算研讨会论文集,第301-308页,纽约,1996年。ACM公司。

[Roach1997]

凯利·B·罗奇。Meijer G函数表示。1997年国际符号与代数计算研讨会论文集,205-211页,纽约,1997年。ACM公司。

[Luke1969]

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

[Prudnikov1990]

A、 P.Prudnikov,余。A、 Brychkov和O.I.Marichev(1990年)。积分与级数:更多特殊函数,第3卷,戈登和突破科学出版社。