{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Playing with Barycentric Interpolation\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": 29,
"metadata": {},
"outputs": [],
"source": [
"import numpy as np\n",
"import matplotlib.pyplot as plt"
]
},
{
"cell_type": "code",
"execution_count": 49,
"metadata": {},
"outputs": [],
"source": [
"x = np.linspace(-1, 1, 5)\n",
"xx = np.linspace(-1, 1, 100)\n",
"\n",
"def f(x):\n",
" return np.sin(5/(1.6-x))"
]
},
{
"cell_type": "code",
"execution_count": 50,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"[]"
]
},
"execution_count": 50,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"