卷积型Volterra积分微分方程是一类重要问题,广泛应用于生物学、经济学,本文研究了一种快速算法求解卷积型Volterra积分微分方程。该方法采用多步配置方法对卷积型Volterra积分微分方程进行离散,结合卷积核的特性,得到离散方程的线性系统由Toeplitz矩阵、对角矩阵和稀疏矩阵组合而成。考虑Toeplitz矩阵与向量的快速算法,设计系数矩阵与向量的快速计算格式。本文利用GMRES算法与快速计算格式结合,获得一种快速求解线性系统的改进算法,并通过实验验证改进算法的高效性。 Convolutional Volterra integral differential equations are an important class of problems, widely used in biology, economics, among other fields. This study presents a fast algorithm for solving convolutional Volterra integral differential equations. The method involves discretizing the equations using a multi-step collocation approach, combined with the characteristics of the convolution kernels, resulting in a linear system of equations composed of Toeplitz matrices, diagonal matrices, and sparse matrices. Considering fast algorithms for Toeplitz matrices and vectors, a fast computation format for the coefficient matrix and vector is designed. By combining the GMRES algorithm with the fast computation format, an improved algorithm for efficiently solving linear systems is obtained. Experimental results verify the effectiveness of the improved algorithm.
卷积型Volterra积分微分方程是一类重要问题,广泛应用于生物学、经济学,本文研究了一种快速算法求解卷积型Volterra积分微分方程。该方法采用多步配置方法对卷积型Volterra积分微分方程进行离散,结合卷积核的特性,得到离散方程的线性系统由Toeplitz矩阵、对角矩阵和稀疏矩阵组合而成。考虑Toeplitz矩阵与向量的快速算法,设计系数矩阵与向量的快速计算格式。本文利用GMRES算法与快速计算格式结合,获得一种快速求解线性系统的改进算法,并通过实验验证改进算法的高效性。
Volterra积分微分方程,快速计算,GMRES,广义多步配置方法
Haiyang Li*, Huaiqing Hu, Jingya Liu
School of Mathematics and Statistics, Guizhou University, Guiyang Guizhou
Received: Sep. 4th, 2023; accepted: Oct. 17th, 2023; published: Oct. 25th, 2023
Convolutional Volterra integral differential equations are an important class of problems, widely used in biology, economics, among other fields. This study presents a fast algorithm for solving convolutional Volterra integral differential equations. The method involves discretizing the equations using a multi-step collocation approach, combined with the characteristics of the convolution kernels, resulting in a linear system of equations composed of Toeplitz matrices, diagonal matrices, and sparse matrices. Considering fast algorithms for Toeplitz matrices and vectors, a fast computation format for the coefficient matrix and vector is designed. By combining the GMRES algorithm with the fast computation format, an improved algorithm for efficiently solving linear systems is obtained. Experimental results verify the effectiveness of the improved algorithm.
Keywords:Volterra Integral Differential Equation, Fast Computation, GMRES, Generalized Multi-Step Collocation Method
Copyright © 2023 by author(s) and beplay安卓登录
This work is licensed under the Creative Commons Attribution International License (CC BY 4.0).
http://creativecommons.org/licenses/by/4.0/
研究卷积型Volterra积分微分方程(下面简称为卷积型VIDE)的快速算法,其方程形式如下
{ y ′ ( t ) = a ( t ) y ( t ) + g ( t ) + ∫ 0 t K ( t − s ) y ( s ) d s , t ∈ I : = [ 0 , T ] , y ( 0 ) = y 0 , (1)
其中 a ( ⋅ ) , g ( ⋅ ) ∈ C ( I ) , K ( t − s ) 是区域 D : = { ( t , s ) | 0 ≤ s ≤ t ≤ T } 上的连续函数,这些条件保证了式(1)解的存在唯一性 [
由于卷积型VIDE在生物学、经济学中有着广泛的应用,如计算生物学 [
在本文中,我们使用广义多步配置方法求解卷积型VIDE,广义多步配置方法通过在大区间上划分均匀网格,使用子区间两侧的网格节点构造局部多项式,类似的方法已经广泛用于Volterra积分方程中 [
考虑使用广义多步配置方法 GMCM k 1 , k 2 离散Volterra积分微分方程。设均匀网格 I h = { t n = n h | n = 0 , 1 , ⋯ , N } ,其中步长 h = T / N 。基于 I h ,定义局部基函数
∅ j α n , β n ( s ) = ∏ i = − α n , i ≠ j β n + 1 s − j j − i , j = − α n , ⋯ , β n + 1. (2)
进而导数在 [ t n , t n + 1 ] 上的导数 y ′ ( t ) 具有如下表示
Y ′ h ( t n + s h ) = ∑ i = − α n β n + 1 Y ′ n + j ∅ j α n , β n ( s ) , s ∈ [ 0 , 1 ] , (3)
其中 Y ′ n + i : = Y ′ h ( t n + j h ) ,
( α n , β n ) = { ( n , k 1 + k 2 − n ) , 0 ≤ n ≤ k 1 − 1 , ( k 1 , k 2 ) , k 1 ≤ n ≤ N − k 2 − 1 , ( k 1 + k 2 + n + 1 − N , N − n − 1 ) , N − k 2 ≤ n ≤ N − 1 ,
k 1 , k 2 是非负整数。
在 [ t n , t n + 1 ] 上对(3)积分
Y h ( t n + s h ) = Y n + h ∑ i = − α n β n + 1 Y ′ n + j M O M n , j ( s ) , s ∈ [ 0 , 1 ] , (4)
其中 Y n : = Y h ( t n ) , M O M n , j ( s ) = ∫ 0 s ∅ j α n , β n ( v ) d v 。为了描述方程,定义下列符号 M O M K 1 n , j = ∫ 0 1 K ( t n + 1 − t j − s h ) d s , M O M K 2 n , j i = ∫ 0 1 K ( t n + 1 − t j − s h ) M O M j , i ( s ) d s 。
进而我们得到
∫ 0 t n + 1 K ( t n + 1 − s ) Y h ( s ) d s = ∑ j = 0 n ∫ t j t j + 1 K ( t n + 1 − s ) Y h ( s ) d s = h ∑ j = 0 n ∫ 0 1 K ( t n + 1 − t j − v h ) Y h ( t j + v h ) d v = h ∑ j = 0 n ∫ 0 1 K ( t n + 1 − t j − v h ) ( Y j + h ∑ i = − α j β j + 1 Y ′ j + i M O M j , i ( v ) ) d v = h ∑ j = 0 n Y j M O M K 1 n , j + h 2 ∑ j = 0 n ∑ i = − α j β j + 1 Y ′ j + i M O M K 2 n , j i .
注意到
Y ′ n = a ( t n + 1 ) Y n + 1 + g ( t n + 1 ) + ∫ 0 t n + 1 K ( t n + 1 − s ) Y h ( s ) d s , n = 0 , 1 , ⋯ , N − 1. (5)
因此,我们有,
P ^ Y D = G ^ , (6)
其中
P ^ = E N − h A F − h 2 B F − h 2 C ,
G ^ = G N + Y 0 ( A + h B ) 1 + h Y ′ 0 ( A F 0 + h B F 0 + h C 0 ) + h Y 0 B 0 ,
B ^ = ( b ^ i , j ) N × ( N + 1 ) , b ^ i , j = { M O M K 1 n , j i > j , 0 , i ≤ j ,
C ^ = ( c ^ i , j ) N × ( N + 1 ) , c ^ i , j = ∑ k = − k 1 − k 2 k 1 + k 2 + 1 M O M K 3 i − 1 , j − k k ,
F ^ = ( f ^ i , j ) N × ( N + 1 ) , f ^ i , j = ∑ k = − k 1 − k 2 k 1 + k 2 + 1 M O M K 4 i − 1 , j − k k ,
M O M K 3 i − 1 , j − k k = { M O M K 2 i − 1 , j − k k , ( 0 < j − k ≤ min ( i − 1 , N − 1 ) & ( α j − k ≤ k ≤ β j − k ) ) , 0 , 其 他 ,
M O M K 1 i − 1 , j − k k = { M O M j − k , k ( 1 ) , ( 0 < j − k ≤ min ( i − 1 , N − 1 ) & ( α j − k ≤ k ≤ β j − k ) ) , 0 , 其 他 ,
B = B ^ ( 1 : N , 2 : N + 1 ) , B 0 = B ^ ( 1 : N , 1 ) ,
C = C ^ ( 1 : N , 2 : N + 1 ) , C 0 = C ^ ( 1 : N , 1 ) ,
F = F ^ ( 1 : N , 2 : N + 1 ) , F 0 = F ( 1 : N , 1 ) ,
Y D = ( Y ′ 1 Y ′ 2 ⋮ Y ′ N ) , G N = ( g ( t 1 ) g ( t 2 ) ⋮ g ( t N ) ) , A N = ( a ( t 1 ) a ( t 1 ) ⋱ a ( t 1 ) ) .
1 表示元素全是1的N行1列的列向量,上述矩阵描述中 i = 1 , 2 , ⋯ , N , j = 1 , 2 , ⋯ , N + 1 。注意到 M O M K 1 n , j = M O M K 1 n + 1 , j + 1 , n = 0 , 1 , ⋯ , N − 2 , j = 0 , 1 , ⋯ , N − 1 。
当 n = k 1 , k 1 + 1 , ⋯ , N − k 2 − 2 时, M O M n , j ( s ) = M O M n − 1 , j ( s ) ,进而 M O M K 2 n , j i = M O M K 2 n + 1 , j + 1 i ,因此,式(6)可以写为如下形式,
( E N − ( h A + h 2 B ) ( F T + F S ) − h 2 ( C T + C S ) ) Y D = G ^ , (7)
即 P ^ = E N − h A F − h 2 B F − h 2 C = E N − ( h A + h 2 B ) ( F T + F S ) − h 2 ( C T + C S ) ,其中 B 是Toeplitz矩阵,其第一行元素为 B ( 1 , 1 : N ) ,第一列元素为 B ( 1 : N , 1 ) , F T + F S = F , C T + C S = C , F T 是Toeplitz矩阵,其第一行元素为 F 1 = ( F ( k 1 + k 2 + 1 , k 1 + k 2 + 1 : N ) , 0 1 × ( k 1 + k 2 ) ) ,第一列元素为 F 2 = ( F ( k 1 + k 2 + 1 : N , k 1 + k 2 + 1 ) ; 0 ( k 1 + k 2 ) × 1 ) , F S 是稀疏矩阵,其非零元素及位置为 F S ( : , i ) = F ( : , i ) − ( 0 ( i − 1 ) × 1 ; F 2 ( 1 : N − i + 1 ) ) , i = 1 , 2 , ⋯ , k 1 + k 2 , F S ( N − j + 1 , N − k 1 − k 2 − 1 : i ) = F ( N − j + 1 , N − k 1 − k 2 − 1 : i ) − ( F 2 ( k 1 + k 2 + 3 − j : − 1 : 1 ) T , F 1 ( 1 : j − 1 ) ) , j = 1 , 2 , ⋯ , k 2 。 C T 是Toeplitz矩阵,其第一行元素为 C 1 = ( C ( k 1 + k 2 + 1 , k 1 + k 2 + 1 : N ) , 0 1 × ( k 1 + k 2 ) ) ,第一列元素为 C 2 = ( C ( k 1 + k 2 + 1 : N , k 1 + k 2 + 1 ) ; 0 ( k 1 + k 2 ) × 1 ) , C S 是稀疏矩阵,其非零元素及位置为 C S ( : , i ) = C ( : , i ) − ( 0 ( i − 1 ) × 1 ; C 2 ( 1 : N − i + 1 ) ) , i = 1 , 2 , ⋯ , k 1 + k 2 , C S ( N − j + 1 , N − k 1 − k 2 − 1 : i ) = C ( N − j + 1 , N − k 1 − k 2 − 1 : i ) − ( C 2 ( k 1 + k 2 + 3 − j : − 1 : 1 ) T , C 1 ( 1 : j − 1 ) ) , j = 1 , 2 , ⋯ , k 2 。注:上述过程中矩阵元素的选择参考Matlab矩阵元素的选取。此外在表1中,我们给出式子(7)中组成系数矩阵 P ^ 的各部分矩阵的情况。
矩阵类型 | 存储量 | |
---|---|---|
A | 对角矩阵 | N |
B | Toeplitz矩阵 | 2N |
F T | Toeplitz矩阵 | 2N |
F S | 稀疏矩阵 | D n u m |
C T | Toeplitz矩阵 | 2N |
C S | 稀疏矩阵 | D n u m |
表1. 系数矩阵 P ^ 分解时各部分矩阵详细表
其中,
D n u m = { k 2 N + ( k 1 + k 2 + 2 ) k 2 , k 1 = 0 , ( k 1 + k 2 + 1 ) N + ( k 1 + k 2 + 2 ) k 2 , k 1 > 0 ,
对于Toeplitz矩阵,仅需要存储第一行和第一列即可,因此其存储量为2N。
如果不考虑 P ^ 的结构,那么我们可以选择直接求解(6)式,需要 O ( N 3 ) 的计算量,或者使用迭代算法广义极小残差(GMRES)求解(6)式,其计算量主要来自于 P ^ 与向量的乘法运算,因此需要 O ( N 2 ) 的计算量。根据表1可知,系数矩阵 P ^ 由Toeplitz矩阵,稀疏矩阵,以及对角矩阵组合而成,充分利用 P ^ 的结构,优化 P ^ 与向量相乘时的计算量。
首先考虑Toeplitz矩阵与向量的快速计算,即根据已有的Toeplitz矩阵构造循环矩阵,进而通过快速Fourier方法计算。由Toeplitz矩阵T构造 T ^ ,
T = ( t 0 t − 1 t − 2 ⋯ t − n t 1 t 0 t − 1 ⋯ t − n + 1 t 2 t 1 t 0 ⋯ t − n + 2 ⋮ ⋮ ⋮ ⋮ t n t n − 1 t n − 2 ⋯ t 0 ) , T ^ = ( 0 t n t n − 1 ⋯ t 1 t n − 1 0 t n ⋯ t 2 t n − 2 t n − 1 0 ⋯ t 3 ⋮ ⋮ ⋮ ⋮ t − 1 t − 2 t − 3 ⋯ 0 )
将T与向量b的乘法嵌入式(8)计算,
( T T ^ T ^ T ) ( b 0 ) = ( T b ∗ ) (8)
其中, ( T T ^ T ^ T ) 是循环矩阵,与向量 ( b 0 ) 的乘法使用快速Fourier方法计算,计算量为 O ( N log ( N ) ) 。而稀疏矩阵与向量的乘法所需计算量为 O ( N ) ,对角矩阵与向量的乘法也是 O ( N ) 。进而 P ^ 与任意向量H的乘法 G ¯ : = P ^ H 可分为公式(9)中的5个步骤计算:
G ¯ F = F T H + F S H , ( step-1 ) G ¯ A = A G ¯ F , ( step-2 ) G ¯ B = B G ¯ F , ( step-3 ) G ¯ C = C T H + C S H , ( step-4 ) G ¯ = H − h ( G ¯ A + h G ¯ B + h G ¯ C ) . ( step-5 ) (9)
step | 计算公式 | 乘法计算量 | |
---|---|---|---|
step-1 | F T H + F S H | O ( N log ( N ) ) + O ( N ) | Toeplitz矩阵与向量乘法,稀疏矩阵与向量乘法 |
step-2 | A G ¯ F | O ( N ) | 对角矩阵与向量乘法 |
step-3 | B G ¯ F | O ( N log ( N ) ) | Toeplitz矩阵与向量乘法 |
step-4 | C T H + C S H | O ( N log ( N ) ) + O ( N ) | Toeplitz矩阵与向量乘法,稀疏矩阵与向量乘法 |
step-5 | H − h ( G ¯ A + h G ¯ B + h G ¯ C ) | O ( N ) | 数与向量乘法 |
表2. 公式(9)各步的计算量
如表2所示,我们给出了使用公式(9)计算 P ^ H 的各步骤的计算量,其中计算量最大的是Toeplitz矩阵与向量的快速计算,为 O ( N log ( N ) ) ,其余矩阵与向量的乘积中,计算量均为 O ( N ) ,因此使用公式(9)计算 P ^ H 的计算量为 O ( N log ( N ) ) 。
进而我们考虑GMRES算法(如算法1所示),该算法中计算量主要来源于矩阵 P ^ 与向量的乘法即第2行 P ^ Y D ( 0 ) 与第4行 P ^ v ( i ) 的计算,这个两步的计算量均为 O ( N 2 ) 。考虑矩阵 P ^ 与向量的快速计算格式公式(9),结合GMRES算法,我们得到算法2所示的改进算法,进而可以将第2行 P ^ Y D ( 0 ) 与第4行 P ^ v ( i ) 的计算量降为 O ( N log ( N ) ) ,从而优化整个算法的计算量。
Algorithm 1. GMRES algorithm for solving linear systems P ^ Y D = G ^
算法1. GMRES算法求解线性系统 P ^ Y D = G ^
Algorithm 2. Improved algorithm for solving linear systems P ^ Y D = G ^
算法2. 改进算法求解线性系统 P ^ Y D = G ^
Algorithm 3. UPDATA ( Y ¯ D , i ) algorithm
算法3. UPDATA ( Y ¯ D , i ) 算法
在本节中,我们通过数值算例说明改进算法求解线性系统(7)的高效性,实验主要对比GMRES求解线性系统(7)与改进算法求解线性系统(7)的CPU计算时间,收敛时的相对残差,迭代次数,迭代过程中的相对残差变化情况。
例:求解卷积型Volterra积分微分方程
y ′ ( t ) = 2 1 + t y ( t ) + e t + ∫ 0 t 2 cos ( t − s ) y ( s ) d s ,
其中 y ( 0 ) = 1 , t ∈ [ 0 , 8 ] ,其解析解是 y = ( 1 + t ) 2 e t 。数值实验是在Matlab2019a中实现的,其中,给定收敛条件为相对残 ε < 10 − 10 ,
ε = ‖ G ^ − P ^ Y D ‖ 2 / ‖ G ^ ‖ 2 .
GMRES | 改进算法 | |||||
---|---|---|---|---|---|---|
N | 相对残差 | 迭代次数 | CPU计算时间 | 相对残差 | 迭代次数 | CPU计算时间 |
100 | 1.26 × 10−11 | 17 | 4.18 × 10−3 | 1.26 × 10−11 | 17 | 5.17 × 10−3 |
200 | 1.52 × 10−11 | 17 | 5.85 × 10−3 | 1.52 × 10−11 | 17 | 7.12 × 10−3 |
400 | 1.62 × 10−11 | 17 | 7.43 × 10−3 | 1.62 × 10−11 | 17 | 9.91 × 10−3 |
800 | 1.65 × 10−11 | 17 | 9.55 × 10−3 | 1.65 × 10−11 | 17 | 1.16 × 10−2 |
1600 | 1.67 × 10−11 | 17 | 1.77 × 10−3 | 0.67 × 10−11 | 17 | 1.71 × 10−2 |
3200 | 1.67 × 10−11 | 17 | 6.55 × 10−3 | 0.67 × 10−11 | 17 | 2.96 × 10−2 |
表3. GMCM 0 , 2 :GMRES与改进算法求解时长对比
GMRES | 改进算法 | |||||
---|---|---|---|---|---|---|
N | 相对残差 | 迭代次数 | CPU计算时间 | 相对残差 | 迭代次数 | CPU计算时间 |
100 | 1.26 × 10−11 | 17 | 4.18 × 10−3 | 1.26 × 10−11 | 17 | 5.17 × 10−3 |
200 | 1.52 × 10−11 | 17 | 5.85 × 10−3 | 1.52 × 10−11 | 17 | 7.12 × 10−3 |
400 | 1.62 × 10−11 | 17 | 7.43 × 10−3 | 1.62 × 10−11 | 17 | 9.91 × 10−3 |
800 | 1.65 × 10−11 | 17 | 9.55 × 10−3 | 1.65 × 10−11 | 17 | 1.16 × 10−2 |
1600 | 1.67 × 10−11 | 17 | 1.77 × 10−3 | 1.67 × 10−11 | 17 | 1.71 × 10−2 |
3200 | 1.67 × 10−11 | 17 | 6.55 × 10−3 | 1.67 × 10−11 | 17 | 2.96 × 10−2 |
表4. GMCM 1 , 1 :GMRES与改进算法求解时长对比
对区间 [ 0 , 8 ] 作等距划分,取不同N,对于 GMCM 0 , 2 , GMCM 1 , 1 , GMCM 2 , 0 得到的线性系统分别使用GMRES算法和改进算法求解所得CPU计算时长如表3,表4和表5,图1给出了迭代过程中相对残差的变化情况,图2给出了两种求解算法的CPU计算时间。
从表3、表4和表5中可知对于指定算法结束条件相对残 ε < 10 − 10 ,GMRES算法和改进算法结束时相对残差几乎相同,且迭代次数相同,但随N增大,改进算法的CPU计算时间会小于GMRES算法的
GMRES | 改进算法 | |||||
---|---|---|---|---|---|---|
N | 相对残差 | 迭代次数 | CPU计算时间 | 相对残差 | 迭代次数 | CPU计算时间 |
100 | 1.26 × 10−11 | 17 | 4.18 × 10−3 | 1.26 × 10−11 | 17 | 5.17 × 10−3 |
200 | 1.52 × 10−11 | 17 | 5.85 × 10−3 | 1.52 × 10−11 | 17 | 7.12 × 10−3 |
400 | 1.62 × 10−11 | 17 | 7.43 × 10−3 | 1.62 × 10−11 | 17 | 9.91 × 10−3 |
800 | 1.65 × 10−11 | 17 | 9.55 × 10−3 | 1.65 × 10−11 | 17 | 1.16 × 10−2 |
1600 | 1.67 × 10−11 | 17 | 1.77 × 10−3 | 1.67 × 10−11 | 17 | 1.71 × 10−2 |
3200 | 1.67 × 10−11 | 17 | 6.55 × 10−3 | 1.67 × 10−11 | 17 | 2.96 × 10−2 |
表5. GMCM 2 , 0 :GMRES与改进算法求解时长对比
图1. 迭代过程中相对残差变化情况
CPU计算时间,当N增大一倍,GMRES算法的计算时间增加倍数逐渐趋近于4,改进算法的CPU计算时间增长倍数逐渐趋近于2。
图2. GMRES 与改进算法求解时对比
图1给出迭代过程中相对残差的变化情况,针对本文所取的例子,不同方法获得的线性系统在求解过程中相对残差没有较大差距,且GMRES方法和改进算法的相对残差也没有较大差距。在图2中,我们绘制了GMRES算法与改进算法求解 GMCM 0 , 2 , GMCM 1 , 1 , GMCM 2 , 0 的CPU计算时长,以及两条参考曲线 T 1 = 2 N 2 × 10 − 8 , T 2 = 1.5 N log N × 10 − 6 。当N增大时,GMRES算法的求解时间靠近 T 1 ,改进算法的求解时间靠近 T 2 ,也就是说GMERS的算法求解时间为 O ( N 2 ) ,GMRES的求解时间为 O ( N log ( N ) ) ,验证了第1节GMRES算法的计算量为 O ( N 2 ) ,改进算法的计算量为 O ( N log ( N ) ) 。而且 k 1 , k 2 的值对GMRES和改进算法的CPU计算时间影响不大,两种求解线性系统的算法与线性系统的维度 有关。此外,从图中可知随着N变大,改进算法的计算时间小于GMRES的计算时间且改进算法的CPU计算时间的增长率小于GMRES,因此改进算法能够快速高效计算卷积型VIDE离散出的大型线性系统。
使用广义多步配置方法( GMCM k 1 , k 2 )离散卷积型VIDE,分析离散后的线性系统的结构组成,结合Toeplitz矩阵与向量的快速计算,进而得到系数矩阵与向量的快速计算。使用GMRES算法与快速计算格式结合,构建了一种适合求解该类线性系统的改进算法,改进后的算法的计算量只需 O ( N log ( N ) ) ,比GMRES算法的计算量更小,从实验结果看,改进算法与GMRES算法在求解同一问题时,改进算法需要的求解时间比GMRES算法的求解时间更短,当N值增大时,改进算法在计算时间上更小,更具优势。因此改进算法可以高效求解这一类大规模线性系统。
李海洋,胡怀青,刘婧雅. 卷积型Volterra积分微分方程的一种快速算法A Fast Algorithm for Convolutional Volterra Integral Differential Equations[J]. 运筹与模糊学, 2023, 13(05): 5571-5580. https://doi.org/10.12677/ORF.2023.135556
https://doi.org/10.1017/CBO9780511543234
https://doi.org/10.1007/s002850050007
https://doi.org/10.3846/13926292.2003.9637219
https://doi.org/10.1137/17M114371X
https://doi.org/10.1016/j.apnum.2019.07.004
https://doi.org/10.1016/j.amc.2011.08.001
https://doi.org/10.1016/j.apnum.2018.01.001
https://doi.org/10.1016/j.apnum.2021.02.001
https://doi.org/10.1137/S0036142999336145
https://doi.org/10.1137/15M1006489
https://doi.org/10.1016/j.amc.2013.07.012
https://doi.org/10.1007/s11075-014-9870-8
https://doi.org/10.1007/s10915-016-0289-3
https://doi.org/10.1007/s11075-020-00917-6
https://doi.org/10.1016/j.apnum.2022.03.004
https://doi.org/10.1016/j.amc.2021.126685