matlab - 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);
解决方案
显然你正在研究万有引力定律。
问题 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 进行组件除法和电源操作。
推荐阅读
- c++11 - 将内存地址包装为 std::atomic
- java - 带有元数据的 Response.ok
- javascript - 如何使用jquery在编辑案例中制作可编辑文本
- javascript - 使用 react js 的绝对文件路径
- c# - 通过 Postman 进行 HMAC 身份验证
- javascript - 反应原生 react-native-sqlite-storage 不返回结果
- html - IE & Edge 边框虚线和边框半径问题
- server - 安装 Web 应用程序后更改文档根目录
- scala - 如何从地图中获取演员参考
- javascript - 如何使用 fullcalendar 在单元格中设置星期几和月份名称