{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "*This notebook contains material from [cbe67701-uncertainty-quantification](https://ndcbe.github.io/cbe67701-uncertainty-quantification);\n", "content is available [on Github](https://github.com/ndcbe/cbe67701-uncertainty-quantification.git).*" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "< [9.1 Hermite Expansion for Normally Distributed Parameters](https://ndcbe.github.io/cbe67701-uncertainty-quantification/09.01-Contributed-Example.html) | [Contents](toc.html) | [10.0 Gaussian Process Emulators and Surrogate Models](https://ndcbe.github.io/cbe67701-uncertainty-quantification/10.00-Gaussian-Process-Emulators-and-Surrogate-Models.html)

\"Open

\"Download\"" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "VIKbplFmN85I", "nbpages": { "level": 1, "link": "[9.2 Uniform Random Variables: Legendre Polynomials](https://ndcbe.github.io/cbe67701-uncertainty-quantification/09.02-Uniform-Random-Variables-Legendre-Polynomials-Example.html#9.2-Uniform-Random-Variables:-Legendre-Polynomials)", "section": "9.2 Uniform Random Variables: Legendre Polynomials" } }, "source": [ "# 9.2 Uniform Random Variables: Legendre Polynomials" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "X6nqgZlNN85J", "nbpages": { "level": 1, "link": "[9.2 Uniform Random Variables: Legendre Polynomials](https://ndcbe.github.io/cbe67701-uncertainty-quantification/09.02-Uniform-Random-Variables-Legendre-Polynomials-Example.html#9.2-Uniform-Random-Variables:-Legendre-Polynomials)", "section": "9.2 Uniform Random Variables: Legendre Polynomials" } }, "source": [ "Created by Kanishka Ghosh (kghosh@nd.edu)\n", "\n", "The following text, example, and code have been adapted from:\n", "\n", "McClarren, Ryan G (2018). *Uncertainty Quantification and Predictive Computational Science: A Foundation for Physical Scientists and Engineers, Chapter 9: Stochastic Collocation and Projection*, Springer, [https://link.springer.com/chapter/10.1007/978-3-319-99525-0_9](https://link.springer.com/chapter/10.1007/978-3-319-99525-0_9)" ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 88 }, "colab_type": "code", "executionInfo": { "elapsed": 1112, "status": "ok", "timestamp": 1594690016961, "user": { "displayName": "Kanishka Ghosh", "photoUrl": "https://lh3.googleusercontent.com/a-/AOh14Ggs6_dpdWtDfmasHAbkJtmCveUsgqvE_5_E8TpIQQ=s64", "userId": "16529478165777632155" }, "user_tz": 240 }, "id": "rvuQ5gyk7BIc", "nbpages": { "level": 1, "link": "[9.2 Uniform Random Variables: Legendre Polynomials](https://ndcbe.github.io/cbe67701-uncertainty-quantification/09.02-Uniform-Random-Variables-Legendre-Polynomials-Example.html#9.2-Uniform-Random-Variables:-Legendre-Polynomials)", "section": "9.2 Uniform Random Variables: Legendre Polynomials" }, "outputId": "c0966468-46a3-4d89-a73c-a25f559a029d" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Checking for figures/Fig-9.4_Table-9.7.png\n", "\tCreating folder figures\n", "\tDownloading https://ndcbe.github.io/cbe67701-uncertainty-quantification/figures/Fig-9.4_Table-9.7.png\n" ] } ], "source": [ "# Download figures (if needed)\n", "import os, requests, urllib\n", "\n", "# GitHub pages url\n", "url = \"https://ndcbe.github.io/cbe67701-uncertainty-quantification/\"\n", "\n", "# relative file paths to download\n", "# this is the only line of code you need to change\n", "file_paths = ['figures/Fig-9.4_Table-9.7.png']\n", "\n", "# loop over all files to download\n", "for file_path in file_paths:\n", " print(\"Checking for\",file_path)\n", " # split each file_path into a folder and filename\n", " stem, filename = os.path.split(file_path)\n", " \n", " # check if the folder name is not empty\n", " if stem:\n", " # check if the folder exists\n", " if not os.path.exists(stem):\n", " print(\"\\tCreating folder\",stem)\n", " # if the folder does not exist, create it\n", " os.mkdir(stem)\n", " # if the file does not exist, create it by downloading from GitHub pages\n", " if not os.path.isfile(file_path):\n", " file_url = urllib.parse.urljoin(url,\n", " urllib.request.pathname2url(file_path))\n", " print(\"\\tDownloading\",file_url)\n", " with open(file_path, 'wb') as f:\n", " f.write(requests.get(file_url).content)\n", " else:\n", " print(\"\\tFile found!\")" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "PH3ltDE_-Qbu", "nbpages": { "level": 2, "link": "[9.2.1 Generalized Polynomial Chaos](https://ndcbe.github.io/cbe67701-uncertainty-quantification/09.02-Uniform-Random-Variables-Legendre-Polynomials-Example.html#9.2.1-Generalized-Polynomial-Chaos)", "section": "9.2.1 Generalized Polynomial Chaos" } }, "source": [ "## 9.2.1 Generalized Polynomial Chaos\n", "Approach to approximate the mapping from input parameter to output random variable using different polynomial expansions when the input parameter is not normally distributed.\n", "\n", "## Uniform Random Variables: Legendre Polynomials\n", "(adapted from McClarren 2018)\n", "\n", "If we consider a random variable $x$ is uniformly distributed in the range $[a,b]$, then $x$ can be written as $x \\sim \\mathcal{U}[a,b]$ and the PDF of $x$ is given as:\n", "\n", "
\n", "\n", "\\begin{align*}\n", "f(x|a,b) = \\begin{cases}\n", "\\frac{1}{b-a} \\quad x \\in [a,b]\\\\\n", "0 \\quad \\quad \\mathrm{otherwise}\n", "\\end{cases}\n", "\\end{align*}\n", "\n", "
\n", " \n", "To correspond with the support with the standard definition of Legendre polynomials, the interval $[a,b]$ is mapped to $[-1,1]$ by defining random variable $z$ such that $z \\sim \\mathcal{U}[-1,1]$. $x$ and $z$ are related as:\n", "\n", "
\n", "\n", "\\begin{align*}\n", "x = \\frac{b-a}{2}z + \\frac{a+b}{2} \\quad \\mathrm{and}, \\ z = \\frac{a+b-2x}{a-b}\n", "\\end{align*}\n", "\n", "
\n", "\n", "Then, the expectation of a uniform random variable $g(x)$ transforms to:\n", " \n", "
\n", "\n", "\\begin{align*}\n", "E[g(x)] = \\frac{1}{b-a} \\int\\limits_{a}^{b}g(x)dx = \\frac{1}{2} \\int\\limits_{-1}^{1}g \\left(\\frac{b-a}{2}z + \\frac{a+b}{2} \\right)dz\n", "\\end{align*}\n", "\n", "
\n", "\n", "For a function in range $[-1,1]$, the Legendre polynomials form an orthogonal basis and are defined as:\n", "\n", "
\n", "\n", "\\begin{align*}\n", "P_n(x) = \\frac{1}{2^n n!} \\frac{d^n}{dx^n} \\left[ (x^2 - 1)^n \\right]\n", "\\end{align*}\n", "\n", "
\n", "\n", "where $n$ is the order of the polynomial.\n", "\n", "
\n", "\n", "The expansion of a square-integrable function $g(x)$ on the interval $[a,b]$ in terms of Legrende polynomials is then given as:\n", "\n", "
\n", "\n", "\\begin{align*}\n", "g(x) = \\sum_{n=0}^{\\infty} c_n P_n \\left( \\frac{a+b-2x}{a-b}\\right), \\quad x \\in [a,b]\n", "\\end{align*}\n", "\n", "
\n", "\n", "where $c_n$ is defined by\n", "\n", "\\begin{align*}\n", "c_n = \\frac{2n+1}{2} \\int\\limits_{-1}^{1}g \\left( \\frac{b-a}{2}z + \\frac{a+b}{2} \\right)P_n(z)dz\n", "\\end{align*}\n", "\n", "
\n", "\n", "As $P_0(x) = 1$ (from Table 9.6 of text), $c_0$ gives the mean of the expansion $G \\sim g(x)$\n", "\n", "
\n", "\n", "\\begin{align*}\n", "c_0 = \\frac{1}{2}\\int\\limits_{-1}^{1}g \\left( \\frac{b-a}{2}z + \\frac{a+b}{2} \\right)dz = E[G]\n", "\\end{align*}\n", "\n", "
\n", "\n", "The variance of the expansion G is equivalent to the sum of the squares of the Legendre polynomial coefficients with $n \\geq 1$:\n", "\n", "
\n", "\n", "\\begin{align*}\n", "\\mathrm{Var}(G) = \\frac{1}{2}\\int\\limits_{-1}^{1} \\left( \\sum_{n=1}^{\\infty}c_n P_n (z) \\right)^2 dz - c_0^2 = \\sum_{n=1}^{\\infty}\\frac{c_n^2}{2n+1}\n", "\\end{align*}" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "yvU3ngtBPGeZ", "nbpages": { "level": 2, "link": "[9.2.2 Example: $G \\sim g(x) = cos(x)$ and $x \\sim \\mathcal{U}(0,2\\pi)$](https://ndcbe.github.io/cbe67701-uncertainty-quantification/09.02-Uniform-Random-Variables-Legendre-Polynomials-Example.html#9.2.2-Example:-$G-\\sim-g(x)-=-cos(x)$-and-$x-\\sim-\\mathcal{U}(0,2\\pi)$)", "section": "9.2.2 Example: $G \\sim g(x) = cos(x)$ and $x \\sim \\mathcal{U}(0,2\\pi)$" } }, "source": [ "## 9.2.2 Example: $G \\sim g(x) = cos(x)$ and $x \\sim \\mathcal{U}(0,2\\pi)$\n", "\n", "The Legendre polynomial coefficients are given as:\n", "\n", "
\n", "\n", "\\begin{align*}\n", "c_n = \\frac{2n+1}{2}\\int\\limits_{-1}^{1}\\cos(\\pi z+\\pi)P_n(z)dz\n", "\\end{align*}\n", "\n", "
\n", "\n", "The variance of this function is given as:\n", "\n", "
\n", "\n", "\\begin{align*}\n", "\\mathrm{Var}(G) = \\frac{1}{2\\pi}\\int\\limits_{0}^{2\\pi}\\cos^2(x)dx = \\frac{1}{2}\n", "\\end{align*}\n", "\n", "The $n^{\\mathrm{th}}$-order approximations for $G$ using Legendre polynomials can be represented by $G_{approx,n}$ and are calculated as:\n", "\n", "
\n", "\n", "\\begin{align*}\n", "G_{approx,n} = \\sum_{n=0}^{n} c_n P_n \\left( \\frac{a+b-2x}{a-b}\\right), \\quad x \\in [a,b]\n", "\\end{align*}\n", "\n", "
\n", "\n", "and the corresponding variance is given by:\n", "\n", "
\n", "\n", "\\begin{align*}\n", "\\mathrm{Var}(G_{approx,n}) = \\sum_{n=1}^{n}\\frac{c_n^2}{2n+1}\n", "\\end{align*}\n", "\n", "
\n", "\n", "## Results from Textbook\n", "\n", "Following is a screenshot of the results presented in the text (Pg. 201, Table 9.7 and Fig. 9.4):\n", "\n", "![Figure1](figures/Fig-9.4_Table-9.7.png)" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "KpN6w3UbW9fe", "nbpages": { "level": 2, "link": "[9.2.2 Example: $G \\sim g(x) = cos(x)$ and $x \\sim \\mathcal{U}(0,2\\pi)$](https://ndcbe.github.io/cbe67701-uncertainty-quantification/09.02-Uniform-Random-Variables-Legendre-Polynomials-Example.html#9.2.2-Example:-$G-\\sim-g(x)-=-cos(x)$-and-$x-\\sim-\\mathcal{U}(0,2\\pi)$)", "section": "9.2.2 Example: $G \\sim g(x) = cos(x)$ and $x \\sim \\mathcal{U}(0,2\\pi)$" } }, "source": [ "**Implementation Notes:**\n", "* In this implementation, ```scipy.specials.eval_legendre()``` has been used evaluate the $n^{\\mathrm{th}}$-order Legendre polynomial\n", "[https://docs.scipy.org/doc/scipy/reference/generated/scipy.special.eval_legendre.html](https://docs.scipy.org/doc/scipy/reference/generated/scipy.special.eval_legendre.html)\n", "* To reduce runtime, 1000 samples of $x \\sim \\mathcal{U}(0,2\\pi)$ have been used for the following calculations" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "EyzmVqxso2ZW", "nbpages": { "level": 2, "link": "[9.2.3 Importing libraries](https://ndcbe.github.io/cbe67701-uncertainty-quantification/09.02-Uniform-Random-Variables-Legendre-Polynomials-Example.html#9.2.3-Importing-libraries)", "section": "9.2.3 Importing libraries" } }, "source": [ "## 9.2.3 Importing libraries" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 71 }, "colab_type": "code", "executionInfo": { "elapsed": 1371, "status": "ok", "timestamp": 1594690017228, "user": { "displayName": "Kanishka Ghosh", "photoUrl": "https://lh3.googleusercontent.com/a-/AOh14Ggs6_dpdWtDfmasHAbkJtmCveUsgqvE_5_E8TpIQQ=s64", "userId": "16529478165777632155" }, "user_tz": 240 }, "id": "RieCD1PGN85K", "nbpages": { "level": 2, "link": "[9.2.3 Importing libraries](https://ndcbe.github.io/cbe67701-uncertainty-quantification/09.02-Uniform-Random-Variables-Legendre-Polynomials-Example.html#9.2.3-Importing-libraries)", "section": "9.2.3 Importing libraries" }, "outputId": "589f4057-53cc-4e2d-f5ac-1eb90ad43975" }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/usr/local/lib/python3.6/dist-packages/statsmodels/tools/_testing.py:19: FutureWarning: pandas.util.testing is deprecated. Use the functions in the public API at pandas.testing instead.\n", " import pandas.util.testing as tm\n" ] } ], "source": [ "## import all needed Python libraries here\n", "import numpy as np\n", "import pandas as pd\n", "from scipy.stats import uniform\n", "from scipy.special import legendre,eval_legendre\n", "# from scipy.misc import derivative\n", "from scipy import integrate\n", "import matplotlib.pyplot as plt\n", "import seaborn as sns" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "99rUgecEo6Ye", "nbpages": { "level": 2, "link": "[9.2.4 Functions to calculate exact and $n^{\\mathrm{th}}$-order Legendre polynomial approximation of $g(x)$](https://ndcbe.github.io/cbe67701-uncertainty-quantification/09.02-Uniform-Random-Variables-Legendre-Polynomials-Example.html#9.2.4-Functions-to-calculate-exact-and-$n^{\\mathrm{th}}$-order-Legendre-polynomial-approximation-of-$g(x)$)", "section": "9.2.4 Functions to calculate exact and $n^{\\mathrm{th}}$-order Legendre polynomial approximation of $g(x)$" } }, "source": [ "## 9.2.4 Functions to calculate exact and $n^{\\mathrm{th}}$-order Legendre polynomial approximation of $g(x)$" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "colab": {}, "colab_type": "code", "executionInfo": { "elapsed": 1368, "status": "ok", "timestamp": 1594690017229, "user": { "displayName": "Kanishka Ghosh", "photoUrl": "https://lh3.googleusercontent.com/a-/AOh14Ggs6_dpdWtDfmasHAbkJtmCveUsgqvE_5_E8TpIQQ=s64", "userId": "16529478165777632155" }, "user_tz": 240 }, "id": "Sx2HMWz5tFfJ", "nbpages": { "level": 2, "link": "[9.2.4 Functions to calculate exact and $n^{\\mathrm{th}}$-order Legendre polynomial approximation of $g(x)$](https://ndcbe.github.io/cbe67701-uncertainty-quantification/09.02-Uniform-Random-Variables-Legendre-Polynomials-Example.html#9.2.4-Functions-to-calculate-exact-and-$n^{\\mathrm{th}}$-order-Legendre-polynomial-approximation-of-$g(x)$)", "section": "9.2.4 Functions to calculate exact and $n^{\\mathrm{th}}$-order Legendre polynomial approximation of $g(x)$" } }, "outputs": [], "source": [ "def g_x_exact(x):\n", " '''\n", " Function to create the exact form of the random variable, g(x), \n", " being approximated\n", " Argument:\n", " x: Random variable from uniform distribution U[a,b]\n", " Return:\n", " Exact form of the random variable, g(x), being approximated (Here, cos(x))\n", " '''\n", " return np.cos(x)\n", "\n", "def transform_z_to_x(z,a,b):\n", " '''\n", " Helper function to return x in terms of z (Eq. 9.16 of text)\n", " Arguments:\n", " z: Random variable from uniform distribution U[-1,1]\n", " a: Lower limit of uniform random variable x\n", " b: Upper limit of uniform random variable x\n", " Returns:\n", " x: Random variable from uniform distribution U[a,b] in terms of z\n", " '''\n", " return ((b-a)/2)*z + (a+b)/2\n", "\n", "def transform_x_to_z(x,a,b):\n", " '''\n", " Helper function to return z in terms of x (Eq. 9.17 of text)\n", " Arguments:\n", " x: Random variable from uniform distribution U[a,b]\n", " a: Lower limit of uniform random variable x\n", " b: Upper limit of uniform random variable x\n", " Returns:\n", " z: Random variable from uniform distribution U[-1,1] in terms of x\n", " '''\n", " return (a+b - 2*x)/(a-b)\n", "\n", "def coef_n(a,b,n):\n", " '''\n", " Function to generate the Legendre polynomial coefficient of order n\n", " Argument:\n", " a: Lower limit of uniform random variable x\n", " b: Upper limit of uniform random variable x\n", " n: Order of Legendre polynomial\n", " Return:\n", " n-th order Legendre polynomial coefficient (Eq. 9.22 of text)\n", " ''' \n", " # Create a lambda function to return the integrand in terms of z as shown in\n", " # Eq. 9.22 of text.\n", " # Here, scipy.special.eval_legendre() has been used to evaluate the n-th \n", " # order Legendre polynomial\n", " # https://docs.scipy.org/doc/scipy/reference/generated/scipy.special.eval_legendre.html\n", " integrand_func = lambda z: g_x_exact(transform_z_to_x(z,a,b))* \\\n", " eval_legendre(n,z)\n", " val,err = integrate.quad(integrand_func,-1,1)\n", " return ((2*n + 1)/2)* val\n", "\n", "def g_x_approximation(x,a,b,n):\n", " '''\n", " Function to generate the n-th order Legendre polynomial expansion of the \n", " random variable g(x), from Eq. 9.21 in text\n", " Arguments:\n", " x: Random variable from uniform distribution U[a,b]\n", " a: Lower limit of uniform random variable x\n", " b: Upper limit of uniform random variable x\n", " n: Order of Legendre polynomial\n", " Return:\n", " n-th order Legendre polynomial expansion of g(x) (Eq. 9.21 of text)\n", " '''\n", " # calculating z in terms of x\n", " z = transform_x_to_z(x,a,b)\n", " # n-th order approximation of g(x)\n", " expansion_sum = 0\n", " # sum over 0 to n-th order Legendre polynomials following from Eq. 9.21 of text\n", " for n_ in range(n+1):\n", " expansion_sum += coef_n(a,b,n_) * eval_legendre(n_,z)\n", " return expansion_sum" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "Ls776U73pO-5", "nbpages": { "level": 2, "link": "[9.2.5 Function to calculate $\\mathrm{Var}(g(x))$, $E[G]$, and $\\mathrm{Var}(G)$](https://ndcbe.github.io/cbe67701-uncertainty-quantification/09.02-Uniform-Random-Variables-Legendre-Polynomials-Example.html#9.2.5-Function-to-calculate-$\\mathrm{Var}(g(x))$,-$E[G]$,-and-$\\mathrm{Var}(G)$)", "section": "9.2.5 Function to calculate $\\mathrm{Var}(g(x))$, $E[G]$, and $\\mathrm{Var}(G)$" } }, "source": [ "## 9.2.5 Function to calculate $\\mathrm{Var}(g(x))$, $E[G]$, and $\\mathrm{Var}(G)$" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "colab": {}, "colab_type": "code", "executionInfo": { "elapsed": 1366, "status": "ok", "timestamp": 1594690017231, "user": { "displayName": "Kanishka Ghosh", "photoUrl": "https://lh3.googleusercontent.com/a-/AOh14Ggs6_dpdWtDfmasHAbkJtmCveUsgqvE_5_E8TpIQQ=s64", "userId": "16529478165777632155" }, "user_tz": 240 }, "id": "qG2eaRN6jUZW", "nbpages": { "level": 2, "link": "[9.2.5 Function to calculate $\\mathrm{Var}(g(x))$, $E[G]$, and $\\mathrm{Var}(G)$](https://ndcbe.github.io/cbe67701-uncertainty-quantification/09.02-Uniform-Random-Variables-Legendre-Polynomials-Example.html#9.2.5-Function-to-calculate-$\\mathrm{Var}(g(x))$,-$E[G]$,-and-$\\mathrm{Var}(G)$)", "section": "9.2.5 Function to calculate $\\mathrm{Var}(g(x))$, $E[G]$, and $\\mathrm{Var}(G)$" } }, "outputs": [], "source": [ "def var_G_inf(a,b):\n", " '''\n", " Function to calculate the infinite-order approximation of variance of g(x) \n", " following Eq. 9.27 of text\n", " Arguments:\n", " a: Lower limit of uniform random variable x\n", " b: Upper limit of uniform random variable x\n", " Return:\n", " Variance of g(x)\n", " '''\n", " # Var(g(x))\n", " # lambda function to define integrand g(x)^2\n", " integrand_func = lambda x: g_x_exact(x)**2\n", " val, err = integrate.quad(integrand_func,a,b)\n", " return (1/(b-a)) * val\n", "\n", "def mean_G(a,b):\n", " '''\n", " Function to calculate the mean of the Legendre polynomial expansion G of g(x) \n", " following Eq. 9.23 of text\n", " Arguments:\n", " a: Lower limit of uniform random variable x\n", " b: Upper limit of uniform random variable x\n", " Return:\n", " Variance of G\n", " '''\n", " # lambda function to define integrand g(x)\n", " integrand_func = lambda x: g_x_exact(x)\n", " val, err = integrate.quad(integrand_func,a,b)\n", " return (1/(b-a)) * val\n", "\n", "# function to calculate variance of G ~ g(x)\n", "def var_G_approximation(a,b,n):\n", " '''\n", " Function to calculate the variance of the n-th order Legendre polynomial \n", " expansion of g(x) following Eq. 9.24 of text\n", " Arguments:\n", " a: Lower limit of uniform random variable x\n", " b: Upper limit of uniform random variable x\n", " n: Highest order of Legendre polynomial used for the \n", " Return:\n", " Variance of n-th order Legendre polynomial expansion G of g(x)\n", " '''\n", " # Var(G(approx,n))\n", " sum_sq_coef = 0\n", " # sum of the squares coefficients with n >= 1\n", " for n_ in range(n+1):\n", " if n_ == 0:\n", " pass\n", " else:\n", " sum_sq_coef += (1/(2*n_ + 1))*coef_n(a,b,n_)**2\n", " return sum_sq_coef" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "4H3zDMcZlX33", "nbpages": { "level": 2, "link": "[9.2.6 Generating samples from $\\mathcal{U}[0,2\\pi]$](https://ndcbe.github.io/cbe67701-uncertainty-quantification/09.02-Uniform-Random-Variables-Legendre-Polynomials-Example.html#9.2.6-Generating-samples-from-$\\mathcal{U}[0,2\\pi]$)", "section": "9.2.6 Generating samples from $\\mathcal{U}[0,2\\pi]$" } }, "source": [ "## 9.2.6 Generating samples from $\\mathcal{U}[0,2\\pi]$" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "colab": {}, "colab_type": "code", "executionInfo": { "elapsed": 1364, "status": "ok", "timestamp": 1594690017232, "user": { "displayName": "Kanishka Ghosh", "photoUrl": "https://lh3.googleusercontent.com/a-/AOh14Ggs6_dpdWtDfmasHAbkJtmCveUsgqvE_5_E8TpIQQ=s64", "userId": "16529478165777632155" }, "user_tz": 240 }, "id": "PvzdhfhMOb0O", "nbpages": { "level": 2, "link": "[9.2.6 Generating samples from $\\mathcal{U}[0,2\\pi]$](https://ndcbe.github.io/cbe67701-uncertainty-quantification/09.02-Uniform-Random-Variables-Legendre-Polynomials-Example.html#9.2.6-Generating-samples-from-$\\mathcal{U}[0,2\\pi]$)", "section": "9.2.6 Generating samples from $\\mathcal{U}[0,2\\pi]$" } }, "outputs": [], "source": [ "# Number of samples to dram from uniform distribution (1000 samples to reduce computation time)\n", "n_samples = 1000\n", "# Lower bound of interval for x~ U[0,2pi]\n", "a = 0\n", "# Upper bound of interval for x~ U[0,2pi]\n", "b = 2*np.pi\n", "# Orders of Legendre polynomials used for the approximation\n", "n_vals = [0,2,4,6,8]\n", "# n_samples number of samples drawn from U[0,1)\n", "uniform_samples = np.random.random_sample(n_samples)\n", "# Samples of x drawn from uniform distribution U[0,2pi)\n", "x_vals = [(b - a) * u_samp + a for u_samp in uniform_samples]" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "j103-v9ZqBq_", "nbpages": { "level": 2, "link": "[9.2.7 Convergence of variance for $g(x) = cos(x)$, where $ x \\sim \\mathcal{U} (0, 2\\pi )$](https://ndcbe.github.io/cbe67701-uncertainty-quantification/09.02-Uniform-Random-Variables-Legendre-Polynomials-Example.html#9.2.7-Convergence-of-variance-for-$g(x)-=-cos(x)$,-where-$-x-\\sim-\\mathcal{U}-(0,-2\\pi-)$)", "section": "9.2.7 Convergence of variance for $g(x) = cos(x)$, where $ x \\sim \\mathcal{U} (0, 2\\pi )$" } }, "source": [ "## 9.2.7 Convergence of variance for $g(x) = cos(x)$, where $ x \\sim \\mathcal{U} (0, 2\\pi )$" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 235 }, "colab_type": "code", "executionInfo": { "elapsed": 1582, "status": "ok", "timestamp": 1594690017468, "user": { "displayName": "Kanishka Ghosh", "photoUrl": "https://lh3.googleusercontent.com/a-/AOh14Ggs6_dpdWtDfmasHAbkJtmCveUsgqvE_5_E8TpIQQ=s64", "userId": "16529478165777632155" }, "user_tz": 240 }, "id": "6LrSVEdIPPq1", "nbpages": { "level": 2, "link": "[9.2.7 Convergence of variance for $g(x) = cos(x)$, where $ x \\sim \\mathcal{U} (0, 2\\pi )$](https://ndcbe.github.io/cbe67701-uncertainty-quantification/09.02-Uniform-Random-Variables-Legendre-Polynomials-Example.html#9.2.7-Convergence-of-variance-for-$g(x)-=-cos(x)$,-where-$-x-\\sim-\\mathcal{U}-(0,-2\\pi-)$)", "section": "9.2.7 Convergence of variance for $g(x) = cos(x)$, where $ x \\sim \\mathcal{U} (0, 2\\pi )$" }, "outputId": "10fb4cb3-3af6-4995-84bf-7f9fd1d9d7c3" }, "outputs": [ { "data": { "text/html": [ "

\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
OrderVariance
000.000000
120.461969
240.499663
360.499999
480.500000
5Infinity0.500000
\n", "
" ], "text/plain": [ " Order Variance\n", "0 0 0.000000\n", "1 2 0.461969\n", "2 4 0.499663\n", "3 6 0.499999\n", "4 8 0.500000\n", "5 Infinity 0.500000" ] }, "execution_count": 6, "metadata": { "tags": [] }, "output_type": "execute_result" } ], "source": [ "# List to store variance of Legendre polynomial approximations of g(x)\n", "var_G_list = []\n", "# List to store order of approximations of g(x) as strings\n", "n_val_list = []\n", "\n", "# Loop through the different order-cases which are used to approximate g(x)\n", "for n in n_vals:\n", " # Calculate variance for n-order approximation of g(x)\n", " var_G_approx_n = var_G_approximation(a,b,n)\n", " # Store n-order approximation in variance list\n", " var_G_list.append(var_G_approx_n)\n", " # Store string format of order of approximation in order list\n", " n_val_list.append(str(n))\n", "\n", "# Calculate infinite-order variance of g(x)\n", "var_G = var_G_inf(a,b)\n", "# Add infinite-order variance to variance list\n", "var_G_list.append(var_G)\n", "# Add order infinity to order list\n", "n_val_list.append('Infinity')\n", "\n", "# Create a pandas dataframe to display the converge of Var(G)\n", "variance_data = {'Order':n_val_list,'Variance':var_G_list}\n", "df_to_print = pd.DataFrame(variance_data,columns=['Order','Variance'])\n", "df_to_print" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "NNfPufcHZU23", "nbpages": { "level": 2, "link": "[9.2.8 Approximate $g(x)$ using different orders of Legendre polynomials](https://ndcbe.github.io/cbe67701-uncertainty-quantification/09.02-Uniform-Random-Variables-Legendre-Polynomials-Example.html#9.2.8-Approximate-$g(x)$-using-different-orders-of-Legendre-polynomials)", "section": "9.2.8 Approximate $g(x)$ using different orders of Legendre polynomials" } }, "source": [ "## 9.2.8 Approximate $g(x)$ using different orders of Legendre polynomials" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "colab": {}, "colab_type": "code", "executionInfo": { "elapsed": 3439, "status": "ok", "timestamp": 1594690019329, "user": { "displayName": "Kanishka Ghosh", "photoUrl": "https://lh3.googleusercontent.com/a-/AOh14Ggs6_dpdWtDfmasHAbkJtmCveUsgqvE_5_E8TpIQQ=s64", "userId": "16529478165777632155" }, "user_tz": 240 }, "id": "QnbmSyWtrtpT", "nbpages": { "level": 2, "link": "[9.2.8 Approximate $g(x)$ using different orders of Legendre polynomials](https://ndcbe.github.io/cbe67701-uncertainty-quantification/09.02-Uniform-Random-Variables-Legendre-Polynomials-Example.html#9.2.8-Approximate-$g(x)$-using-different-orders-of-Legendre-polynomials)", "section": "9.2.8 Approximate $g(x)$ using different orders of Legendre polynomials" } }, "outputs": [], "source": [ "# Evaluate exact values (order = infinity) of g(x) for samples of x generated\n", "g_x_exact_vals = [g_x_exact(x) for x in x_vals]\n", "\n", "# Evaluate 2nd-order approximation of g(x) for samples of x generated\n", "g_x_approx_n_2 = [g_x_approximation(x,a,b,2) for x in x_vals]\n", "\n", "# Evaluate 4th-order approximation of g(x) for samples of x generated\n", "g_x_approx_n_4 = [g_x_approximation(x,a,b,4) for x in x_vals]\n", "\n", "# Evaluate 6th-order approximation of g(x) for samples of x generated\n", "g_x_approx_n_6 = [g_x_approximation(x,a,b,6) for x in x_vals]\n", "\n", "# Evaluate 8th-order approximation of g(x) for samples of x generated\n", "g_x_approx_n_8 = [g_x_approximation(x,a,b,8) for x in x_vals]" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "Ajp4j3a0ZjAW", "nbpages": { "level": 2, "link": "[9.2.9 Plot PDF of the random variable $g(x) = \\cos(x)$, where $x \\sim \\mathcal{U}(0, 2\\pi)$, and various approximations](https://ndcbe.github.io/cbe67701-uncertainty-quantification/09.02-Uniform-Random-Variables-Legendre-Polynomials-Example.html#9.2.9-Plot-PDF-of-the-random-variable-$g(x)-=-\\cos(x)$,-where-$x-\\sim-\\mathcal{U}(0,-2\\pi)$,-and-various-approximations)", "section": "9.2.9 Plot PDF of the random variable $g(x) = \\cos(x)$, where $x \\sim \\mathcal{U}(0, 2\\pi)$, and various approximations" } }, "source": [ "## 9.2.9 Plot PDF of the random variable $g(x) = \\cos(x)$, where $x \\sim \\mathcal{U}(0, 2\\pi)$, and various approximations" ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 536 }, "colab_type": "code", "executionInfo": { "elapsed": 4632, "status": "ok", "timestamp": 1594690020542, "user": { "displayName": "Kanishka Ghosh", "photoUrl": "https://lh3.googleusercontent.com/a-/AOh14Ggs6_dpdWtDfmasHAbkJtmCveUsgqvE_5_E8TpIQQ=s64", "userId": "16529478165777632155" }, "user_tz": 240 }, "id": "K3vRTO9lGAXa", "nbpages": { "level": 2, "link": "[9.2.9 Plot PDF of the random variable $g(x) = \\cos(x)$, where $x \\sim \\mathcal{U}(0, 2\\pi)$, and various approximations](https://ndcbe.github.io/cbe67701-uncertainty-quantification/09.02-Uniform-Random-Variables-Legendre-Polynomials-Example.html#9.2.9-Plot-PDF-of-the-random-variable-$g(x)-=-\\cos(x)$,-where-$x-\\sim-\\mathcal{U}(0,-2\\pi)$,-and-various-approximations)", "section": "9.2.9 Plot PDF of the random variable $g(x) = \\cos(x)$, where $x \\sim \\mathcal{U}(0, 2\\pi)$, and various approximations" }, "outputId": "0cefd680-176b-4d82-dfb7-6af1a5ce1d74" }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light", "tags": [] }, "output_type": "display_data" } ], "source": [ "# Plot the distributions\n", "plt.figure(figsize=(8,6))\n", "# Exact values\n", "sns.distplot(g_x_exact(x_vals),\n", " kde_kws = {'linewidth': 2,'label' : 'Exact'},\n", " hist_kws = {'alpha':0.25,'linewidth':2})\n", "# Order 2 approximation\n", "sns.distplot(g_x_approx_n_2,\n", " kde_kws = {'linewidth': 2,'linestyle':'dashed','label' : '2nd order'},\n", " hist_kws = {'alpha':0.25,'linewidth':1})\n", "# Order 4 approximation\n", "sns.distplot(g_x_approx_n_4,\n", " kde_kws = {'linewidth': 2,'linestyle':'dashdot','label' : '4th order'},\n", " hist_kws = {'alpha':0.25,'linewidth':1})\n", "# Order 6 approximation\n", "sns.distplot(g_x_approx_n_6,\n", " kde_kws = {'linewidth': 2,'linestyle':'dashed','label' : '6th order'},\n", " hist_kws = {'alpha':0.25,'linewidth':1})\n", "# Order 8 approximation\n", "sns.distplot(g_x_approx_n_8,\n", " kde_kws = {'linewidth': 2,'linestyle':'dashdot','label' : '8th order'},\n", " hist_kws = {'alpha':0.25,'linewidth':1})\n", "\n", "plt.xlim(-1.75,1.75)\n", "plt.xlabel('$g(x)$', fontsize = 17)\n", "plt.ylabel('density', fontsize = 17)\n", "plt.xticks([-1,-0.5,0,0.5,1], fontsize = 17)\n", "plt.title('PDF of various approximations of random variable $g(x) = \\cos(x)$ \\n $x \\sim \\mathcal{U}(0,2\\pi)$',fontsize = 17)\n", "plt.grid()\n", "plt.legend(loc='upper center',bbox_to_anchor=(0.5, -0.2),ncol=3,fontsize = 17)\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "6fIwOSb77ke-", "nbpages": { "level": 2, "link": "[9.2.9 Plot PDF of the random variable $g(x) = \\cos(x)$, where $x \\sim \\mathcal{U}(0, 2\\pi)$, and various approximations](https://ndcbe.github.io/cbe67701-uncertainty-quantification/09.02-Uniform-Random-Variables-Legendre-Polynomials-Example.html#9.2.9-Plot-PDF-of-the-random-variable-$g(x)-=-\\cos(x)$,-where-$x-\\sim-\\mathcal{U}(0,-2\\pi)$,-and-various-approximations)", "section": "9.2.9 Plot PDF of the random variable $g(x) = \\cos(x)$, where $x \\sim \\mathcal{U}(0, 2\\pi)$, and various approximations" } }, "source": [ "**Note:** The second order approximation returns $\\cos(x)$ values in excess of 1. I am not sure why this is happening (similar behavior can be seen in Fig. 9.4 in the text)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "< [9.1 Hermite Expansion for Normally Distributed Parameters](https://ndcbe.github.io/cbe67701-uncertainty-quantification/09.01-Contributed-Example.html) | [Contents](toc.html) | [10.0 Gaussian Process Emulators and Surrogate Models](https://ndcbe.github.io/cbe67701-uncertainty-quantification/10.00-Gaussian-Process-Emulators-and-Surrogate-Models.html)

\"Open

\"Download\"" ] } ], "metadata": { "colab": { "collapsed_sections": [], "name": "09.02-Uniform-Random-Variables-Legendre-Polynomials-Example.ipynb", "provenance": [] }, "kernelspec": { "display_name": "Python 3", "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.7.3" } }, "nbformat": 4, "nbformat_minor": 0 }