問題タブ [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.
c++ - C++ 質問 - 誰でも助けてくれますか?
次の質問を解くのを手伝ってくれませんか? ありがとう。
質問: 6 面のサイコロを 3 つ一度に転がす割合は、数学またはシミュレーションで求めることができます。モンテカルロ法は、コンピュータ シミュレーションによって問題の解決策を見つけるコンピュータ プロセスです。3 つのサイコロを振ってその合計を計算し、それぞれの結果が出る確率を求めるプログラムを作成してください。
6 面のサイコロを 10000 回振ったときの統計を生成するスケルトン プログラム q1dskeleton.c が与えられます。プログラムを修正して、3 つの六面体サイコロを振った合計の統計を生成するようにします。プログラム出力の例を次に示します。サイコロを振るのはランダムな性質のため、注意してください。
ヒント: サイコロを 1 回投げるたびに、rand() を 3 回 (サイコロごとに 1 回) 呼び出します。
スケルトン:
出力:
math - VBAモンテカルロシミュレーション-修復時間ジェネレーター(対数的に分散)
私の名前はリックです。私はシックスシグマのグリーンベルトで、航空機エンジンの修理施設のモンテカルロシミュレーションを作成しました。私は現在、ExcelVBAでシックスシグマプロジェクトを行っています。
プログラムの開発中に乱数をスケーリングしただけですが、開発されたので、逆対数正規CDFhttp ://engineer.jpl.nasa.gov/practices/at2.pdfを使用して乱数修復を作成したいと思います。何度も、しかし私はオンラインで機能を見つけることができませんでした。
http://www.anthony-vba.kefra.com/vba/vba12.htmで以下のコードを見つけましたが、これは正規分布用であり、正確かどうかはわかりません。逆対数正規CDFの方程式が見つかりませんでした。逆対数正規CDF関数の同様のコードが欲しいのですが。
どんな助けでも大歓迎です。
random - GPU 上のモンテカルロ
今日、友人と話をしたところ、GPU を使用してモンテカルロ シミュレーションを作成しようとしているとのことでした。興味深いことに、彼は、異なるプロセッサでランダムに数字を描きたいと言い、無相関であると仮定しました。しかし、そうではありませんでした。
問題は、複数の GPU で独立した数値セットを描画する方法が存在するかどうかです。彼は、それぞれに異なる種をとれば問題は解決すると考えましたが、そうではありませんでした。
説明が必要な場合はお知らせください。詳細を提供するように依頼します。
c++ - C++ での Well44497a による乱数生成
もう一度お邪魔して申し訳ありませんが、私は新しい C++ であるため、奇妙でばかげた問題がたくさんあります。
MCMC メソッドをプログラミングしています。このフォーラムで、WELL RNGが乱数を生成するための優れた代替手段であると読んだので、それを機能させようとしています。だからここに質問があります:
C++ プロジェクト内の "Well44497a.c" をさらに変更せずにコンパイルしています。コンパイルした。そうですか、それとも何か変更を加える必要がありますか?
コード内で次のスキームを使用していますが、3 RN のサイクルを生成しているだけです
解決済み: InitWELLRNG44497a(state) を関数の外に配置する必要があるという問題がありました。サンプルを生成するたびに、ジェネレーターを再起動していました。実行全体で、ジェネレーターを一度だけ初期化する必要があります。
math - レイトレーシングにおける3Dアフィン変換の問題
全て、
シーン内のさまざまなオブジェクトの熱伝達特性を計算するために、従来とは異なるレイトレーサーを作成しています。このレイトレーサーでは、ランダムな光線がプリミティブオブジェクトの表面からシーンに発射され、交差をチェックします。
この特定のアルゴリズムでは、各光線をプリミティブ空間で展開し、ソースオブジェクトによってワールド空間にアフィン変換し、その後、シーン内の他のオブジェクトのプリミティブ空間にアフィン変換して交差をチェックする必要があります。
たとえば、オブジェクトを[2 2 1]でスケーリングするなど、異方性スケールを実行するまでは、すべて問題ありません(等方性スケールは問題ありません)。これは、私が光線の指向性成分を正しく変換していないと私に信じさせます。現在、方向成分にソースオブジェクトの逆変換行列の転置を掛けて光線の方向をプリミティブ空間からワールド空間に変換し、次に宛先オブジェクトの転置を掛けて光線をワールド空間から各プリミティブ空間に変換します。マトリックス。
また、ソースプリミティブの変換行列を乗算してプリミティブからワールド空間に移動し、宛先の逆変換を乗算してワールド空間からプリミティブ空間に移動しようとしましたが、失敗しました。
プリミティブオブジェクトの表面から(ランダムな点でランダムな方向に)発射された光線は、「通常の」レイトレーシングの表面法線と同じ方法で変換する必要があると思いますが、確かではありません。
私の方法論の欠陥が何であるかを知っている専門家はいますか?さらに情報が必要かどうかお気軽にお問い合わせください。
このレイトレーサーの基本的なアルゴリズムは次のとおりです。
うまくいけば、質問をクリアするために例を見てみましょう。z軸(単位半径と高さ)に沿って伸びる円柱と、内径7と外径8のxy平面にある環があるとします。xとyの係数6で円柱をスケーリングします。方向(z方向ではない)なので、私のアフィン変換行列は次のようになります。
ここで、円柱sの表面にランダムな開始点があり、円柱cの表面からランダムな方向に離れて光線r(os)= s+ctを与える光線があるとします。
この光線をプリミティブ(オブジェクト)空間からワールド空間に変換してから、シーン内の他のオブジェクト(環)との交差をテストしたいと思います。
最初の質問は、M(円柱)またはM ^ -1(円柱)を使用して、光線r(os)を世界空間r(ws)に変換する正しい方法は何ですか。
2番目の質問は、光線r(ws)をワールド空間からオブジェクト空間に変換し、M(環)とM ^ -1(環)を使用して他のオブジェクトとの交差をチェックする正しい方法は何ですか。
いくつかの追加の背景情報:
このアプリケーションは、N個のオブジェクト間の放射熱伝達を計算するためのものです。光線はオブジェクト上のランダムな点から発射され、その方向はランダムな点で表面法線に向けられた半球分布内にあるようにランダムに選択されます。
これが私の問題の視覚化です。最初に生成されたときの光線の方向分布:
変換行列Mを使用して世界座標に変換を適用すると、次のようになります。
逆変換行列M^-1を使用して世界座標に変換を適用すると
exception - プログラム開始時のスタック オーバーフロー例外 (CUDA Monte Carlo Pi)
私の問題は、プログラムが最初にメインに入ったときに、プログラムの開始時にスタック オーバーフロー例外を受け取っていることです。私のプログラムは、CUDA を使用した Parallel Monte Carlo Pi 計算機です。Visual Studio でプログラムをデバッグしようとすると、選択できるブレークポイントの前に例外がポップアップします。どんな助けでも大歓迎です。
c - OpenMP を使用して PI の値を計算する
特定の反復回数で PI の値を計算するモンテカルロ コードを並列化することで、OpenMP の使用方法を学ぼうとしています。コードの内容は次のとおりです。
これは、10,000回の反復で与えられたpiの適切な値を生成していません。すべての OpenMP 要素が取り除かれると、正常に動作します。ここからモンテカルロコードを使用したことを言及する必要があります: http://www.dartmouth.edu/~rc/classes/soft_dev/C_simple_ex.html
私はそれを使って OpenMP を学ぼうとしています。1.4ish に収束している理由はありますか? 複数のスレッドで変数をインクリメントできませんか? 問題は変数にあると思いますcount
。
ありがとう!
c++ - Geant4 で nCapture プロセスに関与する核を見つける
Geant4 の (n,gamma) 反応で標的核を決定しようとしています。この情報を抽出できませんでした。Isotope Counting が有効になっている場合、G4HadronicProcess によって作成される G4IsoParticleChange に格納されていることがわかった唯一の場所です。
残念ながら、この情報は、プロセスが呼び出されるたびに失われます (良い方法ではありませんが、メモリ リーク スタイルです)。パーティクルの作成の間にこの情報を要求するためのユーザー フックインが見つかりません。私が知る限り、G4UserStackingAction は十分ではありません。これは、二次粒子がすべてスタックされる前のステップで作成されるためです (* 最後の文を書いてアイデアが浮かびました)。
(n,ガンマ)反応で中性子を捕獲する原子核を特定するのを手伝ってくれる人はいますか? この情報を取得する簡単な方法はありますか?
ありがとう
PS中性子はステップ内で1回しか吸収できないため、セカンダリがスタックされてIsoParticleChange情報を取得するまで待つのが安全でしょうか、それともメモリリークの危険がありますか?
より明確にするために編集します。
Geant4 の nCapture プロセスでターゲットとなった核を取得する方法を誰かが知っているかどうかを尋ねています。G4IsoParticleChange 情報が取得されない場合、G4HadronicProcess が呼び出されるたびにメモリ リークが発生することはソースから明らかです。一部の情報を欠落させたり、前述のメモリ リークを引き起こしたりせずにこれを取得するのに適切なユーザー フックはないようですが、この情報ストレージをオンにすることは可能です。この情報を取得する正しい方法は何か、またはターゲット核に関するこの種の情報を取得するためのより良い方法があるかどうか疑問に思っています.
私は以前、Geant に精通している人々から SO に関する助けをいくつか得ました。Slac Geant4 フォーラムから、そこに投稿するためのアクセスを許可する応答を得ることができませんでした。とにかく、フォーラムはそれほど活発ではないようです。
ありがとう
ファローアップ:
誰かがこれに出くわした場合に備えて、G4HadronicProcess クラスの作成者の 1 人から私が得た答えは、「実装のこの部分は何年も維持されていません」であり、「相互作用にニュークリアスを関与させることは、不可能ではないにしても非常に困難です。ソースコードを編集せずに。」そのため、それができる新しい Geant ワークスペースをセットアップ中です。ご参考までに。
matlab - Matlab:4x4相関行列を想定して、確率変数の4x1行列を生成する方法は?
まず、A、B、C、Dというラベルの付いた4つの時系列から始めます。
私は以下を生成します:
- 平均の4x1行列。
- 標準偏差の4x1行列。
- 各時系列から30個のサンプルを取得することによる4x4相関行列。
時系列間の相関をそのまま維持して、確率変数の4x1行列を生成するMatlabコードとは何ですか?
(理由:これはモンテカルロシミュレーションの最初の段階です)。
c++ - 正規分布の確率変数がゼロになるのを最も効果的に防ぐにはどうすればよいですか?
私はモンテカルロアルゴリズムを書いています。このアルゴリズムでは、ある時点で確率変数で除算する必要があります。より正確には、確率変数は差分商のステップ幅として使用されるため、実際には最初に変数を乗算してから、この式の局所的な線形関数から再度除算します。好き
これはほとんどの場合正常に機能しますが、。の場合は失敗しh=0
ます。数学的には、これは問題ではありません。正規分布の確率変数の有限(または実際には可算)選択では、すべてが確率1で非ゼロになるためです。しかし、デジタル実装では、h==0
約2³²の関数呼び出しが発生します。 (宇宙よりも周期が長いメルセンヌツイスターに関係なく、通常long
のsを出力します!)。
この問題を回避するのは非常に簡単です。
しかし、私はこれを特にエレガントだとは思いません。より良い方法はありますか?
私が評価している関数は、実際には単純なℝ->ℝのようなもの
f
ではなく、ℝⁿ変数を数値積分しながらℝᵐ変数の勾配を計算するℝᵐxℝⁿ->ℝです。関数全体に、予測できない(しかし「コヒーレントな」)ノイズが重なっており、特定の(しかし未知の)優れた周波数がある場合もあります。これを固定値で試してみると、問題が発生しますh
。