Мне нужно рассчитать компоненты силы для каждой частицы в системе 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);
Приведенный выше код работает намного быстрее, чем решение с вложенным циклом, но pdist вычисляет величины смещения компонента и, таким образом, направлениеневерный расчет силы для каждой частицы.