首页 > 解决方案 > Matlab 在运行长 for 循环后崩溃

问题描述

我正在运行这个简单的代码,在其中我将一些值计算到一个公式中,并将新值生成到一个向量中。问题是它运行了大约 5 分钟然后崩溃。我会减少迭代次数,但这是为了分配,我需要绘制所有结果。有什么建议么?

我试过预分配内存,但没有帮助

clc
clear

G = 6.67*10^-11; % N*m^2*kg^-2
r = 6378*1000; % m
R = 100000*1000; % m
M = 5.97*10^24; % kg
d = R-r; %m


a = zeros(1,d);
for i = 1: d
a(i) = G*(M/i^2);
end
plot(d,a);

标签: matlabplot

解决方案


显然你正在研究万有引力定律。

问题 1:您的变量d是标量,您将其绘制a为长度为 d = 93622 的向量。您想要的是绘制a为 values 的函数1:d。由于内存限制,此操作失败。

问题 2:由于 1/(r^2) 项,万有引力非常快地趋于 0。您尝试通过以 1 米为步长绘制函数来查看所有效果,这在天文尺度上过于精细的离散化。如果您以 1000 m = 1 km 的分辨率离散化,MATLAB 会给您一个绘图:

i = 1:1000:d;
a = G*(M./(i.^2));
plot(i,a);

但是,您对这个规模的认识并不多,该功能很快就几乎为0。因此,要么将您的绘图范围划分为地球附近的范围,然后将其划分为外太空的第二个范围。或者绘制力的对数,这样您就可以看到几个数量级的变化。

效率考虑:您应该for在可能且可以理解的情况下使用矢量化而不是 -loops,这是惯用的 MATLAB,更短且通常更快。如上所述,您将需要 dot-operator 进行组件除法和电源操作。


推荐阅读