【线性代数】通俗理解特征向量与特征值

这一块在线性代数中属于重点且较难理解的内容,下面仅个人学习过程中的体会,错误之处欢迎指出,有更简洁易懂的理解方式也欢迎留言学习。

文章目录

  • 概念
  • 计算
  • 几何直观理解
  • 意义
  • PS.适用

概念

矩阵本身就是一个线性变换,对一个空间中的向量应用这个矩阵,一般几何表现上为向量发生了旋转、伸缩、反射等变换。如果存在一个向量,在变换前变换后方向不变,这样的向量就是这个矩阵的特征向量。

计算

按照上面定义,对于一个矩阵 A A A和一个向量 v v v A ⋅ v = λ v A \cdot v=\lambda v Av=λv,也就是向量 v v v在变换前后只有长度上的变化,没有方向上的变化,这样的向量 v v v和缩放倍数 λ \lambda λ分别叫做特征值和特征向量。

以下面这个矩阵A为例计算特征值:
[ 2 1 0 1 ] \begin{bmatrix} 2&1 \\ 0&1 \end{bmatrix} [2011]
A ⋅ v = λ v A \cdot v=\lambda v Av=λv
=> A ⋅ v = λ I v A \cdot v=\lambda I v Av=λIv
=> ( A − λ I ) ⋅ v = 0 (A - \lambda I) \cdot v=\mathbf{0} (AλI)v=0
=> A − λ I = 0 A - \lambda I=0 AλI=0
=>
[ 2 − λ 1 0 1 − λ ] = 0 \begin{bmatrix} 2-\lambda&1 \\ 0&1-\lambda \end{bmatrix}=0 [2λ011λ]=0
=> ( 2 − λ ) ( 1 − λ ) = 0 (2-\lambda)(1-\lambda)=0 (2λ)(1λ)=0
λ = 1 \lambda=1 λ=1 λ = 2 \lambda=2 λ=2

1) λ = 1 \lambda=1 λ=1时: ( A − λ I ) ⋅ v = 0 (A - \lambda I) \cdot v=\mathbf{0} (AλI)v=0
=>
[ 1 1 0 0 ] [ x y ] = [ 0 0 ] \begin{bmatrix} 1&1 \\ 0&0 \end{bmatrix} \begin{bmatrix} x \\ y \end{bmatrix}= \begin{bmatrix} 0 \\ 0 \end{bmatrix} [1010][xy]=[00]
=>
x [ 1 0 ] + y [ 1 0 ] = [ 0 0 ] x \begin{bmatrix} 1\\ 0 \end{bmatrix}+ y \begin{bmatrix} 1\\ 0 \end{bmatrix}= \begin{bmatrix} 0 \\ 0 \end{bmatrix} x[10]+y[10]=[00]
=>
x + y = 0 x+y=0 x+y=0,所以(-1, 1)是 λ = 1 \lambda=1 λ=1时的一个特征向量。

2)同样的过程可以求出 λ = 2 \lambda=2 λ=2时(1, 0)是一个特征向量。

从计算过程还可以看出:特征值与特征向量的取值无关,只跟矩阵本身有关。且特征向量可以在该向量的所在直线上有无穷多个。

几何直观理解

上面计算的特征值和特征向量表明,在二维空间中对一个图形应用矩阵A的变换,该变换会将原图形在向量(1, -1)的方向维持不变,将向量(-1, 1)的方向拉伸2倍。

可视化:

import numpy as np
import matplotlib.pyplot as plt


# 定义一个二维椭圆
def generate_ellipse(num_points=100, a=2, b=1):
    theta = np.linspace(0, 2 * np.pi, num_points)
    x = a * np.cos(theta)
    y = b * np.sin(theta)
    return x, y


# 定义一个非对称变换矩阵
transformation_matrix = np.array([[2, 1],
                                  [0, 1]])

# 计算特征值和特征向量
eigenvalues, eigenvectors = np.linalg.eig(transformation_matrix)

# 生成原始椭圆
x, y = generate_ellipse()

# 将椭圆应用变换
xy_transformed = np.dot(transformation_matrix, np.array([x, y]))
x_transformed, y_transformed = xy_transformed

# 动态计算新的坐标轴范围
x_min, x_max = x_transformed.min(), x_transformed.max()
y_min, y_max = y_transformed.min(), y_transformed.max()
padding = 0.5  # 添加一些额外的空间

# 绘制原始和变换后的椭圆
fig, ax = plt.subplots(1, 2, figsize=(12, 6))

# 原始椭圆
ax[0].plot(x, y, color='b')
ax[0].set_title('Original Ellipse')
ax[0].set_xlim(-2.5, 2.5)  # 紧凑的范围
ax[0].set_ylim(-1.5, 1.5)
ax[0].set_aspect('equal', 'box')

# 变换后的椭圆
ax[1].plot(x_transformed, y_transformed, color='r')
ax[1].set_title('Transformed Ellipse')
ax[1].set_xlim(x_min - padding, x_max + padding)
ax[1].set_ylim(y_min - padding, y_max + padding)
ax[1].set_aspect('equal', 'box')

# 绘制特征向量
origin = np.array([[0, 0], [0, 0]])  # 原点
ax[1].quiver(*origin, eigenvectors[0, :], eigenvectors[1, :], color=['g', 'g'], angles='xy', scale_units='xy', scale=1)

# 在图形旁边显示变换矩阵和特征值
textstr = f'Transformation Matrix:\n{transformation_matrix}\n\n'
textstr += f'Eigenvalues:\n{eigenvalues}\n\n'
textstr += f'Eigenvectors:\n{eigenvectors}'

props = dict(boxstyle='round', facecolor='wheat', alpha=0.5)
plt.gcf().text(0.5, 0.02, textstr, fontsize=10, bbox=props)

plt.tight_layout()
plt.show()

在这里插入图片描述
绿色的是两个特征向量。

从左边椭圆 => 右边椭圆的变化过程, 可以看成是先将整个椭圆沿着向量(1, 0)方向拉伸2倍,后将图形在向量(-1, 1)方向还原(因为在上一步两边拉伸的过程中,每一个原刻度处的圆弧上下距离都会被拉远,所以(-1, 1)方向也会被被拉长),所以整个图形表现为:两边拉长,且左低右高。

意义

特征向量和特征值的意义个人理解主要在于用来描述矩阵所表示的线性变换,也就是用特征向量和特征值来近似刻画矩阵的效果。

怎么理解这种近似刻画呢?个人理解是,无论是一个平面图形还是立体图形,以及更高维…,只要几个不变的方向拉伸效果确定了,那么其他方向也就确定了,可以这么确定的理由是:线性变换! 线性,也就是不会出现陡增或陡减,是一种“平缓”的过渡。

特征向量和特征值也可以被用来简化矩阵高次幂的计算。

PS.适用

特征值和特征向量仅适用于方阵,因为只有方阵才不会有维度上的变化,向量在变换后维度不变,方向才可能保持不变。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/952459.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

SQL多表联查、自定义函数(字符串分割split)、xml格式输出

记录一个报表的统计,大概内容如下: 多表联查涉及的报表有:房间表、买家表、合同表、交易表、费用表、修改记录表 注意:本项目数据库使用的是sqlserver(mssql),非mysql。 难点1:业主信息&#…

python学opencv|读取图像(三十)使用cv2.getAffineTransform()函数倾斜拉伸图像

【1】引言 前序已经学习了如何平移和旋转缩放图像,相关文章链接为: python学opencv|读取图像(二十七)使用cv2.warpAffine()函数平移图像-CSDN博客 python学opencv|读取图像(二十八&#xff0…

C语言数据结构与算法(排序)详细版

大家好,欢迎来到“干货”小仓库!! 很高兴在CSDN这个大家庭与大家相识,希望能在这里与大家共同进步,共同收获更好的自己!!无人扶我青云志,我自踏雪至山巅!!&am…

【竞技宝】CS2:HLTV2024选手排名TOP4-NiKo

北京时间2025年1月11日,HLTV年度选手排名正在持续公布中,今日凌晨正式公布了今年的TOP4选手为G2(目前已转为至Falcons)战队的NiKo。 选手简介 NiKo是一名来自波黑的CS职业选手,现年26岁。作为DOTA2饱负盛名的职业选手,NiKo在CS1.6时代就已经开始征战职业赛场。2012年,年仅15岁…

IOS界面传值-OC

1、页面跳转 由 ViewController 页面跳转至 NextViewController 页面 &#xff08;1&#xff09;ViewController ViewController.h #import <UIKit/UIKit.h>interface ViewController : UIViewControllerend ViewController.m #import "ViewController.h" …

树的模拟实现

一.链式前向星 所谓链式前向星&#xff0c;就是用链表的方式实现树。其中的链表是用数组模拟实现的链表。 首先我们需要创建一个足够大的数组h&#xff0c;作为所有结点的哨兵位。创建两个足够大的数组e和ne&#xff0c;一个作为数据域&#xff0c;一个作为指针域。创建一个变…

【ArcGIS微课1000例】0138:ArcGIS栅格数据每个像元值转为Excel文本进行统计分析、做图表

本文讲述在ArcGIS中,以globeland30数据为例,将栅格数据每个像元值转为Excel文本,便于在Excel中进行统计分析。 文章目录 一、加载globeland30数据二、栅格转点三、像元值提取至点四、Excel打开一、加载globeland30数据 打开配套实验数据包中的0138.rar中的tif格式栅格土地覆…

Redis集群模式下主从复制和哨兵模式

Redis主从复制是由一个Redis服务器或实例(主节点)来控制一个Redis服务器或实例(从节点),从节点从主节点获取数据更新数据 集群模式下主从数据复制过程 从服务器连接到主服务器,发送SYNC命令。主服务器接收到SYNC命令后,开始执行BGSAVE命令生成RDB文件。主服务器BGSAVE执…

高难度下的一闪---白金ACT游戏设计思想的一点体会

1、以前光环的开发者好像提出过一个理论&#xff0c;大意是游戏要让玩家保持30秒的循环&#xff0c; 持续下去。大意跟后来的心流接近。 2、根据我自身的开发体会&#xff0c;想要保持正回路&#xff0c;并不容易。 一个是要保持适当的挑战性&#xff0c;毫无难度的低幼式玩法…

页面滚动下拉时,元素变为fixed浮动,上拉到顶部时恢复原状,js代码以视频示例

页面滚动下拉时,元素变为fixed浮动js代码 以视频示例 <style>video{width:100%;height:auto}.div2,#float1{position:fixed;_position:absolute;top:45px;right:0; z-index:250;}button{float:right;display:block;margin:5px} </style><section id"abou…

算法题(32):三数之和

审题&#xff1a; 需要我们找到满足以下三个条件的所有三元组&#xff0c;并存在二维数组中返回 1.三个元素相加为0 2.三个元素的下标不可相同 3.三元组的元素不可完全相同 思路&#xff1a; 混乱的数据不利于进行操作&#xff0c;所以我们先进行排序 我们可以采取枚举的方法进…

科研绘图系列:R语言绘制Y轴截断分组柱状图(y-axis break bar plot)

禁止商业或二改转载,仅供自学使用,侵权必究,如需截取部分内容请后台联系作者! 文章目录 介绍特点意义加载R包数据下载导入数据数据预处理画图输出总结系统信息介绍 Y轴截断分组柱状图是一种特殊的柱状图,其特点是Y轴的刻度被截断,即在某个范围内省略了部分刻度。这种图表…

PHP民宿酒店预订系统小程序源码

&#x1f3e1;民宿酒店预订系统 基于ThinkPHPuniappuView框架精心构建的多门店民宿酒店预订管理系统&#xff0c;能够迅速为您搭建起专属的、功能全面且操作便捷的民宿酒店预订小程序。 该系统不仅涵盖了预订、退房、WIFI连接、用户反馈、周边信息展示等核心功能&#xff0c;更…

前端 图片上鼠标画矩形框,标注文字,任意删除

效果&#xff1a; 页面描述&#xff1a; 对给定的几张图片&#xff0c;每张能用鼠标在图上画框&#xff0c;标注相关文字&#xff0c;框的颜色和文字内容能自定义改变&#xff0c;能删除任意画过的框。 实现思路&#xff1a; 1、对给定的这几张图片&#xff0c;用分页器绑定…

shell练习

1、shell 脚本写出检测 /tmp/size.log 文件如果存在显示它的内容&#xff0c;不存在则创建一个文件将创建时间写入。 2、写一个 shel1 脚本,实现批量添加 20个用户,用户名为user01-20,密码为user 后面跟5个随机字符。 3、编写个shel 脚本将/usr/local 日录下大于10M的文件转移…

day01-HTML-CSS——基础标签样式表格标签表单标签

目录 此篇为简写笔记下端1-3为之前笔记&#xff08;强迫症、保证文章连续性&#xff09;完整版笔记代码模仿新浪新闻首页完成审核不通过发不出去HTMLCSS1 HTML1.1 介绍1.1.1 WebStrom中基本配置 1.2 快速入门1.3 基础标签1.3.1 标题标签1.3.2 hr标签1.3.3 字体标签1.3.4 换行标…

大疆上云API连接遥控器和无人机

文章目录 1、部署大疆上云API关于如何连接我们自己部署的上云API2、开启无人机和遥控器并连接自己部署的上云API如果遥控器和无人机没有对频的情况下即只有遥控器没有无人机的情况下如果遥控器和无人机已经对频好了的情况下 4、订阅无人机或遥控器的主题信息4.1、订阅无人机实时…

如何用 SSH 访问 QNX 虚拟机

QNX 虚拟机默认是开启 SSH 服务的&#xff0c;如果要用 SSH 访问 QNX 虚拟机&#xff0c;就需要知道虚拟机的 IP 地址&#xff0c;用户和密码。本文我们来看看如何获取这些参数。 1. 启动虚拟机 启动过程很慢&#xff0c;请耐心等待。 2. 查看 IP 地址 等待 IDE 连接到虚拟机。…

【Vue + Antv X6】可拖拽流程图组件

使用事项&#xff1a; ❗先放个组件上来&#xff0c;使用手册有空会补全 ❗需要下载依赖 “antv/x6”: “^2.18.1”, “antv/x6-plugin-dnd”: “^2.1.1”, 组件&#xff1a; 组件使用&#xff1a; <flowChart :key"flowChartKey" ref"flowChart" lef…

在线或离线llama.cpp安装和模型启动

该版本安装时间是2025-01-10&#xff0c;因为不同版本可能安装上会有所不同&#xff0c;下面也会讲到。 先说下问题——按照官方文档找不到执行命令llama-cli或./llama-cli 先附上llama.cpp的github地址&#xff1a;https://github.com/ggerganov/llama.cpp&#xff0c;build…