特征值分解eig

数学定义用语法

eig 用来计算 矩阵的特征值 和 特征向量(Eigenvalues/Eigenvectors)

cpp 复制代码
eig 用来求特征值/特征向量,是 PCA、法向量估计、点云几何分析、ICP 的核心基础工具。
cpp 复制代码
[V, D] = eig(A);
返回:

D:对角矩阵,包含特征值

V:每一列是一个特征向量

即:

A * V(:,i)  ≈  D(i,i) * V(:,i)

如果把矩阵 A 看成"变换",那么:

  • 特征向量 = 变换后方向不变的向量

  • 特征值 = 被放大的倍数

matlab 案例

例 1:对角矩阵

cpp 复制代码
A = [3 0; 0 2];
[V,D] = eig(A)




V =

     0     1
     1     0

// V 是特征向量

D =

     2     0
     0     3

>> 
//D 是特征值 

例 1:非对角矩阵例子(旋转效果)

cpp 复制代码
A = [2 1;
     1 2];
[V,D] = eig(A)



V =

   -0.7071    0.7071
    0.7071    0.7071


D =

     1     0
     0     3、


解释:

λ = 3 方向被拉伸最大 → 主方向

λ = 1 对应最"弱"方向

工程中的真实用途

PCA 求主方向(用 eig)

对协方差矩阵

cpp 复制代码
[V,D] = eig(C);


最大特征值 → 曲面主方向

最小特征值 → 法向量



所有点云法向量算法都用 eig

点云平面拟合(法向量 = 最小特征值方向)

cpp 复制代码
normal = V(:,1);   % 最小特征值对应

这是 PCL / Open3D / MATLAB 同一种逻辑

ICP 求解 SVD/EIG(旋转矩阵)

如果你不用 svd,你可以:

NDT、GICP 的协方差分析

特征值代表局部点云"扁平程度":

  • λ₁ ≪ λ₂, λ₃ → 非常平(地面)

  • λ₁ ≈ λ₂ ≈ λ₃ → 球状噪声

  • λ₁ ≪ λ₂ ≈ λ₃ → 线

GICP/NDT 就是用这些性质约束优化。

eigsvd 在 PCA 中的区别

PCA 本质在求什么?

PCA 要求:

  1. 主方向(Eigenvectors)

  2. 主方差大小(Eigenvalues)

等价于:

  • 对协方差矩阵做 特征分解(eig)

  • 或者对数据矩阵直接做 奇异值分解(svd)

两者结果 完全一致(只差符号与排序)。

eig 和 svd 的区别总结表

项目 eig svd
输入 协方差矩阵 C 原始数据矩阵 X
要求 C 必须对称 X 任意矩阵都行
输出 PCA 特征值、方向 PCA 特征值(σ²)和方向(U)
稳定性 稳定,但需要先算 C 最稳定(强烈推荐)
数据量很大时 C 是 d×d,小 X 是 N×d,可能巨大
工程实际使用 仅在维度低时用 深度学习、点云、视觉都用 SVD

数据量大时 → 用 SVD

维度小(3×3、6×6)时 → eig 足够快

数学关系

eig

svd

MATLAB 示例对比:

cpp 复制代码
% 1. 构造 2D 数据(一个斜方向拉伸的高斯)
rng(0);
theta = pi/6;
R = [cos(theta) -sin(theta); sin(theta) cos(theta)];
D = [3 0; 0 1];   % 方差不同
X = randn(1000,2) * D * R';  % N×2

Xc = X - mean(X);   % 去中心化

%% === 方法1:eig ===
C = cov(Xc);        % 协方差矩阵
[V_eig, D_eig] = eig(C);

%% === 方法2:svd ===
[U,S,V_svd] = svd(Xc,'econ');

% SVD 得到的特征值(注意平方/N)
lambda_svd = diag(S).^2 / size(X,1);

%% 比较
V_eig
V_svd
lambda_svd
diag(D_eig)

结论:

eig 是对协方差矩阵做特征分解;
svd 是对数据矩阵做奇异值分解。
svd 更稳定且适合大规模数据,
eig 只适合小规模(如 3×3)几何问题。

相关推荐
意图共鸣1 分钟前
意图共鸣科技《智能体接口化白皮书2.0》规则书,不是知识库——“人文交互”到底是什么?
人工智能·科技
IT_陈寒3 分钟前
Vue的computed属性差点让我加班到凌晨
前端·人工智能·后端
旖旎夜光3 分钟前
LeetCode 974:和可被 K 整除的子数组(前缀和) —— 题解
数据结构·c++·算法·leetcode·前缀和
无限码力7 分钟前
拼多多笔试真题 2026-8-30【唯一入栈出库序列】
算法·pdd笔试真题·拼多多春招笔试真题·拼多多秋招笔试真题·拼多多笔试真题题解·拼多多最新笔试题库
lvwangshu7 分钟前
分治:序列分治(CDQ)与点分治
算法·分治
阿崽meitoufa8 分钟前
Prompt Engineering for Agent:让 Agent 稳定运行的提示词写法
网络·人工智能·microsoft
qq_402995758 分钟前
诊断协议栈配置Agent
arm开发·人工智能·stm32·单片机·mcu
Geeys10 分钟前
京东商家商品推广全攻略
大数据·人工智能
weixin_4462608512 分钟前
大语言模型解读、嵌入向量组织、图谱涌现:基于智能体驱动的科学知识编译
人工智能·语言模型·自然语言处理
无限码力12 分钟前
2026-8-30拼多多笔试真题-哪个查阅窗能留空(C++/Py/Java /Js/Go)
算法·pdd·pdd笔试真题·拼多多春招笔试真题·拼多多秋招笔试真题·拼多多笔试真题题解·拼多多笔试题解