2026a

# condest


1-范数条件数估计

函数库: TyMath

# 语法

c,v = condest(A)
c,v = condest(A,t)
c,v = condest(rng,_)

# 说明

c,v = condest(A) 计算方阵 A 的 1-范数条件数的下限 c 以及向量 v。如果 c 较大,该向量是一个近似于空值的向量。v 满足 norm(A*v,1) = opnorm(A,1)*norm(v,1)/c。示例


c,v = condest(A,t) 更改 t,后者是一个正整数参数,等于基础迭代矩阵中的列数。增加列数通常会得到更佳的条件估计值,但会增加开销。默认值为 t = 2,在使用 2 以内的因子时始终可得到正确的估计值。


c,v = condest(rng,_) 使用上面所述的语法并固定 condest 使用的随机数种子。如果需要可重复的结果,则应先使用 rng 将随机数生成器设置为其启动设置,然后使用 condest。示例

# 示例

估计矩阵的 1-范数条件数估计

生成一个 2x2 的矩阵 A,并估计其条件数。

using TyMath
A = [4.1 2.8;9.7 6.6]
condA, = condest(A)
condA
condA = 2249.400000000008

计算其实际的 1-范数条件数。

opnorm(A,1)*opnorm(inv(A),1)
ans = 2249.400000000008
更改基础迭代矩阵的列数以改良结果

对于绝大多数矩阵,默认基础迭代矩阵有两列就可以得到比较好的估计,而且增加这个列数通常也不会得到更好的估计,但是对于部分矩阵,这并不正确。固定随机数种子(特意选取的)以生成 10x10 的随机矩阵 S。

using TyMath
rng = MT19937ar(131)
S = sprand(rng,10,10,0.5)

分别指定 t 为 2 和 3 估计其条件数,并指定随机数种子以固定结果。

cond2, = condest(rng,S,2)
cond3, = condest(rng,S,3)
cond2 = 37.05116443888037
cond3 = 37.05116443888037

提示

cond2、cond3 结果基于 julia1.10 版本,julia1.9 版本结果如下:

cond2 = 37.051164438880356
cond3 = 31.019664889774276

计算该矩阵的实际条件数,注意计算时应先将稀疏矩阵转为实矩阵。

S = collect(S)
opnorm(S,1)*opnorm(inv(S),1)
ans = 37.05116443888035

可以发现,指定 t 为 3 得到的矩阵条件数估计值实际上是错误的。

# 输入参数

A - 输入矩阵
方阵

输入矩阵,指定为矩阵。

t - 初始迭代矩阵的列数
2(默认) | 绝对值小于等于输入矩阵阶数的正整数

初始迭代矩阵的列数,指定为小于等于输入矩阵阶数的正整数,默认为 2。算法实际只会使用 t 的绝对值,当指定 t 为负数时,算法同时打印迭代信息。

rng - 随机数流
AbstractRNG

随机数流,指定为随机数种子。

# 输出参数

c - 条件数估计
标量

输入矩阵的 1-范数条件数估计,以标量形式返回。

v - 向量
向量

向量,以向量形式返回。满足 norm(A*v,1) = opnorm(A,1)*norm(v,1)/c。

# 提示

此函数对于稀疏矩阵特别有用。

# 算法

condest 基于 Hager [1] 的 1-范数条件估计量,是对 Higham 和 Tisseur [2] 所给出 Hager 估计量的面向块的推广。算法的核心涉及使用迭代搜索在不计算 的情况下估计 。这可归为凸包但不可微分的优化问题 ,并受 影响。

# 参考文献

[1] William W. Hager, “Condition Estimates,” SIAM J. Sci. Stat. Comput. 5, 1984, 311-316, 1984.

[2] Nicholas J. Higham and Françoise Tisseur, “A Block Algorithm for Matrix 1-Norm Estimation with an Application to 1-Norm Pseudospectra, “SIAM J. Matrix Anal. Appl., Vol. 21, 1185-1201, 2000.

# 另请参阅

cond | norm | normest