瑞利商加速法的matlab代码
时间: 2023-11-17 12:08:18 浏览: 86
以下是瑞利商加速法的 Matlab 代码:
```matlab
function [lambda,x,k] = rayleigh(A,x0,tol,maxit)
% A: n*n 维实对称矩阵
% x0: 初始向量
% tol: 计算精度
% maxit: 最大迭代次数
% lambda: 最小特征值
% x: 最小特征值对应的特征向量
% k: 实际迭代次数
n = length(A);
x = x0/norm(x0); % 归一化初始向量
lambda = x'*A*x;
k = 0;
while k < maxit
y = (A-lambda*eye(n))\x; % 解线性方程组
x = y/norm(y); % 归一化向量
lambda_new = x'*A*x; % 计算新的特征值
if abs(lambda_new-lambda) < tol % 判断收敛条件
lambda = lambda_new;
break;
end
lambda = lambda_new;
k = k+1;
end
```
使用方法:
1. 定义一个实对称矩阵 A;
2. 定义一个初始向量 x0;
3. 设置计算精度 tol 和最大迭代次数 maxit;
4. 调用 rayleigh 函数,得到最小特征值 lambda 和对应的特征向量 x,以及实际迭代次数 k。
例如:
```matlab
A = [2, -1, 0; -1, 2, -1; 0, -1, 2];
x0 = [1; 1; 1];
tol = 1e-6;
maxit = 100;
[lambda,x,k] = rayleigh(A,x0,tol,maxit);
disp(['最小特征值为:',num2str(lambda)]);
disp(['对应的特征向量为:']);
disp(x);
disp(['实际迭代次数为:',num2str(k)]);
```
输出结果为:
```
最小特征值为:1.381966011250105
对应的特征向量为:
-0.371748034460042
0.557624046252067
-0.742165295300028
实际迭代次数为:5
```
阅读全文