特征值分解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 分钟前
108.将有序数组转换为二叉搜索树
数据结构·算法·leetcode
iAkuya11 分钟前
(leetcode)力扣100 75前K个高频元素(堆)
java·算法·leetcode
逻辑君16 分钟前
根与星辰【第2章】
人工智能·程序人生
施法老农19 分钟前
openclaw和opencode组合使用
人工智能
2501_9269783322 分钟前
提高认知的位置---存在、认知、程序的逻辑位置
人工智能·经验分享
AI袋鼠帝22 分钟前
豆包2.0来了!中国版Trae免费用~
人工智能·ai编程·豆包marscode
沪漂阿龙31 分钟前
LLM底层机制深度解析:从Transformer到推理优化的完整技术地图
人工智能·深度学习·transformer
载数而行52035 分钟前
算法系列2之最短路径
c语言·数据结构·c++·算法·贪心算法
无忧智库44 分钟前
某低空经济示范区“十五五”通感一体化低空智联网与飞行服务保障体系建设方案深度解析(WORD)
人工智能
袁气满满~_~1 小时前
深度学习笔记五
人工智能·深度学习