找回密码
 注册
Simdroid-非首页
查看: 135|回复: 6

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

[复制链接]
发表于 2010-5-16 11:59:58 | 显示全部楼层 |阅读模式 来自 北京
我现在有矩阵A,B,需要求广义特征值和特征向量,但是由于A和B的维数都非常大(4000*4000),因此按照 [V,D]=eig(A,B)求解时提示内存不足无法计算。我想是由于特征向量太多,数目非常庞大导致的。改用D=eig(A,B) 就可以计算,但是这样只能得到特征值,我取其中的某个特征值出来,请问该如何编程得到与其对应的特征向量?
发表于 2010-5-16 13:25:44 | 显示全部楼层 来自 台湾
Simdroid开发平台
内存不足, 试试eigs分批求得!?
个人水平有限, 但好奇! 实际工程应用上会完全部使用到4000的模态吗? 有需要吗? 高阶的准确度都已经存疑了!?

评分

1

查看全部评分

回复 不支持

使用道具 举报

 楼主| 发表于 2010-5-16 13:36:36 | 显示全部楼层 来自 北京
实际中当然用不到那么多模态!我正是因为不知道怎么求部分特征值与特征向量,所以才先求出固有频率,再有选择地求模态。
请问eigs具体如何应用?它能自动求出最小的n个特征值与特征向量吗?
回复 不支持

使用道具 举报

 楼主| 发表于 2010-5-17 10:33:15 | 显示全部楼层 来自 北京
按照相关资料力的解释,我采用命令[V,D]=eigs(A,B,1,'lm')来计算具有最大幅值的1个特征值和特征向量,结果还是out of memory。难道这种命令也是先把所有的计算出来再进行选择吗?感觉不应该啊!
回复 不支持

使用道具 举报

发表于 2010-5-17 17:20:38 | 显示全部楼层 来自 黑龙江哈尔滨
这种情况只好你自己编程了
回复 不支持

使用道具 举报

发表于 2010-5-22 21:16:52 | 显示全部楼层 来自 上海闵行区
我现在有矩阵A,B,需要求广义特征值和特征向量,但是由于A和B的维数都非常大(4000*4000),因此按照 [V,D]=eig(A,B)求解时提示内存不足无法计算。我想是由于特征向量太多,数目非常庞大导致的。改用D=eig(A,B) 就 ...
icejoan242 发表于 2010-5-16 11:59

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的矩阵算小了

评分

1

查看全部评分

回复 不支持

使用道具 举报

 楼主| 发表于 2010-5-30 15:50:01 | 显示全部楼层 来自 北京
多谢各位的回复!
我自己发现为什么单独运行[V,D]=eigs(A,B,1,'lm')时也会出现“Out of memory”的警告了。当时我已经计算过一次eig(A,B),有大量的数据留在了内存里,已经使得内存接近饱和,接着运行[V,D]=eigs(A,B,1,'lm')时,计算机由于承受不了这么多数据而出现内存溢出的警告。只要在运行之前clear一下,再运行[V,D]=eigs(A,B,1,'lm')就没有问题了。
虽然没有用到pasuka的建议,但是从你的回复中学习到很有用的东西,再次感谢!

评分

1

查看全部评分

回复 不支持

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Simapps系列直播

Archiver|小黑屋|联系我们|仿真互动网 ( 京ICP备15048925号-7 )

GMT+8, 2024-10-6 21:27 , Processed in 0.068266 second(s), 14 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表