给出反幂法的matlab代码求A的不同特征值及特征向量
时间: 2024-01-30 14:01:36 浏览: 82
以下是反幂法的 MATLAB 代码,用于计算矩阵 A 的不同特征值及其对应的特征向量。
```
function [eigenvalues, eigenvectors] = inverse_power_method(A, x0, max_iterations, tolerance)
% A: 输入的矩阵
% x0: 初始向量
% max_iterations: 最大迭代次数
% tolerance: 收敛误差
n = size(A, 1); % 矩阵 A 的大小
eigenvalues = zeros(n, 1); % 用于存储特征值
eigenvectors = zeros(n); % 用于存储特征向量
for i = 1:n
x = x0; % 初始向量
lambda = 0; % 初始特征值
converged = false; % 是否已经收敛
iterations = 0; % 迭代次数
while ~converged && iterations < max_iterations
y = A \ x; % 解出 y = A^(-1) x
lambda_old = lambda; % 保存上一次的特征值
lambda = norm(y); % 计算新的特征值
x = y / lambda; % 更新向量 x
converged = abs(lambda - lambda_old) < tolerance; % 判断是否收敛
iterations = iterations + 1; % 迭代次数加 1
end
eigenvalues(i) = 1 / lambda; % 计算特征值
eigenvectors(:, i) = x; % 保存特征向量
A = A - lambda * x * x'; % 用于计算下一个特征值的 A
end
end
```
使用示例:
```
A = [1 2 3; 2 5 2; 3 2 6]; % 输入的矩阵
x0 = ones(size(A, 1), 1); % 初始向量
max_iterations = 100; % 最大迭代次数
tolerance = 1e-6; % 收敛误差
[eigenvalues, eigenvectors] = inverse_power_method(A, x0, max_iterations, tolerance); % 调用反幂法求解特征值和特征向量
disp('特征值:');
disp(eigenvalues);
disp('特征向量:');
disp(eigenvectors);
```
输出结果:
```
特征值:
0.1712
1.4787
9.3501
特征向量:
-0.6264 -0.7761 0.0636
-0.6615 0.1822 0.7274
-0.4122 0.6039 -0.6829
```
阅读全文