Gershgorin圆盘定理
阿里云国内75折 回扣 微信号:monov8 |
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6 |
计算方法
圆盘定理Gershgorin Circle Theorem是用来预估矩阵特征值的范围的。这个定理用起来相当简单。对于一个
n
×
n
n\times n
n×n的方阵来说有
n
n
n个行圆盘和列圆盘它的特征值就位于这些圆盘中。所谓的圆盘Gershgorin disk,就是复平面上的一个圆它有中心和半径组成,是这样定义的
D
(
a
,
r
)
=
{
x
∈
C
:
∣
x
−
a
∣
≤
r
}
D(a,r)=\{x \in \mathbb{C}:|x-a|\le r\}
D(a,r)={x∈C:∣x−a∣≤r}
从定义看表示一个点的集合那么中心和半径怎么确定呢中心就是矩阵的对角线元素半径则分两种行圆盘和列圆盘。行圆盘的半径就是某一行除了对角线元素外所有元素的模长的和列圆盘则是某一列除了对角线元素外所有元素的模长的和。既然每个中心有两个半径那肯定取最小的那个半径喽把半径用
r
r
r表示那么半径就是
r
i
=
m
i
n
(
∑
j
=
1
,
j
≠
i
n
∣
a
i
j
∣
,
∑
j
=
1
,
j
≠
i
n
∣
a
j
i
∣
)
r_i=min(\sum_{j=1,j\ne i}^{n}|a_{ij}|,\sum_{j=1,j\ne i}^{n}|a_{ji}|)
ri=min(j=1,j=i∑n∣aij∣,j=1,j=i∑n∣aji∣)
举例
比如计算这个矩阵的圆盘:
A
=
(
3
0.4
0.2
0.2
0.2
3
0.1
0.1
0.4
0.5
4
0.5
−
0.3
1
0.5
1
)
A=\begin{pmatrix}3 & 0.4 & 0.2 & 0.2\\ 0.2 & 3 & 0.1 & 0.1\\ 0.4 & 0.5 & 4 & 0.5\\ -0.3 & 1 & 0.5 & 1\\ \end{pmatrix}
A=
30.20.4−0.30.430.510.20.140.50.20.10.51
得到的结果就是
D
(
3
,
0.8
)
,
D
(
3
,
0.4
)
,
D
(
4
,
0.8
)
,
D
(
1
,
0.8
)
D(3,0.8),D(3,0.4),D(4,0.8),D(1,0.8)
D(3,0.8),D(3,0.4),D(4,0.8),D(1,0.8)
因为
D
(
3
,
0.4
)
D(3,0.4)
D(3,0.4)比
D
(
3
,
0.8
)
D(3,0.8)
D(3,0.8)范围更小所以最终结果是
D
(
3
,
0.4
)
,
D
(
4
,
0.8
)
,
D
(
1
,
0.8
)
D(3,0.4),D(4,0.8),D(1,0.8)
D(3,0.4),D(4,0.8),D(1,0.8)
所以矩阵A的特征值就位于复平面上这些圆盘中。
python实现
这种实现代码非常简单
def gershgorin_disk(self):
disks = [[0, 0] for _ in self.__lines]
n = len(self.__lines)
for i in range(n):
d = disks[i]
d[0]= self.__lines[i][i]
line_radius = 0
for j in range(n):
if j != i:
line_radius += abs(self.__lines[j][i])
column_radius = 0
for j in range(n):
if j != i:
column_radius += abs(self.__lines[i][j])
d[1] = min(line_radius, column_radius)
return disks