以下内容摘自好友lyqmath新浪博客,在此借花献佛。
简介 线性代数相关领域中,矩阵操作一般是核心内容。对矩阵的特征值和特征向量的计算一直在数值计算占有重要位置。这里介绍一种根据指定个数来返回矩阵特征值及特征向量的方式。
代码
- <font size="3" color="#696969">% By lyqmath
- % Dalian University of Technology
- % School of Mathematical Sciences 2008
- % BOLG: http://blog.sina.com.cn/lyqmath
- % 取指定特征值对应的特征向量
- clc; clear all; close all;
- A = [1 3 7
- 3 8 9
- 5 4 6];
- k = 2;
- [V, D] = eig(A);
- % 返回的V是以列向量对应的特征向量
- % D是对角线上为特征值的矩阵
- D = diag(D);
- [D, I] = sort(D, 'descend');
- % 得到了对应的排序
- if k > length(D)
- k = length(D);
- end
- temp(1) = {D(1 : k)};
- temp(2) = {V(:, I(1 : k))};
- fprintf('\n 前k个最大特征值 : \n');
- celldisp(temp(1));
- fprintf('\n 前k个最大特征值对应的特征向量 : \n');
- celldisp(temp(2));</font>
复制代码
结果总结
MATLAB提供了eig来计算矩阵的特征值、特征向量信息。如果再结合使用MATLAB的排序函数等资源,可以综合利用来解决问题。 |