{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Jump with Chebyshev Nodes\n",
"\n",
"Copyright (C) 2020 Andreas Kloeckner\n",
"\n",
"\n",
"MIT License
\n",
"Permission is hereby granted, free of charge, to any person obtaining a copy\n",
"of this software and associated documentation files (the \"Software\"), to deal\n",
"in the Software without restriction, including without limitation the rights\n",
"to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n",
"copies of the Software, and to permit persons to whom the Software is\n",
"furnished to do so, subject to the following conditions:\n",
"\n",
"The above copyright notice and this permission notice shall be included in\n",
"all copies or substantial portions of the Software.\n",
"\n",
"THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n",
"IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n",
"FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n",
"AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n",
"LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n",
"OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n",
"THE SOFTWARE.\n",
" "
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"collapsed": false,
"jupyter": {
"outputs_hidden": false
}
},
"outputs": [],
"source": [
"import numpy as np\n",
"import numpy.linalg as la\n",
"import matplotlib.pyplot as pt\n",
"import scipy.special as sps"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"collapsed": false,
"jupyter": {
"outputs_hidden": false
}
},
"outputs": [
{
"data": {
"text/plain": [
"[]"
]
},
"execution_count": 2,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"n = 50\n",
"\n",
"k = np.arange(1, n+1, dtype=np.float64)\n",
"\n",
"cheb_nodes = np.cos((2*k-1)/(2*n)*np.pi)\n",
"pt.plot(cheb_nodes, 0*cheb_nodes, \"o\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Build the Vandermonde matrix for orthogonal polynomials with Chebyshev nodes:"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"collapsed": false,
"jupyter": {
"outputs_hidden": false
}
},
"outputs": [
{
"data": {
"text/plain": [
"13.082290511123743"
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"V = np.array([\n",
" sps.eval_legendre(i, cheb_nodes)\n",
" for i in range(n)\n",
"]).T\n",
"\n",
"la.cond(V)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Notice the condition number of the Vandermonde matrix! How does that compare to our prior ones?"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"collapsed": false,
"jupyter": {
"outputs_hidden": false
}
},
"outputs": [],
"source": [
"def f(x):\n",
" return (x>=0).astype(np.float64)"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"collapsed": false,
"jupyter": {
"outputs_hidden": false
}
},
"outputs": [],
"source": [
"coeffs = la.solve(V, f(cheb_nodes))"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {
"collapsed": false,
"jupyter": {
"outputs_hidden": false
}
},
"outputs": [],
"source": [
"x = np.linspace(-1, 1, 1000)"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {
"collapsed": false,
"jupyter": {
"outputs_hidden": false
}
},
"outputs": [],
"source": [
"interpolant = 0\n",
"for i in range(n):\n",
" interpolant += coeffs[i]*sps.eval_legendre(i, x)"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {
"collapsed": false,
"jupyter": {
"outputs_hidden": false
}
},
"outputs": [
{
"data": {
"text/plain": [
"[]"
]
},
"execution_count": 8,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\noF+/UA0Ub8QIeO659PJauRLUBiwthYKA5M2SJTBqFOy/P4weDZ9/nnle48eHhuBEJ58c2gXWrYue\nV7IgMH78eFatWpV5AUWaKQUByYtly+C44+Cww+Dll8MD3U89FSoq0s9rwwZ44YVQ9ZOoqAiOPx6m\nTYue34oV9YOA5g6SQqUgIJG9+SacfjoceCB861vw6aeZ5bN1K5x7Llx6KYwZAwcdBPfcA337wg9/\nmH5+zz4bAkqqevxTT4Wysuj5JbsTUIcFKVQ5CQJmNsTMPjCzBWZ2Q5Ltrc1svJktNLM3zWz/XBy3\n0K1YAS++CJ98ktn+7qF7ZGkpHHxwuHAvWpRZXr/9bfimfeGFMHlyyO/YY2H27PTzuu++8Ozen/yk\nbp0Z/OY3oY//zJnp5ZeqKqjWccfBa69Fzy9Vm4BGDEtBcvesXoRA8hHQA9gNmA30TkhzFXBfzftz\ngfEp8vJYzL262n35ct9OdbX7O++4b9jgSX32mfvkye7r1yffXuudd9zvvtv99dcbTldr+nT3K65w\n//733d99N9o+1dXujz3mPnCg+/77u19wgfu8edH2dXdfs8b9W99y33NP95NOcu/UyX3UKPfVq6Pn\nsWWL+4UXuh92mPvEieH4N9/svs8+4TylY/x49/32c//oo+3X/+Uv7t26hXMf1bJloQypzsdvfuN+\n+unR81u71r19e/fy8tRpKivdi4tD2iiGDKl/ju6//35fnvihFGkmwqU8w2t4pjt63YV7EDAlbvlG\n4IaENFOBgTXvdwFWp8jLf/pT9wceCCX729/qfsnvf999333d+/YNF8l406eHC8sJJ4SL1dy5yU/U\nbbe5f+Ur7lde6d6zp/vll7tXVSVPW13tfuutIb9f/tJ93Dj3zp3d77gjbEtl82b3c891P/JI96lT\nw4Xz9ttD+R59NPV+tZYude/Tx/2qq9y//DKs27jR/brr3A84wH3hwsbzqKx0HzHCfdiwsG+8N98M\nv8fUqY3n4+4+c2Yo++zZybffdFM477FYtPwuvND9xhsbLnvPnu6vvRYtv4cfdh85svF0J58cPfj1\n7x++LMRTEJDmLJsgkPVgMTM7Cxjs7pfXLF8IDHD378WlmVuTZlnN8sKaoLA2IS+/9NLnqKyE7t1D\n75FzzgH3Eq64ohfz5sH//R8sXgwTJ8L8+fOYNWsREyeGuupu3cI0AU88UcKf/tSL3r3r8r7pJnj1\n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\n",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"pt.plot(x, interpolant)\n",
"pt.plot(x, f(x), \"--\", color=\"gray\")"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": false,
"jupyter": {
"outputs_hidden": false
}
},
"outputs": [],
"source": []
}
],
"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.8.3"
}
},
"nbformat": 4,
"nbformat_minor": 4
}