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.

# 另请参阅

tridiag