声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

12
返回列表 发新帖
楼主: confer

[编程技巧] matlab 的内存如何管理?

[复制链接]
发表于 2007-1-2 16:39 | 显示全部楼层
原帖由 eight 于 2007-1-2 16:30 发表

不是显示精度的问题,是如果需要用到的变量的值只是0~255之间,那么定义 zeros(m,n,'uint8') 比 zeros(m,n) 节省更多的空间,这在逻辑矩阵的申请时尤为明显。这在申请的矩阵很大时尤为重要,在我的经验中 ...


数据类型确实确实如此,uint8是无符号整型其占用的字节数明显低于double
第五句可以改为优化程序,减少变量,选择合适的数据类型
回复 支持 反对
分享到:

使用道具 举报

 楼主| 发表于 2007-1-2 19:24 | 显示全部楼层

谢谢,我觉得MATLAB编写计算程序实在不太实用~

谢谢各位的帖子,我觉得各位的使用经验对我很有帮助,我编写的方法实际类似有限元程序,里面有刚度阵,质量阵,载荷向量;我用的假设振型可以自己选择阶数,不过我发现MATLAB 编写的程序计算效率非常低和用FORTRAN等语言的效率没有办法比,天壤之别~

我一开始是用FORTAN编写程序的,后来我发现基于全局形函数的质量阵和刚度阵需要对每个元素进行求偏导数(位移应变阵)和积分计算,编写程序遇到困难了,我改用MATLAB编写程序是简单了,但是计算效率低到根本不能解决实际问题,郁闷啊~
发表于 2007-1-2 19:31 | 显示全部楼层
原帖由 confer 于 2007-1-2 19:24 发表
谢谢各位的帖子,我觉得各位的使用经验对我很有帮助,我编写的方法实际类似有限元程序,里面有刚度阵,质量阵,载荷向量;我用的假设振型可以自己选择阶数,不过我发现MATLAB 编写的程序计算效率非常低和用FORTRAN等语 ...



MATLAB 编写的程序计算效率非常低--未必的,可能是你没有掌握matlab的精髓而已,先看看论坛上面的一些精华贴,然后慢慢领会吧
发表于 2007-1-2 20:16 | 显示全部楼层
有限元程序最好用FORTRAN或者C++来编,例如CVF中自带的imsl库几乎包括了你所能想象到的所有矩阵运算程序,上手没有MATLAB快,不过后面是一条坦途,具体例子去看看CVF中的imsl文件夹,里面有详细的帮助和实例,也很简单,前些日子试了一下,很容易照猫画虎。解释执行的语言毕竟还是不如FORTRAN这样编译执行的语言,如果用到图形方面的内容可以通过在C++中建MFC调用FORTRAN的dll,VS和FORTRAN已经无缝集成了,这条路不太好走,不过到后面好于MATLAB。当然,如果只是编一个示例程序,例如解决3k个自由度以下的教学问题,MATLAB上手快,另外算法验证也很不错,见过老外用MATLAB编程序验证ANSYS的结果,还写过一本不错的书,随便翻了翻,没细看。
所以,搞程序开发不要用MATLAB,不要看上手那一点儿甜头,后面越搞越麻烦,直接用FORTRAN和C++写;搞教学程序不要用C++ & FORTRAN,上手的时间够编十个MATLAB的程序了。
BTW:实体单元的刚度阵的困难估计是K=\INT{\INT{B*...B}}这一串造成的。自己写一个gauss两点积分程序吧,找本老外写的数值分析书,应该有,原来我用MATLAB写过一个,也就花费两个小时,这个不太难,你所提到的“编程简单”我估计不是用内联、匿名函数就是用符号计算工具箱,这根本是死胡同,而如果用数值方法做还不如直接用FORTRAN效率来得高。我自己曾想着编写有限元程序的所有步骤中的难点都有现成模块,自己只要作个搭积木的人,这条路我试过:根本行不通!

[ 本帖最后由 bainhome 于 2007-1-2 20:31 编辑 ]

评分

1

查看全部评分

发表于 2008-10-25 16:21 | 显示全部楼层
C++和FORTRAN不错
建议使用这个解决问题
发表于 2008-10-29 17:35 | 显示全部楼层
从有限元程序编程的角度说一下看法。Matlab和C++&FORTRAN各有适合的方面,结构较小的有限元程序用Matlab编写很方便,而且程序很简单,不容易出错,没有较好的有限元基础和编程功底就能实际应用。而要想用C++&FORTRAN编写一个优良的有限元程序,不但需要良好的有限元基础,还要良好的编程基础,不适合初学者使用,但是结构很大的有限元程序Matlab计算速度明显无法与C++&FORTRAN相比,结构很大时又必须采用C++&FORTRAN编成解决问题
发表于 2008-11-27 23:49 | 显示全部楼层
受益良多。
看来fortran 也是比较难搞的。
发表于 2010-8-4 11:16 | 显示全部楼层

回复 沙发 pengweicai 的帖子

我的也是那个问题,虚拟内存我改了,可是还是不好用。怎么办,虚拟内存需要改多少啊
发表于 2011-5-6 10:34 | 显示全部楼层
不错,高手很多啊。我最近也遇到了out of memory的问题
发表于 2011-6-1 07:42 | 显示全部楼层
真是高谈阔论啊!!!!
发表于 2011-6-1 07:47 | 显示全部楼层
回复 15 # eight 的帖子

教授,你好。我在做simulink仿真的时候也出现了运行到几秒就暂停了,或者运行完了之后,scope打不开,直接显示out of memory。我尝试了很多办法,都是无济于事,您上面介绍的几种办法我都试过了,不知道为什么,还是不行。有一篇文章是这么写的,您看看行吗
1. 查找matlab根路径.在matlab命令行中敲入:matlabroot
显示根路径,如:C:\MATLAB7

2.查看当前Java虚拟机最大堆内存, 敲入:java.lang.Runtime.getRuntime.maxMemory

3.查看Java虚拟机版本.敲入:version -java

4.在 $MATLAB\bin\$ARCH 路径下新建java.opts文件.
$MATLAB是根路径,例如C:\MATLAB7
$ARCH是系统架构.例如win32,则在C:\MATLAB7\bin\win32下新建java.opts文件.

5.用记事本打开java.opts文件,
对于不同的版本的Java虚拟机,输入:
The following table shows the default settings MATLAB uses for versions of the JVM:

JVM      Initial Heap Size    Max Heap Size
1.6.0    -Xms64m              -Xmx128m (32-bit)
                                             -Xmx196m (64-bit)
1.5.0    -Xms64m              -Xmx96m  (32-bit)
                                             -Xmx128m (64-bit)
1.4.2    -Xms16m              -Xmx96m
1.3.1    -Xms16000000         -Xmx64000000
1.2.2    -Xms16000000         -Xmx64000000
1.1.8    -ms16000000          -mx64000000

例如我的Java是1.4.2,在java.opts文件写入-Xmx96m,保存就ok啦
如果输入错误就报错:warning : Failed to start to Java Virtual machine

6. 重启matlab,敲入java.lang.Runtime.getRuntime.maxMemory
显示最大内存改变,设置成功.
发表于 2012-8-20 17:38 | 显示全部楼层
matlab的内存问题确实是一个大问题。。。太恼火了。。。。。。。
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

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

GMT+8, 2024-11-11 00:41 , Processed in 0.084906 second(s), 16 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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