问题标签 [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.

0 投票
2 回答
935 浏览

c++ - C++ 问题 - 任何人都可以帮忙吗?

您介意帮我解决以下问题吗?谢谢。

问题: 6面一次掷3个骰子的百分比可以用数学或模拟方法求出。蒙特卡罗方法是一种通过计算机模拟找出问题解决方案的计算机过程。编写一个程序,掷三个骰子,计算它们的总和,并找出掷出每个可能结果的概率。

给你一个框架程序 q1dskeleton.c,它生成 10000 次掷六面骰子的统计数据。修改程序,使其生成滚动三个六面骰子总和的统计信息。下面给出了程序输出的一个例子。请注意,由于掷骰子的随机性。

提示:每次掷骰子调用 rand() 三次,每个骰子调用一次。

骨骼:

输出:

0 投票
1 回答
2053 浏览

math - VBA Monte Carlo Simulation - 修复时间生成器(对数正态分布)

我的名字是 Rik,我是 6 西格玛绿带,我创建了一个飞机发动机维修设施的蒙特卡洛模拟。我目前正在 Excel VBA 中做一个 6-sigma 项目。

我在开发程序时只是简单地缩放了一个随机数,但现在它已经开发了,我想使用逆对数正态 CDF http://engineer.jpl.nasa.gov/practices/at2.pdf创建随机修复次,但我无法在网上找到该功能。

我确实在http://www.anthony-vba.kefra.com/vba/vba12.htm上找到了以下代码,但它适用于正态分布,我不确定它的准确性。我找不到逆对数正态 CDF 的方程。我想要逆对数正态 CDF 函数的类似代码。

任何帮助是极大的赞赏。

0 投票
3 回答
2143 浏览

random - GPU 上的蒙特卡罗

今天我和我的一个朋友谈话,他告诉我他试图用 GPU 做一些蒙特卡罗模拟。有趣的是,他告诉我他想在不同的处理器上随机抽取数字,并假设存在不相关的数字。但他们不是

问题是,是否存在一种在多个 GPU 上绘制独立数字集的方法?他认为为他们每个人选择不同的种子可以解决问题,但事实并非如此。

如果需要任何澄清,请告诉我,我会要求他提供更多细节。

0 投票
1 回答
269 浏览

c++ - 在 C++ 中使用 Well44497a 生成随机数

很抱歉再次打扰,但由于我是 C++ 新手,我遇到了很多奇怪和愚蠢的问题。

我正在编写一个 MCMC 方法。我在这个论坛上读到,WELL RNG是生成随机数的一个很好的替代方案,所以我正在努力让它发挥作用。所以这里的问题:

  1. 我正在我的 c++ 项目中编译“Well44497a.c”,无需进一步修改。它编译。这是正确的还是我应该做出任何改变?

  2. 我在我的代码中使用以下方案,但它只是生成一个 3 RN 循环

已解决:问题是 InitWELLRNG44497a(state) 应该放在函数之外。每次生成样本时,我都会重新启动生成器。对于整个运行,生成器只需初始化一次。

0 投票
2 回答
2135 浏览

math - 光线追踪中的 3D 仿射变换问题

全部,

我正在编写一个相当非传统的光线追踪器来计算场景中各种物体的传热特性。在这个光线追踪器中,随机光线从我的原始对象的表面射入场景以检查交叉点。

这种特定的算法要求每条射线在原始空间中进行开发,然后由源对象仿射变换到世界空间,然后仿射变换回场景中其他对象的原始空间以检查相交。

一切都很好,直到我做了一个各向异性比例,例如按 [2 2 1] 缩放一个对象(各向同性比例很好)。这让我相信我没有正确地转换光线的方向分量。目前,我通过将方向分量乘以源对象逆变换矩阵的转置将光线方向从原始空间转换到世界空间,然后通过乘以目标对象变换的转置,将光线从世界空间转换到每个原始空间矩阵。

我还尝试乘以源图元的变换矩阵以从原始空间到世界空间,并乘以目标逆变换以从世界空间到原始空间,但这不成功。

我相信从原始物体表面(在随机点和随机方向)发射的光线应该以与“常规”光线追踪中的表面法线相同的方式进行转换,但我不确定。

那里的任何专家都知道我的方法中的缺陷是什么?随时询问是否需要更多信息。


该光线追踪器的基本算法如下:

希望能澄清这个问题,让我们看一个例子。假设我有一个沿 z 轴(单位半径和高度)延伸的圆柱体和一个位于 xy 平面内的环形空间,内径为 7,外径为 8。我希望在 x 和 y 中将圆柱体缩放 6 倍方向(但不是z方向)所以我的仿射变换矩阵如下:

现在假设我有一条射线,它在圆柱体 s 的表面上具有一个随机起点,并且在远离圆柱体 c 表面的一个随机方向上给出射线 r(os) = s + ct。

我想将此射线从原始(对象)空间转换为世界空间,然后测试与场景中的其他对象(环)的相交。

第一个问题是使用 M(圆柱体)或 M^-1(圆柱体)将射线 r(os) 转换到世界空间 r(ws) 的正确方法是什么。

第二个问题是使用 M(annulus) 和 M^-1(annulus) 将光线 r(ws) 从世界空间转换到对象空间以检查与其他对象相交的正确方法是什么。


一些额外的背景信息:

此应用程序用于计算 N 个对象之间的辐射传热。射线从物体上的随机点发射,其方向被随机选择以位于以随机点处的表面法线定向的半球形分布内。


这是我的问题的一些可视化。首次生成时的光线方向分布: 初始光线方向分布

如果我使用变换矩阵 M 将变换应用于世界坐标: M变换的方向

如果我使用逆变换矩阵 M^-1 将变换应用于世界坐标 由 M^-1 变换的方向

0 投票
2 回答
1522 浏览

exception - 程序启动时的堆栈溢出异常(CUDA Monte Carlo Pi)

我的问题是当程序第一次进入 main 时,我在程序启动时收到堆栈溢出异常。我的程序是一个使用 CUDA 的并行 Monte Carlo Pi 计算器。当我尝试在 Visual Studio 中调试程序时,异常会在我可以选择的任何断点之前弹出。任何帮助表示赞赏。

0 投票
1 回答
6241 浏览

c - 使用 OpenMP 计算 PI 的值

我试图通过并行化一个蒙特卡罗代码来学习如何使用 OpenMP,该代码以给定的迭代次数计算 PI 的值。代码的核心是这样的:

尽管在给定 10,000 次迭代的情况下,这并不能产生正确的 pi 值。如果所有 OpenMP 的东西都被取出,它工作正常。我应该提到我使用了这里的蒙特卡洛代码:http ://www.dartmouth.edu/~rc/classes/soft_dev/C_simple_ex.html

我只是用它来尝试学习 OpenMP。任何想法为什么它会在 1.4ish 上收敛?我不能用多个线程增加一个变量吗?我猜问题出在变量count上。

谢谢!

0 投票
2 回答
1164 浏览

c++ - 在 Geant4 中查找参与 nCapture 过程的核

我正在尝试确定 Geant4 中 (n,gamma) 反应中的目标核。我一直无法提取此信息。我发现它的唯一存储位置是 G4IsoParticleChange,如果启用了同位素计数,它由 G4HadronicProcess 创建。

不幸的是,每次调用该进程时,此信息都会丢失(也不是以一种好的方式,而是内存泄漏方式)。在粒子创建之间,我找不到用户挂钩来询问此信息。据我所知,G4UserStackingAction 是不够的,因为次级粒子都是在堆叠之前为一个步骤创建的(* 尽管写最后一句话给了我一个想法)。

谁能帮我确定在 (n,gamma) 反应中捕获中子的原子核?有没有更简单的方法来获取这些信息?

谢谢

PS 由于一个中子只能在一个步骤内被吸收一次,等到二级粒子被堆叠以获得 IsoParticleChange 信息是否安全,或者我是否冒着内存泄漏的风险?

编辑更清楚:

我在问是否有人知道如何在 Geant4 的 nCapture 过程中检索作为目标的核。从源头上可以清楚地看出,如果没有检索到 G4IsoParticleChange 信息,则只要调用 G4HadronicProcess 就会发生内存泄漏。似乎没有合适的用户钩子在不丢失某些信息并导致所述内存泄漏的情况下获取此信息,但可以打开此信息存储。我想知道获取此信息的正确方法是什么,或者是否有更好的方法来获取有关目标核的此类信息。

我以前从熟悉 Geant 的人那里得到了一些关于 SO 的帮助。我无法从 Slac Geant4 论坛获得回复,让我可以在那里发帖。无论如何,论坛似乎并不十分活跃。

谢谢

跟进:

万一有人偶然发现这一点,我从 G4HadronicProcess 类的一位作者那里得到的答案是“这部分实现已经很多年没有维护了”和“让核心参与交互是非常困难的,如果不是不可能的话无需编辑源代码。” 因此,我正在建立一个新的 Geant 工作区,我可以在其中执行此操作。供参考。

0 投票
2 回答
1947 浏览

matlab - Matlab:假设一个 4x4 相关矩阵,如何生成一个 4x1 随机变量矩阵?

我从 4 个时间序列开始,标记为 A、B、C、D。

我生成以下内容:

  • 一个 4x1 均值矩阵。
  • 标准差的 4x1 矩阵。
  • 一个 4x4相关矩阵,从每个时间序列中抽取 30 个样本。

什么是生成 4x1 随机变量矩阵的 Matlab 代码,保持时间序列之间的相关性完整?

(原因:这是蒙特卡洛模拟的第一阶段)。

0 投票
5 回答
639 浏览

c++ - 如何最有效地防止我的正态分布随机变量为零?

我正在编写一个蒙特卡洛算法,其中有一次我需要除以一个随机变量。更准确地说:随机变量用作差商的步长,所以我实际上首先将某个变量乘以该变量,然后再将其从该表达式的某个局部线性函数中除以。像

这在大多数情况下都可以正常工作,但在h=0. 从数学上讲,这不是一个问题,因为在正态分布随机变量的任何有限(或实际上是可数)选择中,它们都将以概率 1 非零。但在数字实现中,我会遇到h==0每 ≈2³² 函数调用(不管 mersenne twister 的周期比宇宙长,它仍然输出普通long的 s!)。

避免这个麻烦很简单,目前我正在做

但我不认为这特别优雅。有没有更好的办法?


我正在评估的函数实际上不仅仅是一个简单的 ℝ->ℝ f,而是一个 ℝᵐxℝⁿ -> ℝ,我在其中计算 ℝᵐ 变量的梯度,同时对 ℝⁿ 变量进行数值积分。整个函数叠加了不可预测的(但“连贯的”)噪声,有时还有特定的(但未知的)突出频率,当我尝试使用h.