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

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

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

文章目录

  • 概念
  • 计算
  • 几何直观理解
  • 意义

概念

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

计算

按照上面定义,对于一个矩阵 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)方向也会被被拉长),所以整个图形表现为:两边拉长,且左低右高。

意义

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

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

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

http://www.lryc.cn/news/517967.html

相关文章:

  • Unity 热更新基础知识
  • 安全基础-互联网技术基础
  • 深度学习从入门到实战——卷积神经网络原理解析及其应用
  • React快速上手到项目实战总篇
  • HTMLHTML5革命:构建现代网页的终极指南 - 0. 课程目录设计
  • ffplay 命令行 从视频第N帧开始读取 ffmpeg 命令行 提取第N帧图片
  • Spring AMQP-保证消费者消息的可靠性
  • Linux(Centos 7.6)命令详解:mkdir
  • 在K8S上部署OceanBase的最佳实践
  • IDEA中Maven依赖包导入失败报红的潜在原因
  • 【计算机网络】课程 实验五 静态路由配置
  • 基于单片机的数字气压计设计
  • 【Docker项目实战】使用Docker部署Typemill轻量级平面文件CMS
  • react ts 定义基本类型,组件通过ref调用时类型提示
  • 二十三种设计模式-原型模式
  • 提升汽车金融租赁系统的效率与风险管理策略探讨
  • Spring Framework 5.3.x源码构建 (jdk-1.8, gradle 7.5.1, idea2024.3)
  • leetcode 2241. 设计一个 ATM 机器 中等
  • IO模型与NIO基础
  • 上门按摩系统架构与功能分析
  • ubuntu安装ssh9.2
  • linux wsl配置 redis远程连接
  • JVM 优化指南
  • 关机重启后,GitLab服务异常
  • 谷粒商城-高级篇完结-Sleuth+Zipkin 服务链路追踪
  • C语言基本知识复习浓缩版:标识符、函数、进制、数据类型
  • selenium已经登陆了 我怎么查看 网页 在fRequest xhr 的数据呢
  • Bash语言的数据库编程
  • 易支付二次元网站源码及部署教程
  • ios脚本巨魔商店多巴胺越狱基本操作教程