Unsachgemäße integrale Monte-Carlo-Methode

Sep 10 2020

Die Aufgabe besteht darin, ein Integral mit der Monte-Carlo-Methode zu lösen: $$ \int_0^\infty \frac{dx}{(x+1) \sqrt x} = \pi $$Aber ich habe nirgendwo gefunden, wie man Integrale mit unendlichen Grenzen mit der Monte-Carlo-Methode löst. Wo soll ich anfangen? Was kann ich tun? Danke im Voraus!

Antworten

1 FelixMarin Sep 10 2020 at 19:07

$\newcommand{\bbx}[1]{\,\bbox[15px,border:1px groove navy]{\displaystyle{#1}}\,} \newcommand{\braces}[1]{\left\lbrace\,{#1}\,\right\rbrace} \newcommand{\bracks}[1]{\left\lbrack\,{#1}\,\right\rbrack} \newcommand{\dd}{\mathrm{d}} \newcommand{\ds}[1]{\displaystyle{#1}} \newcommand{\expo}[1]{\,\mathrm{e}^{#1}\,} \newcommand{\ic}{\mathrm{i}} \newcommand{\mc}[1]{\mathcal{#1}} \newcommand{\mrm}[1]{\mathrm{#1}} \newcommand{\pars}[1]{\left(\,{#1}\,\right)} \newcommand{\partiald}[3][]{\frac{\partial^{#1} #2}{\partial #3^{#1}}} \newcommand{\root}[2][]{\,\sqrt[#1]{\,{#2}\,}\,} \newcommand{\totald}[3][]{\frac{\mathrm{d}^{#1} #2}{\mathrm{d} #3^{#1}}} \newcommand{\verts}[1]{\left\vert\,{#1}\,\right\vert}$Das übliche Monte-Carlo- Verfahren ist gegeben durch$\ds{\int_{a}^{b}\mrm{P}\pars{x}\mrm{f}\pars{x}\dd x \approx {1 \over N}\sum_{k = 1}^{N}\mrm{f}\pars{x_{k}}}$ wo

  • $\ds{\mrm{P}\pars{x}}$ ist ein PDF in $\ds{\left[a,b\right)}$.
  • $\ds{x_{1}, x_{2},\ldots,x_{N}}$ werden von der Distribution generiert $\ds{\mrm{P}\pars{x}}$.
  • $\ds{Usually, N\ \mbox{is a}\ "large\ number"}$.

Bei einer bestimmten Integration $\ds{\int_{a}^{b}\phi\pars{x}\,\dd x}$, du schreibst es als $$ \int_{a}^{b}\mrm{P}\pars{x}\bracks{\phi\pars{x} \over \mrm{P}\pars{x}}\,\dd x \approx {1 \over N}\sum_{k = 1}^{N}{\phi\pars{x_{k}} \over \mrm{P}\pars{x_{k}}}\,,\qquad N \gg 1 $$ wo $\ds{P}\pars{x}$ist " bequem gewählt ". Beachten Sie, dass$\ds{\mrm{P}\pars{x} \geq 0\ \mbox{and}\ \int_{a}^{b}\mrm{P}\pars{x}\dd x = 1}$.

Zum Beispiel,

  • $\ds{\int_{4}^{9}x^{2}\,\dd x = 5\int_{4}^{9}{1 \over 5}\,x^{2}\,\dd x \approx 5\bracks{{1 \over 10000}\sum_{k = 1}^{10000}x_{k}^{2}}}$ wo $\ds{\braces{x_{k}}}$ werden gleichmäßig in erzeugt $\ds{\left[4,9\right)}$.
  • $\ds{\int_{0}^{\infty}x^{6}\expo{-x}\,\dd x \approx {1 \over 546989}\sum_{k = 1}^{546989}x_{k}^{6}}$ wo $\ds{\braces{x_{k}}}$sind " generiert "$\ds{\mbox{with}~\expo{-x}}$.

Gehen wir zum vorliegenden Fall (im Allgemeinen ist es zweckmäßig, die integrierbaren Singularitäten als zu entfernen $\ds{1/\root{x}}$, aber lassen Sie es uns vorerst behalten): \begin{align} \int_{0}^{\infty}{\dd x \over \pars{1 + x}\root{x}} & = \int_{0}^{\infty}\overbrace{1 \over \pars{x + 1}^{2}} ^{\ds{\mrm{P}\pars{x}}}\ {1 + x \over \root{x}}\,\dd x \approx {1 \over 10^{6}}\sum_{n = 0}^{10^{6} - 1} {1 + x_{n} \over \root{x_{n}}} \end{align}
Folgende ${\tt javascript}$ Code führt die obige Aufgabe aus:
// gosrabios10sep2020.js
// Als Knoten gosrabios10sep2020.js in einem Terminal ausführen
"benutze streng";
const ITERATIONS = 1000000; // Eine Million
let myRand = (function ()
{
 sei myR = null, temp = null;

Rückgabefunktion () { tun { myR = Math.random (); temp = 1,0 - myR; } while (temp <= 0);

return myR / temp; }; }) ();

sei total = 0, x = null; für (sei n = 0; n <ITERATIONEN; ++ n) { x = myRand (); gesamt + = (x + 1,0) / Math.sqrt (x); }}

console.log (total / ITERATIONS);

Ein " typischer Lauf " ergibt $\ds{\large{3.143321704930537}}$.

1 Andrei Sep 10 2020 at 06:01

Ändern Sie die Variable. Wenn du benutzt$x=\tan y$entsprechen die Grenzen für $y$ von $0$ zu $\pi/2$. In diesem Fall wäre es noch besser zu verwenden$x=\tan^2 y$. Dann$\sqrt x=\tan y$, und $$x+1=1+\frac{\sin^2 y}{\cos^2 y}=\frac 1{\cos^2 y}$$ Alles was übrig bleibt ist zu schreiben $dx$.