1. 项目概述当机器学习“学会”物理定律在科学计算和工程建模领域我们常常需要求解描述复杂物理过程的微分方程。传统上这依赖于有限元、有限差分等数值方法它们需要精细的网格划分和复杂的迭代计算。然而有一类方程因其独特的“记忆”特性让传统方法颇为头疼这就是分数阶微分方程。想象一下材料的应力不仅取决于当前的应变还“记得”过去所有时刻的应变历史或者粒子在介质中的扩散速度并非恒定而是与过去走过的路径有关——这些现象用整数阶导数描述是苍白无力的必须引入分数阶导数。而分布式分数阶微分方程则将这种复杂性推向了新的高度。它不再满足于一个固定的分数阶次而是允许阶次在一个连续区间内变化并加权求和从而能够刻画更广泛的多尺度、多记忆效应的物理系统。求解这类方程无论是解析解还是数值解都极具挑战性。近年来物理信息机器学习的兴起为我们打开了一扇新的大门。其核心思想是与其让机器学习模型在海量数据中盲目摸索规律不如直接将已知的物理定律即控制方程作为约束条件“教”给模型。这样训练出的模型天生就符合物理规律即使在数据稀疏或噪声大的区域也能做出合理的预测。我最近深入研究了一种结合了Gegenbauer正交多项式与最小二乘支持向量回归的PIML方法专门用于攻克分布式分数阶微分方程的数值求解难题。这个方法巧妙地将数学上的优雅正交多项式的快速收敛性与机器学习的高效LSSVR的优化框架结合起来绕过了传统数值方法中网格生成和迭代收敛的繁琐过程。无论你是从事计算物理、材料科学还是系统建模的工程师或研究者如果你正在寻找一种高精度、高效率且易于实现的求解器那么这篇深度解析或许能给你带来全新的思路和一套可以直接“抄作业”的解决方案。2. 核心思路拆解为什么是LSSVRGegenbauer在动手实现之前我们必须先理解这个方案的设计哲学。它不是一个简单的“AB”拼凑而是针对分布式分数阶微分方程求解痛点的一次精准打击。2.1 问题本质与求解困境一个典型的Caputo型分布式分数阶微分方程可以写成如下形式ψ(t, u(t), C D^η u(t)) ρ(t) ∫[a, b] φ(θ) * (d^θ / dt^θ) u(t) dθ其中∫[a, b]表示对分数阶阶次θ在区间[a, b]上进行积分φ(θ)是权重函数。这个方程难在哪双重非局部性方程右侧的积分项意味着解u(t)在任意时刻t的值不仅依赖于其整数阶和分数阶导数还依赖于一个连续谱的分数阶导数的加权和。这导致了极强的历史依赖性和全局耦合。积分算子的处理直接数值求解需要计算一个内含分数阶导数的积分计算成本高昂且精度难以控制。高维参数空间如果使用神经网络等通用函数逼近器虽然灵活但需要大量训练数据且训练过程不稳定容易陷入局部最优难以保证物理约束被严格满足。2.2 LSSVR为何选择它作为回归骨架在众多机器学习回归模型中我们选择了最小二乘支持向量回归。这背后有深刻的考量从SVR到LSSVR的进化经典SVR通过最大化“间隔”来追求模型的泛化能力其优化问题通常是一个带有不等式约束的凸二次规划。虽然结果稳健但求解速度相对较慢。LSSVR做了一个关键的简化将SVR中的不敏感损失函数替换为平方损失函数。这一改动带来了两大好处一是所有训练样本的支持向量值即拉格朗日乘子都不为零这意味着所有样本点都对模型构建有贡献二是优化问题从二次规划转化为求解一个线性方程组计算效率得到质的飞跃。与物理信息结合的天然优势PIML的核心是将物理方程作为约束嵌入损失函数。LSSVR的框架允许我们非常自然地将微分方程残差方程左右两边之差作为约束条件。通过拉格朗日乘子法我们可以将原始的带约束优化问题转化为一个无约束的对偶问题最终的解表现为训练点处核函数的线性组合。这种“核方法”的表述特别适合与谱方法如正交多项式结合。小样本下的强泛化能力相比于深度神经网络LSSVR对于训练样本数量的需求更温和。在科学计算中高保真模拟数据或实验数据往往获取成本高、数量有限LSSVR的这一特性显得尤为宝贵。注意LSSVR中有一个重要的超参数γ即正则化系数。它控制着模型对训练误差的容忍度与模型复杂度之间的平衡。γ值过大模型会倾向于完全拟合训练数据可能过拟合γ值过小则模型可能过于简单无法捕捉方程的解的细节。在后续的调参实践中这是一个需要重点关注的“旋钮”。2.3 Gegenbauer多项式为何是理想的核函数核函数是支持向量机的灵魂它定义了样本在隐式高维特征空间中的内积。我们放弃了常用的径向基函数RBF或多项式核而选择了Gegenbauer正交多项式这是本方法最具创新性的一环。正交性的威力Gegenbauer多项式在区间[-1, 1]上关于权重函数(1 - t²)^{λ-1/2}正交。正交基函数具有最佳逼近性质意味着用它们来展开一个函数可以获得指数级的收敛速度对于光滑解而言。这直接翻译为我们可以用更少的基函数即更少的模型参数w_i达到极高的逼近精度极大降低了模型复杂度。分数阶导数的闭式表达这是Gegenbauer多项式对阵分布式分数阶微分方程的“杀手锏”。对于Caputo分数阶导数一个幂函数t^n的导数是Γ(n1)/Γ(n-α1) * t^{n-α}。而Gegenbauer多项式可以显式地表示为幂函数的线性组合见其显式公式。因此Gegenbauer多项式的分数阶导数可以解析地、精确地计算出来无需任何数值差分近似。这避免了数值求导带来的误差放大问题对于分数阶微分方程求解至关重要。泛化性与灵活性Gegenbauer多项式包含一个参数λ。当λ 1/2时它退化为Legendre多项式当λ 1时它退化为第二类Chebyshev多项式。因此我们的方法实际上是一个包含了多种经典正交多项式选择的统一框架。通过微调λ有时可以针对特定问题获得更好的逼近效果。核心思路串联我们将未知解u(t)用Gegenbauer多项式的线性组合Σ w_i * G_i(t)来近似。将这个近似解代入原分布式分数阶微分方程方程的残差就成为了LSSVR优化问题的约束条件。利用Gegenbauer多项式分数阶导数的解析公式我们可以精确计算积分项中的d^θ/dt^θ u(t)。最终整个问题被转化为一个以权重w和误差e为优化变量以方程残差为约束的凸优化问题并通过拉格朗日乘子法高效求解。3. 方法实现详解从理论到可执行代码理解了“为什么”之后我们进入“怎么做”的环节。我将把论文中的方法拆解成可一步步实现的模块。3.1 第一步问题离散化与积分近似分布式方程中最棘手的是对分数阶阶次θ的积分∫[a, b] φ(θ) * (d^θ/dt^θ) u(t) dθ。我们无法在连续域上处理它必须进行离散化。这里我们采用高斯-勒让德求积公式这是一种针对有限区间积分的高精度数值方法。∫[a, b] f(θ) dθ ≈ (b-a)/2 * Σ_{j0}^{Q} ω_j * f(θ_j)其中θ_j是区间[-1, 1]上Q阶勒让德多项式的根求积节点通过线性变换映射到[a, b]区间ω_j是对应的求积权重。实操要点阶数Q的选择Q决定了积分的精度。对于光滑的权重函数φ(θ)Q不需要太大例如7-15即可达到机器精度。这是一个权衡Q越大精度越高但计算量也越大。建议从Q10开始观察结果对Q的敏感性。节点与权重的获取大多数科学计算库如Python的numpy.polynomial.legendre都提供了直接计算高斯-勒让德求积节点和权重的函数无需自己推导。应用此公式原分布式方程中的积分项被近似为∫[a, b] φ(θ) * (d^θ/dt^θ) û(t) dθ ≈ (b-a)/2 * Σ_{j0}^{Q} ω_j * φ(θ_j) * (d^{θ_j}/dt^{θ_j}) û(t)现在问题从求解一个含连续积分算子的方程转化为求解一个关于Q1个不同分数阶导数的加权和方程。这是关键的一步简化。3.2 第二步构建基于Gegenbauer多项式的近似解我们假设解u(t)可以用d个Gegenbauer多项式的线性组合来近似û(t) Σ_{i0}^{d-1} w_i * G_i^{(λ)}(t)其中G_i^{(λ)}(t)是i阶Gegenbauer多项式w_i是待求的系数。Gegenbauer多项式的计算 通常通过三项递推关系来稳定生成G_0^{(λ)}(t) 1 G_1^{(λ)}(t) 2λt G_{n1}^{(λ)}(t) [2t(nλ)G_n^{(λ)}(t) - (n2λ-1)G_{n-1}^{(λ)}(t)] / (n1)对于参数λ论文中的超参数分析表明其对最终解的影响在大多数情况下微乎其微。因此在实践中为了简化通常直接选用λ 0.5即Legendre多项式或λ 1。这省去了调参的麻烦。3.3 第三步分数阶导数的精确计算这是利用Gegenbauer多项式特性的核心步骤。我们需要计算(d^{θ_j}/dt^{θ_j}) G_i^{(λ)}(t)。 根据Gegenbauer的显式公式和Caputo导数对幂函数的公式我们可以得到(d^{θ_j}/dt^{θ_j}) G_i^{(λ)}(t) Σ_{k0}^{floor(i/2)} [ (-1)^k * Γ(i-kλ) / (Γ(λ) * k! * (i-2k)!) * 2^{i-2k} * (Γ(i-2k1) / Γ(i-2k-θ_j1)) * t^{i-2k-θ_j} ]这个公式看起来复杂但本质上是一个有限求和。关键在于对于给定的阶数i和分数阶次θ_j这个表达式是完全解析的、可精确计算的。我们可以在代码中预计算这些系数从而在后续优化中高效地组装矩阵。3.4 第四步构建LSSVR优化问题与求解我们将近似解û(t)代入离散化后的方程。对于N个训练点{t_1, t_2, ..., t_N}我们希望在该点处方程的残差尽可能小。这引导我们构建以下LSSVR优化问题Minimize: (1/2) * w^T * w (γ/2) * e^T * e Subject to: ψ(t_i, û(t_i), D^η û(t_i)) - ρ(t_i) - (b-a)/2 * Σ_{j0}^{Q} ω_j * φ(θ_j) * D^{θ_j} û(t_i) e_i, for i 1,..., N其中e [e_1, ..., e_N]^T是松弛变量残差γ是正则化参数。求解策略 我们引入拉格朗日乘子β [β_1, ..., β_N]^T构造拉格朗日函数并令其对w和e的偏导数为零。经过推导详细过程略原优化问题最终转化为求解一个关于β的线性方程组[ Z^T * Z (1/γ) * I ] * β ρ其中I是单位矩阵向量ρ的第i个分量为ρ(t_i)。矩阵Z的每个元素Z_{i, k}的构造是整个方法的核心Z_{i, k} [ ψ(t_i, G_k(t_i), D^η G_k(t_i)) - (b-a)/2 * Σ_{j0}^{Q} ω_j * φ(θ_j) * D^{θ_j} G_k(t_i) ]注意这里ρ(t_i)项在构建矩阵Z时被合并处理了。矩阵Z的每一列对应一个基函数G_k(t)在所有训练点上的“算子作用值”。最终解的表达 求解线性方程组得到β后我们关心的近似解û(t)在任何点t的值可以通过下式快速计算û(t) Σ_{i1}^{N} β_i * L[K(t, t_i)]这里L是原微分算子K(t, t_i)是隐含的Gegenbauer核函数它源于对偶空间中的表示。在实际编程中我们更常用回代法既然w Σ_{i1}^{N} β_i * φ(x_i)在特征空间中而我们的基函数是Gegenbauer多项式因此最终解就是û(t) Σ_{k0}^{d-1} w_k * G_k^{(λ)}(t)其中权重w可以从β和矩阵Z的关系中恢复得到。4. 关键实现步骤与代码框架理论已经清晰现在让我们将其转化为伪代码和实现时的关键步骤。我将以求解一个一维分布式方程为例进行说明。4.1 算法流程总览输入方程参数ψ, φ, ρ, a, b, η定义域Gegenbauer多项式阶数d训练点数量N正则化参数γGauss-Legendre积分阶数QGegenbauer参数λ通常取0.5。预处理在定义域内选择N个训练点{t_i}例如均匀分布或Chebyshev节点。计算Q阶Gauss-Legendre求积的节点{θ_j}和权重{ω_j}映射到[a, b]区间。根据递推关系生成前d阶Gegenbauer多项式G_k(t)及其整数阶导数若η为整数的表达式或计算函数。组装矩阵Z对于每一个基函数k 0 to d-1对于每一个训练点t_i计算G_k(t_i),D^η G_k(t_i)若η为分数阶需用Caputo公式。对于每一个积分节点θ_j利用3.3节的公式精确计算D^{θ_j} G_k(t_i)。计算求和项S (b-a)/2 * Σ_j ω_j * φ(θ_j) * D^{θ_j} G_k(t_i)。计算Z_{i, k} ψ(t_i, G_k(t_i), D^η G_k(t_i)) - S。注意如果方程是线性的且ψ是线性算子那么ψ(t_i, G_k(t_i), D^η G_k(t_i))就是G_k(t_i)和其导数经ψ作用后的线性组合。如果ψ非线性则此项计算可能涉及û(t_i)的当前估计此时可能需要迭代求解但论文中方法主要针对线性或可线性化的问题。构建并求解线性系统构造矩阵A Z^T * Z (1/γ) * I其中I是 N×N 单位矩阵。构造右端向量b其第i个分量为ρ(t_i)。求解线性方程组A * β b。由于A是对称正定矩阵可以使用Cholesky分解或共轭梯度法高效求解。恢复解计算权重向量w Z * β。对于任意测试点t近似解为û(t) Σ_{k0}^{d-1} w_k * G_k^{(λ)}(t)。4.2 核心代码片段示意Python风格伪代码import numpy as np from scipy.special import gamma, legendre, roots_legendre from scipy.linalg import solve def gegenbauer_poly(n, lambda_, t): 计算n阶Gegenbauer多项式在点t的值使用递推 if n 0: return np.ones_like(t) elif n 1: return 2 * lambda_ * t else: G_prev np.ones_like(t) # G0 G_curr 2 * lambda_ * t # G1 for k in range(1, n): G_next (2 * (k lambda_) * t * G_curr - (k 2*lambda_ - 1) * G_prev) / (k 1) G_prev, G_curr G_curr, G_next return G_curr def caputo_derivative_of_power(n, alpha, t): 计算 t^n 的Caputo分数阶导数 (alpha阶) if alpha 0: return t**n if n np.ceil(alpha): # 如果阶数低于alpha导数为0对于Caputo定义 return np.zeros_like(t) return gamma(n1) / gamma(n - alpha 1) * t**(n - alpha) def assemble_Z_matrix(t_train, d, Q, lambda_, a, b, phi_func, psi_func, eta, rho_func): 组装核心矩阵Z t_train: 训练点数组形状 (N,) d: Gegenbauer多项式阶数 Q: Gauss-Legendre积分阶数 ... 其他参数 N len(t_train) Z np.zeros((N, d)) # 1. 获取Gauss-Legendre节点和权重 (在[-1,1]上) theta_nodes, omega roots_legendre(Q) # 映射到 [a, b] 区间 theta_j (b - a)/2 * theta_nodes (a b)/2 omega_j (b - a)/2 * omega # 2. 预计算所有需要的Gegenbauer多项式及其分数阶导数在训练点上的值 # 这里是一个简化示意实际需要根据psi_func和eta的具体形式来计算 # 假设我们需要基函数值、eta阶导数和所有theta_j阶导数 G_vals np.array([gegenbauer_poly(k, lambda_, t_train) for k in range(d)]) # shape (d, N) # 计算分数阶导数需要更复杂的处理这里省略具体实现... # D_eta_G ... # eta阶导数矩阵shape (d, N) # D_theta_G ... # 三维数组shape (Q, d, N) 每个积分节点theta_j对应一个导数矩阵 # 3. 遍历所有基函数和训练点填充Z矩阵 for k in range(d): # 第k个基函数 for i, t_i in enumerate(t_train): # 计算积分项近似 integral_approx 0.0 for j in range(Q): # 获取 D^{theta_j} G_k(t_i) dtheta_G ... # 从预计算的D_theta_G中获取 integral_approx omega_j[j] * phi_func(theta_j[j]) * dtheta_G integral_approx * (b - a) / 2 # 计算 psi 项 (这里严重依赖于psi_func的具体形式) # 假设 psi(t, u, D^eta u) 是一个线性算子例如 p1(t)*u p2(t)*D^eta u # 那么 psi_term p1(t_i)*G_vals[k, i] p2(t_i)*D_eta_G[k, i] psi_term ... # 根据psi_func计算 Z[i, k] psi_term - integral_approx # 注意右端项rho(t_i)在构建方程组右端向量时单独处理不放在Z里 return Z def solve_dofde_lssvr(t_train, t_test, d, gamma, Q, lambda_, a, b, phi_func, psi_func, eta, rho_func): 主求解函数 N len(t_train) # 1. 组装矩阵Z Z assemble_Z_matrix(t_train, d, Q, lambda_, a, b, phi_func, psi_func, eta, rho_func) # 2. 构建线性方程组 A * beta b A Z.T Z (1.0/gamma) * np.eye(N) b_vec np.array([rho_func(t) for t in t_train]) # 3. 求解对偶变量 beta beta solve(A, b_vec) # 使用直接法或迭代法求解 # 4. 恢复原空间权重 w (可选如果只需要在训练点评估) w Z beta # w.shape (d,) # 5. 在测试点 t_test 上计算解 u_pred np.zeros_like(t_test) for k in range(d): u_pred w[k] * gegenbauer_poly(k, lambda_, t_test) return u_pred, w, beta4.3 参数选择与训练点布置经验训练点{t_i}的选择不建议均匀分布。对于谱方法使用正交多项式对应的节点如Gauss-Lobatto节点或Chebyshev节点可以在区间端点附近获得更高的采样密度这对于捕捉边界层效应或解快速变化的区域非常有利能显著提升整体逼近精度。基函数个数d起始点可以设为d N即基函数数量等于训练点数量。如果解足够光滑d可以略小于N。通过观察残差随d增加的变化可以判断收敛性。通常d在10-20之间对于许多问题已经足够。正则化参数γ这是一个关键超参数。论文中使用了高达10^12的值这强烈倾向于让训练误差极小。建议使用对数尺度如[10^6, 10^8, 10^10, 10^12]进行网格搜索选择使验证集误差如果有或解的物理合理性最佳的γ。积分阶数Q对于光滑的权重函数φ(θ)Q10通常能达到很高的精度。可以通过对比Q增加时解的变化来验证积分近似的收敛性。5. 实战案例与结果分析让我们结合论文中的两个例子看看这个方法在实际中表现如何。5.1 案例一具有多项式精确解的DOFDE考虑方程∫_[0.2, 1.5] Γ(3-θ) * C D^θ u(t) dθ (2t^1.8 - t^0.5) / ln(t)初始条件u(0)u(0)0精确解为u(t)t²。我们的操作参数设置d4,N4因为解是二次多项式4个基函数足以精确表示Q10λ经分析影响极小取λ0.5Legendre多项式。过程按照上述流程组装矩阵、求解。由于精确解就在我们的基函数张成的空间内多项式空间理论上方法应该给出精确解。结果如图2(a)所示预测解与精确解t²完全重合。残差图2(b)在10^{-13}量级这实际上是数值计算的舍入误差。这验证了方法对于解在基函数空间内的问题具有机器精度的求解能力。心得这个例子虽然简单但极具说服力。它验证了算法流程的正确性并展示了谱方法“指数收敛”的威力当解足够光滑且能被基函数很好地描述时只需要极少量的基函数和训练点就能获得惊人精度。5.2 案例二无解析解的DOFDE考虑方程∫_[0, 1] 6θ(1-θ) * D^θ u(t) dθ (1/10)*u(t) 0初始条件u(0)1。该问题没有已知的时域解析解。我们的操作参数设置γ10^12,t in [0, 1]我们测试了不同的基函数个数d 10, 15, 20N d。结果分析表2展示了在不同d下于t0.1, 0.2, ..., 1.0处预测的u(t)值。可以看到随着d从10增加到20解的变化非常微小差异在小数点后第3-4位这表明数值解已经收敛。图3(a)展示了d20时预测的解曲线图3(b)的对数坐标残差图显示方程残差在大部分区域都低于10^{-10}证明了求解的精确性。这些结果与文献 [64] 中使用混合函数方法得到的结果吻合良好。心得对于没有解析解的问题本方法提供了一种稳定、可靠的数值工具。通过增加基函数数量d并观察解的收敛情况我们可以确信得到了一个高精度的数值解。残差函数是评估求解质量的重要指标一个均匀且量级极小的残差是解可靠的标志。5.3 扩展到偏微分方程情形论文还将方法成功应用于二维的分布式分数阶偏微分方程。此时近似解形式变为û(x, t) Σ_{i0}^{dx-1} Σ_{j0}^{dt-1} w_{ij} * G_i^{(λ)}(x) * G_j^{(λ)}(t)通过将二维权重矩阵w_{ij}向量化问题可以转化为与一维情况完全类似的LSSVR框架。求解流程不变只是矩阵Z的组装需要考虑两个维度上的基函数及其偏导数。论文中的例4.3和4.4展示了该方法在求解时空分布式分数阶反应-扩散方程上的成功应用取得了与精确解高度一致的结果。6. 常见陷阱、调试技巧与进阶思考在实际实现和应用该方法时你可能会遇到一些坑。以下是我总结的一些关键点和排查思路。6.1 精度不达预期检查这几点积分近似误差这是误差的首要来源。确保你使用的Gauss-Legendre求积阶数Q足够高。一个简单的验证方法是将Q翻倍观察解是否发生显著变化。如果没有说明积分近似已收敛。基函数展开误差解u(t)可能不够光滑或者含有奇异点导致Gegenbauer多项式展开收敛缓慢。尝试增加基函数个数d观察解的收敛趋势。如果增加d后解振荡加剧Runge现象可能需要使用调整后的节点如Gauss-Lobatto节点或考虑使用分段正交多项式。训练点分布在解变化剧烈的区域如边界层均匀分布的训练点会导致精度不足。切换到Chebyshev节点或Gauss-Lobatto节点它们在高阶多项式插值时能最小化Runge现象提升稳定性。正则化参数γγ太大如10^15可能导致数值病态矩阵A中(1/γ)I项可忽略Z^T Z可能奇异或病态。γ太小则无法有效约束误差解可能振荡。绘制不同γ下的解曲线和残差选择一个使解平滑且残差小的折中值。分数阶导数计算反复核对Caputo导数公式特别是Gamma函数的参数。对于非整数αt^{n-α}在t0附近可能产生复数或计算溢出需要仔细处理定义域。确保你的t在正区间内Caputo导数通常要求t0。6.2 计算效率优化矩阵Z的快速组装Z的组装是计算瓶颈尤其是对于偏微分方程或高维问题。充分利用Gegenbauer多项式和分数阶导数的解析性质可以向量化计算。例如对于所有训练点t_i和所有基函数G_k可以一次性计算出一个三维数组来存储D^{θ_j} G_k(t_i)避免多层循环。线性方程组求解矩阵A Z^T Z (1/γ)I是N×N的对称正定矩阵。当N很大几千时直接求逆或LU分解成本高昂。应使用共轭梯度法等迭代法并可能需要对Z进行预处理。内存管理对于二维问题dx * dt可能很大导致权重向量w很长矩阵Z的维度是N × (dx*dt)。需要关注内存占用必要时使用稀疏矩阵格式如果Z有很多零元素或分批计算。6.3 方法局限性与发展方向非线性问题本文介绍的核心框架主要针对线性或可线性化的DOFDE。对于强非线性问题方程ψ项中包含未知解u(t)的非线性函数此时约束条件变为非线性原优化问题不再是一个简单的线性最小二乘问题。可能需要引入迭代线性化如牛顿法或使用非线性核技巧复杂度会大大增加。高维问题对于三维或更高维的分布式分数阶偏微分方程基函数的数量会呈指数增长维度灾难。这时需要考虑使用张量积形式的稀疏网格、或者结合深度学习中的自动微分来规避显式基函数展开。自适应策略当前方法需要手动选择d,N,Q等参数。未来可以探索自适应策略例如基于后验误差估计自动增加基函数或训练点在解变化快的区域加密网格。替代核函数Gegenbauer多项式并非唯一选择。其他分数阶正交多项式如分数阶雅可比多项式或具有特殊性质的核函数如Wavelet核可能对特定类型的问题如解具有局部奇异性有更好的表现。最后一点个人体会这套基于LSSVR和Gegenbauer多项式的方法其美感在于它将一个复杂的泛函逼近问题转化为了一个结构清晰、可解析求导的线性代数问题。它不像黑箱神经网络那样难以解释每一步都有明确的数学含义。对于从事科学计算、特别是需要快速原型验证的研究者来说它提供了一种介于传统谱方法和现代机器学习之间的、兼具高精度和灵活性的新工具。当你下次遇到那些带有“记忆”的复杂物理方程时不妨试试这个“有物理常识”的机器学习求解器。