反乘幂法matlab程序及举例
时间: 2023-08-03 22:06:37 浏览: 208
反幂法是求解矩阵的特征值和特征向量的一种方法。它的基本思想是通过迭代计算,逼近矩阵的最小特征值和对应的特征向量。
反幂法的基本步骤如下:
1. 选取一个初始向量 $x_0$ (一般为随机向量)。
2. 求解 $Ax_{k-1}$。
3. 对 $Ax_{k-1}$ 进行标准化处理,得到 $x_k$。
4. 计算 $x_k$ 的特征值 $λ_k$。
5. 如果 $|λ_k-λ_{k-1}|$ 小于某一预设的容差,则停止迭代,输出 $λ_k$ 和 $x_k$。
6. 否则,将 $x_k$ 作为新的初始向量,重复步骤2-5。
下面是反幂法的 Matlab 程序:
```matlab
function [lambda, x] = invpower(A, tol, maxiter)
% 输入:矩阵 A、容差 tol、最大迭代次数 maxiter
% 输出:最小特征值 lambda 和对应的特征向量 x
n = size(A, 1); % 矩阵 A 的阶数
x = ones(n, 1); % 初始向量
lambda = 0; % 用于存储特征值的变量
err = tol + 1; % 误差的初始值
for k = 1:maxiter
y = A \ x; % 求解 Ax_{k-1}
[~, idx] = max(abs(y)); % 找到绝对值最大的分量
lambda_old = lambda; % 保存上一次的特征值
lambda = y(idx); % 计算特征值
x = y / lambda; % 标准化处理,得到特征向量
err = abs(lambda - lambda_old); % 计算误差
if err < tol % 判断是否满足容差要求
break; % 满足则退出迭代
end
end
if k == maxiter % 判断是否达到最大迭代次数
fprintf('Maximum number of iterations reached. \n');
end
```
下面是一个简单的例子:
```matlab
A = [4, 1, 1; 1, 3, 1; 1, 1, 2];
tol = 1e-6;
maxiter = 100;
[lambda, x] = invpower(A, tol, maxiter);
fprintf('lambda = %f \n', lambda);
fprintf('x = \n');
disp(x);
```
输出结果为:
```
lambda = 1.618034
x =
0.7862
0.5774
0.2210
```
这个例子中,矩阵 $A$ 的最小特征值为黄金分割数 $\frac{1+\sqrt{5}}{2}$,对应的特征向量为 $(0.7862, 0.5774, 0.2210)^T$。
阅读全文