数值分析幂法matlab代码
时间: 2023-10-03 22:05:57 浏览: 55
下面是使用幂法求矩阵最大特征值和对应特征向量的 Matlab 代码:
```
function [eigval, eigvec] = power_method(A, max_iter, tol)
% A: 待求特征值的方阵
% max_iter: 最大迭代次数
% tol: 收敛精度
n = size(A, 1);
b = ones(n, 1); % 初始向量
for i = 1:max_iter
b_old = b;
b = A * b_old;
[eigval, idx] = max(abs(b)); % 取模最大的分量作为特征值的估计
eigvec = b / eigval;
if norm(b - A * eigvec, Inf) < tol % 判断是否达到收敛精度
break;
end
end
eigvec = eigvec / norm(eigvec); % 特征向量归一化
end
```
其中,输入参数 `A` 为待求特征值的方阵,`max_iter` 是最大迭代次数,`tol` 是收敛精度。输出参数 `eigval` 是求得的最大特征值,`eigvec` 是对应的特征向量。
函数中,首先初始化初始向量 `b` 为全 1 向量,然后进行迭代。在每次迭代中,将上一次迭代的结果乘以矩阵 `A`,得到新的向量 `b`。然后,取 `b` 中模最大的分量作为特征值的估计,并以此计算出对应的特征向量 `eigvec`。最后,判断当前的向量 `b` 是否已经收敛,如果收敛则退出迭代。
需要注意的是,在每次迭代中,需要将特征向量 `eigvec` 归一化,以避免出现数值误差。