计算矩阵最大特征值
来源:互联网 发布:java spring 代理模式 编辑:程序博客网 时间:2024/04/29 13:22
本文所采用的是幂算法计算矩阵最大特征值(只计算最大特征值),具体的细节可以参考:http://blog.csdn.net/whucv/article/details/7636135
这儿只给出伪代码和源码,方便各位同学使用。假设待计算的矩阵为A[N][N],一个N维的方阵.
申明一个辅助向量(一维数组)v[N].并初始化
//对应函数InitialV()
for i=1:n
v[i]=1
end
然后进行不停的迭代,当迭代的次数趋于无穷时,max的值越接近于真实的最大特征值。
在实际中,可以考察前后两次迭代的值的差距,如果该差距在可以接受的范围内(比如0.00001),则可以结束迭代
迭代过程:
while(true)
1.v=matrix * v; // 对应函数ComputeNewV()
2.max=v(1:n); // 对应函数GetMaxV();
3.v=v/max; // 对应函数NormalizeV();
end
解释:
1.矩阵相乘。用matrix和v向量进行相乘,结果保存在v中。相乘的过程和矩阵乘法一样(需要假象将v倒置)
2.获取上一步后产生的最大v值,记为max(即一维数组v中的最大值),用该值去除原向量v,保证v数组的元素值不超过1.(注,在除法前所获得的max值才是我们的特征估计值)
循环迭代上述过程,直到前后两次的估计值(max)在我们的误差范围内,结束迭代。
// Matrix.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include<math.h>using namespace std;#define N 3//行列 NxN方阵 #define e 0.0000001//误差限double matrix[N][N];double vector[N];void ComputeNewV();double GetMaxV();void NormalizeV();void InitialV();int main(){///初始化待求矩阵matrix[0][0]=1.0;matrix[0][1]=1.0;matrix[0][2]=0.5;matrix[1][0]=1.0;matrix[1][1]=1.0;matrix[1][2]=0.25;matrix[2][0]=0.5;matrix[2][1]=0.25;matrix[2][2]=2.0;InitialV();///分别记录上一次和这一次的迭代值,即我们需要的最大特征值 ///当误差连续K次小于一个范围时,便结束迭代///关于这一点我也不太确定,没仔细阅读教材///一个可行的办法是根据可以接受的时间直接迭代10000次甚至更高double lastValue;double currentValue=0.0;int k=0;for(int i=0;i<10000;i++){ComputeNewV();lastValue=currentValue;currentValue=GetMaxV();if(abs(currentValue-lastValue)<e)k++;elsek=0;if(k>10)break;NormalizeV();}cout<<"wanted:"<<currentValue<<endl;return 0;}///初始化向量,可以赋予非0任何值void InitialV(){for(int i=0;i<N;i++)vector[i]=1.0;}///迭代计算vector=matrix*vectorvoid ComputeNewV(){double temp[N];//申明临时变量存储结果for(int i=0; i<N; i++){temp[i]=0.0;for(int j=0;j<N;j++)temp[i]+=matrix[i][j]*vector[j];}///拷贝结果到vector向量for(int i=0;i<N;i++)vector[i]=temp[i];}///获取向量vector的最大值,也是这次迭代之后的一个最大特征估计值double GetMaxV(){double result=vector[0];for(int i=1;i<N;i++)if(vector[i]>result)result=vector[i];return result;}///用当前vector的最大值对向量做除法,归一化void NormalizeV(){double max=GetMaxV();for(int i=0;i<N;i++)vector[i]/=max;}
- 计算矩阵最大特征值
- 乘幂法计算矩阵绝对值最大特征值
- 矩阵特征值特征向量计算
- 【学术】矩阵谱半径与最大特征值
- 稠密矩阵特征值和特征向量的计算
- 计算实对称矩阵特征值和特征向量
- 第8章 矩阵特征值问题计算
- 计算最大子矩阵
- 矩阵特征值
- 矩阵特征值
- 矩阵特征值
- 矩阵特征值
- 矩阵的缩放,最大特征值在单位圆上。。。。
- 用幂法求矩阵的最大近似特征值 (JAVA)
- 幂法求矩阵的最大特征值和对应特征向量
- 幂法求矩阵最大特征值的近似解(C++实现)
- 基于Matlab来计算矩阵特征值和特征向量
- OpenCV - 计算矩阵(cv::Mat)的特征值和特征向量
- log4cplus学习笔记(一)
- Redis 设计与实现
- 解决Android系统中虚拟SD卡和真实SD卡二者的矛盾!
- interview
- 单间背包导致背和肩膀疼痛
- 计算矩阵最大特征值
- how to config the tftpd-hpa server in the ubuntu using for remote tftp client '-p' and '-r' command
- iBatis简单入门教程
- 在servlet 中调用application对象
- JavaScript笔记(前5章)
- Android-sharedUserId数据权限
- iOS中常用的四种数据持久化方法简介
- Linux内核中ioremap映射的透彻理解
- log4cplus学习笔记(二)