{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Monte Carlo integration"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import secrets\n",
    "import matplotlib.pyplot as plt"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Solve the integral $\\large \\int_0^2 \\sin^2 \\left[ \\frac{1}{x(2-x)} \\right] dx$, both via \"simple\" MC integration and using the mean value method"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "##### Defining and plotting the function to integrate"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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SW63F//15jUDyZd9FF566SXMmzcPX375JTp16uR22xYtWiAhIQG///673232hj/7J0RERKBr1672tuvpM/Rn/y5evIi1a9cqOnlq9fn5wtV3MC4uDtHR0aocE3qxdu1a3HvvvVi/fn21roSqateujauuusoQn6EzPXv2tLe9Jn2GkiRh5cqVGDt2LCIjI91uq/VnOGXKFHz22Wf45ptvcOWVV7rdVi/XQgY9XoiMjET37t2Rnp5uf8xmsyE9Pd0hEyCXkpLisD0AbN261b598+bNkZSU5LBNQUEBdu7c6fI1A8mXfQQuVd0///zz2Lx5M3r06OHxfU6dOoXz58+jYcOGqrRbKV/3T85qteLAgQP2tuvpM/Rn/95//32UlZXh7rvv9vg+Wn1+vvD0HVTjmNCD9957DxMmTMB7773nMN2AK0VFRfjjjz8M8Rk6s3//fnvba8pnCFwaGfX7778ruvnQ6jOUJAlTpkzBRx99hK+//hrNmzf3+BzdXAtVK4kOEWvXrpWioqKkVatWSb/88ov097//Xapdu7aUmZkpSZIkjR07VnryySft23/33XeS2WyWXnrpJenQoUNSWlqaFBERIR04cMC+zbx586TatWtLH3/8sfTTTz9Jw4YNk5o3by6VlJQEff8kyft9nDdvnhQZGSlt2LBBOnv2rP2nsLBQkiRJKiwslB577DFpx44d0tGjR6WvvvpK6tatm9S6dWuptLRU9/v37LPPSlu2bJH++OMPac+ePdLo0aMli8Ui/fzzz/Zt9PQZert/wnXXXSeNGjWq2uN6+/wKCwulffv2Sfv27ZMASIsWLZL27dsnHT9+XJIkSXryySelsWPH2rf/888/pZiYGOnxxx+XDh06JC1dulQKDw+XNm/ebN/G079ZsHm7j++8845kNpulpUuXOnwH8/Ly7NtMmzZNysjIkI4ePSp99913UmpqqpSQkCBlZ2frfv8WL14sbdy4UTpy5Ih04MAB6eGHH5bCwsKkr776yr6N0T9D4e6775Z69erl9DX18hlOnjxZio+PlzIyMhyOt+LiYvs2er0WMujxwauvvio1adJEioyMlHr27Cn98MMP9r/dcMMN0j333OOw/fr166WrrrpKioyMlDp06CBt2rTJ4e82m02aOXOmlJiYKEVFRUk33XSTdPjw4WDsikve7GPTpk0lANV+0tLSJEmSpOLiYumWW26R6tevL0VEREhNmzaVJk2apNnJSJK8279HHnnEvm1iYqJ06623Snv37nV4Pb19ht4eo7/++qsEQPryyy+rvZbePj8xfLnqj9ine+65R7rhhhuqPadLly5SZGSk1KJFC+mtt96q9rru/s2Czdt9vOGGG9xuL0mXhuk3bNhQioyMlBo3biyNGjVK+v3334O7Y//j7f7Nnz9fatmypWSxWKS6detK/fr1k77++utqr2vkz1CSLg3Rjo6Olv71r385fU29fIbO9guAw/dKr9dC0/92gIiIiKhGY00PERERhQQGPURERBQSGPQQERFRSGDQQ0RERCGBQQ8RERGFBAY9REREFBIY9BAREVFIYNBDREREIYFBDxEREYUEBj1EREQUEhj0EBERUUhg0ENEREQhgUEPEdU4Dz74IEwmE/r27YvKyspqf//HP/4Bk8mEbt26obS0VIMWEpEWuMo6EdU45eXl6NOnD3bv3o0nnngC8+bNs/9t8+bNuPXWWxEbG4s9e/agVatWGraUiIKJQQ8R1UhHjx5Ft27dkJ+fj02bNmHQoEE4deoUunbtinPnzmH9+vW44447tG4mEQURu7eIqEZq3rw5Vq1aBUmSMHbsWBw9ehSjR4/GuXPnMGXKFAY8RCGImR4iqtGmTZuGRYsWIT4+Hvn5+ejRowe+++47REZGat00IgoyBj1EVKNVVlaic+fO+OWXX1CrVi0cOHAAzZs317pZRKQBdm8RUY22c+dO/PbbbwCAixcv4sCBAxq3iIi0wqCHiGqsc+fOYfTo0aisrMSECRNgMpkwfvx4HD9+XOumEZEGGPQQUY0kCphPnTqFcePGYeXKlZg2bRouXLiAUaNGoaKiQusmElGQMeghohpp7ty52Lx5M9q3b4/XXnvN/lhKSgp27tyJ6dOna9xCIgo2FjITUY2zbds23HjjjYiKisKPP/6I9u3b2/924sQJdO3aFbm5udi4cSOGDRumYUuJKJiY6SGiGiUnJwdjxoyB1WrF0qVLHQIeAGjSpAlWrVoFk8mECRMm4NixY9o0lIiCjpkeIiIiCgnM9BAREVFIYNBDREREIYFBDxEREYUEBj1EREQUEhj0EBERUUhg0ENEREQhgUEPERERhQQGPURERBQSGPQQERFRSGDQQ0RERCGBQQ8RERGFBAY9REREFBL+H0hxGa8weoEtAAAAAElFTkSuQmCC",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "def f(x): return (np.sin(1/(x*(2.0-x))))**2\n",
    "\n",
    "x = np.arange(0.001,2,0.0001)\n",
    "y = f(x)\n",
    "plt.plot(x,y,color='black')\n",
    "plt.fill_between(x,y, color='lightgray')\n",
    "plt.xlabel('x',size = 16)\n",
    "plt.ylabel('f(x)', size = 16)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "##### 1) Integrating via \"simple Monte Carlo\""
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "N = 100     , I = 1.520000\n",
      "N = 1000    , I = 1.392000\n",
      "N = 10000   , I = 1.449400\n",
      "N = 100000  , I = 1.450120\n",
      "N = 1000000 , I = 1.450726\n"
     ]
    }
   ],
   "source": [
    "# Monte Carlo integration of function f, using N points\n",
    "def MCint(f,N):\n",
    "    seed = secrets.randbits(128)\n",
    "    rng = np.random.default_rng(seed)\n",
    "    # List with x-coordinate of random generated points in the rectangle [0,2]x[0,1]\n",
    "    x = 2. *rng.random(N)\n",
    "    # List of f(x) values, for all random generated x\n",
    "    fx = f(x)\n",
    "    # List of random generated y-coordinates\n",
    "    y = rng.random(N)\n",
    "    # Count the number of points for which y < f(x) (i.e. falling in gray-shaded area in the plot above)\n",
    "    k = np.sum(np.array(fx - y) > 0.)\n",
    "    # Calculate integral as (A k /N), where A i the area of the rectangle\n",
    "    A = 2.\n",
    "    return A*k/float(N)\n",
    "\n",
    "# Result as a function of the number of points used for integration\n",
    "Npoints = [10**x for x in range(2,7)]\n",
    "for N in Npoints:\n",
    "    I = MCint(f,N)\n",
    "    print(\"N =\", (\"{:<7}\".format(str(N))), \", I =\", (\"{:.6f}\".format(I)) )"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "##### 2) Integrating via mean value method"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "N = 100     , I = 1.557244\n",
      "N = 1000    , I = 1.473392\n",
      "N = 10000   , I = 1.448979\n",
      "N = 100000  , I = 1.449808\n",
      "N = 1000000 , I = 1.451680\n"
     ]
    }
   ],
   "source": [
    "# Monte Carlo integration of function f, using N points and the mean value method\n",
    "def MCint_mean(f,N,a,b):\n",
    "    seed = secrets.randbits(128)\n",
    "    rng = np.random.default_rng(seed)\n",
    "    # List with x-coordinate of random generated points in the interval [a,b]\n",
    "    x = (b-a)*rng.random(N)\n",
    "    # List of f(x) values in the random generated x\n",
    "    fx = np.array(f(x))\n",
    "    # Calculate integral as [(b-a)/N]*sum(fx)\n",
    "    return (b-a)*np.sum(fx)/float(N)\n",
    "\n",
    "a=0. \n",
    "b=2.\n",
    "Npoints = [10**x for x in range(2,7)]\n",
    "for N in Npoints:\n",
    "    I = MCint_mean(f,N,a,b)\n",
    "    print(\"N =\", (\"{:<7}\".format(str(N))), \", I =\", (\"{:.6f}\".format(I)) )"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Solve the integral $\\large \\int_0^1 \\frac{x^{-1/2}}{e^x  + 1} dx$, via importance sampling"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "##### 1) We choose weights as $w(x) = x^{-1/2}$. First of all, we see that this requires sampling from $\\large p(x) = \\frac{1}{2 x^{1/2}}$ (check it) and we implement the transformation formula to do that (derive it).   "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAkoAAAG2CAYAAACAm6lmAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy88F64QAAAACXBIWXMAAA9hAAAPYQGoP6dpAABOMElEQVR4nO3deXxU1f3/8ddktiwkARKSACZsQQmI7CAgIopSEZevIloXEK34U6hrUZEqKipoRbGIWLVVWhe0VtCiYhVBiuwELAqyCBK2AAkhe2YmM/f3R0ggkEACk7kzyfv5eNxHZu6cmfvJDXbePefccy2GYRiIiIiIyAnCzC5AREREJFgpKImIiIhUQ0FJREREpBoKSiIiIiLVUFASERERqYaCkoiIiEg1FJREREREqmEzu4BQ5vP52Lt3L9HR0VgsFrPLERERkRowDIP8/HxatGhBWNjJ+4wUlM7A3r17SU5ONrsMEREROQ27du3irLPOOmkbBaUzEB0dDZSd6JiYGJOrERERkZrIy8sjOTm54nv8ZBSUzkD5cFtMTIyCkoiISIipybQZTeYWERERqYaCkoiIiEg1FJREREREqqE5SiIiIqfB6/Xi8XjMLkOq4XA4Tnnpf00oKImIiNSCYRhkZmZy+PBhs0uRkwgLC6NNmzY4HI4z+hwFJRERkVooD0kJCQlERkZqweEgVL4g9L59+0hJSTmjv5GCkoiISA15vd6KkBQXF2d2OXISzZo1Y+/evZSWlmK320/7czSZW0REpIbK5yRFRkaaXImcSvmQm9frPaPPUVASERGpJQ23BT9//Y0UlERERESqoTlKIiIiZygjI4OsrKyAHS8+Pp6UlJSAHa+u3HbbbRw+fJh58+aZXUq1FJRERETOQEZGBud0SKOkuChgxwyPiGTzz5vqRVgKdgpKIiIiZyArK4uS4iLihj2EPS65zo/nyd5F9vxpZGVlKSgFgOYoiYiI+IE9LhlnUmqdb6cbxj7++GM6d+5MREQEcXFxDB48mMLCQlavXs2ll15KfHw8sbGxDBw4kPT09ErvtVgs/OUvf2HYsGFERkaSlpbG8uXL2bZtGxdddBFRUVH069ePX375peI9Tz75JF27duUvf/kLycnJREZGMmLECHJzc6ut0efzMWXKFNq0aUNERARdunTh448/rng9JyeHm2++mWbNmhEREUH79u15++23T+t81JSCUhDLyMggPT29YsvIyDC7JBERCUH79u3jt7/9LbfffjubNm1i8eLFXHvttRiGQX5+PqNGjWLp0qWsWLGC9u3bM3ToUPLz8yt9xuTJkxk5ciTr16+nQ4cO3HTTTdx1111MmDCBNWvWYBgG48aNq/Sebdu28dFHH/Hvf/+bBQsWsG7dOu65555q65wyZQp///vfef311/npp5944IEHuOWWW/juu+8AePzxx9m4cSNffvklmzZtYtasWcTHx/v/hB1DQ29Bqqoxb41Ji4jI6di3bx+lpaVce+21tGrVCoDOnTsDcPHFF1dq+8Ybb9C4cWO+++47hg0bVrF/9OjRjBgxAoBHHnmEvn378vjjjzNkyBAA7rvvPkaPHl3ps0pKSvj73/9Oy5YtAZgxYwZXXHEF06ZNIykpqVJbl8vFc889xzfffEPfvn0BaNu2LUuXLuUvf/kLAwcOJCMjg27dutGzZ08AWrdu7Y/Tc1LqUQpSx455J42aTtywhygpLgroVRUiIlI/dOnShUsuuYTOnTtz/fXX8+abb5KTkwPA/v37ufPOO2nfvj2xsbHExMRQUFBwwijGeeedV/E4MTEROBq2yveVlJSQl5dXsS8lJaUiJAH07dsXn8/H5s2bT6hx27ZtFBUVcemll9KoUaOK7e9//3vFkN7dd9/NnDlz6Nq1Kw8//DDLli3zw9k5OfUoBbnyMW8REZHTZbVa+frrr1m2bBn/+c9/mDFjBhMnTmTlypXcfffdZGdn88orr9CqVSucTid9+/bF7XZX+oxjbwNSvphjVft8Pt9p1VhQUADA559/XilcATidTgAuv/xydu7cyRdffMHXX3/NJZdcwtixY3nxxRdP65g1oR4lERGRBsBisdC/f3+eeuop1q1bh8PhYO7cuXz//ffce++9DB06lE6dOuF0Ov02epGRkcHevXsrnq9YsYKwsDDOOeecE9p27NgRp9NJRkYGqamplbbk5KMT2Js1a8aoUaN49913mT59Om+88YZfaq2OepRERETquZUrV7Jw4UIuu+wyEhISWLlyJQcPHiQtLY327dvzj3/8g549e5KXl8f48eOJiIjwy3HDw8MZNWoUL774Inl5edx7772MGDHihPlJANHR0fzhD3/ggQcewOfzccEFF5Cbm8v3339PTEwMo0aN4oknnqBHjx506tQJl8vF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RARXXXUVf/3rX9m6dSv3338///vf/xgwYIBZJQWt8sncGnoTEREJLNOC0rEsFgv9+vXj+eef14TuKmgyt4iIiDmCIiiV69mzp9klBCXNURIRETGHLdAHPNlaSXv37g1gJaHDrXu9iYiImMLvQSkjI4PFixczcuTIKl/v0KEDrVu3xjCME17Lysrydzn1wrFDb6Um1yIiItKQ+D0orV69mtGjR1cblFq3bs1///tfWrZsecJrycnJ/i6nXjg6mVtBSUREJJACPkdpxIgR7Nq1q9rX5ERacFJERMQcNe5Ratu2bY3aFRUVnfT1qVOnVvvatGnTalpOg+LGDmgyt4iISKDVOCjt3r2bzp0707t375O22759O998802tiigqKiIyMrJW72lItOCkiIiIOWoclDp37kybNm2YNWvWSdv961//qnVQGjhwIF988QXNmjWr1fsaCg9lCUlDbyIiIoFV4zlKvXr1YtWqVTVqW9UVbSctIiyM888/n61bt57w2uHDh5kwYUKtPq++OXYyt4iIiAROjYPS+PHjefXVV0/ZbujQoezYsaNWRXz33Xecd9559OvXj+XLlwNQWFjIM888Q5s2bWp03PpMc5RERETMUeOg1K5dO6666qpTtouIiKBVq1a1KiI8PJxPPvmEm266icGDB/PAAw/Qtm1bpkyZwu23384vv/xSq8+rb8rnKFnDLODzmlyNiIhIwxHwlbmr4/V66dixIxaLhVdeeYU+ffrw6aefkpCQYHZppvMc82ey+DwmViIiItKwBMW93t544w3at2/PuHHjuO6663jqqadYs2YN77zzjtmlBYVjg1KYoSUnRUREAiUoepTuvvturr32Wr744gvS0tIASEtLY+TIkezcuZNXX30Vi6XhXvFVftUbqEdJREQkkIIiKK1Zs4Zu3bpV2jd8+HCSkpK45ppr2L17N59++qlJ1QUDCy7DitPiVVASEREJoKAYejs+JJW74IILWLp0KRs2bAhwRcHHY5T1KikoiYiIBI7pQengwYP88MMPFBQUVPl6y5Ytef755wNcVfBxHwlKYT7NURIREQkU04JSaWkpo0ePJikpie7du9OsWTPuv/9+iouLK7XbuHEjN954o0lVBg/3kUUn1aMkIiISOKYFpT//+c98+OGHPP3003z++efcf//9vPnmm/Tr14/9+/ebVVbQKp/QraAkIiISOKYFpb/97W88/vjjTJw4kd/85jdMmTKF1atXU1hYSL9+/di2bZtZpQUld8UcJQ29iYiIBIppQWnHjh3069ev0r6OHTuyfPlymjZtSv/+/UlPT6/zOvbs2cMtt9xCXFwcERERdO7cmTVr1tT5cWtLk7lFREQCz7SgFB8fX+UQW1xcHIsWLaJTp04MGjSIhQsX1lkNOTk59O/fH7vdzpdffsnGjRuZNm0aTZo0qbNjnq6KydxacFJERCRgTFtHqUePHsybN48RI0ac8FqjRo1YsGABN9xwA3/84x/rbLHJ559/nuTkZN5+++2KfW3atKmTY52piqE3r9vkSkRERBoO03qUbrrpJnbs2EF2dnaVrzscDv71r38xZswYUlJS6qSGzz77jJ49e3L99deTkJBAt27dePPNN6tt73K5yMvLq7QFSsVkbvUoiYiIBEzAgpJhGJWeDx8+nOXLlxMXF1fte8LCwnj99dfZsWNHndS0fft2Zs2aRfv27fnqq6+4++67uffee5k9e3aV7adMmUJsbGzFlpycXCd1VcWtOUoiIiIBF7Cg5PP5AnWoGvP5fHTv3p3nnnuObt26MWbMGO68805ef/31KttPmDCB3Nzcim3Xrl0Bq/XoOkrqURIREQkU01fmNlPz5s3p2LFjpX1paWlkZGRU2d7pdBITE1NpCxRPxcrc6lESEREJlAYdlPr378/mzZsr7duyZQutWrUyqaLqubXgpIiISMA16KD0wAMPsGLFCp577jm2bdvG+++/zxtvvMHYsWPNLu0EHi04KSIiEnANOij16tWLuXPn8sEHH3DuuecyefJkpk+fzs0332x2aSfQvd5EREQCz7R1lILFsGHDGDZsmNllnJJbc5REREQCrk56lJYsWcKWLVsqnm/ZsoUlS5bUxaEaDA29iYiIBF6dBKWLLrqI559/vuL5lClTGDRoUF0cqsHQZG4REZHAq7M5SscvMClnpmLBSa3MLSIiEjANejJ3KDm6jpLu9SYiIhIoCkohwq05SiIiIgGnoBQiPJqjJCIiEnAKSiHCpXu9iYiIBJyCUojQvd5EREQCT0EpRBxdR0lBSUREJFAUlEKEJnOLiIgEnoJSiNBkbhERkcBTUAoRLt0UV0REJOAUlELE0cncGnoTEREJFAWlEFExmdtQj5KIiEig2OriQ0eNGsUFF1xQ8fzYx3J6jt4UVz1KIiIigVInQentt9+u9PyOO+7gjjvuqItDNRhuzVESEREJOA29hQi31lESEREJOAWlEKHJ3CIiIoGnoBQitDK3iIhI4CkohQiXJnOLiIgEnIJSiKjoUcIHXoUlERGRQFBQChHlk7kB8LrNK0RERKQBUVAKER4FJRERkYDz+zpK+/fvZ+HChaSnp7N//35ycnJo0qQJiYmJ9OjRg4svvpjExER/H7beK78pLgBeTegWEREJBL8EJY/Hw4cffsjMmTNZtWoVAIZhnNDOYrEA0KdPH8aOHcuIESOw2+3+KKEBsOAqNXDaLOB1mV2MiIhIg3DGQekf//gHEyZMYN++fRiGQbNmzejbty+dOnUiLi6OmJgYcnNzyc7O5scff2T58uWsWLGClStX8uijjzJlyhRuueUWf/wu9Z7bC04bGnoTEREJkDMKSn379mXVqlXEx8dz7733ctttt9GlS5dTvm/9+vW8/fbbfPDBB4waNYrXXnuNZcuWnUkpDYLbawAWDb2JiIgEyBlN5t66dSsvvPACGRkZvPzyyzUKSQBdu3bllVdeYdeuXUydOpUtW7acSRkNhst75IF6lERERALijHqUtm/fTkxMzGm/3+l0Mn78eO66664zKaPBcJcHpVIFJRERkUA4ox6lMwlJdfE59V3Z0BvqURIREQkQv66jlJub68+Pk+O4NfQmIiISUH4NSoMGDSI7O9ufHynHcJXfuUSTuUVERALCr0Fp/fr1XHjhhWRmZp6yrcejL/vaOjr0pnWUREREAsGvQenhhx9m06ZNDBgwgIyMjGrbffjhh3To0MGfh24QNPQmIiISWH4NSlOnTuXZZ5/ll19+YcCAAWzdurXS6ytWrKBfv37cdNNN/Prrr/48dINwNCipN05ERCQQ/H5T3AkTJjBz5kx2797NhRdeyIYNG/j111+54YYb6N+/PytWrCAlJYXZs2f7+9D1nktXvYmIiASU32+KC3D33XcTExPD6NGjGTBgAC6XC5fLRdOmTXnssccYN24cDoejLg5drx1dR0lzlERERAKhToKSz+ejsLCQ6OhocnJysFgs3HjjjcyaNYvY2Ni6OGSDoKE3ERGRwPL70NvcuXM599xzufvuu8nJyaFfv34AfPPNN+zYscPfh2tQtOCkiIhIYPk1KPXr14/hw4fz888/061bNxYtWsTSpUt56623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1q1bZ2zatMm47bbbjNjYWGP37t0Brjy01PY8l9uxY4fRsmVLY8CAAcbVV18dmGJDWG3Ps8vlMnr27GkMHTrUWLp0qbFjxw5j8eLFxvr16wNceeip7bl+7733DKfTabz33nvGjh07jK+++spo3ry58cADDwS48tDxxRdfGBMnTjQ++eQTAzDmzp170vbbt283IiMjjQcffNDYuHGjMWPGDMNqtRoLFiyo0zoVlEzSu3dvY+zYsRXPvV6v0aJFC2PKlClVth8xYoRxxRVXVNrXp08f46677qrTOkNdbc/z8UpLS43o6Ghj9uzZdVVivXA657m0tNTo16+f8dZbbxmjRo1SUKqB2p7nWbNmGW3btjXcbnegSqw3anuux44da1x88cWV9j344ING//7967TO+qImQenhhx82OnXqVGnfDTfcYAwZMqQOKzMMDb2ZwO12s3btWgYPHlyxLywsjMGDB7N8+fIq37N8+fJK7QGGDBlSbXs5vfN8vKKiIjweD02bNq2rMkPe6Z7np59+moSEBO64445AlBnyTuc8f/bZZ/Tt25exY8eSmJjIueeey3PPPYfX6w1U2SHpdM51v379WLt2bcXw3Pbt2/niiy8YOnRoQGpuCMz6HmzwK3ObISsrC6/Xe8Lq34mJifz8889VviczM7PK9pmZmXVWZ6g7nfN8vEceeYQWLVqc8B+nHHU653np0qX89a9/Zf369QGosH44nfO8fft2vv32W26++Wa++OILtm3bxj333IPH42HSpEmBKDsknc65vummm8jKyuKCCy7AMAxKS0v5f//v//HYY48FouQGobrvwby8PIqLi4mIiKiT46pHSaQaU6dOZc6cOcydO5fw8HCzy6k38vPzufXWW3nzzTeJj483u5x6zefzkZCQwBtvvEGPHj244YYbmDhxIq+//rrZpdU7ixcv5rnnnuO1114jPT2dTz75hM8//5zJkyebXZqcIfUomSA+Ph6r1cr+/fsr7d+/fz9JSUlVvicpKalW7eX0znO5F198kalTp/LNN99w3nnn1WWZIa+25/mXX37h119/5corr6zY5/P5ALDZbGzevJl27drVbdEh6HT+PTdv3hy73Y7Vaq3Yl5aWRmZmJm63G4fDUac1h6rTOdePP/44t956K7/73e8A6Ny5M4WFhYwZM4aJEycSFqZ+iTNV3fdgTExMnfUmgXqUTOFwOOjRowcLFy6s2Ofz+Vi4cCF9+/at8j19+/at1B7g66+/rra9nN55BnjhhReYPHkyCxYsoGfPnoEoNaTV9jx36NCBDRs2sH79+ortqquuYtCgQaxfv57k5ORAlh8yTuffc//+/dm2bVtFEAXYsmULzZs3V0g6idM510VFRSeEofKAauiWqn5h2vdgnU4Vl2rNmTPHcDqdxjvvvGNs3LjRGDNmjNG4cWMjMzPTMAzDuPXWW41HH320ov33339v2Gw248UXXzQ2bdpkTJo0ScsD1EBtz/PUqVMNh8NhfPzxx8a+ffsqtvz8fLN+hZBQ2/N8PF31VjO1Pc8ZGRlGdHS0MW7cOGPz5s3G/PnzjYSEBOOZZ54x61cIGbU915MmTTKio6ONDz74wNi+fbvxn//8x2jXrp0xYsQIs36FoJefn2+sW7fOWLdunQEYL730krFu3Tpj586dhmEYxqOPPmrceuutFe3LlwcYP368sWnTJmPmzJlaHqC+mzFjhpGSkmI4HA6jd+/exooVKypeGzhwoDFq1KhK7T/66CPj7LPPNhwOh9GpUyfj888/D3DFoak257lVq1YGcMI2adKkwBceYmr77/lYCko1V9vzvGzZMqNPnz6G0+k02rZtazz77LNGaWlpgKsOTbU51x6Px3jyySeNdu3aGeHh4UZycrJxzz33GDk5OYEvPEQsWrSoyv+9LT+vo0aNMgYOHHjCe7p27Wo4HA6jbdu2xttvv13ndVoMQ32CIiIiIlXRHCURERGRaigoiYiIiFRDQUlERESkGgpKIiIiItVQUBIRERGphoKSiIiISDUUlERERESqoaAkIiIiUg0FJREREZFqKCiJiIiIVENBSURERKQaCkoiIiIi1VBQEhEBfv/732OxWBgwYAClpaUnvD5x4kQsFgvdu3enpKTEhApFxAwWwzAMs4sQETGb2+2mf//+rFmzhkceeYSpU6dWvLZgwQKGDh1KdHQ0a9euJTU11cRKRSSQFJRERI7YsWMH3bt3Jzc3l88//5zLL7+c3bt3061bN7Kysvjoo4+4/vrrzS5TRAJIQ28iIke0adOGd955B8MwuPXWW9mxYwc33ngjWVlZjBs3TiFJpAFSj5KIyHEeeughXnrpJWJjY8nNzaVnz558//33OBwOs0sTkQBTUBIROU5paSldunRh48aNREVFsWHDBtq0aWN2WSJiAg29iYgcZ+XKlWzZsgWAwsJCNmzYYHJFImIWBSURkWNkZWVx4403UlpayujRo7FYLNx2223s3LnT7NJExAQKSiIiR5RP4t69ezcjR47kb3/7Gw899BA5OTnccMMNeDwes0sUkQBTUBIROWLKlCksWLCAjh078tprr1Xs69u3LytXruThhx82uUIRCTRN5hYRAZYsWcLFF1+M0+lk9erVdOzYseK1jIwMunXrxqFDh5g3bx5XX321iZWKSCCpR0lEGryDBw/y29/+Fq/Xy8yZMyuFJICUlBTeeecdLBYLo0eP5tdffzWnUBEJOPUoiYiIiFRDPUoiIiIi1VBQEhEREamGgpKIiIhINRSURERERKqhoCQiIiJSDQUlERERkWooKImIiIhUQ0FJREREpBoKSiIiIiLVUFASERERqYaCkoiIiEg1FJREREREqvH/AXSXVtl6ijscAAAAAElFTkSuQmCC",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "seed = secrets.randbits(128)\n",
    "rng = np.random.default_rng(seed)\n",
    "N = 10000\n",
    "x = rng.random(N)\n",
    "# Transformation to get r.v. distributed as p(x) = (x^-0.5)/2\n",
    "x = x**2\n",
    "\n",
    "# Plotting histogram of sampled values and checking that they are distributed as p(x)\n",
    "plt.hist(x, bins=100, density=True, ec = 'black', histtype='bar',label='samples')\n",
    "xlist = np.arange(0.0025,1.,0.01)\n",
    "px = 1./(2.*np.sqrt(xlist))\n",
    "plt.plot(xlist,px, label='p(x)')\n",
    "plt.xlabel('x',size=16)\n",
    "plt.ylabel(r'$p(x)=\\frac{1}{2x^{1/2}}$',size = 16)\n",
    "plt.legend()\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "##### 2) We compute the integral with importance sampling, $\\large I = \\frac{1}{N} \\sum \\frac{f(x_i)}{w(x_i)} \\int_a^b w(x)dx$ and use $w(x) = x^{-1/2}$ (See box above)."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "I =  0.8388913172119957\n"
     ]
    }
   ],
   "source": [
    "# Integrand function\n",
    "def f(x): return x**(-0.5)/(np.exp(x)+1)\n",
    "\n",
    "# Number of points in the sample\n",
    "N = 1000000\n",
    "\n",
    "# Sampling x_i: r.v. distributed as p(x) (see above)\n",
    "x = rng.random(N)\n",
    "x = np.array(x**2)\n",
    "\n",
    "# Calculating (w(x_i)), for all sampled points\n",
    "w = x**(-0.5)\n",
    "# Calculating f(x_i), for all sampled points\n",
    "fx = f(x)\n",
    "\n",
    "# Implementing importance sampling formula with a=0, b=1 and noting that \\int w(x)dx = 2\n",
    "I = (2./float(N))*np.sum(fx/w)\n",
    "\n",
    "print('I = ', I)"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.10.7"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
