Labfans是一个针对大学生、工程师和科研工作者的技术社区。 论坛首页 | 联系我们(Contact Us)
MATLAB爱好者论坛-LabFans.com
返回   MATLAB爱好者论坛-LabFans.com > 其它 > 资料存档
资料存档 资料存档
 
 
主题工具 显示模式
旧 2019-12-10, 20:30   #1
poster
高级会员
 
注册日期: 2019-11-21
帖子: 3,006
声望力: 66
poster 正向着好的方向发展
帖子 MATLAB在程序执行期间内存不足

我一直很高兴地使用MATLAB解决一些项目Euler问题。昨天,我编写了一些代码来解决这些问题之一( 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门。



更多&回答...
poster 当前离线   回复时引用此帖
 


发帖规则
不可以发表新主题
不可以发表回复
不可以上传附件
不可以编辑自己的帖子

启用 BB 代码
论坛禁用 表情符号
论坛启用 [IMG] 代码
论坛启用 HTML 代码



所有时间均为北京时间。现在的时间是 05:06


Powered by vBulletin
版权所有 ©2000 - 2025,Jelsoft Enterprises Ltd.