问题标签 [montecarlo]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
r - 空间生存数据中“洞”大小的随机化测试
我有跨越形态空间(鱼头骨形状)的个体的生存数据(二项式)。我想设计一个测试,看看这个空间中的局部死亡区域是否比偶然预期的要大。一组观察到的死亡的概率可以简单地从二项分布(单尾)中计算出来。但是,我很感兴趣的是与空间内任何地方的类似大小的孔进行比较,而不仅仅是在观察到的位置(多尾测试)。在 R 中编写此代码的最佳方法是什么?
因此,例如:给定 1000 个人中的 100 名幸存者,每个人在二维空间中都有一个独特的位置,我可以抽取 1000 个随机样本并随机分配每个人中幸存的个人,保持幸存者的总数和他们在每个样本中的二维空间。
在每个样本中(1000 个人的固定空间内的 100 个随机幸存者),然后我想找到不包含幸存者的最大空间区域。在最简单的情况下,这个区域可以被限制为一个椭圆。在这一点上,我不确定如何最好地编写这个测试统计数据?
然后可以将观察到的孔大小的重要性与包含相同或更大尺寸的孔的随机样本的数量进行比较。
谢谢你的帮助!
r - 如何复制我的模拟研究
我是 R 的初学者,我正在做一项模拟研究,我设法制作了一个我想做的样本。但是,我不知道应该如何复制我所做的。
这是我到目前为止编写的程序:
因此,我得到了一个数据集“响应”。我想要做的是复制它并获得 1000 个“响应”数据集。我认为这可以通过复制“theta”和“gamma”的随机抽样来完成,但我不知道实际这样做。
非常非常感谢提前,
韩乔。
matlab - 多电荷态离子束的准直
我正在模拟通过两个针孔的具有不同电荷状态的离子束。我使用来自外部函数的随机角度来评估沿轴的速度分量。为了评估粒子运动,我正在求解微分方程:
只要光束没有角度扩展并且初始条件向量为 ,它就可以正常工作y_sorgente = [0 0 0 0 0 v_z]
。我想它也适用于角度扩展,因为轨迹是直线,因为它们应该是直线。外部函数从表面获取一些点,并使用它们的坐标作为方向余弦来从其模量中获取速度分量。
我遇到的问题是,只有少数电荷状态为 1+ 的粒子可以通过针孔,其他所有粒子都不能,这没有任何意义。即使每个粒子具有相同的速度模量,我也有同样的问题。我做错了什么,但我不明白是什么,有什么建议吗?如果您想检查它,我可以提供完整的代码。
random - 测试 PRNG 的质量
我正在玩 PRNG(比如 Mersenne Twister 和rand()
stdlib 的功能),我想要一个很好的测试来帮助我确定 PRNG 产生的随机数据的质量。我已经使用 PRNG 生成的随机数计算了 Pi 的值,我发现rand()
和 Mersenne Twister 非常接近以提供区别(我需要在小数点后 10 位后仔细检查吗?)。
我对蒙特卡洛模拟不太了解。请让我知道一些算法/应用程序(可能是一些简单但可以提供良好推论的东西),这将有助于我在质量方面区分它们。
编辑1:我之前没有注意到,但是有一个类似的线程:如何测试随机数?
编辑 2:如其中一条评论所述,我无法解释 NIST 的结果。我从random.org得到了视觉解释模式(如果有的话)的想法,并且因为它的简单性而遵循它。如果有人可以评论我的测试过程,我会很高兴:
- 使用 rand() 和 MT1997 从 [0,1] 生成 N 个随机数
- 如果则为
(round(genrand_real1() / rand_0_1()))
红色像素,否则为黑色
据我了解,这不是一个非常精确的解决方案,但如果这提供了一个合理的估计,那么我现在可以接受这个。
random - 何时停止随机数生成器中的循环?
我不确定 StackOverflow 是否适合问这个问题,因为这个问题是半编程半数学的。如果我的问题很愚蠢,也很抱歉^_^
我正在通过“蒙特卡洛方法”一书研究蒙特卡洛模拟。我必须学习的第一件事是关于随机数生成器。RNG 的基本算法是:
1. 初始化:从 S 上的分布 µ 中画出种子 S0。设置 t = 1。
2. 转移:设置 St = f(St−1)。
3. 输出:设置 Ut = g(St)。
4. 重复:设置 t = t+ 1 并返回步骤 2。
(μ 是有限状态集 S 上的概率分布,输入是 S0,我们希望它是输出 Ut 的随机数)
这不难理解,但这里的问题是我没有看到重复次数中的随机因素。我们如何决定何时停止 RNG 的循环?我读到的所有实现 RNG 的示例都循环了 100 次,它们为特定的种子返回相同的值。一点都不随机>_<
有人可以解释我在这里缺少什么吗?任何帮助将不胜感激。感谢大家
ruby - Ruby 中的蒙特卡罗模拟
嘿,我的模拟有问题。
我是 Ruby-Starter,不知道我的代码有什么问题。这只是模拟的一部分:
如果没有最后两个 put,我不会得到错误,但是当我想计算数组 ren1_sim 和rent_sim 的平均值时,我会得到错误:
你知道怎么解决吗?
excel - For Each In:是否可以从第一个 FOR 单元格开始遍历单列范围并粘贴多列?
我在尝试优化代码的某个部分时遇到了麻烦。我正在执行蒙特卡洛模拟,我想复制一个范围的值重复多次。为此,我使用了 For Each In 结构。下面是一个最小的例子。
问题是live
跨越多列,而acell
只有一个单元格;最终发生的只是第一列被复制,其余的都是空白的。我还使用了For Each acell in XYZ.rows
whereXYZ
是先前定义的多列和多行范围。但是,这要慢得多。
是否可以从第一个单元格开始遍历单列范围并粘贴多列?
c++ - 顺序蒙特卡罗方法的实现(粒子过滤器)
我对这里给出的粒子过滤器的简单算法感兴趣:http ://www.aiqus.com/upfiles/PFAlgo.png看起来很简单,但我不知道如何实际操作。关于如何实现它的任何想法(只是为了更好地理解它是如何工作的)?
编辑: 这是一个很好的简单示例,解释了它是如何工作的:http ://www.aiqus.com/questions/39942/very-simple-particle-filters-algorithm-sequential-monte-carlo-method-implementation?page= 1#39950
我尝试在 C++ 中实现它:http: //pastebin.com/M1q1HcN4但我确定我是否以正确的方式进行操作。你能检查一下我是否理解得很好,还是根据我的代码有一些误解?
graphics - 在路径追踪中处理点光源和精确反射
尝试实现蒙特卡洛路径跟踪时,我在光采样过程中遇到了障碍。
通常,程序如下:
- 追踪从相机(或前一点)开始的光线,直到到达表面点。
- 到达表面点后,在场景中的光源上随机生成一个点。
- 计算几何项,描述光是否可以到达表面上的当前点(该项为 0 或 1)。
- 如果此几何项为 1,则通过乘以衰减因子(光的距离)和材料的 BRDF 来计算该光的贡献。
我省略了一些关于如何随机选择事物的细节,但暂时不要介意(参见例如“分布光线追踪中的灯具采样”)。
在我看来,问题在于 BRDF 和光源中的光分布都不是实际函数,而是度量。
例如,对于每个入射角,完美反射镜的 BRDF 是反射方向上的狄拉克增量“函数”(即,支持在一个点上的度量,该点的质量为 1)。类似地,点光源(与面光源相对)由狄拉克增量建模,而不是密度函数。
弄清区别似乎很重要,因为它允许适当的重要性抽样。例如,在对 BRDF 进行采样时,可以:
- 均匀采样所有出射方向,并通过相应的反射分布“函数”进行缩放,
- 直接根据 BRDF 采样,之后不缩放。
介于两者之间的任何事情都是可能的,而且很重要,因为对于复杂的 BRDF,完美的重要性采样是不可能的。
现在,在 BRDF 实际上是一个狄拉克 delta 的情况下,我们看到根据 BRDF 采样变得非常重要:随机采样,我们必须以概率 1 消除贡献(因为 BRDF 在单点上得到支持,当均匀采样方向时,我们有概率 0 选择),但是如果我们碰运气并得到反射方向(质量所在的位置),那么我们必须将贡献缩放到无限大!如果我们根据 BRDF 进行采样,我们总是会生成反射方向,并且不必缩放任何东西(特别是不会遇到任何无穷大)。
那么我的问题如下:如果它们都是一般度量而不仅仅是函数,你如何将 BRDF 乘以光的贡献?在考虑 BRDF 的重要性采样和场景中的灯光分布时,如何在这一步正确地“重要性采样”?(光的采样过程应同时考虑光分布和 BRDF,以避免无穷大。)
理想情况下,人们需要永远不会产生无穷大的抽样程序,无穷大应该只是不良抽样机制的产物(如上文所述)。因此,对于随后的四种情况,计算出的贡献应该始终是有限的:
- 带有区域光的连续 BRDF(例如朗伯漫反射材质)
- 带点光源的连续 BRDF
- 带区域光的离散 BRDF(例如完美镜子)
- 带点光源的离散 BRDF
当然,理想情况下,这适用于 BRDF 和灯光的任何测量,但似乎能够正确处理上述 4 种情况是大部分工作所在。
c++ - 用于蒙特卡罗模拟的 C++ 类设计
我正在尝试构建一个 Monte Carlo 对象类,并且想知道设计相关类的最佳方法。
对象的结构(称为实体)包含名称、描述和分布类型,可以是几种不同的类型,例如。正态、固定整数、三角形等。分布类是(或可能是)特定分布的超类,例如。普通的。
所以我有
那么实际分布的一个例子可能是
FixedDistribtion 也将是 Distribution 的子类,并实现不同的方法,例如。setWeights、setValues 以及 Sample 当然。
我希望写这样的代码
然后
我想做的是在实体中定义一个分布(超类),然后使用它的子类方法,这些方法取决于分布类型,例如。设置平均值。实体中的分发对象将在运行时确定,例如。if (distnType == NORM) dsn = new NormalDistribution; if (distnType == FIXED) dsn = new FixedDistribution;
这在 C++ 中是可能的,还是完全失去了多态的概念?我无法将 dsn 变量定义为超类,然后在运行时缩小到实际分布。一种(更简单)的方法是定义没有分发的实体,并自行使用分发,而不附加到实体。
多谢你们