1
私はC++用のXtensorライブラリを使用しています。高次元Xtensor配列の割り当て
私はxt :: zeros({n、n、3})配列を持っており、そのi、j要素にxt :: xarray {、、}を割り当てて3D各(i、j)における3次元ベクトルである。しかし、ドキュメントには値の割り当ては言及されていません - 私は一般的に、複数の座標を持つ配列がどのように機能するかをドキュメントから理解することはできません。私がしようとしている何
は、私はij'thが力配列の座標として力関数の出力を割り当てるためにしようとしているが、それが動作するようには思えないこの
xt::xarray<double> force(Body body1, Body body2){
// Function to calulate the vector force on body2 from
// body 1
xt::xarray<double> pos1 = body1.get_position();
xt::xarray<double> pos2 = body2.get_position();
// If the positions are equal return the zero-vector
if(xt::all(xt::equal(pos1, pos2))) {
return xt::zeros<double>({1, 3});
}
xt::xarray<double> r12 = pos2 - pos1;
double dist = xt::linalg::norm(r12);
return -6.67259e-11 * body1.get_mass() * body2.get_mass()/pow(dist, 3) * r12;
}
xt::xarray <double> force_matrix(){
// Initialize the matrix that will hold the force vectors
xt::xarray <double> forces = xt::zeros({self_n, self_n, 3});
// Enter the values into the force matrix
for (int i = 0; i < self_n; ++i) {
for (int j = 0; j < self_n; ++j)
forces({i, j}) = force(self_bodies[i], self_bodies[j]);
}
}
です。
注意:forceの要素 '(i、j)'に対するアクセス演算子は 'forces(i、j)'ではなく 'forces(i、j)'です。 – Quant