声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 6256|回复: 22

[综合讨论] 大型矩阵的求逆--5000*5000

[复制链接]
发表于 2008-10-25 13:52 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
现在需要求解 大型矩阵,求逆
大概有 5000 乘 5000维

大家一起讨论一下
用什么算法好?最节省时间? (关键是解决内存不足的问题,我的是2G内存,仍然不够用)

[ 本帖最后由 penghust 于 2008-10-25 14:28 编辑 ]
回复
分享到:

使用道具 举报

发表于 2008-10-25 14:20 | 显示全部楼层

回复 楼主 penghust 的帖子

试试inv,如果可以使用的话应该是比较快的方法了。因为matlab的内置函数一般是经过优化的,可以获得比较好的效率。
 楼主| 发表于 2008-10-25 14:28 | 显示全部楼层

回复 沙发 sogooda 的帖子

只能算到 3000多维
4000以上就不行了,内存不足
关键是解决内存的问题
发表于 2008-10-25 14:40 | 显示全部楼层
分块。
未命名.JPG

评分

1

查看全部评分

 楼主| 发表于 2008-10-25 15:31 | 显示全部楼层

回复 地板 sogooda 的帖子

谢谢,我尝试一下用 你的方法。
关于内存管理,
本版有一篇讨论挺好的,
大家可以看一下
http://forum.vibunion.com/forum/viewthread.php?tid=35912

评分

1

查看全部评分

发表于 2008-10-25 16:03 | 显示全部楼层

回复 5楼 penghust 的帖子

如果采用分块的方式,而担心A-1太大的话,可以把它输出到一个文本文档里。这样就可以算出更大的矩阵的逆了——只是好像算出来在matlab中也不能直接使用,呵呵。
发表于 2008-10-25 20:05 | 显示全部楼层
发表于 2008-10-25 20:09 | 显示全部楼层
a=[2,3;4,3];
所以a的逆应该是a1=[1/2,1/4;1/3,1/3]。不是1./a,右上和左下的元素要换位置的。

还是不对,我再想想啊。

[ 本帖最后由 ChaChing 于 2009-11-9 09:42 编辑 ]
发表于 2008-10-25 22:44 | 显示全部楼层
刚刚试了下, 使用rand随意产生一5000*5000矩阵, 然後再inv
可以哪! 但是我使用的matlab是v5.6 & v6.5, 而且笔电的RAM是2G, 不知道有没有差!
又查了MATRIX处理的书, 好像并没有sogooda所提的方法, 我想sogooda记错笔误了
发表于 2008-10-25 23:06 | 显示全部楼层
请问楼主处理什麽工程问题, 需要求这麽大的反矩阵? 可否说说学习学习!
个人浅见 :
其实以工程的角度看, 不外乎解决问题. 但解决问题的方式, 并不会仅有一种途径, 有时用换其他方式亦可能达成
其实解反矩阵的原由, 很多是为了解决AX=b方程的求解, 但并不一定要先求反矩阵
例如CFD基本上就是如上所述的问题, CFD动不动就几百万的cell, 其原始的AX=b方程若还是使用求反矩阵, 不是完了!

没给出解决方案, 也说了一堆, 楼上诸位见谅了

评分

1

查看全部评分

发表于 2008-10-25 23:33 | 显示全部楼层

回复 楼主 penghust 的帖子

64位的matlab版本可以计算5000*5000的逆矩阵.虽然再大也可以算,但是仍是有上限的.
 楼主| 发表于 2008-10-27 11:18 | 显示全部楼层

回复 11楼 ChaChing 的帖子

我是自己编的一个有限元程序,
划分的网格是 16* 16 *16 ,
得到的刚度矩阵 K是 4096 * 4096
如楼主所说,为了解决AX=b方程的求解
MATLAB 求解这样矩阵能力有限,
现在考虑,把刚度矩阵分块,或者导出到C++中进行求逆计算,
正在寻找合适的解决途径,也希望大家多多探讨。
发表于 2008-10-27 22:07 | 显示全部楼层

回复 13楼 penghust 的帖子

我喜欢问清楚, 就是解决问题方式, 并不会仅有一种途径
太久了有点模糊了, 不知道对不对
针对Ax=b的问题, 请楼主直接试试x=A\b是否可行!

评分

1

查看全部评分

 楼主| 发表于 2008-10-28 10:36 | 显示全部楼层

回复 14楼 ChaChing 的帖子

对,
当问题出现瓶颈时,尝试用不同的方法去解决,不失为解决问题之道
以前用x=A\b求解是,因为矩阵奇异,就换用 inv 求解,
一直没有改过,
刚刚又试了一下,
速度还挺快。没有出现内存不足的问题
谢谢仁兄提醒,
请求版主给他加分,很热心帮助论坛内兄弟。。
发表于 2008-10-28 11:49 | 显示全部楼层
原帖由 penghust 于 2008-10-28 10:36 发表
...以前用x=A\b求解是,因为矩阵奇异,就换用 inv 求解 ...

矩阵奇异了,即使换用 inv 应该也没用才对! 楼主笔误了吧!

其实inv及\在matlab上其所用的数值分析是不同, 所以会有如此差异!
很高兴自己多年前的经验, 竟还有用武之地!
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-11-15 18:26 , Processed in 0.082234 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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