📜  MATLAB 中的特征值和特征向量(1)

📅  最后修改于: 2023-12-03 15:17:34.296000             🧑  作者: Mango

MATLAB 中的特征值和特征向量

在数学和计算机科学中,特征值和特征向量是一种重要的概念,常常用于矩阵和线性代数中。在 MATLAB 中,我们可以使用相应的函数来计算一个矩阵的特征值和特征向量,并应用它们到各种问题中。

特征值和特征向量的定义

对于一个方阵 $A$ ,如果存在一个实数 $\lambda$ 和一个非零向量 $\boldsymbol{x}$ ,使得 $A\boldsymbol{x} = \lambda\boldsymbol{x}$ ,那么 $\lambda$ 就是 $A$ 的一个特征值,$\boldsymbol{x}$ 就是 $A$ 对应于特征值 $\lambda$ 的一个特征向量。

我们可以将上述定义改写为:解方程组 $(A - \lambda I)\boldsymbol{x} = \boldsymbol{0}$ (其中 $I$ 是单位矩阵),则 $\lambda$ 是 $A$ 的一个特征值,而 $\boldsymbol{x}$ 是关于 $\lambda$ 的特解。

特征值和特征向量通常用于表达对称矩阵的几何特性。通过对称矩阵的特征分解,我们可以将其分解为一些特征向量的线性组合,其中每个特征向量与其对应的特征值相关联。

MATLAB 中的特征值和特征向量计算

在 MATLAB 中,我们可以使用 eig 函数来计算矩阵的特征值和特征向量。

A = [1 2; 3 4];
[V, D] = eig(A);

其中, A 是一个 $2 \times 2$ 的矩阵, V 是其特征向量矩阵, D 是其特征值矩阵。特征向量按列排列,特征值按对角线排列。

我们可以使用 diag 函数来提取特征值矩阵的对角线元素:

lambda = diag(D);

以及使用 inv 函数来计算特征向量矩阵的逆矩阵(注意,特征向量不一定是正交归一的,因此逆矩阵不一定与转置矩阵相同):

inv(V)
应用示例:PCA 降维

PCA(Principal Component Analysis)是一种常用的多维数据降维算法。其基本思路是通过找到一个新的样本空间,使得新的特征向量是原始数据矩阵的主成分,并且保留了大部分原始信息。这可以通过对数据矩阵的协方差矩阵进行特征值分解来实现。

考虑一个 $n \times d$ 的数据矩阵 $X$,其中每行表示一个样本的特征向量,每列表示一个特征对应的特征向量。我们的目标是将其降维为 $n \times k$($k < d$)的矩阵。

我们可以先对数据矩阵进行中心化处理,即对每个特征向量减去其平均值。然后,我们可以计算其协方差矩阵 $C$,并将其进行特征分解。选取前 $k$ 个特征值对应的特征向量构成一个变换矩阵 $V_k$(其中每列是一个特征向量),然后我们可以通过 $XV_k$ 得到降维后的数据矩阵。

下面是一个简单的示例:

% 生成随机数据
X = rand(100, 3);

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

% 计算协方差矩阵
C = cov(X);

% 计算特征值和特征向量
[V, D] = eig(C);

% 选取前两个特征值对应的特征向量,构成变换矩阵
V_k = V(:, end-1:end);

% 将数据降维为 100x2
Y = X * V_k;

% 可视化降维后的数据
scatter(Y(:,1), Y(:,2))
总结

特征值和特征向量是一种重要的概念,用于描述矩阵的几何性质。在 MATLAB 中,我们可以使用 eig 函数来计算矩阵的特征值和特征向量,并应用于各种问题中。例如,我们可以使用它们来进行 PCA 降维,从而减少多维数据的维度。