Skip to content

MATLAB - 特征值和特征向量

MATLAB - 特征值与特征向量现代指南

Section titled “MATLAB - 特征值与特征向量现代指南”

特征值和特征向量是线性代数的核心概念,在科学和工程领域有着深远的应用。它们揭示了线性变换的基本性质。MATLAB 提供了强大的、数值稳定的函数来计算它们。

想象一个矩阵 A 是一个线性变换,它在空间中拉伸、收缩或旋转向量。这个变换的特征向量是一个特殊的非零向量 v,当变换 A 作用于它时,其方向不会改变。它只会被缩放(拉伸或收缩)。

对应的特征值 λ (lambda) 是特征向量被缩放的标量因子。这种关系由基本方程捕捉:

A * v = λ * v

其中 A 是一个方阵,v 是特征向量,λ 是特征值。

MATLAB 中用于此任务的主要函数是 eig。让我们探索其最常见用法。

e = eig(A)

这返回一个列向量 e,其中包含方阵 A 的特征值。

[V, D] = eig(A)
  • D 是一个对角矩阵,其中对角线元素 D(i,i) 是特征值。
  • V 是一个矩阵,其列 V(:,i) 是对应的右特征向量。
  • 此输出满足矩阵方程 A*V = V*D。

让我们使用一个表示沿 x 轴拉伸和沿 y 轴收缩的矩阵。特征向量和特征值应该是直观的。

% 变换:x 轴拉伸 3 倍,y 轴收缩 0.5 倍
A = [3 0;
0 0.5];
% 计算特征值和特征向量
[V, D] = eig(A);
% 以清晰的格式显示结果
lambda1 = D(1,1);
v1 = V(:,1);
lambda2 = D(2,2);
v2 = V(:,2);
fprintf('特征值 1: %.2f\n', lambda1);
disp('对应的特征向量 1:');
disp(v1);
fprintf('\n特征值 2: %.2f\n', lambda2);
disp('对应的特征向量 2:');
disp(v2);

输出将显示特征值 0.5 和 3.0,以及分别沿 y 轴 [0; 1] 和 x 轴 [1; 0] 的特征向量。这证实了我们的直觉:这些轴上的向量仅通过变换进行缩放。

对于大多数矩阵,特征向量不与轴对齐。

% 定义矩阵
A = [1 -1; 2 4];
% 计算特征值和特征向量
[V, D] = eig(A);
% 显示结果
eigenvalues = diag(D);
disp('特征值:');
disp(eigenvalues);
disp('特征向量(V 的列):');
disp(V);

您可以通过检查 A*V 是否接近 V*D 来验证结果的正确性。由于浮点算术的原因,它们可能不完全相等,因此我们检查差异是否非常小。

% 使用上一个示例中的 A、V 和 D
% 计算差值
residual = A*V - V*D;
% 计算最大绝对误差
max_error = max(abs(residual), [], 'all');
fprintf('\n验证:A*V - V*D 的最大误差为 %e\n', max_error);
% 该值应非常接近零,例如 1e-15。

为什么特征值和特征向量很重要?(实际应用)

Section titled “为什么特征值和特征向量很重要?(实际应用)”
  • 主成分分析(PCA):在数据科学和机器学习中,协方差矩阵的特征向量是主成分,用于降维。
  • 结构工程:它们用于查找结构的固有频率和振动模式,有助于防止共振。
  • 量子力学:在量子力学中,物理量由算子(矩阵)表示,其特征值是可能的测量值。
  • 图论:图的邻接矩阵中对应最大特征值的特征向量用于 Google 的 PageRank 等算法中,以确定网络中节点的重要性。
  • 稳定性分析:在控制系统中,系统矩阵的特征值决定其稳定性。如果所有特征值的实部都为负,则系统稳定。

eig 函数在高级数值线性代数方面具有更多功能:

  • 广义特征值问题:[V,D] = eig(A,B) 解决问题 A*V = B*V*D。这在有限元分析等领域很常见。
  • 数值稳定性:可以使用可选参数 'nobalance',但默认的 'balance' 选项在计算前对矩阵 A 进行置换和缩放,以提高数值精度。除非您是专家,否则建议坚持使用默认设置。