求解稀疏矩阵问题
对于求本征值,eig命令不能用于稀疏矩阵的求解eigs的说明是:Find largest eigenvalues and eigenvectors of sparse matrix
就是说只能找出稀疏矩阵最大的几个特征值和特征向量
但是我有个问题,
对于定义的zeros(普通)矩阵,再用eig命令进行求解时,耗时会很长,
对于要进行多次计算,显得不太现实;
不知道大家平常怎么求解大型特征值问题(4000*5000)
可能某些有限元求解软件可以对其求解,但是限于条件...只能运用现有的matlab
我有部分想法:1.放弃inv命令求逆,使用\进行计算。 但是此方法对于300*300的矩阵已经很吃力了
2.使用子空间迭代法,这个方法书上介绍过,代码还测试,晚点使用一下
大家能有其他优化的算法吗?
[ 本帖最后由 NewError 于 2009-9-1 21:09 编辑 ] 暂时还没人回,我自己做了下测试,矩阵的模型不是特别大,50*50;分别用eig命令与子空间迭代法进行计算:
下面是求解第一阶模态,与第一阶频率值的比较,限于数据较多,为节省版面,就贴出一部分
(eig命令) (子空间迭代)
一阶频率: 0.1588 0.1588
一阶模态:
0.23775 0.23904
-0.085611 -0.085295
0.21743 0.21819
-0.079673 -0.079371
0.18452 0.18473
-0.062821 -0.062589
0.16798 0.1675
-0.034443 -0.03432
0.19806 0.19668
0 2.0208e-033
0.24 0.24124
-0.078129 -0.077269
0.21919 0.21991
-0.075214 -0.074344
0.18356 0.18375
-0.061628 -0.060726
0.1603 0.15983
-0.05436 -0.053397
0.18779 0.18649
-0.057696 -0.056716
0.24104 0.24226
-0.062437 -0.061104
0.22072 0.2214
用了不同的方法求解,对于一阶模态的使用,两种方法计算值相同
对于模态的计算,子空间迭代法就存在一定的精度问题了,当时设定的精度也就0.01
在误差范围内,可以认为这两个在计算低阶频率与模态时候能够很好的互换
接下来,晚点我再观测下他们求解大型矩阵的时间关系吧。 希望能有满意的结果
[ 本帖最后由 NewError 于 2009-9-2 23:36 编辑 ]
回复 沙发 NewError 的帖子
可否建议LZ考量将後段以新楼重发!还有图角会被盖住, 请注意! 这是晚些做的时间对比:
所用刚度矩阵及质量矩阵均为普通矩阵,求解时间单位为s
http://forum.vibunion.com/UChome/attachment/200909/2/134007_1251895204uh8F.jpg
由于求解问题的需要,研究低阶固有频率就可以了,测试算例中
计算中子空间迭代法有比较明显地方
1、迭代时间近似于为eig命令的1/10,速度还是可以接受的
2、低阶频率在精度范围内,可信度非常高,不过模态在上面已经做过计算,有略微差别
但是,子空间迭代法还是无法应对4000以上的矩阵,计算速度每步都超过了1分钟....用eig命令计算大型矩阵真的是令人汗颜..
大家能有好的计算方式吗,对于书上说的基本上比较难实现,由于条件限制,不能使用ansys等软件。
不知道大家有做过相关的吗?
回复 板凳 ChaChing 的帖子
谢谢ChaChing的提醒,已经更正过来至于边角图的问题,我本来传的图片不允许外链;所用网络相册库为论坛,边角图为论坛自动添加上去的 建议你看看Lanzos方法。这种方法在现有的商业软件中使用很多。其他更多的方法研究可以查看一些文献。
回复 6楼 feifeifool 的帖子
昨晚开始看了,现在考虑着如何出代码;书上说的是Lanczos的方法的确很多有限元软件都在使用但是条件的限制,只能使用matlab,进行计算,困难在代码的编写。
此外我尝试了对矩阵进行稀疏处理,利用子空间可以进行迭代,速度快了10倍左右。
可是昨天还是出现了问题,子空间对于矩阵规模较大的求解,虽然频率可以很好的求出,
但是模态方面就出现问题,随着矩阵规模越大,差异越明显 ansys12(不知道以前的版本是否一样)已经不用子空间迭代法。 NewError 发表于 2009-9-2 23:36 static/image/common/back.gif
这是晚些做的时间对比:
所用刚度矩阵及质量矩阵均为普通矩阵,求解时间单位为s
请楼主回来分享经验啊。 NewError 发表于 2009-9-3 08:34 static/image/common/back.gif
昨晚开始看了,现在考虑着如何出代码;书上说的是Lanczos的方法的确很多有限元软件都在使用
但是条件的限制 ...
感觉算法很简单;但是我的结构是自由的话,怎么处理刚度矩阵?
页:
[1]