矩阵理论——Gerschgorin定理,以及用python绘制Gerschgorin圆盘动图

矩阵理论——Gerschgorin定理,以及用python绘制Gerschgorin圆盘动图

在矩阵的特征值估计理论当中,有一节是盖尔圆盘定理:

对于一个n阶复数矩阵A,每个特征值lambda位于至少一个Gerschgorin圆盘中,这些圆盘的中心为矩阵A的对角线元素aii,半径为该行(或列)的非对角线元素的绝对值之和:

D(i) = {z ∈ C : |z - aii| ≤ Σ|aij|, j ≠ i}

其中,D(i)表示第i个Gerschgorin圆盘,aii表示矩阵A的第i行(或第i列)的对角线元素,aij表示矩阵A的第i行(或第i列)的非对角线元素。

根据Gerschgorin定理,可以得出以下结论:

  1. 矩阵A的所有特征值都位于所有Gerschgorin圆盘的并集内。
  2. 如果某个Gerschgorin圆盘不与其他任何圆盘有交集,则该圆盘内至少有一个特征值。
  3. 如果k个Gerschgorin圆盘连通,则连通区域中有且仅有k个特征值。此时可能有的圆盘没有特征值

为了更好的理解这个定理,用python绘制动图,将更好理解这个过程。

其中:
A = [ 1 − 0.8 0.5 0 ] = B + D = [ 1 0 0 0 ] + [ 0 − 0.8 0.5 0 ] A = \begin{bmatrix} 1 & -0.8 \\ 0.5 & 0 \end{bmatrix} = B+D= \begin{bmatrix}1 & 0 \\0 & 0\end{bmatrix}+\begin{bmatrix}0 & -0.8 \\0.5 & 0\end{bmatrix} A=[10.50.80]=B+D=[1000]+[00.50.80]

A ( ε ) = B + ε D = [ 1 0 0 0 ] + ϵ [ 0 − 0.8 0.5 0 ] A(\varepsilon)=B+\varepsilon D= \begin{bmatrix}1 & 0 \\0 & 0\end{bmatrix}+\epsilon\begin{bmatrix}0 & -0.8 \\0.5 & 0\end{bmatrix} A(ε)=B+εD=[1000]+ϵ[00.50.80]

动图:
请添加图片描述

代码:

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Created on Mon Nov 20 13:48:19 2023

@author: wangshouguo
"""
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.animation import FuncAnimation

# 创建一个图形窗口
fig = plt.figure(figsize=(6, 6))
ax = plt.gca()
# 设置坐标轴范围
ax.set_xlim(-2, 3)
ax.set_ylim(-2, 3)

# 初始化两个空的圆对象
circle1 = plt.Circle((0, 0), 0.1, edgecolor='black', facecolor='none')
circle2 = plt.Circle((1, 0), 0.1, edgecolor='black', facecolor='none')

# 初始化两条空的线对象
line1, = ax.plot([], [], 'r-', lw=2)
line2, = ax.plot([], [], 'b-', lw=2)

x1,y1,x2,y2 = [],[],[],[]

# 初始化函数,用于绘制每一帧的内容
def init():
    
    ax.add_patch(circle1)
    ax.add_patch(circle2)
    line1.set_data([], [])
    line2.set_data([], [])
    return circle1, circle2, line1, line2

# 更新函数,用于更新每一帧的内容
def update(frame):
    delta = frame/100;
    
    radius1 = 0.5*delta
    radius2 = 0.8*delta
    
    B = np.array([[1,0],[0,0]])
    D = np.array([[0,-0.8],[0.5,0]])
    A = B+D*delta
    a,b = np.linalg.eigvals(A)
    
    circle1.center = (0, 0)
    circle1.set_radius(radius1)

    circle2.center = (1, 0)
    circle2.set_radius(radius2)
    
    x1.append(np.real(a))
    y1.append(np.imag(a))
    
    x2.append(np.real(b))
    y2.append(np.imag(b))
    
    line1.set_data(x1, y1)
    line2.set_data(x2, y2)
    
    if frame==99:
        x1.clear()
        x2.clear()
        y1.clear()
        y2.clear()
    return circle1, circle2, line1, line2



# 创建动画对象
ani = FuncAnimation(fig, update, frames=100, init_func=init,interval=20, blit=True)


# 显示动画
plt.show()

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 混淆矩阵是一种用来衡量分类器性能的工具。它通常用于二分类问题,但也可以用于多分类问题。混淆矩阵中的每一行代表实际的类别,每一列代表预测的类别。 要使用 Python 绘制混淆矩阵,你需要先安装 scikit-learn 库。然后,你可以使用它提供的 confusion_matrix 函数来计算混淆矩阵。例如: ```python from sklearn.metrics import confusion_matrix # 假设我们有以下真实类别和预测类别 y_true = [0, 0, 0, 1, 1, 1, 1, 1] y_pred = [0, 1, 0, 1, 0, 1, 0, 1] # 计算混淆矩阵 confusion_mat = confusion_matrix(y_true, y_pred) print(confusion_mat) ``` 输出的混淆矩阵看起来像这样: [[2 1] [2 3]] 这个矩阵中,第一行第一列 (0,0) 表示真实类别为 0,预测类别也为 0 的样本数量。第一行第二列 (0,1) 表示真实类别为 0,但预测类别为 1 的样本数量。第二行第一列 (1,0) 表示真实类别为 1,但预测类别为 0 的样本数量。第二行第二列 (1,1) 表示真实类别为 1,预测类别也为 1 的样本数量。 如果你想将混淆矩 ### 回答2: 要使用Python绘制混淆矩阵,可以使用一些常用的数据可视化库,如matplotlib和seaborn。下面是一个简单的步骤: 第一步:导入必要的库和混淆矩阵数据。 ```python import matplotlib.pyplot as plt import seaborn as sns from sklearn.metrics import confusion_matrix # 这里假设已经有了真实标签和预测标签 y_true = [0, 1, 0, 1, 2, 0] y_pred = [0, 0, 0, 1, 1, 2] ``` 第二步:计算混淆矩阵。 ```python # 使用sklearn的confusion_matrix函数来计算混淆矩阵 cm = confusion_matrix(y_true, y_pred) ``` 第三步:绘制混淆矩阵。 ```python # 使用seaborn的heatmap函数绘制混淆矩阵 sns.heatmap(cm, annot=True, cmap="Blues", fmt="d") plt.title("Confusion Matrix") plt.xlabel("Predicted") plt.ylabel("True") plt.show() ``` 在上述代码中,我们首先导入了需要的库,并定义了真实标签(y_true)和预测标签(y_pred)。然后,使用sklearn的confusion_matrix函数计算混淆矩阵。最后,使用seaborn的heatmap函数绘制混淆矩阵,其中设置了一些参数,如annot(显示数值)、cmap(颜色映射)和fmt(显示整数格式)。最后使用plt.title、plt.xlabel和plt.ylabel来设置标题和轴标签,并使用plt.show显示图像。 这样,就可以使用Python绘制混淆矩阵了。 ### 回答3: 混淆矩阵是用来评估分类模型性能的一种工具,可以直观地展示分类结果与实际情况的差异。下面是使用Python绘制混淆矩阵的步骤: 1. 导入所需库:首先,需要导入NumPy、Matplotlib和sklearn.metrics中的confusion_matrix函数。 2. 获取真实标签和预测标签:将分类模型的真实标签和预测标签以数组的形式存储起来。 3. 计算混淆矩阵:使用sklearn.metrics中的confusion_matrix函数,传入真实标签和预测标签,计算出混淆矩阵。 4. 绘制混淆矩阵:使用Matplotlib库中的imshow函数将混淆矩阵以色块的形式进行可视化展示。 5. 添加标签:使用Matplotlib库中的xticks和yticks函数为混淆矩阵的行和列添加标签,分别表示真实标签和预测标签。 6. 添加颜色映射:使用Matplotlib库中的colorbar函数为混淆矩阵添加颜色映射,以帮助读者更好地理解混淆矩阵。 7. 显示图像:使用Matplotlib库中的show函数显示混淆矩阵图像。 下面是一个例子: ```python import matplotlib.pyplot as plt import numpy as np from sklearn.metrics import confusion_matrix # 获取真实标签和预测标签 y_true = np.array([0, 1, 1, 0, 1, 1]) y_pred = np.array([1, 0, 1, 0, 1, 0]) # 计算混淆矩阵 cm = confusion_matrix(y_true, y_pred) # 绘制混淆矩阵 plt.imshow(cm, cmap=plt.cm.Blues) # 添加标签 class_names = ['Negative', 'Positive'] tick_marks = np.arange(len(class_names)) plt.xticks(tick_marks, class_names) plt.yticks(tick_marks, class_names) # 添加颜色映射 plt.colorbar() # 显示图像 plt.show() ``` 运行以上代码,就可绘制出混淆矩阵图像。图中的x轴表示预测标签,y轴表示真实标签,每个格子的颜色深浅表示分类结果的准确性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值