如何在 Python 中随机分布 N 个质量,使它们遵循 Plummer 密度分布

2023-12-20

我正在用Python工作。我有N恒星,每一颗都有一个太阳质量M_0。我想将这些星星随机分布在一定半径的体积中R,使得密度分布遵循普鲁默模型 http://en.wikipedia.org/wiki/Plummer_model,由以下公式给出:

我明白那个M是簇的总质量,在本例中M=NM_0,但不确定我将如何为这种大规模分布编码。


接下来我将假设您正在使用numpy在 python 中导入为

import numpy as np

最简单的方法是在球极坐标 (r,θ,φ) 中工作

  • x = r sin(θ) cos(φ)
  • y = r sin(θ) sin(φ)
  • z = r cos(θ)

然后,您需要一种依次选择其中每一个的方法。

角坐标是最简单的,所以我们可以从这些开始。这里我们要选择角度 θ 和 φ,使它们均匀分布在球体的表面上。

方位角 (φ)

由于面积元素中没有附加因素,因此可以在 [0,2π) 范围内统一选择

phi = np.random.uniform(0, 2*np.pi)

极角 (θ)

这里我们需要选择这个,以便 sin(θ)dθ 是统一的,注意我们可以写 sin(θ)dθ = d(cos(θ)),换句话说,对于我们选择 cos(θ) 需要的每个 θ 值是同等可能的。如果我们在 [-1,1) 之间采样 cos(θ) 那么这将给出 θ 值的正确分布

theta = np.arccos( np.random.uniform(-1,1) )

半径 (r)

现在我们有了一种在球体表面随机分布点的方法,我们现在需要一种了解半径如何分布的方法。

为此,我们需要累积质量分布

这是普卢默球体中心半径 r 处包围的质量量。

当我们创建一颗新恒星并将其放置在半径 r 处时,该恒星 将在比其自身位置更靠近中心的位置处看到簇的质量量 m(r),因此在距中心更远的位置处会看到质量量 M − m(r)。

换句话说,它将看到其径向位置内总质量的一部分 m(r)/M。现在这个分数可以是 0 到 1 之间的任何值。如果粒子恰好放置在中心,则分数将为 0;如果粒子放置得很远,则分数将接近 1;当粒子放置在无穷远时,分数将接近 1。

每个颗粒的排名,就封闭的质量而言,是随机的,并且质量分数是均匀的。换句话说,m(r)/M 将是 0 到 1 之间的随机值,每个值的可能性相同。

因此,为了得到半径的表达式,我们需要对 m(r) 求逆,得到 r(m) 质量分数 m 所在的半径

因此,如果我们在 [0,1) 中选择 m 均匀值,我们就可以使用该方程将其转换为正确的半径。

r = a / np.sqrt( np.random.uniform(0, 1)**(-2.0 / 3.0) - 1)

一旦你有了这些坐标,你就可以使用我上面给出的表达式将它们转换回笛卡尔坐标。

这将完成一颗星,我将留给你弄清楚如何在 python 中有效地完成 n 。

参考

我这个答案很大程度上基于计算科学的艺术 http://www.artcompsci.org/kali/vol/plummer/volume11.pdf另请参阅如何从 Plummer 分布函数自洽地分配速度。

我在这里描述的方法可以在附录中找到阿尔塞斯等。等人。 1974年 http://adsabs.harvard.edu/abs/1974A%26A....37..183A

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Python 中随机分布 N 个质量,使它们遵循 Plummer 密度分布 的相关文章

随机推荐

  • 查找特定值的列名或表名

    我想在我的数据库中搜索一个特定的值 但我不知道它到底在哪里 SQL Server中是否存在返回特定值的列名或表名的查询 假设我有一个像 123 这样的列的值 但我不知道 123 属于哪个表 也不知道它的列名称 我可以编写一个查询来查找该值所
  • 纬度/经度转换为 x/y 坐标

    我有一个 openstreetmap 图像 左上角是纬度 80 经度 169 右下角是纬度 56 经度 190 图像的宽度 2618 高度 1513 如何将给定的纬度 经度坐标转换为图片的 x y 坐标 我自己尝试了一下 但不知道如何转换坐
  • CSS 悬停工具提示的 z 索引

    我仅使用 CSS 悬停缩略图
  • 检测 Google Chrome 页面预取

    我正在构建一个简单的工具来跟踪和增加网站的访问次数 这很简单 当服务器收到 GET 请求时 它会将数据库中该网站的计数器加 1 但是 我在使用 Google Chrome 的预渲染引擎时遇到了一些问题 预测网络操作以提高页面加载性能 该网站
  • 将模板与 HTML 自定义元素结合使用

    我刚刚开始学习 HTML 自定义元素 通过阅读一系列介绍 教程和文档 我想我已经很好地掌握了它的工作原理 但我对正确使用或不使用的方法有一个哲学问题这
  • MVC 4 中的部分实体类未显示数据注释

    我已经看到了许多关于如何通过部分类向通过实体框架生成的类添加元数据注释的解释 数据库优先 有人可以告诉我为什么这些新的显示值没有显示在我的视图中吗 这两个都是与我的实体框架生成的类相同的命名空间的一部分 MetadataType typeo
  • 为什么 pip 在我的虚拟环境之外安装软件包?

    在做了虚拟环境的来源之后我尝试 pip install U no deps django social auth 它返回 OSError Errno 13 Permission denied usr local lib python2 6
  • 如何确保 Angular 服务构造函数中的异步初始化完成?

    请专家告诉我 在调用类中的其他函数时 如何确保服务构造函数中的异步初始化完成 constructor var sock new SockJS this chatUrl this stompClient Stomp over sock thi
  • NASM - 如何创建结构指针数组并访问它们

    所以我的问题是这样的 我有一个名为顶点的结构 struc vertex x resq 1 y resq 1 z resq 1 endstruc 我想创建一个指向由该定义组成的结构的指针数组 就像加载顶点表单文件并将它们保存在结构中和数组中的
  • 将图像从 URL 上传到 Firebase 存储

    我想知道如何通过 URL 而不是输入 例如 将文件上传到 Firebase 的存储中 我正在从网站上抓取图像并检索它们的 URL 我想通过 foreach 语句传递这些 URL 并将它们上传到 Firebase 的存储 现在 我有 fire
  • RXJS 拖放

    这个问题与 RXJS 有关 我正在尝试调整 github 中的拖放示例以适用于一类 div 而不仅仅是单个元素 ID https github com Reactive Extensions RxJS blob master example
  • 标记实例变量@private

    我注意到苹果的很多界面都使用 private在它们的实例变量声明之前 这有什么好的设计理由吗 我应该这样做吗 私有实例变量用于将接口与实现分开 在 Objective C 中 由于类声明must显示所有实例变量 需要有一种方法来防止子类访问
  • 实体框架中 IMigrationMetadata 接口的用途和语义

    我试图找出 EF 中 System Data Entity Migrations Infrastruct IMigrationMetadata 接口的语义是什么 我知道它用于管理和应用数据库迁移 但我找不到有关它的详细信息 具体来说我想知道
  • 安卓键盘记录器

    我正在为 Android 编写一个用于考试的应用程序 该应用程序的功能之一是键盘记录器 它可以捕获用户键入的所有内容 我不明白如何实现键盘记录器的功能 如果有可能捕获用户输入的所有内容 不幸的是我在网络中发现了很少的代码 谁能帮我 感谢您的
  • 如何在 QML 中的 ListView 中绑定到来自委托组件的信号

    假设我有一个ListView可点击的委托组件 或GridView or Repeater 这些委托组件需要在触发时发出信号以及自定义数据 该信号可以由父组件拾取ListView 如何实现这种信号结合 例如以下代码是我的尝试 但我不知道如何绑
  • Unity 5.1 动画控制器不转换

    我创建了一个Animator Controller 称为Player 并将其分配给Animator我的人形化身的领域 以及具有适当过渡的简单动画状态 请参阅所附的两张图片 我已将包含以下代码的脚本附加到我的头像游戏对象 但我想知道我遗漏了什
  • 跨子域使用localStorage

    我将 cookie 替换为本地存储 http www smashingmagazine com 2010 10 11 local storage and how to use it 在可以支持它的浏览器上 除了 IE 之外的任何浏览器 问题
  • 如何从一个 Visual Studio 项目创建两个不同的可执行文件

    我有一个主要可执行文件 它根据配置文件中保存的设置运行 我希望能够通过不同的可执行文件更改配置文件中的设置 有没有一种简单的方法可以在一个 Windows 窗体项目中构建这两个不同的可执行文件 这意味着当我按构建时 会在同一解决方案文件夹中
  • 阶乘法导致错误

    我正在尝试获取数字的阶乘值66 但是我的方法给了我一个输出0 但每当我尝试获取阶乘5 这给我带来了输出120 谁能告诉我为什么吗 public static int factorial int n if n 1 return n retur
  • 如何在 Python 中随机分布 N 个质量,使它们遵循 Plummer 密度分布

    我正在用Python工作 我有N恒星 每一颗都有一个太阳质量M 0 我想将这些星星随机分布在一定半径的体积中R 使得密度分布遵循普鲁默模型 http en wikipedia org wiki Plummer model 由以下公式给出 我