当前位置: 首页 > news >正文

矩阵理论——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*deltaradius2 = 0.8*deltaB = np.array([[1,0],[0,0]])D = np.array([[0,-0.8],[0.5,0]])A = B+D*deltaa,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()

相关文章:

  • git基本用法和操作
  • 8、创建第一个鸿蒙页面并实现页面跳转
  • Asp.net MVC Api项目搭建
  • 德语B级SampleAcademy
  • 浏览器内置NoSQL数据库IndexedDB
  • 快速搭建本地的chatgpt
  • 什么是Mock?为什么要使用Mock呢?
  • GEM5 Garnet DVFS / NoC DVFS教程:ruby.clk_domain ruby.voltage_domain
  • squid代理服务器
  • 深入解析序列模型:全面阐释 RNN、LSTM 与 Seq2Seq 的秘密
  • js 对象数组删除某一个特定的对象
  • 数据结构八种内部排序算法c++实现
  • 【Java 进阶篇】Ajax 实现——JQuery 实现方式 `get` 与 `post`
  • MySQL中json类型,你使用过吗
  • R语言:利用biomod2进行生态位建模
  • ES6指北【2】—— 箭头函数
  • 《Javascript高级程序设计 (第三版)》第五章 引用类型
  • css属性的继承、初识值、计算值、当前值、应用值
  • Django 博客开发教程 8 - 博客文章详情页
  • flask接收请求并推入栈
  • Java精华积累:初学者都应该搞懂的问题
  • Java应用性能调优
  • nginx 负载服务器优化
  • pdf文件如何在线转换为jpg图片
  • PHP面试之三:MySQL数据库
  • Sass 快速入门教程
  • SpringCloud集成分布式事务LCN (一)
  • Vue全家桶实现一个Web App
  • 解析带emoji和链接的聊天系统消息
  • 浅谈Golang中select的用法
  • 使用Swoole加速Laravel(正式环境中)
  • 线性表及其算法(java实现)
  • #HarmonyOS:基础语法
  • (Python第六天)文件处理
  • (Redis使用系列) SpirngBoot中关于Redis的值的各种方式的存储与取出 三
  • (Repost) Getting Genode with TrustZone on the i.MX
  • (备忘)Java Map 遍历
  • (附源码)springboot课程在线考试系统 毕业设计 655127
  • (十八)SpringBoot之发送QQ邮件
  • (五)IO流之ByteArrayInput/OutputStream
  • (转)linux 命令大全
  • (转)Linux整合apache和tomcat构建Web服务器
  • (转载)hibernate缓存
  • * 论文笔记 【Wide Deep Learning for Recommender Systems】
  • **PHP分步表单提交思路(分页表单提交)
  • .mat 文件的加载与创建 矩阵变图像? ∈ Matlab 使用笔记
  • .net CHARTING图表控件下载地址
  • .NET CORE 第一节 创建基本的 asp.net core
  • .net core webapi Startup 注入ConfigurePrimaryHttpMessageHandler
  • .NET 线程 Thread 进程 Process、线程池 pool、Invoke、begininvoke、异步回调
  • .Net接口调试与案例
  • .net企业级架构实战之7——Spring.net整合Asp.net mvc
  • .NET运行机制
  • .one4-V-XXXXXXXX勒索病毒数据怎么处理|数据解密恢复
  • [ HTML + CSS + Javascript ] 复盘尝试制作 2048 小游戏时遇到的问题