confer 发表于 2006-12-29 13:51

可以建立矩阵类型的FUNCTION 么?

FORTRAN中 FUNCTION 可以很方便地自己编写函数,我的问题是能否用到矩阵里面啊?矩阵中的每一个元素都是一个FUNCTION,请教FORTRAN 高手~

FSI 发表于 2007-1-1 10:30

我想Fortran不支持这种特性。

你是不是想对一个矩阵中的不同元素进行不同的function call?

confer 发表于 2007-1-2 20:00

我做的是采用全局形函数的结构有限元问题

我要做的是全局形函数的有限元问题,在求结构的刚度和质量矩阵的时候,必然要在整个求解域求解,我想要矩阵类似MATLAB一样可以对矩阵内的元素求导或者积分~

我是这样做的:
1 建立全局的形函数矩阵N,特殊情况形函数就是各阶振型,前面的系数就类似广义的坐标;
2 然后对 N'*N进行积分,就得到质量矩阵
上面的积分可以用高斯积分,也可以用现成的函数积分进行(VF里面有了函数积分的命令).我用MATLAB编写了一个程序但是计算效率特别低下,计算一个10自由度问题要用几个小时而且占用内存还很大,基本不能用!

请问全局形函数问题 大家的积分是怎么处理的?高斯积分么?

pengweicai 发表于 2007-1-2 20:29

我也是用MATLAB搞计算。我的经验是:
尽量不要用循环,多用向量,矩阵。
   我将原来的代码改进后(将循环全部该为向量,对于二重循环是矩阵),计算时间只是原来的
1/10,甚至几十分之一。

confer 发表于 2007-1-2 21:27

太对了,我觉得就是这个问题

Pengweicai说的太对了,提醒了我,我马上就修改程序试试,我这个程序分别用了3个循环,一个是频率,另外两个是空间的坐标,我以前也是遇到类似的问题,可惜总结不够!

太感谢了!:handshake :lol :victory:

风花雪月 发表于 2007-1-3 09:11

原帖由 confer 于 2007-1-2 21:27 发表
Pengweicai说的太对了,提醒了我,我马上就修改程序试试,我这个程序分别用了3个循环,一个是频率,另外两个是空间的坐标,我以前也是遇到类似的问题,可惜总结不够!

太感谢了!:handshake :lol :victory:

matlab程序编写方法对计算效率的影响确实很大,可以有很大的提升余地
但是如果是搞计算,不管怎么样设计程序,其效率和fortran比起来还是相差很远的

风花雪月 发表于 2007-1-3 09:13

原帖由 confer 于 2007-1-2 20:00 发表
我要做的是全局形函数的有限元问题,在求结构的刚度和质量矩阵的时候,必然要在整个求解域求解,我想要矩阵类似MATLAB一样可以对矩阵内的元素求导或者积分~

我是这样做的:
1 建立全局的形函数矩阵N,特殊情况形 ...


还是没太搞清楚具体要实现什么?

confer 发表于 2007-1-3 18:23

瑞利里兹方法中,刚度阵和质量阵的计算

原帖由 风花雪月 于 2007-1-3 09:13 发表



还是没太搞清楚具体要实现什么?


一般情况有限元是采用局部坐标的,这个刚度阵和质量阵是在局部坐标下积分的,用的是高斯积分点的累加方法实现数值积分,但是对于瑞利里兹方法由于试探函数是全局的,所以刚度阵和质量阵一定要采用全局坐标的积分形式,我也采用高斯积分的形式已经编写了程序,但是即使用FORTRAN效率也很低,可能是中间非零的稀疏矩阵我没有特别处理的原因,内存占用很大,计算缓慢!

风花雪月 发表于 2007-1-4 08:48

原帖由 confer 于 2007-1-3 18:23 发表
一般情况有限元是采用局部坐标的,这个刚度阵和质量阵是在局部坐标下积分的,用的是高斯积分点的累加方法实现数值积分,但是对于瑞利里兹方法由于试探函数是全局的,所以刚度阵和质量阵一定要采用全局坐标 ...

有限元程序,稀疏矩阵时必须要处理的,否则效率必然低下,至少也要做一下二维等带宽处理
页: [1]
查看完整版本: 可以建立矩阵类型的FUNCTION 么?