Distribution 从两个密度函数开始在体积上分布粒子

Distribution 从两个密度函数开始在体积上分布粒子,distribution,volume,galaxy,montecarlo,Distribution,Volume,Galaxy,Montecarlo,基本上,我想做的是为星系的n体模拟设置初始条件。我想看的报纸在这里找到了 本文描述了两种密度函数: 距离中心r处密度的形式为rho(r)的表面密度函数 以及形式为rho(r,z)的密度函数,其中z是(x,y,z)坐标中的z分量 到目前为止,我对每个粒子(恒星)所做的是: 对第一个函数使用蒙特卡罗方法,以获得距星系中心的距离 使用第二个函数的蒙特卡罗方法获得z分量 在半径为r、高度为z的圆上随机生成x,y坐标 但这方面的代码可能更有用: /* generate 3 random numbe

基本上,我想做的是为星系的n体模拟设置初始条件。我想看的报纸在这里找到了

本文描述了两种密度函数:

  • 距离中心r处密度的形式为rho(r)的表面密度函数

  • 以及形式为rho(r,z)的密度函数,其中z是(x,y,z)坐标中的z分量

到目前为止,我对每个粒子(恒星)所做的是:

  • 对第一个函数使用蒙特卡罗方法,以获得距星系中心的距离
  • 使用第二个函数的蒙特卡罗方法获得z分量
  • 在半径为r、高度为z的圆上随机生成x,y坐标
但这方面的代码可能更有用:

/* generate 3 random numbers x,y,z having a domain from 0 to 1 (not including 0.0) */

// The distance from the galaxy center for the current star.
// Rs is a constant parameter in the surface density function.
float r = -Rs * log(1.0f - x);

// The z coordinate for the current star
float Sz = -0.5f * (0.1f * Rs) * log(-((z-1)/z));

// The x,y coordinates for the current star
float Sx = sqrt(r*r - Sz*Sz) * cos(2.0f * PI * y);
float Sy = sqrt(r*r - Sz*Sz) * sin(2.0f * PI * y);
在视觉上,这会产生预期的形状,直到出现明显的情况,即生成的Sz值高于生成的r值


所以我的问题是,首先,如果我一开始就在正确的轨道上,如果是的话,如果有人能为我上面描述的情况提出一种修正机制,或者一种生成这些坐标的替代方法。

我想你在这里有两个基本的选择。选项1是接受/拒绝-放弃当前尝试,如果生成的Sz值将您推到r阈值以上,请重试。选项2将缩放结果-将三维规格化为r,然后按随机数缩放,使向量的长度成一定比例。缩放结果是我目前正在研究的问题。由于此代码背后的逻辑,拒绝给定的Sz或生成新的随机z直到一次拟合都是不可取的。生成新的z直到一次拟合将扭曲分布,结果将生成给定x和y的z的条件分布,而不是x、y和z的联合分布。