我对没有施加边界条件的刚度矩阵的最小非零特征值以及该特征值的数值计算的稳定性存在疑问。我有一个刚度矩阵序列,其中最小的非零特征值在序列中的每个矩阵之间变化很大,而下一个最小的非零特征值似乎收敛到固定数。
动机是,我想计算刚度矩阵的“条件数”,但是由于刚度矩阵是奇异的,没有施加边界条件(0是特征值),因此我想将其计算为最大和最小的非零特征值。
我的刚度矩阵很稀疏,我使用scipy.sparse.linalg
和shift-invert方法来计算特征值。
# A is a sparse stiffness matrix
import scipy.sparse.linalg.
min_val, _ = sla.eigsh(A.tocsc(), k = 3, which='LM', sigma=-1e-7, maxiter=1000)
max_val, _ = sla.eigsh(A.tocsc(), k = 1, which='LM', maxiter=1000)
# min_val[0] contains the zero-eigenvalue
# min_val[1] contains the smallest non-zero eigenvalue
# min_val[2] contains the second smallest non-zero eigenvalue
为每个矩阵打印min_val
[4.17021319e-17 4.94195753e-03 4.94195753e-03]
[3.35565072e-17 4.61482071e-03 4.61482071e-03]
[6.76174490e-18 4.49595561e-03 4.49595561e-03]
[6.55273952e-18 4.23752495e-03 4.44777647e-03]
[1.58654697e-17 3.03181365e-03 4.42722084e-03]
[2.52031212e-17 2.28114607e-03 4.41821852e-03]
,对于前几个矩阵,最小和第二个最小的非零特征值相似,但对于第四个矩阵,此趋势停止。
最小非零特征值比第二最小非零特征值更不稳定的原因是什么?这很常见吗?这是什么意思?
提前感谢所有帮助!