{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Trapezoid vs Gauss quadrature for periodic function"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Let us compute\n",
"$$\n",
"\\int_0^{2\\pi} \\exp(\\sin x) dx\n",
"$$"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
" 2 1.6717412138e+00 1.5277448438e+00\n",
" 4 2.8260084821e-04 2.0275305634e-01\n",
" 6 3.4594549447e-09 1.5148783594e-02\n",
" 8 7.1054273576e-15 1.2229354413e-03\n",
" 10 1.7763568394e-15 2.9323632519e-05\n",
" 12 1.7763568394e-15 3.4262054047e-06\n",
" 14 0.0000000000e+00 1.1795276755e-08\n",
" 16 2.6645352591e-15 4.7241393020e-09\n",
" 18 1.7763568394e-15 1.0296208330e-10\n",
" 20 8.8817841970e-16 2.8332891588e-12\n"
]
},
{
"data": {
"image/svg+xml": [
"\n",
"\n",
"\n",
"\n"
],
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"%matplotlib inline\n",
"%config InlineBackend.figure_format = 'svg'\n",
"from scipy.integrate import fixed_quad,trapz\n",
"import numpy as np\n",
"import matplotlib.pyplot as plt\n",
"\n",
"f = lambda x: np.exp(np.sin(x))\n",
"a,b = 0.0,2*np.pi\n",
"qe = 7.954926521012844 # Exact integral\n",
"\n",
"n,N = 2,10\n",
"e1,e2,nodes = np.zeros(N),np.zeros(N),np.zeros(N)\n",
"for i in range(N):\n",
" x = np.linspace(a,b,n)\n",
" val = trapz(f(x),dx=(b-a)/(n-1))\n",
" e1[i] = np.abs(val - qe)\n",
" val = fixed_quad(f,a,b,n=n)\n",
" nodes[i] = n\n",
" e2[i] = np.abs(val[0]-qe)\n",
" print('%5d %20.10e %20.10e' % (n,e1[i],e2[i]))\n",
" n = n+2\n",
"\n",
"plt.figure()\n",
"plt.semilogy(nodes,e1,'o-')\n",
"plt.semilogy(nodes,e2,'*-')\n",
"plt.legend(('Trapezoid','Gauss'))\n",
"plt.xlabel('n')\n",
"plt.ylabel('Error');"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Trapezoid error converges at exponential rate !!!"
]
}
],
"metadata": {
"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.6.6"
}
},
"nbformat": 4,
"nbformat_minor": 2
}