24小时热门版块排行榜    

查看: 2535  |  回复: 5

kittyzoe

木虫 (正式写手)

[求助] matlab 计算过程中工作空间变量保存及读取 求解决内存不足的方法

利用matlab ode45函数求解常微分方程的过程中, 由于计算步长较小,计算时刻较多,每时刻均需要保存数据,最后还没能到计算结束已经导致内存溢出。
     利用save命令将所有变量保存到硬盘,clear内存中的变量,然后再利用load命令将所需变量读取。但load读取的是保存已计算的所有时刻的变量,使计算变慢,其实此时只想读取前一时刻的变量,不知使用load命令是否能实现呢?
     或者高手们是否有解决由于保存数据较多导致内存溢出的更好的办法呢?
回复此楼

» 猜你喜欢

» 本主题相关价值贴推荐,对您同样有帮助:

已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

dbb627

荣誉版主 (著名写手)

【答案】应助回帖

kittyzoe(金币+5): 2011-11-11 16:19:45
首先我觉得是不是不用算那没多步,如果ode45收敛性差,方程刚性的话,可采用ode15s
此外如果确实需要算很多步
下面的方法可能会有用
     使用xlswrite 或者fprintf 将数据写到text或者excel文件中
    使用PACK:PACK可以将matlab中的变量导出到磁盘中,以增加可用内存。

     减少变量的内存开销:清除工作间不必要的变量。  
    64位架构:采用64位的软硬件架构,目前实验室条件下不可行。
    3GB切换(3GB switch):由于在windows上运行matlab时,如果内存的使用超过约1.7G左右就要出现这种错误,而无论你有多大的内存也没用。幸好现在在Windows XP上,MATLAB现在支持3GB切换(3GB switch)启动选项(boot option),配置额外的1GB的可寻址内存到每个程序上。这增加了你可以储存到MATLAB workspace中资料的总量约到2.7 GB。这相当于33亿的精度值。此新增的内存区块和MATLAB使用剩下的(内存)并不是连续的,所以你不能建立一个数组来填满此空间。

     具体做法:修改C:\ Boot.ini文件如下

    [boot loader]

    timeout=30SimWe个人空间

    default=multi(0)disk(0)rdisk(0)partition(2)\WINNT

     [operating systems]

    multi(0)disk(0)rdisk(0)partition(2)\WINNT="????" /3GB

    注意后面的/3GB就是后加上的。重新启动系统再次运行matlab。
The more you learn, the more you know, the more you know, and the more you forget. The more you forget, the less you know. So why bother to learn.
2楼2011-11-11 15:36:56
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

kittyzoe

木虫 (正式写手)

引用回帖:
2楼: Originally posted by dbb627 at 2011-11-11 15:36:56:
首先我觉得是不是不用算那没多步,如果ode45收敛性差,方程刚性的话,可采用ode15s
此外如果确实需要算很多步
下面的方法可能会有用
     使用xlswrite 或者fprintf 将数据写到text或者excel文件中
    使用P ...

我尝试使用ode15s,出现以下错误:
Warning: Failure at t=1.166017e-003.  Unable to meet integration tolerances without reducing the step size below
the smallest value allowed (3.469447e-018) at time t.
> In ode15s at 753
这种情况应该怎么办呢?是计算不收敛么?该怎么解决呢?
有时候赋予某个特定初值时用ode45就可以很快算出结果,而且现在ode45虽然算的很慢,但是至今除了因为内存不足以外,还没开始报错,所以打算长时间算算看,不知道行不行。
3楼2011-11-11 16:13:43
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

kittyzoe

木虫 (正式写手)

内存不足的问题我已经通过存盘的方式解决,
利用save 和load命令确实好用,在计算过程中内存节省不少
然后需要保存的变量直接fprintf到txt文件里保存了。

fid=fopen('data.txt','a+');
fprintf(fid,'%16.8e   %16.8e  %16.8e    %16.8e    %16.8e\r\n',t,Y);
fclose(fid);
save matlab.mat
clear
load matlab.mat t Y DY

这样save的是计算时刻的变量,load出来的是上一时刻需要的工作变量,继续进行计算
4楼2011-11-11 16:18:42
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

dbb627

荣誉版主 (著名写手)

【答案】应助回帖

可能边界条件定义不合适,就是初值定义不合适,能把方程贴出来看看吗。
The more you learn, the more you know, the more you know, and the more you forget. The more you forget, the less you know. So why bother to learn.
5楼2011-11-11 16:19:26
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

kittyzoe

木虫 (正式写手)

引用回帖:
5楼: Originally posted by dbb627 at 2011-11-11 16:19:26:
可能边界条件定义不合适,就是初值定义不合适,能把方程贴出来看看吗。

好,方程中初值我是这么设置的:
x0=[a;0;b;0]

当设置初值a=b的时候非常容易就计算出结果,但是只要设置a与b不相等时,算了很久很久,也没出结果,计算到某一时刻以后步长越来越小,一直在迭代。。。。
很崩溃啊
其中pex(t)是随时间变化的量。


6楼2011-11-14 09:05:51
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 kittyzoe 的主题更新
最具人气热帖推荐 [查看全部] 作者 回/看 最后发表
[考研] 材料工程专硕调剂 +5 204818@lcx 2026-03-17 6/300 2026-03-18 22:55 by 204818@lcx
[考研] 311求调剂 +4 冬十三 2026-03-18 4/200 2026-03-18 21:47 by 尽舜尧1
[教师之家] 焦虑 +8 水冰月月野兔 2026-03-13 12/600 2026-03-18 15:27 by 咪呜喵呜
[考研] 314求调剂 +8 无懈可击的巨人 2026-03-12 8/400 2026-03-18 14:50 by haxia
[考研] 311求调剂 +6 26研0 2026-03-15 6/300 2026-03-18 14:43 by haxia
[考研] 材料专硕306英一数二 +10 z1z2z3879 2026-03-16 13/650 2026-03-18 14:20 by 007_lilei
[考研] 0703化学调剂 ,六级已过,有科研经历 +10 曦熙兮 2026-03-15 10/500 2026-03-18 14:19 by 007_lilei
[考研] 312求调剂 +8 陌宸希 2026-03-16 9/450 2026-03-18 12:39 by Linda Hu
[考博] 环境领域全国重点实验室招收博士1-2名 +3 QGZDSYS 2026-03-13 5/250 2026-03-18 11:13 by QGZDSYS
[考研] 278求调剂 +5 烟火先于春 2026-03-17 5/250 2026-03-18 08:43 by 星空星月
[考研] 277调剂 +5 自由煎饼果子 2026-03-16 6/300 2026-03-17 19:26 by 李leezz
[硕博家园] 湖北工业大学 生命科学与健康学院-课题组招收2026级食品/生物方向硕士 +3 1喜春8 2026-03-17 5/250 2026-03-17 17:18 by ber川cool子
[考研] 机械专硕325,寻找调剂院校 +3 y9999 2026-03-15 5/250 2026-03-16 19:58 by y9999
[考研] 0854控制工程 359求调剂 可跨专业 +3 626776879 2026-03-14 9/450 2026-03-16 17:42 by 626776879
[考研] 070303 总分349求调剂 +3 LJY9966 2026-03-15 5/250 2026-03-16 14:24 by xwxstudy
[考研] 22408总分284求调剂 +3 InAspic 2026-03-13 3/150 2026-03-15 11:10 by zhq0425
[考研] 297求调剂 +4 学海漂泊 2026-03-13 4/200 2026-03-14 11:51 by 热情沙漠
[考研] 311求调剂 +3 冬十三 2026-03-13 3/150 2026-03-13 20:41 by JourneyLucky
[硕博家园] 085600 260分求调剂 +3 天空还下雨么 2026-03-13 5/250 2026-03-13 18:46 by 天空还下雨么
[考研] 290求调剂 +3 ADT 2026-03-13 3/150 2026-03-13 10:19 by peike
信息提示
请填处理意见