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

为什么一个简单的组装刚度阵需要这么长时间?

[复制链接]
发表于 2010-4-18 13:15:50 | 显示全部楼层 |阅读模式 来自 大连理工大学
大家请看我用matlab编写的有限元程序中组装刚度阵的一段:

其中的M是单元刚度阵在总刚中的位置。用matlab的profiler测试发现,第86行组装单刚所花的时间竟然占整个有限元程序的83%!

对于这一点我非常不理解,为什么一个简单的对号入座会花这么长时间?是不是我的程序存在问题?

请各位高手指点!!!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
发表于 2010-4-19 10:25:27 | 显示全部楼层 来自 上海
Simdroid开发平台
简单说一点自己的感觉:
可能你这里M是变化的,这样对gk赋值的话可能就是在一个循环中改变了矩阵的大小,从而导致这一步的开销非常大。这里需要注意内存的使用。

评分

1

查看全部评分

回复 不支持

使用道具 举报

 楼主| 发表于 2010-4-20 09:09:03 | 显示全部楼层 来自 大连理工大学
谢谢!正是如此,gK的大小是不断增大的。
回复 不支持

使用道具 举报

发表于 2010-4-20 09:48:20 | 显示全部楼层 来自 美国
接下来可能会更慢,用Matlab编fem不是一个好的选择,尤其是3D的

评分

1

查看全部评分

回复 不支持

使用道具 举报

发表于 2010-4-27 16:17:42 | 显示全部楼层 来自 新加坡
试试在程序开始的地方,把gk初始化为一个比较大的矩阵,比如用gk=zeros(500,500)。

如果总刚矩阵很大,可以试试下面的语句(加在程序开始处)

  1. dofpnd = 3; %每一个节点的自由度数目
  2. dof0   = n*dofpnd; % n是节点的个数
  3. nn_z = floor(dof0*dof0*0.1); % 这儿假设刚度矩阵是稀疏矩阵。0.1是我使用的值,你可以设的大一点或小一点
  4. gk = spalloc(dof0, dof0,nn_z);
复制代码
如果matlab报错(memory不够),或还是很慢,只好建议你使用其它语言了。

评分

1

查看全部评分

回复 不支持

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-23 22:21 , Processed in 0.068879 second(s), 19 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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