dissertation_work/Dissertation/sharktooth_functions.ipynb

146 lines
132 KiB
Plaintext
Raw Permalink Normal View History

2024-02-17 01:32:15 +00:00
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Sharktooth Functions in 1-dimension"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"import numpy as np \n",
"import matplotlib.pyplot as plt"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [],
"source": [
"def max_conv_operator(samples, f_samples, input, L):\n",
" return np.max(f_samples - L * np.abs(input - samples))\n",
"\n",
"def sharktooth_function(function, x_start, x_stop, number_of_sharkteeth, L, plot_arg):\n",
" samples = np.random.uniform(x_start,x_stop, number_of_sharkteeth)\n",
" f_samples = function(samples)\n",
" x = np.linspace(x_start, x_stop, 10000)\n",
" approximate_y = []\n",
" for i in range(len(x)):\n",
" approximate_y.append(max_conv_operator(samples, f_samples, x[i], L))\n",
" error = np.max(np.abs(f(x) - approximate_y))\n",
" if plot_arg == 1:\n",
" plt.plot(x,approximate_y)\n",
" else:\n",
" return error"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [],
"source": [
"def f(x):\n",
" return np.tanh(x)"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Text(0.5, 1.0, 'Sup of deviance from tanh(x) as the number of teeth increase and as we get closer to L, for tanh that is 1')"
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 1700x500 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"L = [1,4,8,16]\n",
"plt.figure(figsize=(17,5))\n",
"for L in L:\n",
" errors = []\n",
" for i in range(1,50):\n",
" errors.append(sharktooth_function(f,0,1,i,L,0))\n",
" import matplotlib.pyplot as plt\n",
" plt.plot(errors, label =L)\n",
"\n",
"plt.xlabel(\"Number of teeth\")\n",
"plt.ylabel(r\"$\\sup_{x\\in x_i} | \\tanh(x)- \\mathfrak{I}_{\\mathsf{ReLU}} ( \\mathsf{MC})|$\")\n",
"plt.legend()\n",
"plt.title(\"Sup of deviance from tanh(x) as the number of teeth increase and as we get closer to L, for tanh that is 1\")"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"sharktooth_function(np.tanh,-6,6,30,1,1)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "base",
"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.11.5"
},
"orig_nbformat": 4
},
"nbformat": 4,
"nbformat_minor": 2
}