Skip to content

Instantly share code, notes, and snippets.

@TheLurps
Created November 28, 2022 19:11
Show Gist options
  • Select an option

  • Save TheLurps/0429825ae3e640d92b57d9e111ec26e9 to your computer and use it in GitHub Desktop.

Select an option

Save TheLurps/0429825ae3e640d92b57d9e111ec26e9 to your computer and use it in GitHub Desktop.
Find maximum with narrowing grids
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [],
"source": [
"from matplotlib import pyplot as plt\n",
"import numpy as np\n",
"import pandas as pd"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [],
"source": [
"def f(x):\n",
" return - x**2"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [],
"source": [
"x = np.linspace(-5, 5, 100)\n",
"y = f(x)"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"[<matplotlib.lines.Line2D at 0x7fd19532c820>]"
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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",
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"plt.plot(x, y)"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [],
"source": [
"def findMax(f, x_min, x_max, res_init, res_final):\n",
" x = np.arange(x_min, x_max, res_init)\n",
" y = f(x)\n",
" max_y = np.max(y)\n",
" max_x = x[np.argmax(y)]\n",
" print(f\"{max_x=}, {max_y=}, {res_init=}\")\n",
"\n",
" if res_init > res_final:\n",
" print('next iter')\n",
" max_x,max_y = findMax(f, max_x - res_init, max_x + res_init, res_init/2, res_final)\n",
" else:\n",
" print('found')\n",
" print(max_x, max_y)\n",
" \n",
" return max_x, max_y"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"max_x=-0.5, max_y=-0.25, res_init=1.5\n",
"next iter\n",
"max_x=0.25, max_y=-0.0625, res_init=0.75\n",
"next iter\n",
"max_x=-0.125, max_y=-0.015625, res_init=0.375\n",
"next iter\n",
"max_x=0.0625, max_y=-0.00390625, res_init=0.1875\n",
"next iter\n",
"max_x=-0.03125, max_y=-0.0009765625, res_init=0.09375\n",
"found\n",
"-0.03125 -0.0009765625\n"
]
},
{
"data": {
"text/plain": [
"(-0.03125, -0.0009765625)"
]
},
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"findMax(f, -5, 5, 1.5, 0.1)"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"max_x=-0.5, max_y=-0.25, res_init=1.5\n",
"next iter\n",
"max_x=0.25, max_y=-0.0625, res_init=0.75\n",
"next iter\n",
"max_x=-0.125, max_y=-0.015625, res_init=0.375\n",
"next iter\n",
"max_x=0.0625, max_y=-0.00390625, res_init=0.1875\n",
"next iter\n",
"max_x=-0.03125, max_y=-0.0009765625, res_init=0.09375\n",
"found\n",
"-0.03125 -0.0009765625\n"
]
},
{
"data": {
"text/plain": [
"(-0.5, -0.25)"
]
},
"execution_count": 12,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"values = []\n",
"def findMax(f, x_min, x_max, res_init, res_final, values):\n",
" x = np.arange(x_min, x_max, res_init)\n",
" y = f(x)\n",
" \n",
" for i in range(len(x)):\n",
" values.append({'x': x[i], 'y': y[i]})\n",
"\n",
" max_y = np.max(y)\n",
" max_x = x[np.argmax(y)]\n",
" print(f\"{max_x=}, {max_y=}, {res_init=}\")\n",
"\n",
" if res_init > res_final:\n",
" print('next iter')\n",
" x,y = findMax(f, max_x - res_init, max_x + res_init, res_init/2, res_final, values)\n",
" else:\n",
" print('found')\n",
" print(max_x, max_y)\n",
" \n",
" return max_x, max_y\n",
"\n",
"findMax(f, -5, 5, 1.5, 0.1, values)"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"[{'x': -5.0, 'y': -25.0},\n",
" {'x': -3.5, 'y': -12.25},\n",
" {'x': -2.0, 'y': -4.0},\n",
" {'x': -0.5, 'y': -0.25},\n",
" {'x': 1.0, 'y': -1.0},\n",
" {'x': 2.5, 'y': -6.25},\n",
" {'x': 4.0, 'y': -16.0},\n",
" {'x': -2.0, 'y': -4.0},\n",
" {'x': -1.25, 'y': -1.5625},\n",
" {'x': -0.5, 'y': -0.25},\n",
" {'x': 0.25, 'y': -0.0625},\n",
" {'x': -0.5, 'y': -0.25},\n",
" {'x': -0.125, 'y': -0.015625},\n",
" {'x': 0.25, 'y': -0.0625},\n",
" {'x': 0.625, 'y': -0.390625},\n",
" {'x': -0.5, 'y': -0.25},\n",
" {'x': -0.3125, 'y': -0.09765625},\n",
" {'x': -0.125, 'y': -0.015625},\n",
" {'x': 0.0625, 'y': -0.00390625},\n",
" {'x': -0.125, 'y': -0.015625},\n",
" {'x': -0.03125, 'y': -0.0009765625},\n",
" {'x': 0.0625, 'y': -0.00390625},\n",
" {'x': 0.15625, 'y': -0.0244140625}]"
]
},
"execution_count": 13,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"values"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>x</th>\n",
" <th>y</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>-5.00000</td>\n",
" <td>-25.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>-3.50000</td>\n",
" <td>-12.250000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>-2.00000</td>\n",
" <td>-4.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>-0.50000</td>\n",
" <td>-0.250000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>1.00000</td>\n",
" <td>-1.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5</th>\n",
" <td>2.50000</td>\n",
" <td>-6.250000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>6</th>\n",
" <td>4.00000</td>\n",
" <td>-16.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>7</th>\n",
" <td>-2.00000</td>\n",
" <td>-4.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>8</th>\n",
" <td>-1.25000</td>\n",
" <td>-1.562500</td>\n",
" </tr>\n",
" <tr>\n",
" <th>9</th>\n",
" <td>-0.50000</td>\n",
" <td>-0.250000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>10</th>\n",
" <td>0.25000</td>\n",
" <td>-0.062500</td>\n",
" </tr>\n",
" <tr>\n",
" <th>11</th>\n",
" <td>-0.50000</td>\n",
" <td>-0.250000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>12</th>\n",
" <td>-0.12500</td>\n",
" <td>-0.015625</td>\n",
" </tr>\n",
" <tr>\n",
" <th>13</th>\n",
" <td>0.25000</td>\n",
" <td>-0.062500</td>\n",
" </tr>\n",
" <tr>\n",
" <th>14</th>\n",
" <td>0.62500</td>\n",
" <td>-0.390625</td>\n",
" </tr>\n",
" <tr>\n",
" <th>15</th>\n",
" <td>-0.50000</td>\n",
" <td>-0.250000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>16</th>\n",
" <td>-0.31250</td>\n",
" <td>-0.097656</td>\n",
" </tr>\n",
" <tr>\n",
" <th>17</th>\n",
" <td>-0.12500</td>\n",
" <td>-0.015625</td>\n",
" </tr>\n",
" <tr>\n",
" <th>18</th>\n",
" <td>0.06250</td>\n",
" <td>-0.003906</td>\n",
" </tr>\n",
" <tr>\n",
" <th>19</th>\n",
" <td>-0.12500</td>\n",
" <td>-0.015625</td>\n",
" </tr>\n",
" <tr>\n",
" <th>20</th>\n",
" <td>-0.03125</td>\n",
" <td>-0.000977</td>\n",
" </tr>\n",
" <tr>\n",
" <th>21</th>\n",
" <td>0.06250</td>\n",
" <td>-0.003906</td>\n",
" </tr>\n",
" <tr>\n",
" <th>22</th>\n",
" <td>0.15625</td>\n",
" <td>-0.024414</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" x y\n",
"0 -5.00000 -25.000000\n",
"1 -3.50000 -12.250000\n",
"2 -2.00000 -4.000000\n",
"3 -0.50000 -0.250000\n",
"4 1.00000 -1.000000\n",
"5 2.50000 -6.250000\n",
"6 4.00000 -16.000000\n",
"7 -2.00000 -4.000000\n",
"8 -1.25000 -1.562500\n",
"9 -0.50000 -0.250000\n",
"10 0.25000 -0.062500\n",
"11 -0.50000 -0.250000\n",
"12 -0.12500 -0.015625\n",
"13 0.25000 -0.062500\n",
"14 0.62500 -0.390625\n",
"15 -0.50000 -0.250000\n",
"16 -0.31250 -0.097656\n",
"17 -0.12500 -0.015625\n",
"18 0.06250 -0.003906\n",
"19 -0.12500 -0.015625\n",
"20 -0.03125 -0.000977\n",
"21 0.06250 -0.003906\n",
"22 0.15625 -0.024414"
]
},
"execution_count": 14,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df = pd.DataFrame(values)\n",
"df"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"[<matplotlib.lines.Line2D at 0x7fd1924ed750>]"
]
},
"execution_count": 15,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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",
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"plt.plot(df['x'], df['y'], 'o')"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3 (ipykernel)",
"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.10.6"
},
"orig_nbformat": 4
},
"nbformat": 4,
"nbformat_minor": 2
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment