矩阵的范数、谱半径和条件数

1. 矩阵范数
范数常被用来度量某个向量空间(或矩阵)中的每个向量的长度或大小。
其性质具有:
1) 非负性(正定性):$\left\| x\right\|\geqslant 0$,当且仅当$x=0$时,$\left\| x\right\|=0$
2) 齐次性:$\left\| \alpha x\right\|=\left| \alpha \right| \left\| x\right\|,\alpha \in R$
3) 三角不等式:$\left\|x+y\right\|\leqslant \left\|x\right\|+\left\|y\right\|,x,y\in S$
有三种常用范数:
1-范数:$\left \| A \right \|_{1}= \mathop{max}\limits_{1\le j\le n}\sum\limits_{i=1}^m\left | a_{i,j} \right |$,又被称为列和范数 ,是矩阵中每个列向量中元素绝对值之和的最大值;
2-范数:$\left \| A \right \|_{2}=\sqrt{\lambda _{1}}$,其中,$\lambda _{1}$为矩阵$A^{T}A$的特征值绝对值中的最大值,又被称为谱范数,是矩阵$A^{T}A$的特征值绝对值中的最大值的开平方;
$\infty$-范数:$\left \| A \right \|_{\infty}= \mathop{max}\limits_{1\le i\le n}\sum\limits_{j=1}^{m}\left | a_{i,j} \right |$,又被称为行和范数,是矩阵中每个行向量中元素绝对值之和的最大值。
在Python中 常用numpy.linalg.norm求范数,其形式为:numpy.linalg.norm(A, ord = B)
其中,A为矩阵,ord为范数类型,默认为2,$\infty$-范数为np.inf
例如:
import numpy as np
A=np.array([[1,-1,2],[0,2,-3],[4,1,1]])
x=np.array([[1],[1],[-1]])
Ax=np.dot(A,x)#矩阵相乘,求Ax
Ax_norm = np.linalg.norm(Ax,ord = np.inf)#计算∞范数
print(Ax)
print(Ax_norm)
其结果为:
[[-2]
[ 5]
[ 4]]
5.0
2. 矩阵的谱半径
矩阵的谱半径为矩阵的特征值的绝对值中的最大值,表示为:$\rho(A)=max(\left| \lambda _{i}\right|) $
对于求解谱半径的问题,可以转化为求特征值的绝对值中的最大值,求特征值常采用numpy.linalg.eig(A)
e,v=np.linalg.eig(A)#求A的特征值和特征向量e,v
spectural_radius = np.max(np.abs(e))#选择特征值的绝对值的最大值
print(spectural_radius)
其结果为:
4.060647027554143
3. 矩阵的条件数
矩阵A的条件数是判断矩阵病态与否的一种度量,条件数越大矩阵越病态。其表达式通常为:$cond(A)=\left \| A^{-1} \right \|\left \| A \right \| $
由此可以看出矩阵的条件数与范数有关。
通常使用的条件数有:
(1) $cond(A)_{\infty}=\left \| A^{-1} \right \| _{\infty} \left \| A \right \| _{\infty} $
(2) $cond(A)_{2}=\left \| A \right \| _{2} \left \| A^{-1} \right \| _{2}=\sqrt{\frac{\lambda _{max}(A^{T} A) }{\lambda _{min} (AA^{T}) } } $
又被称为谱条件数,当A为对称矩阵时,
$cond(A)_{2} =\sqrt{\frac{\lambda _{1} }{\lambda _{n} } } $
其中,$\lambda _{1}$和$\lambda _{n}$为A的特征值的绝对值的最大和最小值。
A_norm = np.linalg.norm(A,ord = np.inf)
A_inverse = np.linalg.inv(A)
A_inverse_norm = np.linalg.norm(A_inverse,ord = np.inf)
cond_A = A_norm * A_inverse_norm
print(cond_A)
结果为:
132.0