icejoan242 发表于 2010-5-16 11:59:58

关于求广义特征值特征向量的问题

我现在有矩阵A,B,需要求广义特征值和特征向量,但是由于A和B的维数都非常大(4000*4000),因此按照 =eig(A,B)求解时提示内存不足无法计算。我想是由于特征向量太多,数目非常庞大导致的。改用D=eig(A,B) 就可以计算,但是这样只能得到特征值,我取其中的某个特征值出来,请问该如何编程得到与其对应的特征向量?

ChaChing 发表于 2010-5-16 13:25:44

内存不足, 试试eigs分批求得!?
个人水平有限, 但好奇! 实际工程应用上会完全部使用到4000的模态吗? 有需要吗? 高阶的准确度都已经存疑了!?

icejoan242 发表于 2010-5-16 13:36:36

实际中当然用不到那么多模态!我正是因为不知道怎么求部分特征值与特征向量,所以才先求出固有频率,再有选择地求模态。
请问eigs具体如何应用?它能自动求出最小的n个特征值与特征向量吗?

icejoan242 发表于 2010-5-17 10:33:15

按照相关资料力的解释,我采用命令=eigs(A,B,1,'lm')来计算具有最大幅值的1个特征值和特征向量,结果还是out of memory。难道这种命令也是先把所有的计算出来再进行选择吗?感觉不应该啊!

messenger 发表于 2010-5-17 17:20:38

这种情况只好你自己编程了

pasuka 发表于 2010-5-22 21:16:52

我现在有矩阵A,B,需要求广义特征值和特征向量,但是由于A和B的维数都非常大(4000*4000),因此按照 =eig(A,B)求解时提示内存不足无法计算。我想是由于特征向量太多,数目非常庞大导致的。改用D=eig(A,B) 就 ...
icejoan242 发表于 2010-5-16 11:59 http://forum.simwe.com/images/common/back.gif
1、先用spy(A)和spy(B),确认是否稀疏矩阵;
2、如果1成立,那么在形成A和B的时候,就设置成稀疏矩阵格式,具体参考sparse;
3、再调用eigs函数计算
在4G内存,64位的matlab下,最多算过15w×15w稀疏矩阵的前400个特征对
如果1不成立,加内存,换64位的matlab,再调用eig函数,目前主流双核配置的机器,大概计算2-3小时,可以得到全部特征对,要想再快一点的话,用C/C++、Fortran或者汇编写程序计算
btw,提示内存不足,就让老板加内存,换64操作系统和matlab,4k×4k的矩阵算小了

icejoan242 发表于 2010-5-30 15:50:01

多谢各位的回复!
我自己发现为什么单独运行=eigs(A,B,1,'lm')时也会出现“Out of memory”的警告了。当时我已经计算过一次eig(A,B),有大量的数据留在了内存里,已经使得内存接近饱和,接着运行=eigs(A,B,1,'lm')时,计算机由于承受不了这么多数据而出现内存溢出的警告。只要在运行之前clear一下,再运行=eigs(A,B,1,'lm')就没有问题了。
虽然没有用到pasuka的建议,但是从你的回复中学习到很有用的东西,再次感谢!
页: [1]
查看完整版本: 关于求广义特征值特征向量的问题