登录论坛

查看完整版本 : MATLAB在程序执行期间内存不足


poster
2019-12-10, 20:30
我一直很高兴地使用MATLAB解决一些项目Euler (http://projecteuler.net/)问题。昨天,我编写了一些代码来解决这些问题之一( 14 (http://projecteuler.net/index.php?section=problems&id=14) )。当我编写包含长循环的代码时,我总是通过短循环运行它来测试代码。如果运行正常,并且可以执行预期的操作,则我认为循环的长度较长时也会出现这种情况。

这个假设被证明是错误的。在执行以下代码时,MATLAB在第75000次迭代中的某个地方耗尽了内存。

c=1; e=1000000; for s=c:e n=s; t=1; while n>1 a(s,t)=n; if mod(n,2) == 0 n=n/2; else n=3*n+1; end a(s,t+1)=n; t=t+1; end end 我该怎么做才能防止这种情况发生?我是否需要清除变量或释放进程中的内存?将生成的矩阵a保存到硬盘驱动器会有所帮助吗?



回答:

这是解决方案,请与代码保持尽可能的距离(这非常接近,主要区别在于您只需要一维矩阵):

c=1; e=1000000; a=zeros(e,1); for s=c:e n=s; t=1; while n>1 if mod(n,2) == 0 n=n/2; else n=3*n+1; end t=t+1; end a(s)=t; end [fg]=max(a); 这需要几秒钟(请注意预分配),结果g解锁Euler 14门。



更多&回答... (https://stackoverflow.com/questions/2339197)