用matlab如何求矩阵的前k个最大特征值
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用matlab如何求矩阵的前k个最大特征值相关的知识,希望对你有一定的参考价值。
可以试试 eigs,这个函数一般返回 6个最大特征值及 相应特征向量
不过它 要求矩阵是大型稀疏阵
如果你要求前k个,可以做个函数
function varargout = lun6(A, k)
clc;
if nargin == 0
A = [1 3 7;3 8 9;5 4 6];
k = 2;
end
[V, D] = eig(A);
D = diag(D);
[D, I] = sort(D, \'descend\');
if k > length(D)
k = length(D);
end
varargout(1) = D(1 : k);
varargout(2) = V(:, I(1 : k));
fprintf(\'\\n The k maximum eig is : \\n\');
celldisp(varargout(1));
fprintf(\'\\n The k eig colum is : \\n\');
celldisp(varargout(2)); 参考技术A 用eigs函数就可以,下面是一个示例:
k = 3;%前k个最大特征
A = magic(5);%随便生成一个矩阵
d = eigs(A,k);%求A的k个最大特征值
disp('k个最大特征值')
disp(d)
matlab用QR方法怎么求特征值,把程序写出来,谢谢
题目是用基本QR算法就全部特征值(可用matlab函数“qr”实现矩阵的QR分解)矩阵是nxn的,谢谢
function l = rqrtz(A,M)%QR算法求矩阵全部特征值
%已知矩阵:A
%迭代步数:M
%求得的矩阵特征值:l
A = hess(A);
for i=1:M
N = size(A);
n = N(1,1);
u = A(n,n);
[q,r]=qr(A-u*eye(n,n));
A = r*q+u*eye(n,n);
l = diag(A);
end
------------------------------------
A=[0 5 0 0 0 0;1 0 4 0 0 0;0 1 0 3 0 0;0 0 1 0 2 0;0 0 0 1 0 1;0 0 0 0 1 0]
A =
0 5 0 0 0 0
1 0 4 0 0 0
0 1 0 3 0 0
0 0 1 0 2 0
0 0 0 1 0 1
0 0 0 0 1 0
>> rqrtz(A,50)
ans =
-3.2030
3.2030
-1.8837
1.8837
-0.6167
0.6167
>> eig(A)
ans =
-3.3243
3.3243
-1.8892
-0.6167
1.8892
0.6167 参考技术A 看matlab帮助文件,里边都有例程,电脑没有安装matlab,懒得安装了,但是我知道帮助文件里有这个例子
以上是关于用matlab如何求矩阵的前k个最大特征值的主要内容,如果未能解决你的问题,请参考以下文章