当前位置: 首页 > 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)方向也会被被拉长),所以整个图形表现为:两边拉长,且左低右高。

意义

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

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

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

相关文章:

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

这一块在线性代数中属于重点且较难理解的内容,下面仅个人学习过程中的体会,错误之处欢迎指出,有更简洁易懂的理解方式也欢迎留言学习。 文章目录 概念计算几何直观理解意义 概念 矩阵本身就是一个线性变换,对一个空间中的向量应用…...

Unity 热更新基础知识

文章目录 1.一些名词2.三种编译方式3.Unity 两种脚本后端3.1 Mono3.2 IL2CPP3.3 对比 1.一些名词 IL(Intermediate Language):中间语言(类似于汇编代码)CIL(Common Intermediate Language)&…...

安全基础-互联网技术基础

互联网技术基础 概述:计算机网络、网络协议、HTTP协议、前端与后端技术、Web服务器、数据库以及浏览器等 目录 互联网技术基础前言一、计算机网络定义二、网络协议和协议分层1.OSI七层模型2.TCP/IP四层模型 三、HTTP协议1、HTTP协议的特点2、HTTP请求3、HTTP响应4、…...

深度学习从入门到实战——卷积神经网络原理解析及其应用

卷积神经网络CNN 卷积神经网络前言卷积神经网络卷积的填充方式卷积原理展示卷积计算量公式卷积核输出的大小计算感受野池化自适应均值化空洞卷积经典卷积神经网络参考 卷积神经网络 前言 为什么要使用卷积神经网络呢? 首先传统的MLP的有什么问题呢? - …...

React快速上手到项目实战总篇

React核心价值与前置知识 时刻保持对知识的渴望 家人们 开学!!! 核心价值 组件化(易开发易维护) 数据驱动视图 :定义好数据和ui的显示规则 即UIf(state) 只关注业务数据修改,不在操作DOM 增加开发效率 使用vite创建Recat项目 …...

HTMLHTML5革命:构建现代网页的终极指南 - 0. 课程目录设计

结构清晰,层层递进 课程从基础知识(如HTML学前必知)开始,逐步深入到高级应用(如PWA配置和WebApp优化)。每个模块都有明确的目标,适合零基础学员逐步掌握HTML。 覆盖范围广 这套课程涵盖了HTM…...

ffplay 命令行 从视频第N帧开始读取 ffmpeg 命令行 提取第N帧图片

ffmpeg中没有直接的命令读取第N帧 但是可以通过 t N/framerate 来获取到具体第N帧的时间 然后用 -ss t进行跳转。 比如帧率(frame rate)为24fps的视频G:/1/1.mp4文件从第1000帧开始进行播放,先计算出时间为 t 41.66666 ffplay -i G:/1/1.…...

Spring AMQP-保证消费者消息的可靠性

为什么要保证消息的可靠性? 当MQ向消费者发送一个消息之后需要得到消费者的状态,因为消息并不一定就真的被消费者给消费了,可能在消费的过程中出现了一些意外,比如 1. 网络问题 2. 消息转换有问题 3. 消费者本身的业务处理有问题 …...

Linux(Centos 7.6)命令详解:mkdir

1.命令作用 如果目录还不存在,则创建目录(Create the DIRECTORY, if they do not already exist.) 2.命令语法 Usage: mkdir [OPTION]... DIRECTORY... 3.参数详解 OPTION: -m, --modeMODE,创建新目录同时设置权限模式-p, --parents,创…...

在K8S上部署OceanBase的最佳实践

在K8S上部署OceanBase的最佳实践 目录 1. 背景与选型 1.1 为什么选择OB1.2 为什么选择ob-operator实现OB on K8S 2. 部署实操 2.1 环境准备2.2 安装 ob-operator2.3 配置 OB 集群2.4 配置 OBProxy 集群2.5 Headless Service 和 CoreDNS 配置2.6 监控与运维 2.6.1 Promethues部…...

IDEA中Maven依赖包导入失败报红的潜在原因

在上网试了别人的八个问题总结之后依然没有解决&#xff1a; IDEA中Maven依赖包导入失败报红问题总结最有效8种解决方案_idea导入依赖还是报红-CSDN博客https://blog.csdn.net/qq_43705131/article/details/106165960 江郎才尽之后突然想到一个原因&#xff1a;<dep…...

【计算机网络】课程 实验五 静态路由配置

实验五 静态路由配置 一、实验目的 理解静态路由的工作原理&#xff0c;掌握如何配置静态路由。 二、实验分析与设计 【背景描述】 假设校园网分为 2 个区域&#xff0c;每个区域内使用 1 台路由器连接 2 个子网&#xff0c; 现要在路由器上 做适当配置&#xff0c;实现校…...

基于单片机的数字气压计设计

摘要:在嵌入式技术快速发展过程中&#xff0c;智能测量仪器被广泛应用于工业生产以及人们日常生活领域。数字气压计在实际应用中&#xff0c;利用气压传感器检测环境中的压力大小&#xff0c;便于实现对设备进行智能化的控制操作。数字气压计在气象监测、矿产开采、科学实验等环…...

【Docker项目实战】使用Docker部署Typemill轻量级平面文件CMS

【Docker项目实战】使用Docker部署Typemill轻量级平面文件CMS 一、Typemill介绍1.1 Typemill简介1.2 主要特点1.3 主要使用场景二、本次实践规划2.1 本地环境规划2.2 本次实践介绍三、本地环境检查3.1 检查Docker服务状态3.2 检查Docker版本3.3 检查docker compose 版本四、下载…...

react ts 定义基本类型,组件通过ref调用时类型提示

记录&#xff0c;以防忘记 子组件 import React, { forwardRef, Ref, useImperativeHandle, useState } from react;// 类型定义方式1 interface IProps {/**参数1 */params1: number | string | undefined/**参数2 */params2: number | string | undefined/**方法 */openDia…...

二十三种设计模式-原型模式

原型模式&#xff08;Prototype Pattern&#xff09;是一种创建型设计模式&#xff0c;它通过拷贝现有的实例来创建新的实例&#xff0c;而不是通过新建实例。这种方式可以避免复杂的构造过程&#xff0c;同时还能保持对象的创建和使用分离&#xff0c;提高系统的灵活性和扩展性…...

提升汽车金融租赁系统的效率与风险管理策略探讨

内容概要 在汽车金融租赁系统这个复杂的生态中&#xff0c;提升整体效率是每个企业都渴望达成的目标。首先&#xff0c;优化业务流程是实现高效运行的基础。通过分析目前的流程&#xff0c;找出冗余环节并进行简化&#xff0c;能够帮助企业缩短审批时间&#xff0c;提高客户满…...

Spring Framework 5.3.x源码构建 (jdk-1.8, gradle 7.5.1, idea2024.3)

1、下载jdk安装并配置环境变量&#xff08;自行百度&#xff09; https://www.oracle.com/java/technologies/downloads/#java8 2、下载spring-framework源码&#xff0c;切换分支到5.3.x https://github.com/spring-projects/spring-framework.git 备用地址 https://gitco…...

leetcode 2241. 设计一个 ATM 机器 中等

一个 ATM 机器&#xff0c;存有 5 种面值的钞票&#xff1a;20 &#xff0c;50 &#xff0c;100 &#xff0c;200 和 500 美元。初始时&#xff0c;ATM 机是空的。用户可以用它存或者取任意数目的钱。 取款时&#xff0c;机器会优先取 较大 数额的钱。 比方说&#xff0c;你想…...

IO模型与NIO基础

File类 File类主要是JAVA为文件这块的操作(如删除、新建等)而设计的相关类File类的包名是java.io&#xff0c;其实现了Serializable, Comparable两大接口以便于其对象可序列化和比较 创建一个文件/文件夹 删除文件/文件夹 获取文件/文件夹 判断文件/文件夹是否存在 对文件夹进…...

DeepSeek 赋能智慧能源:微电网优化调度的智能革新路径

目录 一、智慧能源微电网优化调度概述1.1 智慧能源微电网概念1.2 优化调度的重要性1.3 目前面临的挑战 二、DeepSeek 技术探秘2.1 DeepSeek 技术原理2.2 DeepSeek 独特优势2.3 DeepSeek 在 AI 领域地位 三、DeepSeek 在微电网优化调度中的应用剖析3.1 数据处理与分析3.2 预测与…...

从WWDC看苹果产品发展的规律

WWDC 是苹果公司一年一度面向全球开发者的盛会&#xff0c;其主题演讲展现了苹果在产品设计、技术路线、用户体验和生态系统构建上的核心理念与演进脉络。我们借助 ChatGPT Deep Research 工具&#xff0c;对过去十年 WWDC 主题演讲内容进行了系统化分析&#xff0c;形成了这份…...

【Linux】C语言执行shell指令

在C语言中执行Shell指令 在C语言中&#xff0c;有几种方法可以执行Shell指令&#xff1a; 1. 使用system()函数 这是最简单的方法&#xff0c;包含在stdlib.h头文件中&#xff1a; #include <stdlib.h>int main() {system("ls -l"); // 执行ls -l命令retu…...

CentOS下的分布式内存计算Spark环境部署

一、Spark 核心架构与应用场景 1.1 分布式计算引擎的核心优势 Spark 是基于内存的分布式计算框架&#xff0c;相比 MapReduce 具有以下核心优势&#xff1a; 内存计算&#xff1a;数据可常驻内存&#xff0c;迭代计算性能提升 10-100 倍&#xff08;文档段落&#xff1a;3-79…...

3403. 从盒子中找出字典序最大的字符串 I

3403. 从盒子中找出字典序最大的字符串 I 题目链接&#xff1a;3403. 从盒子中找出字典序最大的字符串 I 代码如下&#xff1a; class Solution { public:string answerString(string word, int numFriends) {if (numFriends 1) {return word;}string res;for (int i 0;i &…...

网络编程(UDP编程)

思维导图 UDP基础编程&#xff08;单播&#xff09; 1.流程图 服务器&#xff1a;短信的接收方 创建套接字 (socket)-----------------------------------------》有手机指定网络信息-----------------------------------------------》有号码绑定套接字 (bind)--------------…...

Aspose.PDF 限制绕过方案:Java 字节码技术实战分享(仅供学习)

Aspose.PDF 限制绕过方案&#xff1a;Java 字节码技术实战分享&#xff08;仅供学习&#xff09; 一、Aspose.PDF 简介二、说明&#xff08;⚠️仅供学习与研究使用&#xff09;三、技术流程总览四、准备工作1. 下载 Jar 包2. Maven 项目依赖配置 五、字节码修改实现代码&#…...

前端中slice和splic的区别

1. slice slice 用于从数组中提取一部分元素&#xff0c;返回一个新的数组。 特点&#xff1a; 不修改原数组&#xff1a;slice 不会改变原数组&#xff0c;而是返回一个新的数组。提取数组的部分&#xff1a;slice 会根据指定的开始索引和结束索引提取数组的一部分。不包含…...

Python网页自动化Selenium中文文档

1. 安装 1.1. 安装 Selenium Python bindings 提供了一个简单的API&#xff0c;让你使用Selenium WebDriver来编写功能/校验测试。 通过Selenium Python的API&#xff0c;你可以非常直观的使用Selenium WebDriver的所有功能。 Selenium Python bindings 使用非常简洁方便的A…...

高防服务器价格高原因分析

高防服务器的价格较高&#xff0c;主要是由于其特殊的防御机制、硬件配置、运营维护等多方面的综合成本。以下从技术、资源和服务三个维度详细解析高防服务器昂贵的原因&#xff1a; 一、硬件与技术投入 大带宽需求 DDoS攻击通过占用大量带宽资源瘫痪目标服务器&#xff0c;因此…...