我正在运行这个简单的代码,在其中我将一些值计算为公式,并将新值生成为向量。问题是它运行了大约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);
答案 0 :(得分:2)
很显然,您正在研究重力定律。
问题1:您的变量d
是标量,您将其绘制在长度为d = 93622的向量a
上。您要绘制的是a
作为值的函数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
循环,这是惯用的MATLAB,通常较短且通常较快。如上所述,您将需要点运算符进行按分量划分和幂运算。