特征向量和幂法
特征向量是线性代数中的一个重要概念,它们是矩阵作用下保持方向不变的非零向量,与之相关的特征值表示了向量被拉伸或压缩的程度。对于一个给定的方阵 \( A \),如果存在标量 \( \lambda \) 和非零向量 \( v \),使得 \( Av = \lambda v \),那么 \( \lambda \) 就是矩阵 \( A \) 的特征值,而 \( v \) 是对应的特征向量。
在实际计算中,尤其是数值计算中,我们经常需要求解矩阵的最大或最小特征值及其对应的特征向量。这时,可以采用幂法(Power Method)进行求解。幂法主要用于求解矩阵的按模最大特征值(即绝对值最大的特征值)及其对应的特征向量。其基本思想是通过反复将向量乘以矩阵 \( A \),使得每次迭代后向量逐渐接近主特征向量。矩阵 \( A \) 需要满足一定的条件,如没有零特征值,且有 n 个线性无关的特征向量。
在幂法的计算过程中,选择一个非零初始向量 \( x_0 \),经过迭代公式 \( x_{k+1} = Ax_k \) 更新向量,直到达到收敛。在每次迭代后,通过归一化处理保持向量的模为 1,这样当迭代次数足够多时,向量将接近主特征向量,对应的元素最大值即为主特征值。
以下是幂法的 MATLAB 代码实现:
```matlab
function [t,y]=lpower(A,x0,eps,N)
t = max(x0);
y = x0 ./ max(abs(x0));
for k = 1:N
x = A * y;
b = max(x);
if abs(t - b) < eps
return;
end
t = b;
y = x ./ max(abs(x));
end
[m,index] = max(abs(x));
t = x(index);
end
```
该函数返回特征值 \( t \) 和对应的特征向量 \( y \)。在实际应用中,可以通过对比计算结果与 `eig(A)` 的结果,以及验证 \( A \cdot y - t \cdot y \) 是否接近零来确认结果的准确性。
反幂法(Inverse Power Method)是求矩阵按模最小特征值及其特征向量的方法,它与幂法类似,只是在迭代过程中使用矩阵 \( A \) 的逆代替 \( A \)。由于 \( A \) 和 \( A^{-1} \) 的特征值互为倒数,求 \( A \) 的最小特征值等同于求 \( A^{-1} \) 的最大特征值,再取其倒数。
下面是反幂法的 MATLAB 代码实现:
```matlab
function [s,y]=invpower(A,x0,eps,n)
r = max(x0);
y = x0 ./ max(abs(x0));
[L,U] = lu(A);
for k = 1:n
z = L \ y;
x = U \ z;
u = max(x);
if abs(u - r) < eps
return;
end
s = 1/u;
r = u;
y = x ./ max(abs(x));
end
[m,index] = max(abs(x));
s = 1/x(index);
end
```
同样地,可以通过验证计算结果与 `eig(A)` 的结果以及 \( A \cdot y - s \cdot y \) 来确保计算的正确性。
条件数是衡量矩阵运算稳定性的一个重要指标,对于矩阵 \( A \),它的条件数 \( cond(A) \) 定义为 \( A \) 的范数与 \( A^{-1} \) 的范数的乘积。矩阵的条件数越大,意味着矩阵运算的敏感性越高,即微小的输入变化可能导致输出的大幅波动。对于对称矩阵,如 Hilb 矩阵,其条件数可以由最大最小特征值的比值来估计,这为判断矩阵的病态性提供了依据。在数值计算中,矩阵的条件数对于选择合适的算法和评估计算结果的精度具有重要意义。