【发布时间】:2019-05-13 05:00:38
【问题描述】:
我需要计算 N 个粒子系统中每个粒子的力分量。我可以使用 pdist 函数轻松找到任意两个粒子之间的距离大小,但我还需要计算每对粒子之间的 xyz 位移。 Pdist 仅返回幅度,不指示位移方向。有没有一种有效的方法来计算向量对之间的分量位移,而不必使用嵌套的 for 循环?
我使用嵌套的 for 循环来计算粒子对之间的矢量位移,但这非常慢。
函数重力(obj, G)
obj.rho = squareform(1./((pdist(obj.state(:,1:3))).^3));
obj.rho = tril(obj.rho) + triu(obj.rho);
for i = 1:3
obj.delta_xyz(:,:,i) = squareform(pdist(obj.state(:,i)));
obj.F_xyz(:,i) = -sum(obj.rho.*obj.delta_xyz(:,:,i), 2);
上面的代码运行速度比嵌套for循环解决方案快很多,但是pdist计算的是分量位移的大小,所以每个粒子的力计算方向是不正确的。
【问题讨论】:
标签: matlab