2026a
# dorr
对角占优、病态、三对角矩阵(稀疏矩阵)
函数库: TyMath
# 语法
A, v1, v2, v3 = dorr([T],n,theta=0.01)
# 说明
A,v1,v2,v3 = dorr([T],n,theta 返回 Dorr 矩阵,即 n×n 的行对角占优的三对角矩阵 A 以及定义 Dorr 矩阵的向量 v1, v2, v3。如果 theta 为较小的非负值,则该矩阵是病态的。theta 的默认值是 0.01。示例
# 示例
Dorr 矩阵及其生成向量的生成及性质
指定 n 为 5,生成 Dorr 矩阵及其生成向量。
using TyMath
n = 5
P, c, d, e = TestArrays.dorr(n)
P = 5×5 SparseMatrixCSC{Float64, Int64} with 13 stored entries:
2.72 -2.36 ⋅ ⋅ ⋅
-0.36 1.72 -1.36 ⋅ ⋅
⋅ -0.36 0.72 -0.36 ⋅
⋅ ⋅ -1.36 1.72 -0.36
⋅ ⋅ ⋅ -2.36 2.72
c = 4-element Vector{Float64}:
-0.36000000000000004
-0.36000000000000004
-1.3599999999999999
-2.3599999999999994
d = 5-element Vector{Float64}:
2.72
1.7200000000000002
0.7200000000000002
1.72
2.7199999999999993
e = 4-element Vector{Float64}:
-2.3600000000000003
-1.36
-0.3600000000000002
-0.36000000000000004
对于小的正 theta 值,矩阵 P 为病态矩阵。
cond(Matrix(P))
363.37448208825873
矩阵 P 的逆矩阵具有模有较大变化的列向量。
mapslices(norm,inv(Matrix(P)),dims=1)
ans = 1×5 Matrix{Float64}:
3.12256 22.2846 84.8119 22.2846 3.12256
矩阵 P 为行对角占优矩阵,其对角占优程度可以用公式 TestArrays.compar(P)*ones(n) = (theta*(n+1)^2).*[1,0,0,0,1] 表明,其中 theta 取默认值 0.01。
theta = 0.01
computeP1 = TestArrays.compar(P)*ones(n)
computeP2 = (theta*(n+1)^2).*[1,0,0,0,1]
absnorm = norm(abs.(computeP1-computeP2))
absnorm = 1.7554167342883506e-16
# 输入参数
n - 矩阵阶数正整数标量
矩阵阶数,指定为正整数标量。
theta - 矩阵条件数参数标量
矩阵条件数参数,指定为标量,默认为 0.01。如果 theta 为较小的非负值,则该矩阵是病态的。
T - 输出类型类型
输出类型,指定为类型(Type)。该参数为可选参数,如果不指定,会依据输入的默认值。如果可能,函数将会输出 T 指定类型的矩阵。
# 输出参数
A - 输出矩阵矩阵
输出矩阵,以矩形形式返回。
v1,v2,v3 - 矩阵生成向量向量
矩阵生成向量,以向量形式返回。A = TestArrays.tridiag(v1,v2,v3)。
# 参考
[1] F. W. Dorr, An example of ill-conditioning in the numerical solution of singular perturbation problems, Math. Comp.,25 (1971), pp. 271-283.