这里我们记录一下使用Maple自动推导离散谱问题的时间部分的$V$的形式。

算法

我们以$4$阶谱问题为例。 给定空间谱问题$U(n, \lambda)=(U_{ij})_{4\times 4}$ (这里我们限定$U$中的同一位势不重复出现, 否则需要考虑相容性条件),我们设$V(n, \lambda)=(V_{ij})_{4\times 4}$,则静态零曲率方程 \begin{equation} S=V^+U - UV = 0 \end{equation} 是包含$16$个未知量的线性方程。

我们的目的是构造恰当的$V$的形式,使得静态零曲率方程满足下面两个条件:

  • (C1): 如果$ \dfrac{\partial U_{ij}}{\partial n}\neq 0$ (即含有位势),则$S_{ij}$形如$A+\lambda^k B=0$,其中$A,B$与谱参数$ \lambda$无关,且$U_{ij}$中位势的系数为$\lambda$的$0$次或者$k$次幂。

  • (C2): 如果$ \dfrac{\partial U_{ij}}{\partial n}= 0$ (即不含位势),则$S_{ij}$形如$\lambda^k A=0$,其中$A$与谱参数$\lambda$无关。

接下来我们给出Maple实现的思想和步骤。 记$ \dfrac{\partial U_{ij}}{\partial n}= 0$所对应的$S$的子集为$S_0$。 我们分为两个步骤:

  • 第一步: 减少未知量的个数。 对于$eq\in S_0$, 如果某个变量可以用其它变量表示出来,则将$S$中所有该变量替换。 此时,方程数和未知量个数都减少一个。 重复该操作,直到不存在某个变量可以用其它变量表示。 此时$S_0$剩余的式子仍记为$S_0$。

  • 第二步: 平衡$\lambda$。 对于$eq\in S_0$, 如果$\lambda$的最大最小次幂不等, 则为了满足(C2),我们将最低次幂的系数中的未知量替换为$\lambda^k$乘以这些未知量, 使得该式达到平衡。 因此我们需要找到这些未知量,然后对$S$整体进行替换。 重复上述操作。

对于不能满足(C2)或者满足(C2)但不满足(C1)的问题,我们无法给出$V$的形式。

基于此, 我们也可以随机生成$U$,看是否可以找到满足(C1)和(C2)的$V$。 我们也用程序实现了这一想法, 这里我们不再描述。 这一方法很容易推广到连续谱问题,这里也不在给出。

程序

我们利用Maple来实现上述算法, 函数名为construct_V.

用法

U, V, szce := construct_V(U);

输入

U: 谱问题.

输出

U, V, szce(经过化简的驻定零曲率方程).

例子

  • 离散 当然对于一些复杂的问题, 找到的V不一定满足上述条件, 此时需要人工对输出的结果进行分析.

  • 连续

代码

我们将程序放在Github代码库, 这里不在附上。

为了方便应用, 我们对上述程序进行了封装, 同样放在上述仓库中, 连续和离散情形的文件名分别为Hierarchy.mlaDiscreteHierarchy.mla, 需要将其放在maple安装目录的lib文件夹中. 之后就可以作为包导入即可使用, 其中包含了几个推导方程族时常用的函数(连续, 离散情形类似)

函数作用用法参数
L:谱参数 $\lambda$, 方便输入.L
algsubss:algsubs仅支持单个表达式, algsubss支持多个表达式(集合)algsubss(rep, expr, is_exact){eq1, eq2, …}, expr, 0/1
compute_szce:计算驻定零曲率方程.szce := compute_szce(U, V).$U, V$
create_V:创建 $V=(V_{ij})_{order}$.V := create_V('V', order).矩阵名, 矩阵阶数
degrees:输出结构体每个多项式的各次幂degrees(eqs, x)结构体(如矩阵), 变量
get_KG_eqs:分别获取方程组中$\lambda$的最低次幂和最高次幂的系数. 作用于 驻定零曲率方程可获取 $KG$ 和 $JG$K_eqs, J_eqs := get_KG_eqs(szce).方程组
print_szce:输出(打印)驻定零曲率方程.print_szce(szce, U).szce, $U$
sort_szce:对方程组中的$\lambda$以及每个变量按照(导数的)阶数合并同类项(优先关于$\lambda$). 作用于驻定零曲率方程, 可以方便写出$K, J$算子.szce: = sort_szce(szce, U).方程组, 包含不需要合并同类项的变量的结构体
total_int:处理积分, 能积出来但Maple没有积出来total_int(eqs)结构体(如矩阵)
generate_diff_f:定义函数的各阶导数, 如作用于$f(x)$, 则后续可以使用 fx, fxx, ..., fxxxxxxxxgenerate_diff_f([ f(x), g(x) ], x)单个函数或者结构体

这里szce表示驻定零曲率方程(stationary zero-curvature equation). 方程组可以是集合, 矩阵, 列表等非单个表达式(因为函数里面用到了map, 单个表达式无效), 结构体可以是表达式, 也可以是由多个表达式构成的结构.