Método de Monte Carlo integral impróprio

Sep 10 2020

A tarefa é resolver uma integral usando o método de Monte Carlo: $$ \int_0^\infty \frac{dx}{(x+1) \sqrt x} = \pi $$Mas eu não encontrei em lugar nenhum como resolver integrais com limites infinitos pelo método de Monte Carlo. Por onde devo começar? O que eu posso fazer? Desde já, obrigado!

Respostas

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}$O procedimento usual de Monte Carlo é dado por$\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}}}$ Onde

  • $\ds{\mrm{P}\pars{x}}$ é um PDF em $\ds{\left[a,b\right)}$.
  • $\ds{x_{1}, x_{2},\ldots,x_{N}}$ são gerados pela distribuição $\ds{\mrm{P}\pars{x}}$.
  • $\ds{Usually, N\ \mbox{is a}\ "large\ number"}$.

Dada uma integração particular $\ds{\int_{a}^{b}\phi\pars{x}\,\dd x}$, você escreve como $$ \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 $$ Onde $\ds{P}\pars{x}$é " convenientemente escolhido ". Observe que$\ds{\mrm{P}\pars{x} \geq 0\ \mbox{and}\ \int_{a}^{b}\mrm{P}\pars{x}\dd x = 1}$.

Por exemplo,

  • $\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}}}$ Onde $\ds{\braces{x_{k}}}$ são gerados uniformemente em $\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}}$ Onde $\ds{\braces{x_{k}}}$são " gerados "$\ds{\mbox{with}~\expo{-x}}$.

Vamos ao caso presente (em geral, é conveniente remover as singularidades integráveis ​​como $\ds{1/\root{x}}$, mas vamos mantê-lo por enquanto): \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}
Os seguintes ${\tt javascript}$ o código executa a tarefa acima:
// gosrabios10sep2020.js
// Executar como nó gosrabios10sep2020.js em um terminal
"use estrito";
const ITERATIONS = 1000000; // Um ​​milhão
deixe minhaRand = (função ()
{
 deixe myR = nulo, temp = nulo;

função de retorno () { Faz { myR = Math.random (); temp = 1,0 - myR; } enquanto (temp <= 0);

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

deixe total = 0, x = nulo; para (seja n = 0; n <ITERAÇÕES; ++ n) { x = minhaRand (); total + = (x + 1,0) /Math.sqrt (x); }

console.log (total / ITERAÇÕES);

Uma " corrida típica " produz $\ds{\large{3.143321704930537}}$.

1 Andrei Sep 10 2020 at 06:01

Faça uma mudança de variável. Se você usar$x=\tan y$, os limites correspondem para $y$ de $0$ para $\pi/2$. Nesse caso, seria ainda melhor usar$x=\tan^2 y$. Então$\sqrt x=\tan y$, e $$x+1=1+\frac{\sin^2 y}{\cos^2 y}=\frac 1{\cos^2 y}$$ Resta escrever $dx$.