24小时热门版块排行榜    

查看: 2421  |  回复: 5
当前只显示满足指定条件的回帖,点击这里查看本话题的所有回帖

kittyzoe

木虫 (正式写手)

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

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

» 猜你喜欢

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

已阅   回复此楼   关注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的回帖

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 的主题更新
信息提示
请填处理意见