Skip to content

Instantly share code, notes, and snippets.

@yudhastyawan
Last active May 1, 2021 21:08
Show Gist options
  • Save yudhastyawan/aa7be20d7792397c77626a7e660c1590 to your computer and use it in GitHub Desktop.
Save yudhastyawan/aa7be20d7792397c77626a7e660c1590 to your computer and use it in GitHub Desktop.
Jupyter notebooks and labs
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "markdown",
"id": "065eb827-2c93-4402-adb5-71981176bdc7",
"metadata": {},
"source": [
"# Table 1"
]
},
{
"cell_type": "code",
"execution_count": 1,
"id": "16e33eda-e7f4-49d4-8b5f-1126340f95d0",
"metadata": {},
"outputs": [],
"source": [
"from finitediff import get_weights\n",
"import numpy as np"
]
},
{
"cell_type": "code",
"execution_count": 2,
"id": "44535540-456a-48a9-b723-66c9e7e19971",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"orde (derivative) = 0\n",
"[-0. 0. -0. 0. 1. -0. 0. -0. 0.]\n",
"\n",
"orde (derivative) = 1\n",
"[ 3.57142857e-03 -3.80952381e-02 2.00000000e-01 -8.00000000e-01\n",
" -3.05311332e-16 8.00000000e-01 -2.00000000e-01 3.80952381e-02\n",
" -3.57142857e-03]\n",
"\n",
"orde (derivative) = 2\n",
"[-1.78571429e-03 2.53968254e-02 -2.00000000e-01 1.60000000e+00\n",
" -2.84722222e+00 1.60000000e+00 -2.00000000e-01 2.53968254e-02\n",
" -1.78571429e-03]\n",
"\n",
"orde (derivative) = 3\n",
"[-2.91666667e-02 3.00000000e-01 -1.40833333e+00 2.03333333e+00\n",
" -2.22044605e-15 -2.03333333e+00 1.40833333e+00 -3.00000000e-01\n",
" 2.91666667e-02]\n",
"\n",
"orde (derivative) = 4\n",
"[ 0.02916667 -0.4 2.81666667 -8.13333333 11.375 -8.13333333\n",
" 2.81666667 -0.4 0.02916667]\n",
"\n"
]
}
],
"source": [
"c = get_weights(np.array([-4.,-3.,-2.,-1.,0,1.,2.,3.,4.]), 0, maxorder=4)\n",
"for i in range(len(c[0,:])):\n",
" print('orde (derivative) = ',i)\n",
" print(c[:,i])\n",
" print('')"
]
},
{
"cell_type": "markdown",
"id": "248a7990-61ec-4947-b50e-852bd5f6eb6e",
"metadata": {},
"source": [
"# Table 2"
]
},
{
"cell_type": "code",
"execution_count": 3,
"id": "e39608ed-9141-4610-8f45-4b7b27989d4d",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"orde (derivative) = 0\n",
"[-0.00244141 0.02392578 -0.11962891 0.59814453 0.59814453 -0.11962891\n",
" 0.02392578 -0.00244141]\n",
"\n",
"orde (derivative) = 1\n",
"[ 6.97544643e-04 -9.57031250e-03 7.97526042e-02 -1.19628906e+00\n",
" 1.19628906e+00 -7.97526042e-02 9.57031250e-03 -6.97544643e-04]\n",
"\n",
"orde (derivative) = 2\n",
"[ 0.02248264 -0.21657986 1.01484375 -0.82074653 -0.82074653 1.01484375\n",
" -0.21657986 0.02248264]\n",
"\n",
"orde (derivative) = 3\n",
"[-0.01927083 0.25989583 -2.0296875 4.92447917 -4.92447917 2.0296875\n",
" -0.25989583 0.01927083]\n",
"\n",
"orde (derivative) = 4\n",
"[-0.14583333 1.22916667 -2.8125 1.72916667 1.72916667 -2.8125\n",
" 1.22916667 -0.14583333]\n",
"\n"
]
}
],
"source": [
"c = get_weights(np.array([(-7./2.),(-5./2.),(-3./2.),(-1./2.),(1./2.),(3./2.),(5./2.),(7./2.)]), 0, maxorder=4)\n",
"for i in range(len(c[0,:])):\n",
" print('orde (derivative) = ',i)\n",
" print(c[:,i])\n",
" print('')"
]
},
{
"cell_type": "markdown",
"id": "8b7d9dc9-5d45-45f6-bff6-3df50ed3c7e7",
"metadata": {},
"source": [
"# Table 3"
]
},
{
"cell_type": "code",
"execution_count": 4,
"id": "b63bb159-a6b9-4d0f-8135-956e8a2145a9",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"orde (derivative) = 0\n",
"[ 1. -0. 0. -0. 0. -0. 0. -0. 0.]\n",
"\n",
"orde (derivative) = 1\n",
"[ -2.71785714 8. -14. 18.66666667 -17.5\n",
" 11.2 -4.66666667 1.14285714 -0.125 ]\n",
"\n",
"orde (derivative) = 2\n",
"[ 5.8593254 -27.48571429 62.1 -89.02222222 86.375\n",
" -56.4 23.81111111 -5.88571429 0.64821429]\n",
"\n",
"orde (derivative) = 3\n",
"[ -10.0125 58.16666667 -152.94166667 239.1 -242.83333333\n",
" 163.03333333 -70.125 17.56666667 -1.95416667]\n",
"\n",
"orde (derivative) = 4\n",
"[ 13.3625 -87.73333333 254.81666667 -428.8 458.04166667\n",
" -318.13333333 140.15 -35.73333333 4.02916667]\n",
"\n"
]
}
],
"source": [
"c = get_weights(np.array([0,1,2,3,4,5,6,7,8]), 0, maxorder=4)\n",
"for i in range(len(c[0,:])):\n",
" print('orde (derivative) = ',i)\n",
" print(c[:,i])\n",
" print('')"
]
},
{
"cell_type": "markdown",
"id": "87a7da46-278d-4cf1-9180-028743578faa",
"metadata": {},
"source": [
"# Table 4"
]
},
{
"cell_type": "code",
"execution_count": 5,
"id": "27ebeb2c-0b51-4267-b9ad-922c85c88af8",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"orde (derivative) = 0\n",
"[ 0.19638062 1.57104492 -1.83288574 2.19946289 -1.96380615 1.22192383\n",
" -0.49987793 0.12084961 -0.01309204]\n",
"\n",
"orde (derivative) = 1\n",
"[-0.79408482 -0.06849888 2.52376302 -3.61503906 3.45214844 -2.22558594\n",
" 0.93066406 -0.22837612 0.0250093 ]\n",
"\n",
"orde (derivative) = 2\n",
"[ 2.26637835 -7.55368304 11.85798611 -13.08359375 11.07226562\n",
" -6.65112847 2.6546875 -0.63024554 0.06733321]\n",
"\n",
"orde (derivative) = 3\n",
"[ -4.82708333 24.84739583 -58.1484375 82.53697917 -78.22135417\n",
" 50.1421875 -20.87864583 5.10677083 -0.5578125 ]\n",
"\n",
"orde (derivative) = 4\n",
"[ 7.74010417 -48.23333333 133.11875 -213.75833333 219.36979167\n",
" -147.55 63.41041667 -15.85833333 1.7609375 ]\n",
"\n"
]
}
],
"source": [
"c = get_weights(np.array([(-1./2.),(1./2.),(3./2.),(5./2.),(7./2.),(9./2.),(11./2.),(13./2.),(15./2.)]), 0, maxorder=4)\n",
"for i in range(len(c[0,:])):\n",
" print('orde (derivative) = ',i)\n",
" print(c[:,i])\n",
" print('')"
]
},
{
"cell_type": "markdown",
"id": "58079756-2174-4940-90d8-0424e9566142",
"metadata": {},
"source": [
"# Testing FiniteDiff Package"
]
},
{
"cell_type": "code",
"execution_count": 6,
"id": "6e4c6172-d9f2-4801-8a31-12062e1dc3ca",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"y = exp(x) so y' = exp(x)\n",
"ytrue:\n",
"[0.24659696 0.26016777 0.27448542 0.28959099 0.30552787 0.32234178\n",
" 0.34008101 0.35879647 0.37854188 0.39937393 0.42135241 0.44454042\n",
" 0.46900453 0.49481495 0.52204578 0.55077518 0.58108563 0.61306414\n",
" 0.6468025 0.68239756 0.7199515 0.75957212 0.80137316 0.84547461\n",
" 0.89200306 0.94109208 0.99288259 1.04752325 1.10517092 1.16599107\n",
" 1.2301583 1.2978568 1.3692809 1.44463565 1.52413734 1.6080142\n",
" 1.696507 1.78986976 1.8883705 1.99229196 2.10193246 2.21760674\n",
" 2.33964685 2.46840311 2.60424513 2.74756286 2.8987677 3.05829369\n",
" 3.22659877 3.40416608 3.59150534 3.78915431 3.99768037 4.21768211\n",
" 4.44979106 4.69467352 4.95303242]\n",
"ycalc:\n",
"[0.24659689 0.26016791 0.27448554 0.28959108 0.30552791 0.32234181\n",
" 0.34008114 0.35879666 0.37854209 0.39937413 0.42135258 0.44454053\n",
" 0.46900457 0.49481503 0.522046 0.55077549 0.58108596 0.61306444\n",
" 0.64680273 0.6823977 0.71995153 0.75957232 0.80137355 0.84547508\n",
" 0.89200355 0.94109251 0.9928829 1.04752342 1.10517092 1.16599146\n",
" 1.23015893 1.29785753 1.36928162 1.44463625 1.52413775 1.60801438\n",
" 1.69650718 1.78987048 1.88837152 1.99229308 2.10193351 2.21760759\n",
" 2.33964739 2.46840328 2.60424568 2.7475641 2.89876931 3.05829538\n",
" 3.22660029 3.40416724 3.591506 3.78915441 3.99768154 4.2176842\n",
" 4.44979357 4.69467603 4.95303459]\n",
"is approximately similar? True\n",
"\n",
"see derivative approx. in 0.5 for y = x**2 (y' = 2x)\n",
"x:\n",
"[0. 0.5 1. ]\n",
"y:\n",
"[0.25 1. 2. ]\n"
]
}
],
"source": [
"from __future__ import print_function, division, absolute_import, unicode_literals\n",
"\n",
"import numpy as np\n",
"\n",
"from finitediff import interpolate_by_finite_diff, derivatives_at_point_by_finite_diff\n",
"\n",
"def test_derivatives_at_point_by_finite_diff():\n",
" out = derivatives_at_point_by_finite_diff(\n",
" np.array([.0, .5, 1.]),\n",
" np.array([.0, .25, 1.]), .5, 2) # y=x**2\n",
" print('')\n",
" print(\"see derivative approx. in 0.5 for y = x**2 (y' = 2x)\")\n",
" print('x:')\n",
" print(np.array([.0, .5, 1.]))\n",
" print('y:')\n",
" print(out)\n",
"\n",
"def test_interpolate_by_finite_diff():\n",
" order = 0\n",
" xarr = np.linspace(-1.5, 1.7, 53)\n",
" yarr = np.exp(xarr)\n",
" xtest = np.linspace(-1.4, 1.6, 57)\n",
" y = interpolate_by_finite_diff(xarr, yarr, xtest)\n",
" yexact = np.exp(xtest)\n",
" for ci in range(y.shape[1]):\n",
" tol = 10**-(13-ci*2)\n",
" print(\"y = exp(x) so y' = exp(x)\")\n",
" print('ytrue:')\n",
" print(yexact)\n",
" print('ycalc:')\n",
" print(y[:,ci])\n",
" print('is approximately similar? ',np.allclose(yexact, y[:,ci]))\n",
"\n",
"\n",
"if __name__ == '__main__':\n",
" test_interpolate_by_finite_diff()\n",
" test_derivatives_at_point_by_finite_diff()"
]
},
{
"cell_type": "markdown",
"id": "9f6d98f0-2e26-45d9-b196-33ca1836b14e",
"metadata": {},
"source": [
"# Example (Sine Signal)"
]
},
{
"cell_type": "code",
"execution_count": 12,
"id": "88e02855-31d5-4c72-8905-3b4244a96c3b",
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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KFC3mT17Nu+88w7z5s2juLiY4uJiRo8eTU1NDT/99BM6nY5vv/2We++9l/fff5+HHnqI1atXM3/+fABee+01AFJSUhg+fDg//vgjU6ZM4dNPP2X69Ono9XquvvpqnnvuOfr06cPKlSu5/vrr+f7770O+1/Llyxk5cqT6/qabbuKyyy7jsssu45VXXuHmm2/mo48+AqCwsJAVK1ag1Wo566yzuO666/jDH/7AggUL1O2//vprdu3axa+//ookSZx11lksXbqUbt26sWvXLl5//XXGjx+vnoMdO3ZEnOvbbruNP/zhDw1eFqNHj+a+++5rcJ0mMhbYLUnSXgAhxNvA2UC4MT/uqA0YoMxEA9A0maU84NULISf2HcsUVtqZ+fQyhnRJ4X83TWp8gwCltW71dbXD0xZDaxYxG/PHZw072Ng6TqfTsGvXrj5DhgyJ/MUChw8fziwrK8sC8Pv9DB0aRZFJyaO4ykqCTpBskDCbjGz6+k1Vo/JU70YgYRASGo1AKwQ1Tg/JJj0lNU7sbh/7ymz0zUnk66+/5pNPPuGJJ55QxseBAwf48celzLz4ClxeH1179Wfo0KERw9i+fTs9evSge49eAFxyySW88MILAPXuF+C0004jPT09Yn8XXHAB06ZNY968ebzzzjuqll5dXc1ll13Grl27EELg8TR+ccyePZvFixczZcoU3n77ba6//nqsVisrVqzg/PPPV9dzuSIfAYuLi8nKqiu49vPPP/PBB3IP3ksvvZQ777xTXXb++eej1coRD8uXL+f9999X17vrrrvUc/H1118zYsQIAKxWK7t27aJbt250795dNeQAixcvbvS71Ud2djaHDh1q9vZR6AIEX9OFwLgo650nhDgRuYfnnyRJivgdCCGuBq4GWSrq6NQEDFBWkuKZx27MK2wusgPbHeue+eZAJMqmomr8ftmexII1EMqZZNKp57IjcFSrJnbq1KmsU6dOZQBbt24dFW0dvzmN0goNGpOJ5GQTCA1bpHx6JAsScCJZKxFIaMu2grUUgxYcAQMO8gn2+PzUOLxIksT7779Pv36hqo9E3Sy83V3/I6bXL7H9cA1dUs2h29ez35UrV5KQkBB1X126dCEjI4ONGzeyePFinnvuOQDuv/9+pkyZwocffkhBQQEnn3xyveNROOuss7j33nupqKhgzZo1nHLKKdhsNlJTU1m/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\n",
"text/plain": [
"<Figure size 432x288 with 4 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"#!/usr/bin/env python\n",
"# -*- coding: utf-8 -*-\n",
"\n",
"from __future__ import division, print_function # Python 3 behaviour in Python 2\n",
"\n",
"import numpy as np\n",
"\n",
"import argh\n",
"\n",
"from finitediff import derivatives_at_point_by_finite_diff\n",
"\n",
"\n",
"def demo_usage(n_data=50, n_fit=537, m=20):\n",
" \"\"\"\n",
" Plots a noisy sine curve and the fitting to it.\n",
" Also presents the error and the error in the\n",
" approximation of its first derivative (cosine curve)\n",
" \"\"\"\n",
" import matplotlib.pyplot as plt\n",
"\n",
" x0, xend = 0, 5\n",
" x_data = np.linspace(x0,xend,n_data) + \\\n",
" np.random.rand(n_data)*(xend-x0)/n_data/1.5 # shaky linspace\n",
" y_data = np.sin(x_data) * (1.0+0.1*(np.random.rand(n_data)-0.5)) # -5% to +5% noise\n",
"\n",
" if n_data < n_fit:\n",
" m = 5 # points used behind and in front of interpolation\n",
"\n",
" x_fit = np.linspace(x0, xend, n_fit)\n",
"\n",
" # Edges behave badly, work around:\n",
" x_fit[0] = x_fit[0] + (x_fit[1]-x_fit[0])/2\n",
" x_fit[-1] = x_fit[-2]+(x_fit[-1]-x_fit[-2])/2\n",
"\n",
" y_fit = np.empty(n_fit)\n",
" dydx_fit = np.empty(n_fit)\n",
" for i, xf in enumerate(x_fit):\n",
" # get index j of first data point beyond xf\n",
" j = np.where(x_data > xf)[0][0]\n",
" lower_bound = max(0, j-m)\n",
" upper_bound = min(n_data-1, j+m)\n",
" y_fit[i] = derivatives_at_point_by_finite_diff(\n",
" x_data[lower_bound:upper_bound],\n",
" y_data[lower_bound:upper_bound], xf, 0)\n",
" dydx_fit[i] = derivatives_at_point_by_finite_diff(\n",
" x_data[lower_bound:upper_bound],\n",
" y_data[lower_bound:upper_bound], xf, 1)[1]\n",
"\n",
" plt.subplot(221)\n",
" plt.plot(x_data,y_data,'x',label='Data points (sin)')\n",
" plt.plot(x_fit,y_fit,'-',label='Fitted curve (order=0)')\n",
" plt.plot(x_data,np.sin(x_data),'-',label='Analytic sin(x)')\n",
" plt.legend()\n",
"\n",
" plt.subplot(222)\n",
" plt.plot(x_fit,y_fit-np.sin(x_fit), label='Error in order=0')\n",
" plt.legend()\n",
"\n",
" plt.subplot(223)\n",
" plt.plot(x_fit,dydx_fit,'-',label='Fitted derivative (order=1)')\n",
" plt.plot(x_data,np.cos(x_data),'-',label='Analytic cos(x)')\n",
" plt.legend()\n",
"\n",
" plt.subplot(224)\n",
" plt.plot(x_fit,dydx_fit-np.cos(x_fit), label='Error in order=1')\n",
" plt.legend()\n",
"\n",
" plt.show()\n",
"\n",
"\n",
"demo_usage()"
]
}
],
"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.8"
}
},
"nbformat": 4,
"nbformat_minor": 5
}
Display the source blob
Display the rendered blob
Raw
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Display the source blob
Display the rendered blob
Raw
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Display the source blob
Display the rendered blob
Raw
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Display the source blob
Display the rendered blob
Raw
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Display the source blob
Display the rendered blob
Raw
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment