Skip to content

Instantly share code, notes, and snippets.

@yiyuezhuo
Created December 29, 2019 08:10
Show Gist options
  • Save yiyuezhuo/750e42f251ae8a2ab7970cd42b948fe9 to your computer and use it in GitHub Desktop.
Save yiyuezhuo/750e42f251ae8a2ab7970cd42b948fe9 to your computer and use it in GitHub Desktop.
extract_points
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"import cv2"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [],
"source": [
"import matplotlib.pyplot as plt\n",
"import numpy as np"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"'4.1.1'"
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"cv2.__version__"
]
},
{
"cell_type": "code",
"execution_count": 70,
"metadata": {},
"outputs": [],
"source": [
"def imshow(arr):\n",
" if len(arr.shape) == 3:\n",
" plt.imshow(arr)\n",
" elif len(arr.shape) ==2:\n",
" plt.imshow(arr, cmap='gray')\n",
" else:\n",
" raise ValueError(\"Unknown shape\")"
]
},
{
"cell_type": "code",
"execution_count": 67,
"metadata": {},
"outputs": [],
"source": [
"img = cv2.imread(\"screenshot.png\")\n",
"img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)\n",
"_, img = cv2.threshold(img, 127, 255, cv2.THRESH_BINARY)"
]
},
{
"cell_type": "code",
"execution_count": 68,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([[255, 255, 255, ..., 255, 255, 255],\n",
" [255, 255, 255, ..., 255, 255, 255],\n",
" [255, 255, 255, ..., 255, 255, 255],\n",
" ...,\n",
" [255, 255, 255, ..., 255, 255, 255],\n",
" [255, 255, 255, ..., 255, 255, 255],\n",
" [255, 255, 255, ..., 255, 255, 255]], dtype=uint8)"
]
},
"execution_count": 68,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"img"
]
},
{
"cell_type": "code",
"execution_count": 71,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAUwAAAD8CAYAAAAc052eAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8QZhcZAAAYsklEQVR4nO3da6wc5X3H8e+/BpNrMZcDsmwTg2JFyYsGrCPiiCpKIYmARjEvQAJFxUKuLLVUIkql1LRSq0h9kfRFQEgVqRXSOlUSoCQpFqJNLAOqWgnD4Q5xiA/Uio9M8CGAkzZKW5J/X+yzMIxnd5/dncszM7+PdLSzs3N2/zuX3z7PXHbN3RERkcl+q+kCRETaQoEpIhJJgSkiEkmBKSISSYEpIhJJgSkiEqmSwDSzy83seTNbNrPdVbyGiEjdrOzzMM1sDfBj4JPACvAocJ27/7DUFxIRqVkVLcyLgWV3f9Hd/xe4E9heweuIiNTqlAqecwNwNHN/BfjIuH84++yzffPmzRWUIiIynSNHjvDKK69Y0WNVBGbRC53U7zezXcAugPPOO4+lpaUKShERmc7i4uLIx6rokq8AmzL3NwLH8hO5+x53X3T3xYWFhQrKEBEpVxWB+SiwxczON7O1wLXAvmmewKywNfzmY+MeFxGpSuldcnd/w8z+BPg+sAb4urs/N+3zmBnTHsFXkIpIjFnPDqpiHybufj9w/xz/PzL8Rj02HDfPaVJlPEeZUqwnhVpSnC+geopkt9XU6plFklf65N9U9v64NzzvAklhgealWJNIrNTW33nrqaSFOa9xbyq1BVClPr3XaYzrgTQhteWUWj1dkmRg5tW5Amhlawctp/bo0rJKsksuaerSii8yCwWmiEgkBaaISCQFpkhP1XkRSEoH6ebRioM+koZUzsOU8gyXZ/58yWnuxzx/VsxzjVrPpgnecevqrOtyZwJTG3L1NI+7Lbt8h0E2aZmPC7xhCzZmvYkN4bLWwVmfpzNd8q40+UXqNGm7mTXEslcbDYenea5Ut+fOtDBFZDr5FuU0j0+aftz4UffztynqTAtTRJqTcsiVSYEpIpUa7stMqZs9ay3qkks0HSWXMow6Sp7ffznpKHf2OeqiFqZEU1jKrGKOtkN9B3t6f5RcRNIVczR+lnMs6/4QV5dcRCpVdFQ8u3sn//g0527OatbdS2phikjtmv7OW3XJRUQizbqvVIEpMqfUTpmR6igwRUqi0Ow+BaZEUyBIV/RmH6a6P83ReZjjaf50X+tOKxr3NVAp/R6z9IfWt3Yoo6HVuhZmDLVAq6H5Kl3Rm2vJJ71RfdpXR/NW2qyMyy9b18J09+jv3ZNyqYUpfde6wJTm6ANJ+k6BKSISSYEp0dQln12KX6Ir05sYmGb2dTM7bmbPZsadaWb7zexwuD0jjDczu83Mls3saTPbWmXxUi91yePkwzEfkgrN9oppYf4DcHlu3G7ggLtvAQ6E+wBXAFvC3y7g9nLKFGmvmB8Qk3aYGJju/m/Aq7nR24G9YXgvcFVm/Dd84GFgnZmtL6tYaZZaRnFG/aLiuDM8pB1m3Yd5rru/BBBuzwnjNwBHM9OthHHSAdrY4ykcu6nsgz5FTZDCtcbMdpnZkpktra6ullyGVEEtzHLpIFD7zBqYLw+72uH2eBi/AmzKTLcROFb0BO6+x90X3X1xYWFhxjKkTmoxlUdB2U6zBuY+YEcY3gHcmxl/fThavg04Mey6i8hbij581OJM38Rryc3s28DHgbPNbAX4K+BLwN1mthP4CXBNmPx+4EpgGfglcEMFNUtD9LvkA2V9K9ao/9d8TtfEwHT360Y8dFnBtA7cOG9RkiZtxG/vSivY+kdX+ohMIRuQVYWlQjhdrft6N2mOWlQDdQWlvhA7PWphSjRtuM3QgaB0KDBFRCKpSy7R1CWvl+Z1etTClGjagKXvFJgiIpEUmCIikZIMzHFHBXX5mIg0JcnAhNlOpVCQisgoZTS2kg3MWakFKiJVaUVgThOA+uJWESlSRjYkeR7muDc162MyP52HKX3XihamNtI0aDlI37UiMCUN2jcsfafAlGh9bWHqg0KGFJgiYwzDUmdfCCgwZQoKDOk7BaZE62OXPHsqSh/fv7ydAlMkgsJSQIEpIhJNgSkiEkmBKSISSYEpIhJJgSkiEkmBKdF0Hqb0XZLfViRp0qk1/ZT9oOz7OqAWpohIJAWmRFOXXIb6em29uuQSre/dsb7KL/eioOxLt31iC9PMNpnZg2Z2yMyeM7ObwvgzzWy/mR0Ot2eE8WZmt5nZspk9bWZbq34TIlKfmEActkC71gqN6ZK/Afypu38Q2AbcaGYfAnYDB9x9C3Ag3Ae4AtgS/nYBt5detdSuiyu/zKfLLclRJgamu7/k7o+H4V8Ah4ANwHZgb5hsL3BVGN4OfMMHHgbWmdn60iuX2igoJS8flsNvdcp+s1MXf5BwqoM+ZrYZuAg4CJzr7i/BIFSBc8JkG4CjmX9bCeNKoZaOiDQlOjDN7D3Ad4DPufvPx01aMO6kjxkz22VmS2a2tLq6GlvG2E8sBWm1svM+O6+7tr+qK+8jJSmsI2W8flRgmtmpDMLym+7+3TD65WFXO9weD+NXgE2Zf98IHMs/p7vvcfdFd19cWFiYtf6iWrXClyzfterDzzZ09X2loM3zNuYouQF3AIfc/SuZh/YBO8LwDuDezPjrw9HybcCJYde9DJNmdhf3m6Ssa/O6zRtzyrLrSVPrTBnZEHMe5iXAHwDPmNmTYdyfA18C7jazncBPgGvCY/cDVwLLwC+BG+aqcApd23hT18WfbnB3hWZFurCeTAxMd/93ivdLAlxWML0DN85Z17h6qnpqidT1ZdD19yez06WRIiKRdGmkVC7fxVULTtpKgSknGQZc0TXECrvJxu0D1fxrN3XJ5W2q2NhTOEJal6LWdPbobJdPxeoDtTDlbco6SpxvpfYlKMe9z6JzWbs+X7pGLUyJFhuk+auAum6W8Mu2OKU9FJhyklEn+MYGQt+64LOeEK3QbB8FplSiD1dclRF0XZ9HXaPAFJlBmfsgh/uN1dJMnwJTGtP2gFDrsH8UmFK7bGuqjaFZxfmo2p/ZDgpMqV2bW2ZVBlqb50tf6DxMaUSbw6HK2of7M9s8f7pMLUyZ6fzKPqozyPo+r1OlwOy5afYl9rnVU2eAaX9muhSY0mvT/NZMnR8Yff5wSpkCs+e0YU7W9A93SToUmNKLq3JGmeVyz7r0dZmkTIEpvTfuA6PpFp5+YygtrQtMXUImdVNLT4aSDMxZA1FBKmVK5XxIXWtejjLmYZKBOQ+tWNXp03zt03uVeK0IzGlW3j4fwKia5mtzdG7m/MrIhtZdGhn7EwDSLtkgSGU5plLHkA4ANS/JFmZ+RU1txe2rvmysqey7HKUvyyFFSQampCnlEOkLLYNmta5LLt2UShC0ofWmbzRqjlqYIkHbfvq2DeHeNQpMkRZqS6h3jQJTJKNtQaRWZr0mBqaZvcPMHjGzp8zsOTP7Yhh/vpkdNLPDZnaXma0N408L95fD45urfQsSa5qvMuubNs4TnZtZv5gW5v8Al7r7h4ELgcvNbBvwZeAWd98CvAbsDNPvBF5z9/cDt4TpJAFltp6y4dv2IG7bvsusNtbcZhMD0wf+K9w9Nfw5cClwTxi/F7gqDG8P9wmPX2Zt3ZI6aJ4NLObb2dscnG2lE9rrE7UP08zWmNmTwHFgP/AC8Lq7vxEmWQE2hOENwFGA8PgJ4Kwyi5b5zBuaw0vMxv0Np23LhtyFllod83pUz6Ity3leUYHp7r929wuBjcDFwAeLJgu3RXPupLXRzHaZ2ZKZLa2ursbWKw3IbhDTBEsbgjPVuqZVx/7M/OWr+WuzU17OZZnqKLm7vw48BGwD1pnZ8MT3jcCxMLwCbAIIj58OvFrwXHvcfdHdFxcWFmarXiqXDcpZWmH5Fuc0r1vFBljUKupC6xKqCc3svCoKyeHrZv+6HJwxR8kXzGxdGH4n8AngEPAgcHWYbAdwbxjeF+4THn/Au7JG9kyZgTLPxtzVja8KZYZmil+I0rSYSyPXA3vNbA2DgL3b3e8zsx8Cd5rZXwNPAHeE6e8A/tHMlhm0LK+toO6TaIGWqygs570cL7sxT3qe7IGMKpdtF9ebfCtvmvdYRkjmQ7tL83hiYLr708BFBeNfZLA/Mz/+V8A1pVQnjaryW6NiQ7NsfTmiPMv7LDvgujiv9eUb8jZ1teqy+8Xq1pcvr5i2e171B1QX5rcCU04y7hcUy259NBFcXWv1TNJ0UHWppalryeVNk8Kr7A2vyUv7mg6RvulKaCowBWiu1VV3aPahK56ytoemAlPe1FSQ1BWabd9Y264LH1QKTEmi1VVXaDb9Pvuu7V3z1gXmpC9+kOmkNM+qDM2U3qc0szzKuAKpdYE56ROqy5dlVSWlVleVoZnS++yzNn+PZ+sCM4Y2jDgpdMWLlL1Bpfo++6yp82/nfd3WBea4jaiMGdIXfbmmu40190nblk/rTlxXIJZn2nlZ57wv43pktSzT1vQVX7NoXQtT5temFXRo1uuiJW1tWw8VmJK0Wb5Ps0vXLvdFWz7gFJgdlz9roC0rZl5saObDUmdNpK9NR81btw9zlDZ2M+tUxvccpjKPJ21YKdQo3dSZwNRGEqeMLwBuQj4kp60llbCXYm05AKQuubRCdiOa9beFJG1t6JorMDtu3qDJanpFnvdH2ETmpcCUVlH4dVvqrUwFZsdV8cuPIlVKeT1TYEq0VD/1pZtSXN8UmB1Wxa8AitQh1a65ArPjFHIi5VFgdlTq57OJTDI8wyGlVqYCU0SSl0poKjA7qKrWZSorrfRLSvszFZgdU+VKpS6+NCWVdU+B2UGprFwiZWu6lanA7JCqD/Q0vbJKv6XQNVdgdkQdK5FartK0pkMzOjDNbI2ZPWFm94X755vZQTM7bGZ3mdnaMP60cH85PL65mtIlT4GmLwzugyZDc5oW5k3Aocz9LwO3uPsW4DVgZxi/E3jN3d8P3BKmK402iJPVdc5l6vM99fqkPE01DqIC08w2Ar8PfC3cN+BS4J4wyV7gqjC8PdwnPH6Z1bQmD8O0TxtOne9VLVhJSfZLh2PNu73EtjBvBb4A/CbcPwt43d3fCPdXgA1heANwFCA8fiJMX4qY5njfNuy+vd9RNB9kknnXkYmBaWafBo67+2PZ0UW1RDyWfd5dZrZkZkurq6uTajhpuOiN9+nLYvNf59+3lvUofVoH5O2XT9ax/se0MC8BPmNmR4A7GXTFbwXWmdnwN4E2AsfC8AqwCSA8fjrwav5J3X2Puy+6++LCwsLYAvLfGq4NYjSFpkh1Jgamu9/s7hvdfTNwLfCAu38WeBC4Oky2A7g3DO8L9wmPP+BKuFINW5Zl/vxE7OuKpKiuluY852H+GfB5M1tmsI/yjjD+DuCsMP7zwO75SpSsSftuqwxOfe5J6qo+5Wiqn9l194eAh8Lwi8DFBdP8CrimhNokp+wvBBbpoip/sldX+rSEwlIkXlUtzalamNIMhaXI9PKhWcb2oxZm4hSWIvMps7WpwExYamGpo+TSVmWFpgIzUUVh2fSln6kEt8gs1CXvoGwgphZQamFK2827TemgT0ImBWXTAdr064s0TYHZsGyrTYEkkjZ1yRPRhrBUl1z6Ti3MBrS1VdmmWkWqoMCsSVtDUkTeosCsyKjuq8JSpL0UmCUpCkiFo0i3KDCnpJ/GSEuq56xKNykwC8QcDdYG2jwdtZe6dSowy9qAFIYiUqRTgQnNh12Xj4bX9fvnsVKqRfqhlSeu6xcSm6GAkr5rXWBOCsr8N/rkh8c9T+z/jHqeUbVNeq6ibyGK+Z9Rtc5S/6gPoZjXnzRtTP3jXn/a9zftvJjn8Wne67SvO+61ppl20jyc5j3Msj5O81xF08bWOmnaMhparQtMKLelk5+B887QoVl/0THm9Sf92FnM4zHjJtVQxuPDWqepd9Jzm02362CeeRnz/0X3p3nOSV/GMuu04+qMqXHUtLHzM6aWaX7Yr2jasntFrdyHOS5Uxs2wouFZVsZJzxlTW/65hu8pP37S8zfx+DTvf5Z5HlPfvMunrPcyTa2jpp91HZpk3PyuehmMG67zdYvGzdMoal1gdnk/Wpffm0gXtLJLPsq8gdNkYCksRdLXuhZm1RRcIjJKp1qYUq2yDoiJtJUCU6Kp9S19p8AUEYmkwJRo6pJL3ykwJZq65NJ3CkwRkUhRgWlmR8zsGTN70syWwrgzzWy/mR0Ot2eE8WZmt5nZspk9bWZbq3wDUh91yaXvpmlh/p67X+jui+H+buCAu28BDoT7AFcAW8LfLuD2soqdRBt0tdQll76bp0u+HdgbhvcCV2XGf8MHHgbWmdn6OV4nmjZoEalSbGA68AMze8zMdoVx57r7SwDh9pwwfgNwNPO/K2GctJxa8NJ3sZdGXuLux8zsHGC/mf1ozLRFW9VJTb8QvLsAzjvvvMgypElqwUvfRbUw3f1YuD0OfA+4GHh52NUOt8fD5CvApsy/bwSOFTznHndfdPfFhYWF2d9BhlpA1dL8lb6bGJhm9m4ze+9wGPgU8CywD9gRJtsB3BuG9wHXh6Pl24ATw6571dQCqpbmr/RdTJf8XOB7oXVxCvAtd/9XM3sUuNvMdgI/Aa4J098PXAksA78Ebii9ahGRBkwMTHd/EfhwwfifAZcVjHfgxlKqExFJiK70ERGJpMAUEYmkwJRoOko+WmrzRvVUo1OBWcZCSW3BplZPKsr4jemypFKHVK91v+mT/znaosfdfeJKPG6a1DaAlOpJqRZIq56UagHVU4UkW5jD1sO4GTzrY9NMIyKSlWQLc9wJ0uNahjqxWkSqlGQLMy/b2pzUJRcRqUqSLcy8bDgqKEWkKa1oYYqIpECBWSDmoFOdUqhD82S01OYNpDl/UjFPPQrMAu6urn8BzZNiWl/6Q4FZILVPxFRonoymedMe83y4KTBboukNcriSqSV1stTO3Gh6XclLZb4MzTN/WnGUvG6pLeBU6kmlDlAt46RWD6RVk1qYIiI1UGCKiESyFJrKZvYL4Pmm6xjhbOCVposYQbXNRrXNJuXaoLz63ufuhb/MmMo+zOfdfbHpIoqY2ZJqm55qm41qm10d9alLLiISSYEpIhIplcDc03QBY6i22ai22ai22VVeXxIHfURE2iCVFqaISPIaD0wzu9zMnjezZTPb3cDrf93MjpvZs5lxZ5rZfjM7HG7PCOPNzG4LtT5tZlsrrm2TmT1oZofM7DkzuymV+szsHWb2iJk9FWr7Yhh/vpkdDLXdZWZrw/jTwv3l8PjmqmoLr7fGzJ4ws/tSqiu85hEze8bMnjSzpTCu8WUaXm+dmd1jZj8K691HU6jNzD4Q5tfw7+dm9rnaaxt+00oTf8Aa4AXgAmAt8BTwoZpr+BiwFXg2M+5vgN1heDfw5TB8JfAvgAHbgIMV17Ye2BqG3wv8GPhQCvWF13hPGD4VOBhe827g2jD+q8AfheE/Br4ahq8F7qp43n0e+BZwX7ifRF3hdY4AZ+fGNb5Mw+vtBf4wDK8F1qVSW6bGNcBPgffVXVvlb27CG/8o8P3M/ZuBmxuoY3MuMJ8H1ofh9QzOEwX4O+C6oulqqvNe4JOp1Qe8C3gc+AiDE4dPyS9f4PvAR8PwKWE6q6iejcAB4FLgvrDRNF5Xpr6iwGx8mQK/Dfxn/v2nUFuunk8B/9FEbU13yTcARzP3V8K4pp3r7i8BhNtzwvjG6g1dxYsYtOSSqC90e58EjgP7GfQWXnf3Nwpe/83awuMngLMqKu1W4AvAb8L9sxKpa8iBH5jZY2a2K4xLYZleAKwCfx92Z3zNzN6dSG1Z1wLfDsO11tZ0YBZ9z1LKh+0bqdfM3gN8B/icu/983KQF4yqrz91/7e4XMmjRXQx8cMzr11KbmX0aOO7uj2VHN11XziXuvhW4ArjRzD42Zto66zuFwe6p2939IuC/GXRzR6l93oV9z58B/mnSpAXj5q6t6cBcATZl7m8EjjVUS9bLZrYeINweD+Nrr9fMTmUQlt909++mVh+Au78OPMRgX9E6Mxtecpt9/TdrC4+fDrxaQTmXAJ8xsyPAnQy65bcmUNeb3P1YuD0OfI/Bh00Ky3QFWHH3g+H+PQwCNIXahq4AHnf3l8P9WmtrOjAfBbaEI5hrGTS19zVcEwxq2BGGdzDYdzgcf304ArcNODHsDlTBzAy4Azjk7l9JqT4zWzCzdWH4ncAngEPAg8DVI2ob1nw18ICHnUtlcveb3X2ju29msD494O6fbbquITN7t5m9dzjMYH/csySwTN39p8BRM/tAGHUZ8MMUasu4jre648Ma6qut6h20ETtwr2Rw9PcF4C8aeP1vAy8B/8fgU2kng31YB4DD4fbMMK0BfxtqfQZYrLi232XQjXgaeDL8XZlCfcDvAE+E2p4F/jKMvwB4BFhm0G06LYx/R7i/HB6/oIZl+3HeOkqeRF2hjqfC33PDdT6FZRpe70JgKSzXfwbOSKi2dwE/A07PjKu1Nl3pIyISqekuuYhIaygwRUQiKTBFRCIpMEVEIikwRUQiKTBFRCIpMEVEIikwRUQi/T+irVMX00MfAgAAAABJRU5ErkJggg==\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"imshow(img)"
]
},
{
"cell_type": "code",
"execution_count": 72,
"metadata": {},
"outputs": [],
"source": [
"k33 = cv2.getStructuringElement(cv2.MORPH_RECT, (3,3))\n",
"k55 = cv2.getStructuringElement(cv2.MORPH_RECT, (5,5))"
]
},
{
"cell_type": "code",
"execution_count": 73,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"imshow(cv2.dilate(img, k33))"
]
},
{
"cell_type": "code",
"execution_count": 75,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.image.AxesImage at 0x200af1bd400>"
]
},
"execution_count": 75,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"img_dilated = cv2.dilate(img, k55)\n",
"\n",
"plt.imshow(img_dilated, cmap='gray')"
]
},
{
"cell_type": "code",
"execution_count": 76,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.image.AxesImage at 0x200af03eb38>"
]
},
"execution_count": 76,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAUwAAAD8CAYAAAAc052eAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8QZhcZAAARw0lEQVR4nO3dXYxcZ33H8e+/ThxeG+dlE1m2gxNhIbgoibUKRqkQTQAlKcK5SKREqLGQK0ttKoGoRJ1WaoXUC+gFiSJVoRahNRWQpAEaK0oLlpOoaiVMNuQdE7ykFl45xA5JDC2ibeDfi3mGDOux9/HOnJkzs9+PtJpznnO85z874988z3mbyEwkSUv7rXEXIEmTwsCUpEoGpiRVMjAlqZKBKUmVDExJqtRIYEbE1RHxXETMR8TOJrYhSaMWwz4PMyJWAT8APggsAI8CN2Xm94a6IUkasSZ6mJcD85n5fGb+L3A3sLWB7UjSSJ3RwO9cBxzumV8A3nOqf3D++efnxo0bGyhFkk7PoUOHeOmll6LfsiYCs9+GThj3R8QOYAfARRddxNzcXAOlSNLpmZ2dPemyJobkC8CGnvn1wJHFK2XmrsyczczZmZmZBsqQpOFqIjAfBTZFxMURsRq4EdjTwHYkaaSGPiTPzNci4k+AbwKrgC9m5rPD3k4TIjp7E9pyB6e21dMWbfu7WM/JdWuBdtQzqCb2YZKZDwIPNvG7JWlcGgnMSdW2T8C21dMWbfu7WM/JZeZv9DInnYEpqVFtCvBBeS25JFUyMCWpkoEpSZUMTEmqZGBKUiWPkkta0qlOQO932tCpjoxP8sns9jAlqZKBKWkgk9ZLHIRDcklLWioUTyc0Jzlg7WFKUiUDU5IqOSSXNFJLHSWvuT3duI6028OU1Bptv7ORgSlp4nR7laM+gOSQXNJInSrk2n603R6mJFUyMCWpkoEpDSgiWn+wQsNhYEpDYmhOPwNTkioZmNKQTPI10qozNacVtenL67Wy+J6bHIPmhD1MSao0NT1MP+UlLWXQnLCHKUmVDExJqmRgSlKlqdmHKbXZJH9Tol63ZA8zIr4YEUcj4pmetnMjYm9EHCyP55T2iIg7ImI+Ip6KiM1NFi+1lZdLTqeaIfk/AFcvatsJ7MvMTcC+Mg9wDbCp/OwA7hxOmZI0fksGZmb+G/DyouatwO4yvRu4rqf9S9nxbWBNRKwdVrHSpMjM3xh6d+cdjk+25R70uTAzXwAojxeU9nXA4Z71FkqbJE28YR8l77fTpu9HakTsiIi5iJg7duzYkMuQ2s/9nJNnuYH5YneoXR6PlvYFYEPPeuuBI/1+QWbuyszZzJydmZlZZhmSNDrLDcw9wLYyvQ24v6f95nK0fAtwvDt0l6RJt+R5mBHxVeD9wPkRsQD8FfAZ4N6I2A78CLihrP4gcC0wD/wc+FgDNUtjNaw7Yy3+995xq/2WDMzMvOkki67qs24CtwxalCS1kVf6SC1hz7L9DEzpNI0q2Byit48335BazlOP2sPAlKRKDsmllnIo3j72MCWpkoEpSZUMTEmqZGBKUqWpOejjOWuSljLoV4XYw5SkSlPTw7RnKWkpg+aEPUxJqmRgSlIlA1OSKhmYklTJwJSW4JeVqcvAlKRKU3NakdQUT1lTlz1MSapkYEpSJQNTkioZmJJUycCUpEoGpiRVMjAlqZLnYUo6pUFvujtN7GFKUiUDU5IqOSSXdEr9huGLv0NrpQzbl+xhRsSGiHg4Ig5ExLMR8fHSfm5E7I2Ig+XxnNIeEXFHRMxHxFMRsbnpJyGpXbp3eJq2uzzVDMlfA/40M98JbAFuiYh3ATuBfZm5CdhX5gGuATaVnx3AnUOvWiM3jW9+LV9mTnVP8mSWDMzMfCEzv1umfwYcANYBW4HdZbXdwHVleivwpez4NrAmItYOvXKNjEGppXQDtBuii+enxWkd9ImIjcBlwH7gwsx8ATqhClxQVlsHHO75ZwulTZImWnVgRsRbgK8Bn8jMn55q1T5tJ3zMRMSOiJiLiLljx47VlqExOllvYVr3V2m42vAeGfS9WhWYEXEmnbD8cmZ+vTS/2B1ql8ejpX0B2NDzz9cDRxb/zszclZmzmTk7MzOzrOI1GouHVtMekNP83DSYmqPkAdwFHMjMz/Us2gNsK9PbgPt72m8uR8u3AMe7Q3dJGqdB963WnId5BfAHwNMR8URp+3PgM8C9EbEd+BFwQ1n2IHAtMA/8HPjYsipT6/Xu4JeWMg3vkyUDMzP/nf77JQGu6rN+ArcMWJdabBre+Kcy7c9Py+elkZJUyUsj1bjFB1DswWlS2cOUpEoGpk4w7NNqenuU9i41yRySqxGL72ZjUGoa2MOUpEr2MHUCe4NSfwamGmHoaho5JJekSgamJFVySK6xWCnfAaPpYg9TkirZw9RY2KvUJLKHKUmV7GGucO5LlOoZmFrR/MDQ6XBIvsIZElI9A1NT+f3RtVbq89byOCTXimdoqpY9TEmqNDWB6XdJS6oxSFZMTWBKUtOmZh+m+6Ek1RgkK6YmMDXZPB9Sk8AhuSRVMjAlqZJDcrWCw3BNAnuYklTJwJSkSgamJFVaMjAj4g0R8Z2IeDIino2IT5f2iyNif0QcjIh7ImJ1aT+rzM+X5RubfQo6HV4RJS1fTQ/zf4ArM/PdwKXA1RGxBfgscFtmbgJeAbaX9bcDr2Tm24HbynqSNPGWDMzs+K8ye2b5SeBK4L7Svhu4rkxvLfOU5VeFXZrWWMm3cpMGVbUPMyJWRcQTwFFgL/BD4NXMfK2ssgCsK9PrgMMAZflx4LxhFi1J41AVmJn5y8y8FFgPXA68s99q5bFfb/KELk1E7IiIuYiYO3bsWG29kjQ2p3WUPDNfBR4BtgBrIqJ74vt64EiZXgA2AJTlZwMv9/lduzJzNjNnZ2Zmlle9ploTB6i6v9ODX1qOmqPkMxGxpky/EfgAcAB4GLi+rLYNuL9M7ynzlOUPpTvNJE2Bmksj1wK7I2IVnYC9NzMfiIjvAXdHxF8DjwN3lfXvAv4xIubp9CxvbKBurQB+zqptlgzMzHwKuKxP+/N09mcubv8FcMNQqpOGLDMdimvZvPmGVhx7rlouL42UpEoGpiRVMjAlqZKBKUmVDExJqmRgSlpRBrnKa6oC08vdJDXJ8zAlrSiDnIc7VYHpCcmSmjRVQ3JJapKBKUmVDExJqmRgamJ4FoTGzcCcctN4d/HTeS7T9tw1XgbmCmJwSIMxMDVxPH1M4zJV52HqRL13GJ/0oFlO/ZP+nNUuBuYKYGhIw+GQXJIqGZiSVMnAlKRKBqYkVTIwJamSgSlJlQxMSapkYEpSJQNTkioZmJJUycCUpErVgRkRqyLi8Yh4oMxfHBH7I+JgRNwTEatL+1llfr4s39hM6dKJvP+lmnQ6PcyPAwd65j8L3JaZm4BXgO2lfTvwSma+HbitrCc1zqBU06oCMyLWA78PfKHMB3AlcF9ZZTdwXZneWuYpy68K38mSpkBtD/N24FPAr8r8ecCrmflamV8A1pXpdcBhgLL8eFlfapS3sVPTlgzMiPgwcDQzH+tt7rNqVizr/b07ImIuIuaOHTtWVaxOzn13HZlpcKoxNT3MK4CPRMQh4G46Q/HbgTUR0b0B8XrgSJleADYAlOVnAy8v/qWZuSszZzNzdmZmZqAnodcZmlJzlgzMzLw1M9dn5kbgRuChzPwo8DBwfVltG3B/md5T5inLH0o/8hvnn1hq3iDnYf4Z8MmImKezj/Ku0n4XcF5p/ySwc7ASVcvhqNSs0/pOn8x8BHikTD8PXN5nnV8ANwyhNklqFa/0kaRKBqYkVTIwJamS30suacXoPe1uOQdIDcwJMuiLLWkwBqakFWPQjoaBOUHsVUrj5UEfSapkYEpSJQNTkioZmJJUycCUpEoGpiRVMjA10bzTvEbJwNTEMig1agamJFXySp8h83rv0fHvq1GzhylJlexhtoC9Uml0uv/fvL3bgIYZXAafNH0MzCFbTlBmpkd8pREZpDNjYLaEPVKp/Tzo08PQknQq9jAXMTQlnYw9TEmqZGBKUiUDU5IqGZiSVMnAlKRKBqYkVaoKzIg4FBFPR8QTETFX2s6NiL0RcbA8nlPaIyLuiIj5iHgqIjY3+QQkaVROp4f5e5l5aWbOlvmdwL7M3ATsK/MA1wCbys8O4M5hFStJ4zTIkHwrsLtM7wau62n/UnZ8G1gTEWsH2I4ktUJtYCbwrYh4LCJ2lLYLM/MFgPJ4QWlfBxzu+bcLpU2SJlrtpZFXZOaRiLgA2BsR3z/Fuv1uu3PC9YYleHcAXHTRRZVlSNL4VPUwM/NIeTwKfAO4HHixO9Quj0fL6gvAhp5/vh440ud37srM2cycnZmZWf4zkKQRWTIwI+LNEfHW7jTwIeAZYA+wray2Dbi/TO8Bbi5Hy7cAx7tDd0maZDVD8guBb5Qb3J4BfCUz/zUiHgXujYjtwI+AG8r6DwLXAvPAz4GPDb1qSRqDJQMzM58H3t2n/SfAVX3aE7hlKNVJUot4pY8kVTIwJamSgSlJlQxMSao0cd/pM8iXsGt6tOl90KZagN/4yuY21NS2v88gJraH6fd4Sxq1iethZqZhqVb1VtpUC1hPkyYuMGG6XgBJk2Nih+SSNGoGpiRVMjAlqZKBKUmVDExJqmRgSlIlA1OSKhmYklTJwJSkStGGq2Yi4mfAc+Ou4yTOB14adxEnYW3LY23L0+baYHj1vS0z+34zY1sujXwuM2fHXUQ/ETFnbafP2pbH2pZvFPU5JJekSgamJFVqS2DuGncBp2Bty2Nty2Nty9d4fa046CNJk6AtPUxJar2xB2ZEXB0Rz0XEfETsHMP2vxgRRyPimZ62cyNib0QcLI/nlPaIiDtKrU9FxOaGa9sQEQ9HxIGIeDYiPt6W+iLiDRHxnYh4stT26dJ+cUTsL7XdExGrS/tZZX6+LN/YVG1le6si4vGIeKBNdZVtHoqIpyPiiYiYK21jf03L9tZExH0R8f3yvntvG2qLiHeUv1f356cR8YmR15aZY/sBVgE/BC4BVgNPAu8acQ3vAzYDz/S0/Q2ws0zvBD5bpq8F/gUIYAuwv+Ha1gKby/RbgR8A72pDfWUbbynTZwL7yzbvBW4s7Z8H/qhM/zHw+TJ9I3BPw3+7TwJfAR4o862oq2znEHD+oraxv6Zle7uBPyzTq4E1bamtp8ZVwI+Bt426tsaf3BJP/L3AN3vmbwVuHUMdGxcF5nPA2jK9ls55ogB/B9zUb70R1Xk/8MG21Qe8Cfgu8B46Jw6fsfj1Bb4JvLdMn1HWi4bqWQ/sA64EHij/acZeV099/QJz7K8p8NvAfy5+/m2obVE9HwL+Yxy1jXtIvg443DO/UNrG7cLMfAGgPF5Q2sdWbxkqXkanJ9eK+sqw9wngKLCXzmjh1cx8rc/2f11bWX4cOK+h0m4HPgX8qsyf15K6uhL4VkQ8FhE7SlsbXtNLgGPA35fdGV+IiDe3pLZeNwJfLdMjrW3cgdnv6x/bfNh+LPVGxFuArwGfyMyfnmrVPm2N1ZeZv8zMS+n06C4H3nmK7Y+ktoj4MHA0Mx/rbR53XYtckZmbgWuAWyLifadYd5T1nUFn99SdmXkZ8N90hrknM/K/Xdn3/BHgn5ZatU/bwLWNOzAXgA098+uBI2OqpdeLEbEWoDweLe0jrzcizqQTll/OzK+3rT6AzHwVeITOvqI1EdG95LZ3+7+urSw/G3i5gXKuAD4SEYeAu+kMy29vQV2/lplHyuNR4Bt0Pmza8JouAAuZub/M30cnQNtQW9c1wHcz88UyP9Laxh2YjwKbyhHM1XS62nvGXBN0athWprfR2XfYbb+5HIHbAhzvDgeaEBEB3AUcyMzPtam+iJiJiDVl+o3AB4ADwMPA9SeprVvz9cBDWXYuDVNm3pqZ6zNzI53300OZ+dFx19UVEW+OiLd2p+nsj3uGFrymmflj4HBEvKM0XQV8rw219biJ14fj3RpGV1vTO2grduBeS+fo7w+BvxjD9r8KvAD8H51Ppe109mHtAw6Wx3PLugH8ban1aWC24dp+l84w4ingifJzbRvqA34HeLzU9gzwl6X9EuA7wDydYdNZpf0NZX6+LL9kBK/t+3n9KHkr6ip1PFl+nu2+59vwmpbtXQrMldf1n4FzWlTbm4CfAGf3tI20Nq/0kaRK4x6SS9LEMDAlqZKBKUmVDExJqmRgSlIlA1OSKhmYklTJwJSkSv8P2klzWZimXLkAAAAASUVORK5CYII=\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"img_erode = cv2.erode(img_dilated, k55)\n",
"\n",
"plt.imshow(img_erode, cmap='gray')"
]
},
{
"cell_type": "code",
"execution_count": 84,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.image.AxesImage at 0x200af2b8a58>"
]
},
"execution_count": 84,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"img_crop = img_erode[60:500, 50:700]\n",
"\n",
"plt.imshow(img_crop, cmap='gray')"
]
},
{
"cell_type": "code",
"execution_count": 85,
"metadata": {},
"outputs": [],
"source": [
"contours, hierarchy = cv2.findContours(img_crop, cv2.RETR_LIST, cv2.CHAIN_APPROX_NONE)"
]
},
{
"cell_type": "code",
"execution_count": 86,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"(38,\n",
" [31,\n",
" 27,\n",
" 29,\n",
" 26,\n",
" 24,\n",
" 24,\n",
" 26,\n",
" 26,\n",
" 34,\n",
" 29,\n",
" 34,\n",
" 22,\n",
" 24,\n",
" 27,\n",
" 24,\n",
" 25,\n",
" 25,\n",
" 25,\n",
" 25,\n",
" 26,\n",
" 27,\n",
" 25,\n",
" 25,\n",
" 26,\n",
" 29,\n",
" 26,\n",
" 27,\n",
" 23,\n",
" 25,\n",
" 23,\n",
" 26,\n",
" 25,\n",
" 25,\n",
" 23,\n",
" 22,\n",
" 27,\n",
" 26,\n",
" 2176])"
]
},
"execution_count": 86,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"len(contours), [len(c) for c in contours]"
]
},
{
"cell_type": "code",
"execution_count": 87,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"for contour in contours:\n",
" _contour=contour.squeeze(1)\n",
" plt.plot(_contour[:,0],_contour[:,1])\n",
"plt.gca().invert_yaxis()\n"
]
},
{
"cell_type": "code",
"execution_count": 94,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"center_list = []\n",
"for contour in contours:\n",
" if len(contour) < 100:\n",
" center = contour.mean(0)[0]\n",
" center_list.append(center)\n",
"\n",
"center_arr = np.array(center_list)\n",
"plt.scatter(center_arr[:,0], center_arr[:,1])\n",
"plt.gca().invert_yaxis()\n"
]
},
{
"cell_type": "code",
"execution_count": 105,
"metadata": {},
"outputs": [],
"source": [
"first = [-2, -0.0]\n",
"last = [4., 2.0]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"$$\n",
"\\begin{bmatrix}\n",
"1 & x_1 \\\\\n",
"1 & x_2\n",
"\\end{bmatrix}\n",
"\\begin{bmatrix}\n",
"\\alpha \\\\\n",
"\\beta\n",
"\\end{bmatrix}\n",
"=\n",
"\\begin{bmatrix}\n",
"y_1 \\\\\n",
"y_2\n",
"\\end{bmatrix}\n",
"$$"
]
},
{
"cell_type": "code",
"execution_count": 113,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"73"
]
},
"execution_count": 113,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"center_arr.argmin()"
]
},
{
"cell_type": "code",
"execution_count": 114,
"metadata": {},
"outputs": [],
"source": [
"first_idx = center_arr[:,0].argmin()\n",
"last_idx = center_arr[:,0].argmax()"
]
},
{
"cell_type": "code",
"execution_count": 116,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"(-2.443244739107085, 0.010905227708190177)"
]
},
"execution_count": 116,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"Ax = np.array([[1., center_arr[first_idx, 0]], \n",
" [1., center_arr[last_idx, 0]]])\n",
"yx = np.array([first[0], last[0]])\n",
"\n",
"alphax, betax = np.linalg.inv(Ax) @ yx\n",
"alphax, betax"
]
},
{
"cell_type": "code",
"execution_count": 117,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"(3.1070172929846795, -0.007643035715166249)"
]
},
"execution_count": 117,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"Ay = np.array([[1., center_arr[first_idx, 1]], \n",
" [1., center_arr[last_idx, 1]]])\n",
"yy = np.array([first[1], last[1]])\n",
"\n",
"alphay, betay = np.linalg.inv(Ay) @ yy\n",
"alphay, betay"
]
},
{
"cell_type": "code",
"execution_count": 118,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.collections.PathCollection at 0x200af07c908>"
]
},
"execution_count": 118,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"plt.scatter(alphax + betax*center_arr[:,0], alphay + betay * center_arr[:,1])\n",
"#plt.gca().invert_yaxis()\n"
]
},
{
"cell_type": "code",
"execution_count": 119,
"metadata": {},
"outputs": [],
"source": [
"dat = np.c_[alphax + betax*center_arr[:,0], alphay + betay * center_arr[:,1]]"
]
},
{
"cell_type": "code",
"execution_count": 120,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"(37, 2)"
]
},
"execution_count": 120,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"dat.shape"
]
},
{
"cell_type": "code",
"execution_count": 121,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.collections.PathCollection at 0x200af360320>"
]
},
"execution_count": 121,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"plt.scatter(dat[:,0], dat[:,1])"
]
},
{
"cell_type": "code",
"execution_count": 191,
"metadata": {},
"outputs": [],
"source": [
"import json\n",
"\n",
"with open(\"dat.json\", 'w') as f:\n",
" json.dump(dat.tolist(), f)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"original paper, \n",
"MacKay, David JC. \"Bayesian interpolation.\" Neural computation 4.3 (1992): 415-447,\n",
"use cauchy function as radial basis function, namely inverse quadratic RBF:\n",
"\n",
"$$\n",
"\\phi(r) = \\frac{1}{1+(\\epsilon r)^2}\n",
"$$\n",
"> The dataset is interpolated using a radial basis function model with a basic of 60 equally spaced Cauchy functions, all with radius 0.2975\n",
"\n",
"function approximation using radial basis function:\n",
"$$\n",
"y(x) = \\sum_{i=1}^N w_i \\phi(||x - x_i||)\n",
"$$"
]
},
{
"cell_type": "code",
"execution_count": 130,
"metadata": {},
"outputs": [],
"source": [
"epsilon = 0.2975\n",
"def phi(r):\n",
" return 1./(1. + (epsilon*r)**2)\n",
"\n",
"x_anchor = np.linspace(-2,4,60)\n",
"x = np.linspace(-2.5,4.5,300)\n",
"dist = np.abs(x[:, np.newaxis] - x_anchor[np.newaxis])\n",
"\n",
"w = np.random.randn(60)\n",
"y = phi(dist) @ w"
]
},
{
"cell_type": "code",
"execution_count": 131,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"[<matplotlib.lines.Line2D at 0x200b0653080>]"
]
},
"execution_count": 131,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"plt.plot(x,y)\n",
"plt.plot(x_anchor, w, 'o')"
]
},
{
"cell_type": "code",
"execution_count": 132,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"[<matplotlib.lines.Line2D at 0x200b06d6358>]"
]
},
"execution_count": 132,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"w = np.random.randn(60)\n",
"y = phi(dist) @ w\n",
"plt.plot(x,y)\n",
"plt.plot(x_anchor, w, 'o')"
]
},
{
"cell_type": "code",
"execution_count": 134,
"metadata": {},
"outputs": [],
"source": [
"from scipy import optimize"
]
},
{
"cell_type": "code",
"execution_count": 137,
"metadata": {},
"outputs": [],
"source": [
"x_obs = dat[:,0]\n",
"y_obs = dat[:,1]\n",
"\n",
"dist_obs = np.abs(x_obs[:, np.newaxis] - x_anchor[np.newaxis])\n",
"dist_phi_obs = phi(dist_obs)"
]
},
{
"cell_type": "code",
"execution_count": 146,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
" fun: 4.235308423650117\n",
" hess_inv: array([[ 8.81541715e-01, -1.10011773e-01, -1.05072329e-01, ...,\n",
" -4.73026451e-03, -5.19412349e-03, -1.25539241e-02],\n",
" [-1.10011773e-01, 8.93236468e-01, -9.63543240e-02, ...,\n",
" -7.49842441e-03, -1.32449216e-02, -8.57974875e-03],\n",
" [-1.05072329e-01, -9.63543240e-02, 9.04113064e-01, ...,\n",
" -4.02001481e-04, 2.54048685e-03, -8.92364772e-03],\n",
" ...,\n",
" [-4.73026451e-03, -7.49842441e-03, -4.02001481e-04, ...,\n",
" 8.95376388e-01, -1.18057867e-01, -1.14156609e-01],\n",
" [-5.19412349e-03, -1.32449216e-02, 2.54048685e-03, ...,\n",
" -1.18057867e-01, 8.59327427e-01, -1.23141902e-01],\n",
" [-1.25539241e-02, -8.57974875e-03, -8.92364772e-03, ...,\n",
" -1.14156609e-01, -1.23141902e-01, 8.62725502e-01]])\n",
" jac: array([1.78813934e-06, 1.96695328e-06, 1.84774399e-06, 1.84774399e-06,\n",
" 2.08616257e-06, 2.26497650e-06, 2.02655792e-06, 2.38418579e-06,\n",
" 2.26497650e-06, 2.50339508e-06, 2.62260437e-06, 2.68220901e-06,\n",
" 2.80141830e-06, 3.15904617e-06, 3.27825546e-06, 3.09944153e-06,\n",
" 3.33786011e-06, 3.69548798e-06, 3.81469727e-06, 3.99351120e-06,\n",
" 4.23192978e-06, 4.35113907e-06, 4.58955765e-06, 4.88758087e-06,\n",
" 4.88758087e-06, 5.06639481e-06, 4.94718552e-06, 5.18560410e-06,\n",
" 5.12599945e-06, 4.76837158e-06, 4.94718552e-06, 4.76837158e-06,\n",
" 4.82797623e-06, 4.29153442e-06, 4.11272049e-06, 3.93390656e-06,\n",
" 3.45706940e-06, 3.15904617e-06, 3.33786011e-06, 2.56299973e-06,\n",
" 2.38418579e-06, 2.32458115e-06, 1.96695328e-06, 2.02655792e-06,\n",
" 1.60932541e-06, 1.78813934e-06, 2.08616257e-06, 2.02655792e-06,\n",
" 2.20537186e-06, 2.50339508e-06, 2.74181366e-06, 2.98023224e-06,\n",
" 3.45706940e-06, 3.81469727e-06, 3.93390656e-06, 4.52995300e-06,\n",
" 4.70876694e-06, 5.36441803e-06, 5.90085983e-06, 5.96046448e-06])\n",
" message: 'Optimization terminated successfully.'\n",
" nfev: 1488\n",
" nit: 19\n",
" njev: 24\n",
" status: 0\n",
" success: True\n",
" x: array([-5.93741752e-02, -5.72572462e-02, -5.48561347e-02, -5.21839308e-02,\n",
" -4.92590376e-02, -4.61052921e-02, -4.27515090e-02, -3.92301304e-02,\n",
" -3.55781761e-02, -3.18344023e-02, -2.80395108e-02, -2.42339722e-02,\n",
" -2.04567222e-02, -1.67435979e-02, -1.31261232e-02, -9.62945522e-03,\n",
" -6.27109753e-03, -3.06045493e-03, 1.98946453e-06, 2.92563697e-03,\n",
" 5.72875530e-03, 8.43806341e-03, 1.10878231e-02, 1.37179166e-02,\n",
" 1.63716366e-02, 1.90942566e-02, 2.19295378e-02, 2.49182863e-02,\n",
" 2.80947068e-02, 3.14854576e-02, 3.51076152e-02, 3.89664175e-02,\n",
" 4.30559588e-02, 4.73576219e-02, 5.18420230e-02, 5.64686306e-02,\n",
" 6.11878648e-02, 6.59433424e-02, 7.06736911e-02, 7.53140756e-02,\n",
" 7.98008927e-02, 8.40717262e-02, 8.80684562e-02, 9.17395360e-02,\n",
" 9.50401231e-02, 9.79350559e-02, 1.00397499e-01, 1.02410229e-01,\n",
" 1.03965793e-01, 1.05065299e-01, 1.05718065e-01, 1.05940589e-01,\n",
" 1.05755724e-01, 1.05190845e-01, 1.04277263e-01, 1.03049363e-01,\n",
" 1.01542143e-01, 9.97920129e-02, 9.78343836e-02, 9.57035634e-02])"
]
},
"execution_count": 146,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"def f(w):\n",
" y_pred = dist_phi_obs @ w\n",
" return np.linalg.norm(y_obs - y_pred) + np.linalg.norm(w)\n",
"\n",
"res = optimize.minimize(f, np.random.randn(60))\n",
"res"
]
},
{
"cell_type": "code",
"execution_count": 147,
"metadata": {},
"outputs": [],
"source": [
"w = res.x"
]
},
{
"cell_type": "code",
"execution_count": 150,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"[<matplotlib.lines.Line2D at 0x200b10def28>]"
]
},
"execution_count": 150,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"y = phi(dist) @ w\n",
"plt.plot(x,y)\n",
"plt.plot(x_anchor, w, 'o')\n",
"plt.plot(x_obs, y_obs, 'o')"
]
},
{
"cell_type": "code",
"execution_count": 154,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
" fun: 3.7331470929354214\n",
" hess_inv: array([[5.01357361, 3.06869342, 2.32051937, ..., 0.79957649, 0.83594203,\n",
" 1.32280719],\n",
" [3.06869342, 3.5570208 , 2.0015183 , ..., 0.72679057, 1.02565489,\n",
" 1.21726038],\n",
" [2.32051937, 2.0015183 , 2.6060131 , ..., 0.65207714, 0.95942826,\n",
" 1.09367469],\n",
" ...,\n",
" [0.79957649, 0.72679057, 0.65207714, ..., 1.8975736 , 1.13794941,\n",
" 1.40389849],\n",
" [0.83594203, 1.02565489, 0.95942826, ..., 1.13794941, 2.75107489,\n",
" 1.79637275],\n",
" [1.32280719, 1.21726038, 1.09367469, ..., 1.40389849, 1.79637275,\n",
" 3.19530106]])\n",
" jac: array([-1.72853470e-06, -2.05636024e-06, -2.17556953e-06, -2.20537186e-06,\n",
" -2.17556953e-06, -1.99675560e-06, -1.99675560e-06, -1.87754631e-06,\n",
" -1.75833702e-06, -1.66893005e-06, -1.31130219e-06, -1.22189522e-06,\n",
" -9.23871994e-07, -4.17232513e-07, 2.98023224e-08, 1.78813934e-07,\n",
" 5.36441803e-07, 8.94069672e-07, 1.16229057e-06, 1.25169754e-06,\n",
" 1.57952309e-06, 1.69873238e-06, 1.57952309e-06, 1.87754631e-06,\n",
" 1.69873238e-06, 1.93715096e-06, 1.57952309e-06, 2.20537186e-06,\n",
" 2.53319740e-06, 2.62260437e-06, 2.50339508e-06, 3.09944153e-06,\n",
" 3.42726707e-06, 3.81469727e-06, 4.35113907e-06, 4.23192978e-06,\n",
" 4.94718552e-06, 5.03659248e-06, 5.54323196e-06, 5.99026680e-06,\n",
" 6.34789467e-06, 6.64591789e-06, 6.76512718e-06, 7.18235970e-06,\n",
" 7.51018524e-06, 7.39097595e-06, 7.74860382e-06, 7.30156898e-06,\n",
" 8.07642937e-06, 7.77840614e-06, 7.71880150e-06, 7.27176666e-06,\n",
" 7.62939453e-06, 7.48038292e-06, 7.30156898e-06, 7.27176666e-06,\n",
" 7.36117363e-06, 7.15255737e-06, 6.97374344e-06, 7.09295273e-06])\n",
" message: 'Optimization terminated successfully.'\n",
" nfev: 2294\n",
" nit: 33\n",
" njev: 37\n",
" status: 0\n",
" success: True\n",
" x: array([-0.33760384, -0.30213991, -0.26427914, -0.22445033, -0.18317104,\n",
" -0.14104665, -0.09876312, -0.05706754, -0.01675903, 0.02133504,\n",
" 0.05639169, 0.08760514, 0.11424253, 0.13565666, 0.15132316,\n",
" 0.16087505, 0.16413553, 0.1611214 , 0.15206854, 0.13743098,\n",
" 0.11788173, 0.09428039, 0.06765954, 0.03919129, 0.01011632,\n",
" -0.01827069, -0.04471598, -0.0680157 , -0.08712561, -0.10116775,\n",
" -0.10948127, -0.11164411, -0.10752024, -0.09723082, -0.08115933,\n",
" -0.05993792, -0.03438232, -0.00550781, 0.0255811 , 0.05769527,\n",
" 0.08963521, 0.12023739, 0.14841769, 0.17321776, 0.19382357,\n",
" 0.20959267, 0.2200839 , 0.22502743, 0.22437372, 0.21820242,\n",
" 0.20679262, 0.19053715, 0.16996084, 0.14564405, 0.11824509,\n",
" 0.08844499, 0.05693469, 0.02437798, -0.0085849 , -0.04136265])"
]
},
"execution_count": 154,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"def f(w):\n",
" y_pred = dist_phi_obs @ w\n",
" return np.linalg.norm(y_obs - y_pred) + np.linalg.norm(w) * 0.1\n",
"\n",
"res = optimize.minimize(f, np.random.randn(60))\n",
"res"
]
},
{
"cell_type": "code",
"execution_count": 155,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"[<matplotlib.lines.Line2D at 0x200b1236668>]"
]
},
"execution_count": 155,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"w = res.x\n",
"\n",
"y = phi(dist) @ w\n",
"plt.plot(x,y)\n",
"plt.plot(x_anchor, w, 'o')\n",
"plt.plot(x_obs, y_obs, 'o')"
]
},
{
"cell_type": "code",
"execution_count": 156,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
" fun: 3.0104599534768703\n",
" hess_inv: array([[694.39650901, 441.00947279, 218.72298175, ..., -35.75484779,\n",
" 175.97699347, 274.08735396],\n",
" [441.00947279, 295.21461483, 157.5910319 , ..., 22.33724786,\n",
" 67.3460828 , 156.71018716],\n",
" [218.72298175, 157.5910319 , 95.06197413, ..., 46.01914646,\n",
" -6.98896692, 57.18303199],\n",
" ...,\n",
" [-35.75484779, 22.33724786, 46.01914646, ..., 238.46610157,\n",
" -70.51268556, 86.1894192 ],\n",
" [175.97699347, 67.3460828 , -6.98896692, ..., -70.51268556,\n",
" 284.19827993, 288.2352633 ],\n",
" [274.08735396, 156.71018716, 57.18303199, ..., 86.1894192 ,\n",
" 288.2352633 , 423.6155548 ]])\n",
" jac: array([ 1.19209290e-06, 1.19209290e-06, 1.13248825e-06, 8.04662704e-07,\n",
" 7.74860382e-07, 6.25848770e-07, 7.45058060e-07, 9.83476639e-07,\n",
" 6.25848770e-07, 1.01327896e-06, 1.34110451e-06, 9.53674316e-07,\n",
" 1.31130219e-06, 7.45058060e-07, 8.34465027e-07, 1.16229057e-06,\n",
" 9.53674316e-07, 1.04308128e-06, 8.94069672e-07, 8.64267349e-07,\n",
" 3.27825546e-07, 1.43051147e-06, 8.64267349e-07, 1.13248825e-06,\n",
" 8.64267349e-07, 5.96046448e-07, 8.04662704e-07, 2.98023224e-07,\n",
" 8.34465027e-07, 3.87430191e-07, 5.96046448e-07, 5.66244125e-07,\n",
" 2.38418579e-07, -1.49011612e-07, 1.49011612e-07, -5.66244125e-07,\n",
" -1.78813934e-07, 8.94069672e-08, -2.98023224e-08, -2.08616257e-07,\n",
" -1.78813934e-07, -2.68220901e-07, -4.76837158e-07, -5.36441803e-07,\n",
" -5.96046448e-07, -2.68220901e-07, -5.96046448e-07, -5.96046448e-08,\n",
" -4.47034836e-07, -8.64267349e-07, -9.53674316e-07, -1.04308128e-06,\n",
" -1.04308128e-06, -8.34465027e-07, -6.25848770e-07, -1.10268593e-06,\n",
" -1.01327896e-06, -6.25848770e-07, -1.49011612e-06, -1.19209290e-06])\n",
" message: 'Optimization terminated successfully.'\n",
" nfev: 4092\n",
" nit: 63\n",
" njev: 66\n",
" status: 0\n",
" success: True\n",
" x: array([ 6.59752233, 3.79007103, 1.26554126, -0.91426064, -2.69283451,\n",
" -4.03093549, -4.90154105, -5.29678068, -5.23137029, -4.73247037,\n",
" -3.85626314, -2.67515505, -1.27095114, 0.25342755, 1.79865422,\n",
" 3.2587973 , 4.53258266, 5.53587673, 6.19738432, 6.47111017,\n",
" 6.33343241, 5.79568972, 4.88079836, 3.65391376, 2.18925274,\n",
" 0.58207028, -1.06234348, -2.64238074, -4.05296541, -5.21274341,\n",
" -6.04684232, -6.51137139, -6.58484389, -6.27099413, -5.59645897,\n",
" -4.61866466, -3.39979326, -2.02515221, -0.58322212, 0.83897905,\n",
" 2.15963432, 3.30647315, 4.22195711, 4.86712573, 5.21977347,\n",
" 5.27802917, 5.05305374, 4.57871155, 3.89102695, 3.04284491,\n",
" 2.0903942 , 1.08948634, 0.09567704, -0.84036351, -1.67518742,\n",
" -2.37576649, -2.91158694, -3.26695338, -3.43924956, -3.42184333])"
]
},
"execution_count": 156,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"def f(w):\n",
" y_pred = dist_phi_obs @ w\n",
" return np.linalg.norm(y_obs - y_pred) + np.linalg.norm(w) * 0.01\n",
"\n",
"res = optimize.minimize(f, np.random.randn(60))\n",
"res"
]
},
{
"cell_type": "code",
"execution_count": 158,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"[<matplotlib.lines.Line2D at 0x200b12ea9e8>]"
]
},
"execution_count": 158,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"w = res.x\n",
"\n",
"y = phi(dist) @ w\n",
"plt.plot(x,y)\n",
"plt.plot(x_anchor, w, 'o')\n",
"plt.plot(x_obs, y_obs, 'o')\n",
"plt.show()\n",
"\n",
"plt.plot(x,y)\n",
"#plt.plot(x_anchor, w, 'o')\n",
"plt.plot(x_obs, y_obs, 'o')\n",
"plt.show()"
]
},
{
"cell_type": "code",
"execution_count": 159,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
" fun: 2.0504574035009107\n",
" hess_inv: array([[20376.03769528, 8108.03081549, -1316.9407302 , ...,\n",
" -2178.86588261, -1328.04179134, 477.26708823],\n",
" [ 8108.03080342, 3462.82948994, -194.92334607, ...,\n",
" -547.49234682, -1010.2639735 , -1405.73978131],\n",
" [-1316.94074977, -194.92335472, 547.97933337, ...,\n",
" 577.86227437, -652.52823011, -2397.59599471],\n",
" ...,\n",
" [-2178.86589684, -547.49235371, 577.86227343, ...,\n",
" 800.58693477, -207.61571653, -1708.56267984],\n",
" [-1328.04169964, -1010.26393397, -652.52823177, ...,\n",
" -207.6157214 , 4918.80428046, 11708.85281337],\n",
" [ 477.26732233, -1405.7396791 , -2397.59599692, ...,\n",
" -1708.56269092, 11708.85280604, 29746.27344335]])\n",
" jac: array([7.42077827e-06, 7.95722008e-06, 7.89761543e-06, 8.10623169e-06,\n",
" 8.19563866e-06, 8.55326653e-06, 8.43405724e-06, 8.28504562e-06,\n",
" 8.70227814e-06, 8.79168510e-06, 8.82148743e-06, 8.91089439e-06,\n",
" 8.94069672e-06, 8.88109207e-06, 8.85128975e-06, 9.00030136e-06,\n",
" 9.20891762e-06, 9.38773155e-06, 9.20891762e-06, 9.17911530e-06,\n",
" 9.17911530e-06, 9.53674316e-06, 8.76188278e-06, 9.17911530e-06,\n",
" 9.26852226e-06, 8.82148743e-06, 8.82148743e-06, 8.07642937e-06,\n",
" 8.82148743e-06, 8.82148743e-06, 8.52346420e-06, 7.83801079e-06,\n",
" 7.95722008e-06, 8.16583633e-06, 7.86781311e-06, 7.15255737e-06,\n",
" 7.53998756e-06, 6.88433647e-06, 6.52670860e-06, 6.31809235e-06,\n",
" 6.61611557e-06, 5.72204590e-06, 5.63263893e-06, 5.21540642e-06,\n",
" 5.39422035e-06, 4.85777855e-06, 4.58955765e-06, 4.58955765e-06,\n",
" 3.99351120e-06, 3.87430191e-06, 3.57627869e-06, 3.24845314e-06,\n",
" 3.09944153e-06, 2.95042992e-06, 2.62260437e-06, 2.14576721e-06,\n",
" 2.20537186e-06, 2.08616257e-06, 1.84774399e-06, 1.81794167e-06])\n",
" message: 'Optimization terminated successfully.'\n",
" nfev: 6634\n",
" nit: 99\n",
" njev: 107\n",
" status: 0\n",
" success: True\n",
" x: array([ 18.49056188, 22.85938644, 22.29383933, 17.6844915 ,\n",
" 9.60002532, -0.52734553, -11.59138636, -22.35774314,\n",
" -31.44303732, -37.70219481, -40.43103522, -39.06442199,\n",
" -33.47527854, -24.01182021, -11.40277637, 3.06850571,\n",
" 18.11280945, 32.34821073, 44.14326734, 52.19227488,\n",
" 55.59016181, 53.89643183, 46.89272059, 35.31766817,\n",
" 20.06190903, 2.63268781, -15.32053152, -32.16234886,\n",
" -45.92908575, -55.61208882, -60.10981824, -59.05876685,\n",
" -52.55786977, -41.1866605 , -26.31237638, -9.36885377,\n",
" 8.12014804, 24.25336865, 37.73094305, 47.25115706,\n",
" 52.15879675, 52.05706675, 47.29787487, 38.46411824,\n",
" 26.63127936, 13.02536851, -1.0422617 , -14.15797307,\n",
" -25.28204221, -33.33514629, -37.82524018, -38.41568927,\n",
" -35.20107932, -28.55647722, -19.08693464, -7.62783438,\n",
" 5.02353972, 17.8947923 , 30.11921501, 40.98493739])"
]
},
"execution_count": 159,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"def f(w):\n",
" y_pred = dist_phi_obs @ w\n",
" return np.linalg.norm(y_obs - y_pred) + np.linalg.norm(w) * 0.001\n",
"\n",
"res = optimize.minimize(f, np.random.randn(60))\n",
"res"
]
},
{
"cell_type": "code",
"execution_count": 161,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"w = res.x\n",
"\n",
"y = phi(dist) @ w\n",
"plt.plot(x,y)\n",
"plt.plot(x_anchor, w, 'o')\n",
"plt.plot(x_obs, y_obs, 'o')\n",
"plt.show()\n",
"\n",
"plt.plot(x,y)\n",
"#plt.plot(x_anchor, w, 'o')\n",
"plt.plot(x_obs, y_obs, 'o')\n",
"plt.show()\n"
]
},
{
"cell_type": "code",
"execution_count": 162,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
" fun: 1.2290933361715748\n",
" hess_inv: array([[ 96.3743743 , -44.7965568 , -108.89443676, ..., -10.74883051,\n",
" 17.92242467, 65.02081896],\n",
" [ -44.79655628, 452.83354067, 558.9822556 , ..., -158.60185627,\n",
" -117.96978446, -72.01416626],\n",
" [-108.89443591, 558.98225638, 724.21128877, ..., -179.96929959,\n",
" -150.13071447, -124.39707381],\n",
" ...,\n",
" [ -10.74883111, -158.6018533 , -179.96929491, ..., 77.57932496,\n",
" 57.4814831 , 32.55742209],\n",
" [ 17.92242429, -117.96978042, -150.13070838, ..., 57.48148208,\n",
" 64.03747153, 69.92615695],\n",
" [ 65.02081915, -72.01415732, -124.39706213, ..., 32.55741763,\n",
" 69.92615309, 121.88928259]])\n",
" jac: array([-8.92579556e-06, -2.77161598e-06, -1.26659870e-06, 5.18560410e-06,\n",
" 3.06963921e-06, 1.51991844e-06, 1.04308128e-06, -1.22189522e-06,\n",
" -1.89244747e-06, -3.45706940e-06, -3.90410423e-06, -4.32133675e-06,\n",
" -5.81145287e-06, -5.27501106e-06, -3.93390656e-06, -4.58955765e-06,\n",
" -1.69873238e-06, -4.17232513e-06, -3.78489494e-06, -9.32812691e-06,\n",
" -6.67572021e-06, -4.81307507e-06, -9.83476639e-06, -1.07884407e-05,\n",
" -1.27255917e-05, -1.09374523e-05, -1.16229057e-05, -9.92417336e-06,\n",
" -1.23083591e-05, -1.28448009e-05, -1.22934580e-05, -1.16527081e-05,\n",
" -1.41113997e-05, -1.40964985e-05, -1.40815973e-05, -1.73151493e-05,\n",
" -1.46776438e-05, -1.69426203e-05, -1.74194574e-05, -1.68383121e-05,\n",
" -1.91032887e-05, -1.43796206e-05, -1.52736902e-05, -1.33812428e-05,\n",
" -1.65998936e-05, -1.64210796e-05, -1.39921904e-05, -1.47670507e-05,\n",
" -1.62124634e-05, -1.64508820e-05, -1.83284283e-05, -1.73598528e-05,\n",
" -1.92970037e-05, -1.98781490e-05, -1.88946724e-05, -1.75237656e-05,\n",
" -1.94162130e-05, -1.85817480e-05, -1.75535679e-05, -1.60187483e-05])\n",
" message: 'Desired error not necessarily achieved due to precision loss.'\n",
" nfev: 25990\n",
" nit: 244\n",
" njev: 419\n",
" status: 2\n",
" success: False\n",
" x: array([-495.23279115, -183.30964897, 59.92289841, 248.14402071,\n",
" 361.35101146, 358.04291887, 308.14447828, 193.54584036,\n",
" 103.39736155, -54.03019632, -208.71326587, -279.89390742,\n",
" -366.20667257, -422.83375148, -377.2382466 , -258.89632547,\n",
" -149.99320289, -29.81516505, 114.34324651, 292.33978998,\n",
" 395.72698798, 468.47098003, 454.27945388, 407.77224365,\n",
" 288.08787667, 150.61343587, -38.95168475, -198.45039744,\n",
" -340.3851643 , -463.02044732, -499.76784117, -483.47047972,\n",
" -415.86270968, -279.60901248, -99.17263439, 81.84952508,\n",
" 257.36937344, 382.42526949, 484.73634391, 511.43917592,\n",
" 465.94842904, 349.83498476, 204.3463795 , 30.16611801,\n",
" -171.51642747, -311.6823957 , -425.021567 , -453.26943012,\n",
" -471.70598013, -366.80844256, -220.39815263, -31.98877286,\n",
" 138.5266828 , 319.86045055, 438.0409878 , 482.62925891,\n",
" 397.4133485 , 190.56282403, -165.88269391, -683.41527419])"
]
},
"execution_count": 162,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"def f(w):\n",
" y_pred = dist_phi_obs @ w\n",
" return np.linalg.norm(y_obs - y_pred) + np.linalg.norm(w) * 0.0001\n",
"\n",
"res = optimize.minimize(f, np.random.randn(60))\n",
"res"
]
},
{
"cell_type": "code",
"execution_count": 163,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"w = res.x\n",
"\n",
"y = phi(dist) @ w\n",
"plt.plot(x,y)\n",
"plt.plot(x_anchor, w, 'o')\n",
"plt.plot(x_obs, y_obs, 'o')\n",
"plt.show()\n",
"\n",
"plt.plot(x,y)\n",
"#plt.plot(x_anchor, w, 'o')\n",
"plt.plot(x_obs, y_obs, 'o')\n",
"plt.show()\n"
]
},
{
"cell_type": "code",
"execution_count": 164,
"metadata": {},
"outputs": [],
"source": [
"epsilon = 1.0\n",
"def phi(r):\n",
" return 1./(1. + (epsilon*r)**2)\n",
"\n",
"x_anchor = np.linspace(-2,4,60)\n",
"x = np.linspace(-2.5,4.5,300)\n",
"dist = np.abs(x[:, np.newaxis] - x_anchor[np.newaxis])\n",
"\n"
]
},
{
"cell_type": "code",
"execution_count": 169,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"[<matplotlib.lines.Line2D at 0x200b2644710>]"
]
},
"execution_count": 169,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"w = np.random.randn(60)\n",
"y = phi(dist) @ w\n",
"\n",
"plt.plot(x,y)\n",
"plt.plot(x_anchor, w, 'o')"
]
},
{
"cell_type": "code",
"execution_count": 175,
"metadata": {},
"outputs": [],
"source": [
"epsilon = 5.0\n",
"def phi(r):\n",
" return 1./(1. + (epsilon*r)**2)\n",
"\n",
"x_anchor = np.linspace(-2,4,60)\n",
"x = np.linspace(-2.5,4.5,300)\n",
"dist = np.abs(x[:, np.newaxis] - x_anchor[np.newaxis])\n"
]
},
{
"cell_type": "code",
"execution_count": 176,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"[<matplotlib.lines.Line2D at 0x200b268ec88>]"
]
},
"execution_count": 176,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"w = np.random.randn(60)\n",
"y = phi(dist) @ w\n",
"\n",
"plt.plot(x,y)\n",
"plt.plot(x_anchor, w, 'o')"
]
},
{
"cell_type": "code",
"execution_count": 177,
"metadata": {},
"outputs": [],
"source": [
"dist_phi_obs = phi(dist_obs)"
]
},
{
"cell_type": "code",
"execution_count": 178,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
" fun: 0.5245116464099808\n",
" hess_inv: array([[ 1.71265047, -1.76505065, -0.80110107, ..., 1.17109254,\n",
" -0.66970008, 0.30973546],\n",
" [-1.76505065, 2.28503052, 0.51021456, ..., -1.33914256,\n",
" 0.76848522, -0.36313264],\n",
" [-0.80110107, 0.51021456, 1.17490741, ..., -0.57603144,\n",
" 0.33048017, -0.15623068],\n",
" ...,\n",
" [ 1.17109254, -1.33914256, -0.57603144, ..., 3.32161086,\n",
" -3.17145801, 1.33662147],\n",
" [-0.66970008, 0.76848522, 0.33048017, ..., -3.17145801,\n",
" 5.30009299, -2.98895335],\n",
" [ 0.30973546, -0.36313264, -0.15623068, ..., 1.33662147,\n",
" -2.98895335, 2.03135775]])\n",
" jac: array([-7.45058060e-07, -6.63101673e-07, -5.81145287e-07, -6.55651093e-07,\n",
" -8.49366188e-07, -7.45058060e-07, -2.68220901e-07, 2.23517418e-07,\n",
" 5.58793545e-07, 4.02331352e-07, 1.49011612e-08, -4.47034836e-08,\n",
" 2.68220901e-07, 0.00000000e+00, -9.53674316e-07, -1.34110451e-07,\n",
" -2.60770321e-07, -8.04662704e-07, 4.47034836e-07, -4.24683094e-07,\n",
" 9.68575478e-08, -5.28991222e-07, -2.98023224e-07, -6.70552254e-08,\n",
" -4.02331352e-07, -2.01165676e-07, -1.57952309e-06, -7.30156898e-07,\n",
" 7.07805157e-07, 2.23517418e-08, -2.38418579e-07, 2.53319740e-07,\n",
" -1.08778477e-06, -1.39325857e-06, -2.22772360e-06, -2.84612179e-06,\n",
" -2.26497650e-06, -1.75833702e-06, -2.30222940e-06, -2.29477882e-06,\n",
" -1.10268593e-06, -1.51246786e-06, -9.08970833e-07, 1.41561031e-07,\n",
" 8.19563866e-08, -2.98023224e-08, -4.47034836e-08, -2.98023224e-08,\n",
" -6.70552254e-08, -5.96046448e-08, 0.00000000e+00, 4.47034836e-08,\n",
" 1.41561031e-07, 3.05473804e-07, 5.14090061e-07, 4.76837158e-07,\n",
" -3.72529030e-07, -1.29640102e-06, -1.31875277e-06, -1.14738941e-06])\n",
" message: 'Optimization terminated successfully.'\n",
" nfev: 5332\n",
" nit: 80\n",
" njev: 86\n",
" status: 0\n",
" success: True\n",
" x: array([-0.03517132, -0.02472596, -0.00911907, 0.00274169, 0.01042114,\n",
" 0.00615406, -0.01394946, -0.04486573, -0.07029373, -0.05641792,\n",
" -0.01985228, 0.05296495, 0.15739034, 0.00954161, -0.33905305,\n",
" 0.26372942, 0.67069429, 0.11533274, 0.33460897, 0.78482809,\n",
" 0.04086696, 0.71039379, 0.24667494, 0.0678785 , 0.75603441,\n",
" 0.26775703, 0.27966886, -0.27664737, 1.27312907, -0.42307864,\n",
" -1.44466366, 1.0908059 , -0.02966346, -0.30659317, 0.55133895,\n",
" 0.26526631, 0.4770533 , 0.32659019, 0.48572846, 1.34354109,\n",
" -0.03878432, 0.63317124, 0.720233 , 0.24200996, 0.59423421,\n",
" 0.63696172, 0.4567532 , 0.31085281, 0.23329472, 0.20077093,\n",
" 0.19973147, 0.2304276 , 0.30612026, 0.43773664, 0.50973779,\n",
" 0.33325525, 0.43031813, 0.34011864, 0.23811258, 1.16977988])"
]
},
"execution_count": 178,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"def f(w):\n",
" y_pred = dist_phi_obs @ w\n",
" return np.linalg.norm(y_obs - y_pred) + np.linalg.norm(w) * 0.1\n",
"\n",
"res = optimize.minimize(f, np.random.randn(60))\n",
"res"
]
},
{
"cell_type": "code",
"execution_count": 179,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAXIAAAD4CAYAAADxeG0DAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8QZhcZAAAgAElEQVR4nO3deXwb1bk38N8jWd73eI3txHH2BScxDiEQUhKCGzD7EpZyS9f0tiy+lFIu5S2vCfRS2k+hpnSjlLf0llLSAA3BARIIkEJWZ3OclcRJsB05tuMl3hfpvH/Icix5JI2kkWZGer6fTz7GY2nmWFjPHJ3znOeQEAKMMcb0y6B2AxhjjPmHAzljjOkcB3LGGNM5DuSMMaZzHMgZY0znItS4aFpamsjPz1fj0owxplu7d+9uEUKkOx9XJZDn5+ejqqpKjUszxphuEdFpqeM8tMIYYzrHgZwxxnSOAzljjOkcB3LGGNM5DuSMMaZzHMgZ05HK2kqUrC1B4auFKFlbgsraSrWbxDRAlfRDxpj3KmsrUb61HH2WPgCAuduM8q3lAIDSglIVW8bU5nePnIiiiWgnEe0nooNE9KQSDWOMOarYUzESxO36LH2o2FOhUouYVijRI+8HsEwI0UVEJgCfEdF7QojtCpybMTassbvRq+MsfPjdIxc2XcPfmob/8W4VjCksKy7Lq+MsfCgy2UlERiLaB6AJwCYhxA6Jx6wioioiqmpublbisoyFla9P/z5gNTkcMyISZUVlKrWIaYUigVwIYRFCzAOQC+ASIpoj8ZiXhBDFQoji9PQxNV8YYx4cq52KgbO3ID0mCwRCDKWhu+FmZEdcpnbTmMoUTT8UQrQD+ATACiXPy1i4a+7sxz921eHmqTdg88pNqL63Gh+t3IhxWIQn1tXAYuXRzHCmRNZKOhElD/93DIDlAI74e17G2AXr9jVgYMiK71xRMHIsIdqEx66dgZqG83hjV53D4znfPLwokbWSDeBVIjLCdmNYI4R4V4HzMsaGvb23AXNzkzAlI97h+A1zx+N3u/6JZ2qexc+PtCMrLgtLcpdg3fF1nG8eRpTIWqkWQswXQhQKIeYIIVYr0TDGmM3xpk4cPHMeN83PGfOzDSc3oCX6b0BEGwQEzN1mvHH0Dc43DzO8RJ8xjfvwcBMA4Jo52WN+VrGnAgPWflnn4Xzz0MWBnDGN23ykCbOyE5GVFD3mZ94EZ4MlBUcazyvZNKYRXGuFMQ3r6BnE7tNt+M+vFEj+PCsuC+Zus8fzmCgKaL8Gt//1RYybsBmt/U3IistCWVEZj5uHAO6RM6ZhW75ohsUqsGxGhuTPy4rKEG107KlHG6Nxx/Q7kB2XDQIhOy4bTy1+Ej+8ejqQsRbn+s+OjKeXby3njJYQQEIEP/+0uLhY8ObLjLlXWVuJ8s9+iT7rOWTHZ7vsPVfWVqJiTwUauxvd9rJL1pZI9t6To5IRExHj8flMfUS0WwhR7Hych1YY06CRkrWiDyD3KYSlBaWyAq+r8fT2/na097cD4FRFveKhFcY0KBAla+UW1+JURf3hQM6YBgWiZK3UeLor5i4zrvzHcl4ZqhMcyBnToECUrC0tKEX5ZeUOk6BJkUkuH8+TovrBgZwxDfrGzO9DOJWsjTZG+12ytrSgFBtv24jqe6ux8baNeGzhY9K9dHL8lodbtI0DOWMaFNFTjD7zLUiLzhzpPZdfVq74BKRUL90VXhmqXZy1wpgGbT7ShHRahM0rHwcReX6CH5yzXlylKfJORNrFPXLGNGZgyIrPjrfgyukZAQ/iUiQnRa0m3DfvgaC3hcnDPXLGNGbXqVZ09Q9h6XR1dtKy987ti4ySI9Nx5uRSDLTPU6U9zDMO5IxpzIYDZsSYjLhiqnpbIo4ebhFC4LrffIbff3oCt12cq8qnBOYeD60wpiFDFiver2nEspkZiIk0qt0cAAAR4VuXT0Jtcze21Z5TuzlMAgdyxjRk58lWnOsewHUXuc4eUUNpYTaSY014bfuXajeFSeBAzpiGvHvAjNhII66cLl3tUC3RJiNuK8rFBwcb0dTZ5/kJLKg4kDOmESPDKjO0M6wy2t0LJ2DIKrDGaaNnpj4O5IypzL7j/fy/zUN/1mqMzzmkdpMkFaTH4/Ip4/D6zjpYrcEvf81c40DOmIrs5WptC3AEDJHteLuuQrN1TVYW56GhvRfbT/Kkp5ZwIGdMRYEoVxtIJbOyEB8Vgbf2NKjdFDYKB3LGVBSIcrWBFBNpROlF2XjvgBk9A0NqN4cN40DOmIoCUa420G4pykH3gAUfHNTmzSYccSBnTEWuNk/2t1xtIC3IT0Veagze3M3DK1rBgZwxFZUWlOLOgh/COpAMBLBcrZIMBsLN83Px+YkWnGnvVbs5DBzIGVNdS+NsoO5x7Lp7LzbetlHTQdzu1qIcCAH8ax/3yrWAAzljKhocXgS0fFYmok3aWwTkysRxcSiemII3d9dDCM4pVxsHcsZUtO3EObT1DOJajdVWkePWi3Nxorkb1fUdqrXBvpgq3DeJ5kDOmIo2HDAjLtKIr0xTr2Str669KBuREQa8uadeleuPXkwV7ptEcyBnTCWDFiveP6i/YRW7pBgTSmZl4p39ZzAwZA369V0tpvr5zp+HXS+dN5ZgTCXbTpxDe88gSnU4rGJ3a1Eu3q02Y/ORJqyYE7zc902HzsLcZQYk9rho729He387AIz00u3sux5lxWWhrKhMFxPLcnAgZ0wlldVmxEdFYIkOh1XsrpiahrT4KLy5pz4ogdxiFVi9/iBe3XYaSdNSYDW2eXyOvZfeN9Q30oO3B/i9TXuxpX6L7oM7D60wRfHkkzyDFis+ONSI5TMzdDmsYhdhNOCmeePx8ZEmtHYPBPRaQgg8+mY1Xt12Gt9ZPAmrlzwydpNoF9r72iWHYd44+obDGPvj/34C7xxfH4jmBxQHcqYYnnySb6t9WKVwvNpN8dutF+diyCrwToBzyl/+90ms3V2PB6+aiv9z3SzcOOV6lF9Wjuy4bNDwYqqkyCS/rmHBAFZ//iuFWhw8fgdyIsojoo+J6DARHSQi7a4tZgHlTSW/cO+5vzecrXLF1DS1m+K3mdmJmJWdiDcDWBFx58lW/Pz9I1gxOwsPLZ86cry0oBQbb9uI6nursfG2jXhs4WOSJQ+SouQH+D5xDktev0pXf5tKjJEPAXhYCLGHiBIA7CaiTUIIbVbHZwHjqmKfuduMq9Zcjebes8iKy8KS3CVYd3zdmPFKALocn/RGZW0lKvZUwNxlRszkcfiozhISv/Ptxbl4cv0h7K9rx9y8ZEXP3dY9gPv/vgd5KTH4xe2FIJKY4Rxmfy2dJzUBoHxr+ZiOhhQC0DbQBEA/f5uk9KosIloH4EUhxCZXjykuLhZVVVWKXpepr2RtyfAGCY6EABzeewKS2QbZcdnYeNvGgLVPbfahp9HBJNoYrfnaKnJ09g1i0TObsWxGBl64a76i5/7hG/vwzv4z+Nd9l2NOju9DJ/abqD3AO3co3NHK3yYR7RZCFDsfVzRrhYjyAcwHsEPiZ6sArAKACRMmKHlZphH5httwxvoHkGHQ4fiYDpSLDpVWa3Arxd3Qk94DeUK0CXcsyMOrW0/hsWtnIDspRpHzfny0CW/tbcADy6b4FcQBW4/a+XWenzHfIbhLdUQA7f9tKjbZSUTxAN4E8F9CiPPOPxdCvCSEKBZCFKen6zfdiknbV9eOTbtyUBT7XYfJJ29ouQa3EvS2iYS3vnFZPqxC4K/bTityvq7+ITz+1gFMyYjH/cumKHJOZ85j7K7+ZrX+t6lIICciE2xB/DUhxFtKnJPphxAC/3ddDTISovDbG78j643hzGSIclmDO1QmRvW4iYQ38lJjUTIrC3/f8SXO9w16foIHz753BObzfXj21kJERQQnRVOP9eEBZbJWCMCfARwWQjznf5OY3nx8tAn76zvw8NXTkRBtcviZqzfGHdPvGOm5Gy2p6DffggmRi8ecO5RSGsuKymBEpMMxPQQJb9y3dAo6egfx0qe1fp1ne+05/O/20/jmZZNw8cQUhVrnWWlBKcovK0dadCaEAJJMGbqYw/B7spOIFgP4N4ADAOwFF34ihNjg6jk82RkaRmdgkDUFTy15BDdOud7l41ytnms634ebf7cV/UMWvPX9yzFhXOzIz1xNoGpl8skbQggs+s0vMZBYiSFq0/VKQnceeH0vNh1qxJZHliIjUd6CndG6+4ewomILDER4r+wKxEYGfwG6xSowb/VGXFeYjWduKQz69V0J2GSnEOIzuJy+YqHKIQODAGFsw9PbVyPCYBgTmKQmmUbLSIzGq99agJv/+iKuX/cUhLF9JMiF0rjy0bOdaDwzGz9beAe+tnCi2s0JmB+VTMP7NWY8/+EXeOaWi7x+/v9sOIz6tl7883uLVAniAGA0EC7JT8WO2lZVru8tXtnJfOLN4h85jnZtQWTmm7Aa20aGUH7y7ycgLNLZD3ocV/6g5iyIgJJZ+mu7NyaOi8PXFk7Emqo6HPCyVvn7NY14bceX+M7iSSjOTw1QC+UpmpiC2pZudPT4P94faBzImU+U7ilX7KnAgLXf4ZgVAzAaCSaKcjgurCbcOum7Pl1HTR8fbcLc3GSkJ0R5frDOPbR8GtLiI/HI2v3oG7TIes6xs514eM0+zM1LxsMl0wPcQs8Kc23pjjVn1Ns4Qy4O5MwnSmdguLoBWNGDpxY/OTIxmhmbhYi2lXh3azaGLMGvge2r1u4B7K9vx9LpGWo3JSiSYk34+S2FONLYiZ/+q8bjdnCt3QNY9dcqxERG4I/3XKyJQmJzxtsCuZo7IMnFgZz5ZHnWNyCsjhkq/mRguLsxjM71/fD2TXjqqq/jQEMH3t6rn41/txxrhhDAldPDZw3F0hkZeGDZFPxzdz1++cFRl8G86Xwf7v7Tdpg7+vCHe4qQleT9BGkgpMRFIi81BjUNHMhZCLJYBbbszUNs550Oi3/8SdPyJn/3usJs5E88gqerv6ab3PJPjjZhXFwkLvJzdaLePLR8Gu66ZAJ+98kJlP1jH1q6LgyfCSHw0eGzuP7Fz3D6XA9evrdY9XFxZ4U5yahuaFe7GR7xxhLMa2uq6lDTcB4Vd34NN877sSLndFXsSOrGsOHkBpyPfx3W4TF1rRc2slgFPj3WjKUzMmAwhFeCl8FA+NlNc5CbEoPnNh3DpkNnsWjyOCRGR+BAQwdONHdjakY8/vLNSzAzO1Ht5o4xa3wiKg+Ycb5vEIlOayS0hAM580p7zwB+8f4RXDIpFTfMVbaWtqc0RbuKPRUYdJoY1XLNkv317WjrGcSVYTI+7sxgINy3dAq+OjsLf9l6EjtqW9EzYMGktDisWlKAW4pyYTJqc3Bg1vDN5WhjJxZo7NPCaBzImSwji3+6zbCOT8by+WVuy4kGkt5yy7cca4aBgCUhUHvcH1My4vH0Td7nlatpRnYCAOCw+TwHcqZvzuVXDaZ2/Onws8hJiVGlB+yqSp3WcstHr3xNnJaKzxu1OfTDXMtKjEZyrAmHzWPqAGqKNj/PME1RevGPv/RQ2Gh0jRgQYDG06rZGTDgjIszMSsRhc6faTXGLAznzSGtDGfbCRrbKigTrQDJKMu/XVG9Xazc/5rsZ2Qk42tgJi1XZTXiUxIGceZQZq73yqyO55V/fj/GdT+PgscDUq/aV1m5+zHczsxPRO2jB6XPdajfFJQ7kzKO5cXcpuvhHSUSEOxbkYV9dO442aufjb6jXHg8n9syVIxr6+3LGgZy51T9kwSd7cjHBeq9ii3+UZktfI7yxq07tpozQwzg+k2dKRjyMBtL0hCdnrTC33q9pREvXAJ674m4smabNIJQaF4mS2Vl4a289Hr1metB2k3GntKAUDW29qNhTAUNkB7JDtPZ4OIg2GVGQFseBnOnXa9u/xMRxsVg8Rds50HcuyMMHpzZg+Zpn0THYrIlNG6IHitF94r/x7x8vRV5qrOcnMM2amZ2I3afb1G6GSzy0wlyqb+vBzlOtuGNBnuaXlrfTDsRkv4X2wSbNbAm382QrspOikZuizI7yTD0zshPQ0N6Ljl5t1ibnQM5ceu+ALcPiuouUXYofCL/Z9wJgcHyTqZnuJ4TArlOtWJCfqtoKWKYcex2YIxodXuFAzlzaUGPGnJxEhz00tUpr6X5ftvbg7Pl+XDJJu8u6mXxaz1zhQM4ktXT1Y++X7fiqTrYl01q6386Ttr0eOZCHhoyEKKRoeKk+B3Im6fPjLQCAr+hkIwStpfvtOtWK5FgTpqTHK3vi6jXA83OA8mTb1+o1yp6fSSIizMxO1Gwg56wV5mB0lcOEqSk43fdjFOI6tZvl0eh65uYuM8iSgscve0S1rJWdJ1tRPDFV2Uni6jXA+geBwV7b9x11tu8BoHClctdhkmZmJ+K1HadhsQoYNTb5zz1yNsKh0BMARLRh9fYndVPoyb5s/7eXbcb5Lx5F69k5qrSjqbMPp871YKHSwyofrb4QxO0Ge23HWcDNyEpA36AVpzS4VJ8DORsRKoWerpiahiumpuH5TcfQ3Om4AUUwhiZ2nbTlGy9QOpB31Ht3nCnKnrmixeEVDuRshNYyP3xFRCi/YTb6LVb8cM2+C1Xr7EMTHXUAxIWhCYWD+a5TrYgxGTF7vMJblyXlenecKWpqpm2p/hENlrTlQM5GaC3zwx+T0+Px5A2zse3sJix6bZltk+aq1aiMdBrbDMDQxI6TrSiamKz89mVXPQGYnBYXmWJsx1nARUUYMTldm0v1OZCzEVrL/PBXwrhqxOe8jV5ri221p5FQnpaKyjinvHiFhiYqayux/J8lqEv6AWqjf6L83ELhSuD6F4CkPABk+3r9CzzRGURazVzhrBU2orSgFJ19g3jq81+FRKGnF/a+AAsGHI71GQyoSElGaXfPhYMKDE2M3g6PCOiyNKN8azkAhbd3K1zJgVtFM7ISsW7fGXT0DCIp1uT5CUHCPXLmIMOwCN0n/hsvX/ExNt62UbdBHHAz5j+6OqJCQxOhMlHM4HZCfKZ9M+ZGbfXKOZAzB/vqOmAgYE5OktpN8ZvLMX8roPTQRKhMFIc9DxPiszSaucKBnDnYX9eOaZkJiIvS/6ib1Ji/sJrwrUufBsrbgYdqFBumCKWJ4rDmIVc/PSEKqXGRmstc4UDORgghsL++HXNzk9VuiiJGb9JMIKRHZ6LPfAu6zhV6dyIZuedlRWUwUZTDMT1PFIctD7n6tqX6CTy0wrTry9YetPcMYt6E0AjkwKhNmu+txuY7PsTkmCX4+GiT/BPIzD0vLSjF7MhvQwwma3I7PCaTjFz9mVmJONrYiSGLNUiN8owDORuxr64dAEKmRy5lybQ07DrZhp6BIXlPkLks3mIVOHx8Kr4SW4Hqe6t1P1EctmTk6hfmJaN/yKqpkrYcyNmIfXXtiDYZMC1T4Yp9GrJkWjoGLFZsrz0n7wkyl8XvPt2Glq5+rJjNY+K6JiNXf0F+CgDbCl6tUGRGi4heAXAdgCYhhDqVipjf9te146KcJEQovSJRQxbkpyLSaMD22lYsm5Hp+QlJucPDKhLHR9lwwIzICAOWzshQqKVMNR5y9bOTYpCTHIOqU2345uWTgtgw15R6x/4FwAqFzsVUMGix4uCZ8yE9rALYdkSfmZ2AA/Ud8p4g46N236AFb+9twNUzMxEfAtk+zLPi/BTsOtUKIYTaTQGgUCAXQmwBoJ3PGcxrRxs70T9kxdy80A7kAHBRbhJqGjpgtcp4E8r4qL1+/xl09A7inksnBq7RTFOK81PR1NmPutZezw8OgqB1H4hoFYBVADBhwoRgXZbJtHd4onNeGATywpxk/G37lzh1rhsFcnbwcfNRe8hixR+31GJqRjwuLeBt3cKFfZy86nSrJva0DdpgqBDiJSFEsRCiOD1dH9uHhZP9de0YFxeJ3JQYzw/WuYtybatWDzTIHF5xY01VPY43deHhkukg0tauMSxwpmUkICE6ArtOtandFACctcKG7atrx7y85LAIRlMz4hFpNODQGf8WddS19uCZDYdxSX4qvjpbxsQpCxkGA+HiiSmo0kjmCgfyMGcvvdqYej8ORTyqm23d/BFhNCBz/EGsbf6+rU752hKvfu/K2kqUrC3Bte8sBPKexnWXmcPiBsgcLchPxRdNXTjX1e/5wQGmSCAnotcBbAMwnYjqiejbSpyXBZa99OrZHrND6dVQD+aVtZU4H/86BnDOVqe82yz793bY15QAmNrxm+pnQv41Y2MtnpIGAPjseIvKLVEua+UuIUS2EMIkhMgVQvxZifOywArX0qsVeypgda5TLvP3DtfXjI01JycJKbEmfHqsWe2m8NBKOAvX0qv+/N7h+pqxsYwGwhVT07HlWIu8VNYA4kAexgJSejUIu9T7y5/fOzVKeuUml6sNT1dOT0dLVz+qFciA8gcH8jBWVlSGKCX36AzkLvUK3iD82Zs0beAmwOq4xReXqw1fy2ZkwGggbDyo7icyDuRhrLSgFKXZD8A6oFDpVZmVAr2m8A3CXqechmyLOuT+3t39QzhwbDKK41aN1DjncrXhLTk2EpcWpOIDlQM5F4YIc31t8xBx5qfY+9OrYTD4mUIns1IgqtfYgntHva341FVPuN+px90NwscdfkoLSvH65jR0dg5i3b2LZT3nk6PN6B+yYtXFt2PR5P/06bqq8fY1Z7J9dXYWnlh3EEcbOzE9K0GVNnCPPMztPNWKBfmp/gdxQFZRfp9613JvEF6anB6HE83dsgsfvX+wEePiInHJJJ0txQ/kkBfDtRdlw2gg/Gtfg2pt4EAexswdvTjZ0o2FrgKTt+PSMioF+jT8IucG4YPJGfHo6h9CU6fnBR1CCHx+vAVfmZYOoxI3vWAK1JAXAwCkxUdhydQ0rNvboFr2CgfyMPbJUVv+65JpErVvfOnFyagU6FPvWs4NwgeThwtmnWjq8vjYE81daO0ewEI9FMZyvgFL1VMHPH+i0UEGklbcXJSLMx192PKFOjnlPEYexjYfaUJOcoz0jkC+jkt7KMovd6OGMee0t0nBMd6RQN7chcuGV+m5suOkrabGwknj/LpmwNlvwPb/dx11sC1BlegpunvNpc6z/kHbf/PY+hgrZmchIyEK/+/zU7hyevA3F+FAHqb6hyz4/HgLbinKka4TEqBxaVz1hGOAAOT1rj3dIHyQmRiF+KgIHJfRI995shUZCVGYqIGSpW5J3YAhMCaYO7/mzpOhA92KTzCHssgIA+65dCKe23QMx5u6MCUjuNsl8tBKmPr4SBN6Biy4epaLhSwBGpeWNfwSJESEgvQ41LZ0e3zsni/bUJyfov3iWC5vtML1ay41jNbroqqfvzfyEHb3wgmINBrw6tZTQb8298jD1NrdDchIiBop/DOGrz1nOQLQu/bVlPR4bHOzEXNlbSWe3/1rtGU0Yq9IR2Xtw/JyxtVK93M5dJUHPFQj/RzJXryb8zNJafFRuGHeeKzdXY+HS6YhOTYyaNfmHnkYajrfh0+ONuHm+TmuMzA01HMOpMkZ8TB39KGrf2jMzy5Uh2z0rjqkmul+vkwMy+1lK3UjD2HfvaIAfUMWvLj5eFCvy4E8DP3h01oIAHdd4mHLvcKVtl5cebvta4gFccCWSw4AJ5vHDq/4XOlQzXQ/X27ArnrZManavpFrMKtmelYCbivKxV+3nUZda0/QrstDK2Hmy3M9eG3Hadw8Pwf5aXFqN0d1ozNX7FvA2flc6VDJFa6+DNF4O3Tlahjtmme1FbhH03BWzcMl07G++gx+8cFR/Oau+UG5JvfIw4B9R5vCVwtx4zvXIDJpLx66eprazdKEiePiYDSQZOaKz1USlVrhGqwhGrm9eC31gDW8yCkrKRrfWVyA9fvPYLub+RclcSAPcaN3tBEQGDK0wpT5Fva1bla7aZoQGWHAxNRYnGgeG8h9rg6p1ArXYAYrT8Noai/z93WRk0o3n+9fORkTx8Xi4TX70dk3GPDrcSAPYUII/HLn82PGeQdFP+9oM0pBerxkIC8tKMUd+Q/BOpAMeFPpUKkVroHK5feFmj1gqZsIXEzS+1vXRyFxURF4buU8mDt6sXr9oYBfj8fIQ9Tu0634nw1H0BJzFlKpz7yjzQWTM+Kw5VgzhixWRBgd+zbR/QvQfSIJB8pLkBBtcnEGCUqscPVlFWygqHlT8XWRUwCqZnrj4okpuG/pFPxm83FcMikVtxfnBexa3CMPMUMWK5557zBu/f02NLT1IskkUUcFvKPNaFPS4zFgsaKubWwu9YGGDhSkxXkXxOWQM/wSoBozPgnUAjE5fFnk5O55QfxE8+BVU7F4Shoee+sAtgZwk2YO5CHEYhX40T/344+f1uJrCydg84++gp8setjn3XDCxeQM18Wzaho6MCcnacxxv8kZftFSLr+aNxWXN5E89+P6rp5HhqCNmZuMBvzuniIUpMfhe3/bjUNnzgfkOjy0onOVtZWo2FOBxu5GRFEq2uqX45Gv3on7lk4BgJHxXPtjsuKyUFZUpsyONiGyWcHktAspiMuROXK8pasfZzr6UJgbgEAOSA+/SL2mrlZkBlOACpfJIneVsfNrN7UE2P/3scMrwmL7GqSUxcRoE175xgLc/odtuPvl7XjtOwsxe7yyf1McyHXMnpFin8zsE+cQn/sv5E+cD2DKyONKC0qV34pMw3m83kqKNSEjIQpHGjsdjh8Y3lA3ID1yKVp/TeXeeJRoq/N5594NfLHR9XWkXrv9f3d8HhkuBHG7II2Z56bE4h+rLsUDr++Fyaj8QAgHch2TWnloGc5ICfgekipPJEkGEHu7fAgqc/OSsb+u3eFYTb0tkM8en6ho011S+zX1VqBuPK6CsrthJVev3RcbL3yiKU+Wfm6QxswnjovDuvsuD0jhNR4j1zGfVx5K8TbfVsmJJG+vLZVW9q8fAOvu8znVbF5eMmpbutHRcyHnt7qhAwXpCk50evo9NTA555VApST6cl45r52aE7bDAlU9kwO5jmXG+rjy0Jkv+bZKvSl8ubbUG906CFgGHI95EVTm59l6a/vqbb1yq1Vg75dtmJvrohfnLTm/ZzADjRILZVwGzzrvzqvEjkZyXjupCVuDyVZ7XQurVUp7eWkAAA1tSURBVP3AgVzH8nArhNWxt+hTRoovPSClshiU7H358diLcpNABOz9sg0AUHOmAy1dA1gyzf3OQbLJ+T2DlRmi1EIZtzeYUed994eOgXr0989OGvtJSs5iH2dyXjvnLKCYVIBouPa6vjel5kCuU+/XmLF5dy4WJnwP2XHZIG9WHjrz5SO9Uqlxvlzbmx6qzMcmRJtQmJOEDw+fBWDbz5QIWDJVOg/fa3J+z2ClGyo1JCIVPJ0N9gJVrzgG6qo/X/i+t3XsJ6mRxT6jeLqhyX3tRpciiIzz61OclvBkpw7VtfbgkbXVmJubhN/fdA0iI77n+ABvMwl8XUGoxAYRvlxbKh3NYLL1rka/Mb3szd4wLwdPvXsIX5ztxMZDjSjMScK4+CjZz3dL7u8ZjE03lBqLd05JlNoXFHBz3J3hxT6BrPqotzkJN7hHrjMDQ1bc//c9AIAX7y5CZITT/0JfPjarudjDl2tL9b5u+h1w42/96s1ePzcbBgJ+8Noe1DScx52e6rV7I1RXaY7u4SYpuATd02IfRa6h/uSnUrhHriNCCJSvP4j99R34wz1FyEuV2AjYlxQ2uYs9ApEz7OtCE1e9Lz/as6v5I2TO/hXMQ81ISUlFfOojABQK5mouqHEWqG38pM7rXA9FjmB2IgK1nWGQkRC+fOzxT3Fxsaiqqgr6dfXu5X/X4unKw/j+lZPx6IoZ0g8qT4b0G4dsvRtfOef2ArY/eq3tGuMj58VVgG3i2Kc5Bz0I1kIeV6srRzOYgKgEoLct+Dc4na1OJqLdQojiMcc5kOtDZbUZ97++B9fMycKLdxXB4GqvTVfpW+4235UjUOd1JchvsJK1JTB3m8ccz47LxsbbNgbsumFBKri7W6XJXHIVyHloRWGja58oVdfk7b31eHjNflw8IQW/un3e2CA++o0SkwIYI/2a9JPk68SQLwFZhaXqii6uYo6CMYEb5jiQK8j547m524zyreUAIDuYO98I5sTcibc/y8SignH409eLERNpdHyCc9DrbbV9VI1JVfajqi/ZJb4GZBWWqmfFZUn2yLncL9MDRQI5Ea0AUAHACOBlIcTPlTivM4vVNgxkIOWWuvrSg+7Y8RoiP30a0T1mnDOm4yXTPejoG0RV7tvoMzlmkfRZ+vD8x49iwtEzyFz8H8hIiHZxVukbwZnOF3HxzG/ilbtWINpkHPskV6scI+OAR0/avrevnPPno6wvE0O+BmQV0sLKisokx8i53C/TA78DOREZAfwWwNUA6gHsIqJ3hBCK729U/s5B/O/20wAAo4FgJILBgOGvhEijAfHREYiPsv1LiI5AYrQJWUnRyE6OQU5yNMYnxyA3JRbxURHSPejPfgq89yhKm21Br2vxT1DX2oucPb9AQv9ZtCMecaIXkTQEAEizNOERSwWIDCiKkO69NRmBadsfRff2clipG20R6dg79UHEFd+NqZnxSI6xrc58rurXY4pgkWEQ52PXI9r0gO2A81CFp+XMSg1T+JJ14WtAVmFnnICW+2UswJTokV8C4LgQohYAiOgfAG4EoHggXzYzA2nxUbBYrbAIAYsVsAoBi9X2b8BiRXf/ELr7h9DZNwRzRx8Omztx9nwfhqyOk7opsSYg7xcYMjgGzj4xiIooC0qHc7BN796PyaCRwJ2CzrGLzmABhAVZQxaYTWNf0qwhC6LIgijYNi4YN9SEyw6txj8PfII8wz4YqAVnkIamSbGSq5NHxmmlgrKr9C570FNymMLbsU5fA7JKaWGyy/1qLdNBa+1hQadEIM8BMPrdWg9gofODiGgVgFUAMGGCb7m5S6dnYOn0DK+fZ7EK2yYB7b1oaO9FXWsv6tp6sL6jVfLxjREXhjCiyCL5GCllbe0oT0tFn+HC8Eq01YqytrFpf7E0gK9HfAQaDsK5aEH20HjpG4HFaksrlKqn7GnvQjVXr/kakLWUc+1MazXDtdYepgolArnUYPWYLqIQ4iUALwG29EMFriub0UDITIxGZmI05k9IGTle9YqA2Ti2+VlD8oP3aKXdPQCAipRkNEYYkTVkQVlb+8hxZ+T0Mrm8EZwbLuozJojbuVnOrOYGvv4EZK1mOmitZrjW2sNUoUQgrwcwem1uLoAzCpw34MrOtaI8LUVWD9qtUXU+Srt7XAZuT7y9EYxwl8ut9uo1rQZkX2mtPofW2sNUoUQg3wVgKhFNAtAA4E4Adytw3oArjUgFWs65D5xSxZikVqIBrhc9xKQAA11Oldakx7a9vhHIqUvi3DatDFPokZqfcKRorT1MFYqs7CSiawH8Grb0w1eEED9z93jNrOyUWnYuJ0j7Egh9WbrsChkBYeWgrAatlSrQWntYQPESfVfUnPF3XpHp3Gt3VZqV36Tq0lqWiNbawwKGA7keKLyhMGMstHCtFT0IQGlWxljo440lGGNM5ziQs9ClxE7xjOkAD62w0MQrHlkY4R45C01K7RQvF/f+mYq4Rx6uQj1lLZgrHrn3z1TGPfJwZA88HXXAcJVHrH8wtHqRwdwhPdi9f8accCAPR+EQeK56wrZ4arRA1ZjheidMZRzIw1E4BJ7ClbYVsEl5AMj2NVArYoPZ+2dMAo+Rh6NwKbQkp/KiEnMFaleYZGGPe+ThKJjDDlqm1FxBMHv/jEngHnk44tK2Nmpug8eYgjiQhysOPOExV8DCAg+tsPDFk5QsRHAgZ+GL5wpYiOBAzsIXT1KyEMFj5Cy88VwBCwHcI2eMMZ3jQM4YYzrHgZwxxnSOAzljjOkcB3LGGNM5DuSMMaZzHMgZY0znOJAzxpjOcSBnjDGd40DOGGM6x4GcMcZ0jgM5Y4zpHAdyxhjTOQ7kjDGmcxzIGWNM5ziQM8aYznEgZ4wxnfMrkBPR7UR0kIisRFSsVKMYY4zJ52+PvAbALQC2KNAWxhhjPvBrz04hxGEAICJlWsMYY8xrQRsjJ6JVRFRFRFXNzc3BuixjjIU8jz1yIvoQQJbEjx4XQqyTeyEhxEsAXgKA4uJiIbuFjDHG3PIYyIUQy4PREMYYY77h9EPGGNM5f9MPbyaiegCLAFQS0QfKNIsxxphc/matvA3gbYXawhhjzAc8tMIYYzrHgZwxxnSOAzljjOkcB3LGGNM5DuSMMaZzHMgZY0znOJAzxpjOcSBnjDGd40DOGGM6x4GcMcZ0jgM5Y4zpHAdyxpxVrwGenwOUJ9u+Vq9Ru0WMueVX0SzGQk71GmD9g8Bgr+37jjrb9wBQuFK9djHmBvfIGRvto9UXgrjdYK/tOGMaxYGcsdE66r07zpgGcCBnbLSkXO+OM6YBHMgZG+2qJwBTjOMxU4ztOGMaxYGcsdEKVwLXvwAk5QEg29frX+CJTqZpnLXCmLPClRy4ma5wj5wxxnSOAzljjOkcB3LGGNM5DuSMMaZzHMgZY0znSAgR/IsSNQM4HfQLu5cGoEXtRsikp7YC+mqvntoK6Ku9emoroM32ThRCpDsfVCWQaxERVQkhitVuhxx6aiugr/bqqa2Avtqrp7YC+movD60wxpjOcSBnjDGd40B+wUtqN8ALemoroK/26qmtgL7aq6e2AjpqL4+RM8aYznGPnDHGdI4DOWOM6RwH8lGI6JdEdISIqonobSJKVrtNrhDR7UR0kIisRKTJFCkiWkFER4noOBH9t9rtcYeIXiGiJiKqUbstnhBRHhF9TESHh/8GytRukztEFE1EO4lo/3B7n1S7TZ4QkZGI9hLRu2q3RQ4O5I42AZgjhCgEcAzAYyq3x50aALcA2KJ2Q6QQkRHAbwFcA2AWgLuIaJa6rXLrLwBWqN0ImYYAPCyEmAngUgD3afy17QewTAgxF8A8ACuI6FKV2+RJGYDDajdCLg7kowghNgohhoa/3Q5As/t7CSEOCyGOqt0ONy4BcFwIUSuEGADwDwA3qtwml4QQWwC0qt0OOYQQZiHEnuH/7oQt4OSo2yrXhE3X8Lem4X+azbIgolwApQBeVrstcnEgd+1bAN5TuxE6lgOgbtT39dBwsNErIsoHMB/ADnVb4t7wUMU+AE0ANgkhtNzeXwP4MQCr2g2RK+x2CCKiDwFkSfzocSHEuuHHPA7bx9fXgtk2Z3LaqmEkcUyzvTA9IqJ4AG8C+C8hxHm12+OOEMICYN7wvNPbRDRHCKG5+Qgiug5AkxBiNxFdqXZ75Aq7QC6EWO7u50R0L4DrAFwlVE6y99RWjasHkDfq+1wAZ1RqS8ghIhNsQfw1IcRbardHLiFEOxF9Att8hOYCOYDLAdxARNcCiAaQSER/E0Lco3K73OKhlVGIaAWARwHcIIToUbs9OrcLwFQimkREkQDuBPCOym0KCUREAP4M4LAQ4jm12+MJEaXbM8CIKAbAcgBH1G2VNCHEY0KIXCFEPmx/s5u1HsQBDuTOXgSQAGATEe0joj+o3SBXiOhmIqoHsAhAJRF9oHabRhueNL4fwAewTcatEUIcVLdVrhHR6wC2AZhORPVE9G212+TG5QD+A8Cy4b/TfcM9SK3KBvAxEVXDdoPfJITQRVqfXvASfcYY0znukTPGmM5xIGeMMZ3jQM4YYzrHgZwxxnSOAzljjOkcB3LGGNM5DuSMMaZz/x9hel7TVF8tswAAAABJRU5ErkJggg==\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"w = res.x\n",
"\n",
"y = phi(dist) @ w\n",
"plt.plot(x,y)\n",
"plt.plot(x_anchor, w, 'o')\n",
"plt.plot(x_obs, y_obs, 'o')\n",
"plt.show()\n",
"\n",
"plt.plot(x,y)\n",
"#plt.plot(x_anchor, w, 'o')\n",
"plt.plot(x_obs, y_obs, 'o')\n",
"plt.show()\n"
]
},
{
"cell_type": "code",
"execution_count": 180,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
" fun: 3.13797738875849\n",
" hess_inv: array([[ 0.64725004, -0.36214053, -0.23115033, ..., -0.00288717,\n",
" 0.01257755, 0.00235044],\n",
" [-0.36214053, 0.7966295 , -0.096595 , ..., 0.00439878,\n",
" -0.00478775, 0.00735827],\n",
" [-0.23115033, -0.096595 , 0.95375378, ..., 0.00261824,\n",
" -0.00752232, 0.00702471],\n",
" ...,\n",
" [-0.00288717, 0.00439878, 0.00261824, ..., 0.83628353,\n",
" -0.24827055, -0.29198826],\n",
" [ 0.01257755, -0.00478775, -0.00752232, ..., -0.24827055,\n",
" 0.70400156, -0.34373673],\n",
" [ 0.00235044, 0.00735827, 0.00702471, ..., -0.29198826,\n",
" -0.34373673, 0.81973717]])\n",
" jac: array([-1.19209290e-07, -1.49011612e-07, -2.08616257e-07, -2.38418579e-07,\n",
" -3.87430191e-07, -3.27825546e-07, -5.96046448e-08, 3.87430191e-07,\n",
" 6.25848770e-07, 5.36441803e-07, 1.78813934e-07, 8.94069672e-08,\n",
" 2.38418579e-07, 6.55651093e-07, 1.22189522e-06, 1.75833702e-06,\n",
" 1.75833702e-06, 1.46031380e-06, 8.64267349e-07, -1.19209290e-07,\n",
" -2.08616257e-07, -5.36441803e-07, -1.04308128e-06, -1.87754631e-06,\n",
" -2.41398811e-06, -2.35438347e-06, -2.80141830e-06, -1.40070915e-06,\n",
" -9.23871994e-07, -1.19209290e-07, 6.25848770e-07, 7.15255737e-07,\n",
" 1.57952309e-06, 1.22189522e-06, 1.46031380e-06, 1.72853470e-06,\n",
" 2.68220901e-07, -2.38418579e-07, -5.96046448e-07, -2.35438347e-06,\n",
" -2.98023224e-06, -3.42726707e-06, -3.36766243e-06, -3.54647636e-06,\n",
" -3.57627869e-06, -2.29477882e-06, -1.31130219e-06, -8.64267349e-07,\n",
" -6.25848770e-07, -4.76837158e-07, -3.27825546e-07, -2.68220901e-07,\n",
" -2.08616257e-07, -1.19209290e-07, -2.98023224e-08, -1.78813934e-07,\n",
" -3.57627869e-07, -1.49011612e-07, 1.78813934e-07, -8.94069672e-08])\n",
" message: 'Optimization terminated successfully.'\n",
" nfev: 3038\n",
" nit: 36\n",
" njev: 49\n",
" status: 0\n",
" success: True\n",
" x: array([-0.03110375, -0.02177099, -0.00784673, 0.00263589, 0.00905321,\n",
" 0.00364232, -0.01793071, -0.05088632, -0.072297 , -0.03471594,\n",
" 0.03071757, 0.0561739 , 0.01047214, -0.03660102, -0.00356212,\n",
" 0.18274769, 0.35700926, 0.37587606, 0.39721912, 0.45459123,\n",
" 0.42741425, 0.39094276, 0.31820956, 0.33543346, 0.41303945,\n",
" 0.33979498, 0.25445004, 0.29752842, 0.25465664, -0.18389981,\n",
" -0.39988198, -0.02878765, 0.15985309, 0.13060427, 0.21737063,\n",
" 0.33726111, 0.38860325, 0.46716474, 0.64469609, 0.72212498,\n",
" 0.5462478 , 0.49614304, 0.49718946, 0.49463375, 0.55409919,\n",
" 0.57269843, 0.44031814, 0.30134613, 0.22183805, 0.18563672,\n",
" 0.17860523, 0.19852667, 0.25450797, 0.36091626, 0.47407611,\n",
" 0.44641765, 0.34401046, 0.3507326 , 0.56662942, 0.79692013])"
]
},
"execution_count": 180,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"def f(w):\n",
" y_pred = dist_phi_obs @ w\n",
" return np.linalg.norm(y_obs - y_pred) + np.linalg.norm(w) * 1.\n",
"\n",
"res = optimize.minimize(f, np.random.randn(60))\n",
"res"
]
},
{
"cell_type": "code",
"execution_count": 181,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"w = res.x\n",
"\n",
"y = phi(dist) @ w\n",
"plt.plot(x,y)\n",
"plt.plot(x_anchor, w, 'o')\n",
"plt.plot(x_obs, y_obs, 'o')\n",
"plt.show()\n",
"\n",
"plt.plot(x,y)\n",
"#plt.plot(x_anchor, w, 'o')\n",
"plt.plot(x_obs, y_obs, 'o')\n",
"plt.show()\n"
]
},
{
"cell_type": "code",
"execution_count": 182,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
" fun: 11.239147440819652\n",
" hess_inv: array([[ 1.07069634e-07, -2.19399851e-08, -2.35650853e-08, ...,\n",
" 1.97180140e-08, -8.99381197e-09, 1.22573211e-08],\n",
" [-2.19399852e-08, 1.44162350e-07, -2.14643880e-08, ...,\n",
" 1.22140058e-08, -5.25504448e-09, 1.49612327e-08],\n",
" [-2.35650852e-08, -2.14643880e-08, 1.73413402e-07, ...,\n",
" 1.91381719e-08, -5.65598558e-09, 1.30588450e-08],\n",
" ...,\n",
" [ 1.97180141e-08, 1.22140058e-08, 1.91381719e-08, ...,\n",
" 8.34840890e-08, -2.34923177e-08, 2.34553342e-08],\n",
" [-8.99381199e-09, -5.25504444e-09, -5.65598557e-09, ...,\n",
" -2.34923177e-08, 7.56745764e-08, -8.05419260e-09],\n",
" [ 1.22573211e-08, 1.49612327e-08, 1.30588450e-08, ...,\n",
" 2.34553342e-08, -8.05419260e-09, 4.86488704e-08]])\n",
" jac: array([-0.40549755, -0.10834432, 1.17103076, -0.262972 , 0.43839586,\n",
" -1.48447418, 0.02624166, -0.00235283, 0.07683146, 0.08637464,\n",
" -0.10827446, 0.71543586, 1.71595728, 1.70811379, 0.44279325,\n",
" 0.47880816, 0.37600183, 0.25557518, -0.54365003, -0.32091105,\n",
" -0.02844369, -1.97597432, 1.31287384, -1.03044605, 0.40167236,\n",
" 1.28695178, 0.60675466, 0.78032148, 1.18266833, 0.82883811,\n",
" 1.16211414, 0.90793598, 0.20586145, -0.14965498, -0.73586488,\n",
" -1.18700123, 0.11643779, 0.138901 , -0.87827814, -0.36650085,\n",
" -0.20282149, -0.04125774, 0.85300815, 0.82188904, 1.69752896,\n",
" 0.76963806, 0.61419713, -0.10616088, -0.11282861, 0.34835446,\n",
" 0.92447591, -0.09910917, 0.06338751, 0.28566337, 0.71426046,\n",
" -1.33261108, -0.78918481, 0.46730125, -0.03459811, 1.11845565])\n",
" message: 'Desired error not necessarily achieved due to precision loss.'\n",
" nfev: 25184\n",
" nit: 160\n",
" njev: 406\n",
" status: 2\n",
" success: False\n",
" x: array([-9.06149126e-09, -7.78310715e-09, -2.16779006e-09, -8.40480349e-09,\n",
" -5.35362568e-09, -1.34437983e-08, -7.08462917e-09, -7.16653197e-09,\n",
" -6.76446149e-09, -6.63557720e-09, -7.34442377e-09, -3.58658158e-09,\n",
" 1.12490334e-09, 1.38157118e-09, -3.92554669e-09, -3.31361951e-09,\n",
" -3.37386033e-09, -3.58346301e-09, -6.81309815e-09, -5.63897766e-09,\n",
" -4.23089313e-09, -1.24918057e-08, 1.80423248e-09, -8.65462013e-09,\n",
" -2.54052367e-09, 1.27245899e-09, -2.04950543e-09, -1.54113961e-09,\n",
" -7.44339324e-12, -1.83350192e-09, -4.02576295e-10, -1.41668624e-09,\n",
" -4.27086778e-09, -5.44253859e-09, -7.53920027e-09, -9.07570690e-09,\n",
" -3.05126271e-09, -2.60501702e-09, -6.80236232e-09, -4.44174381e-09,\n",
" -3.73336457e-09, -3.11478927e-09, 7.61844411e-10, 3.83101687e-10,\n",
" 3.99828972e-09, -9.80047286e-10, -2.55783963e-09, -6.37642226e-09,\n",
" -6.77115948e-09, -4.95126508e-09, -2.46731980e-09, -6.90678613e-09,\n",
" -6.01467008e-09, -4.64648829e-09, -2.16117125e-09, -1.05584524e-08,\n",
" -8.04694125e-09, -2.55860359e-09, -4.98593042e-09, -3.14993795e-10])"
]
},
"execution_count": 182,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"def f(w):\n",
" y_pred = dist_phi_obs @ w\n",
" return np.linalg.norm(y_obs - y_pred) + np.linalg.norm(w) * 10.\n",
"\n",
"res = optimize.minimize(f, np.random.randn(60))\n",
"res"
]
},
{
"cell_type": "code",
"execution_count": 183,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"w = res.x\n",
"\n",
"y = phi(dist) @ w\n",
"plt.plot(x,y)\n",
"plt.plot(x_anchor, w, 'o')\n",
"plt.plot(x_obs, y_obs, 'o')\n",
"plt.show()\n",
"\n",
"plt.plot(x,y)\n",
"#plt.plot(x_anchor, w, 'o')\n",
"plt.plot(x_obs, y_obs, 'o')\n",
"plt.show()\n"
]
},
{
"cell_type": "code",
"execution_count": 184,
"metadata": {},
"outputs": [],
"source": [
"epsilon = 1.0\n",
"def phi(r):\n",
" return 1./(1. + (epsilon*r)**2)\n",
"\n",
"x_anchor = np.linspace(-2,4,60)\n",
"x = np.linspace(-2.5,4.5,300)\n",
"dist = np.abs(x[:, np.newaxis] - x_anchor[np.newaxis])\n"
]
},
{
"cell_type": "code",
"execution_count": 185,
"metadata": {},
"outputs": [],
"source": [
"dist_phi_obs = phi(dist_obs)"
]
},
{
"cell_type": "code",
"execution_count": 186,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
" fun: 1.1130141364534685\n",
" hess_inv: array([[ 7.44189227, -0.06493864, -1.54263244, ..., 0.22402989,\n",
" -0.38965744, -1.79286814],\n",
" [-0.06493864, 3.98242334, 1.10749992, ..., -0.02959418,\n",
" -0.01024098, 0.69709979],\n",
" [-1.54263244, 1.10749992, 1.86218962, ..., -0.1088403 ,\n",
" 0.07765537, 0.70132929],\n",
" ...,\n",
" [ 0.22402989, -0.02959418, -0.1088403 , ..., 1.05316945,\n",
" 0.16548185, 0.23161441],\n",
" [-0.38965744, -0.01024098, 0.07765537, ..., 0.16548185,\n",
" 1.70718531, 1.25240151],\n",
" [-1.79286814, 0.69709979, 0.70132929, ..., 0.23161441,\n",
" 1.25240151, 3.5806469 ]])\n",
" jac: array([ 1.43051147e-06, 3.65078449e-06, 6.22868538e-06, 8.03172588e-06,\n",
" 8.53836536e-06, 7.64429569e-06, 6.02006912e-06, 4.38094139e-06,\n",
" 2.99513340e-06, 1.89244747e-06, 2.68220901e-06, 3.23355198e-06,\n",
" 3.91900539e-06, 4.51505184e-06, 4.76837158e-06, 5.14090061e-06,\n",
" 4.48524952e-06, 4.06801701e-06, 2.93552876e-06, 1.74343586e-06,\n",
" 1.01327896e-06, 1.44541264e-06, 2.35438347e-06, 4.06801701e-06,\n",
" 5.79655170e-06, 6.28829002e-06, 5.64754009e-06, 3.76999378e-06,\n",
" 2.11596489e-06, 8.34465027e-07, 8.19563866e-07, 2.54809856e-06,\n",
" 4.60445881e-06, 5.52833080e-06, 4.72366810e-06, 2.65240669e-06,\n",
" 2.53319740e-07, -1.29640102e-06, -1.93715096e-06, -1.04308128e-06,\n",
" 3.42726707e-07, 1.92224979e-06, 2.45869160e-06, 1.98185444e-06,\n",
" 1.13248825e-06, -7.15255737e-07, -1.65402889e-06, -3.11434269e-06,\n",
" -3.81469727e-06, -3.79979610e-06, -2.96533108e-06, -2.25007534e-06,\n",
" -1.49011612e-06, -7.45058060e-08, 3.27825546e-07, 5.51342964e-07,\n",
" 5.06639481e-07, -3.42726707e-07, -1.26659870e-06, -2.45869160e-06])\n",
" message: 'Optimization terminated successfully.'\n",
" nfev: 3100\n",
" nit: 44\n",
" njev: 50\n",
" status: 0\n",
" success: True\n",
" x: array([-0.14903011, -0.07076855, 0.0086407 , 0.07528495, 0.11534474,\n",
" 0.11859798, 0.08122767, 0.00713146, -0.09222631, -0.19892983,\n",
" -0.29048417, -0.34334397, -0.33827347, -0.26769087, -0.14158604,\n",
" 0.01235469, 0.15709128, 0.26132889, 0.31396075, 0.33011581,\n",
" 0.3435716 , 0.38772175, 0.47349295, 0.5758253 , 0.63727986,\n",
" 0.59023152, 0.3894186 , 0.04001936, -0.39304191, -0.80172167,\n",
" -1.07167784, -1.12342803, -0.93936562, -0.56620331, -0.09551716,\n",
" 0.3663219 , 0.72684227, 0.92743992, 0.95228766, 0.82661209,\n",
" 0.60538774, 0.35542353, 0.13563431, -0.01759112, -0.09528641,\n",
" -0.11069781, -0.08800126, -0.05135147, -0.01769761, 0.0050947 ,\n",
" 0.01689966, 0.02263641, 0.0297913 , 0.04630687, 0.07865343,\n",
" 0.13023221, 0.199855 , 0.28136737, 0.36494243, 0.43967655])"
]
},
"execution_count": 186,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"def f(w):\n",
" y_pred = dist_phi_obs @ w\n",
" return np.linalg.norm(y_obs - y_pred) + np.linalg.norm(w) * 0.1\n",
"\n",
"res = optimize.minimize(f, np.random.randn(60))\n",
"res"
]
},
{
"cell_type": "code",
"execution_count": 187,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"w = res.x\n",
"\n",
"y = phi(dist) @ w\n",
"plt.plot(x,y)\n",
"plt.plot(x_anchor, w, 'o')\n",
"plt.plot(x_obs, y_obs, 'o')\n",
"plt.show()\n",
"\n",
"plt.plot(x,y)\n",
"#plt.plot(x_anchor, w, 'o')\n",
"plt.plot(x_obs, y_obs, 'o')\n",
"plt.show()\n"
]
},
{
"cell_type": "code",
"execution_count": 188,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
" fun: 3.141186288549833\n",
" hess_inv: array([[ 0.94028314, -0.06782996, -0.07608555, ..., 0.00478955,\n",
" 0.00429539, 0.00710602],\n",
" [-0.06782996, 0.92557276, -0.08035583, ..., 0.00112885,\n",
" 0.00747158, 0.00601882],\n",
" [-0.07608555, -0.08035583, 0.91733606, ..., -0.00622206,\n",
" 0.01266531, 0.00338509],\n",
" ...,\n",
" [ 0.00478955, 0.00112885, -0.00622206, ..., 0.91435803,\n",
" -0.13094249, -0.09948519],\n",
" [ 0.00429539, 0.00747158, 0.01266531, ..., -0.13094249,\n",
" 0.89936898, -0.11467925],\n",
" [ 0.00710602, 0.00601882, 0.00338509, ..., -0.09948519,\n",
" -0.11467925, 0.89888915]])\n",
" jac: array([1.28149986e-06, 1.60932541e-06, 1.90734863e-06, 1.96695328e-06,\n",
" 2.56299973e-06, 2.71201134e-06, 2.62260437e-06, 2.98023224e-06,\n",
" 3.21865082e-06, 3.48687172e-06, 3.90410423e-06, 3.96370888e-06,\n",
" 4.17232513e-06, 4.32133675e-06, 5.06639481e-06, 5.36441803e-06,\n",
" 5.00679016e-06, 5.60283661e-06, 5.84125519e-06, 5.99026680e-06,\n",
" 5.96046448e-06, 6.25848770e-06, 6.13927841e-06, 6.37769699e-06,\n",
" 6.37769699e-06, 6.28829002e-06, 5.81145287e-06, 5.36441803e-06,\n",
" 5.21540642e-06, 4.32133675e-06, 3.81469727e-06, 3.33786011e-06,\n",
" 3.01003456e-06, 2.80141830e-06, 2.44379044e-06, 1.90734863e-06,\n",
" 1.75833702e-06, 1.60932541e-06, 1.37090683e-06, 1.34110451e-06,\n",
" 8.34465027e-07, 1.01327896e-06, 9.53674316e-07, 9.53674316e-07,\n",
" 7.45058060e-07, 1.10268593e-06, 1.25169754e-06, 1.49011612e-06,\n",
" 1.31130219e-06, 1.90734863e-06, 1.46031380e-06, 1.49011612e-06,\n",
" 1.54972076e-06, 1.78813934e-06, 1.72853470e-06, 1.90734863e-06,\n",
" 1.72853470e-06, 1.49011612e-06, 1.90734863e-06, 1.66893005e-06])\n",
" message: 'Optimization terminated successfully.'\n",
" nfev: 1736\n",
" nit: 23\n",
" njev: 28\n",
" status: 0\n",
" success: True\n",
" x: array([ 0.01100701, 0.00169608, -0.01103041, -0.02731105, -0.04688993,\n",
" -0.06896498, -0.09206212, -0.11400435, -0.13200243, -0.14286266,\n",
" -0.14330898, -0.13041571, -0.10213771, -0.05789378, 0.0009411 ,\n",
" 0.07079919, 0.14609556, 0.21982111, 0.28441557, 0.33272001,\n",
" 0.35878282, 0.35843579, 0.32966709, 0.27290757, 0.19130073,\n",
" 0.09093406, -0.01916239, -0.12750564, -0.22134015, -0.2884838 ,\n",
" -0.31949707, -0.30961704, -0.25983822, -0.17681741, -0.07166039,\n",
" 0.04204128, 0.15045134, 0.24159126, 0.30699408, 0.3426704 ,\n",
" 0.3492436 , 0.33125988, 0.2958426 , 0.25105508, 0.20436295,\n",
" 0.16154511, 0.12621617, 0.09994635, 0.08277727, 0.07388214,\n",
" 0.07212981, 0.07644864, 0.08592869, 0.09973323, 0.11689165,\n",
" 0.13610015, 0.15564646, 0.17355028, 0.18789613, 0.19723319])"
]
},
"execution_count": 188,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"def f(w):\n",
" y_pred = dist_phi_obs @ w\n",
" return np.linalg.norm(y_obs - y_pred) + np.linalg.norm(w) * 1.0\n",
"\n",
"res = optimize.minimize(f, np.random.randn(60))\n",
"res"
]
},
{
"cell_type": "code",
"execution_count": 189,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"w = res.x\n",
"\n",
"y = phi(dist) @ w\n",
"plt.plot(x,y)\n",
"plt.plot(x_anchor, w, 'o')\n",
"plt.plot(x_obs, y_obs, 'o')\n",
"plt.show()\n",
"\n",
"plt.plot(x,y)\n",
"#plt.plot(x_anchor, w, 'o')\n",
"plt.plot(x_obs, y_obs, 'o')\n",
"plt.show()\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"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.6.5"
}
},
"nbformat": 4,
"nbformat_minor": 2
}
{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"import cv2"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [],
"source": [
"import matplotlib.pyplot as plt\n",
"import numpy as np"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"'4.1.1'"
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"cv2.__version__"
]
},
{
"cell_type": "code",
"execution_count": 70,
"metadata": {},
"outputs": [],
"source": [
"def imshow(arr):\n",
" if len(arr.shape) == 3:\n",
" plt.imshow(arr)\n",
" elif len(arr.shape) ==2:\n",
" plt.imshow(arr, cmap='gray')\n",
" else:\n",
" raise ValueError(\"Unknown shape\")"
]
},
{
"cell_type": "code",
"execution_count": 67,
"metadata": {},
"outputs": [],
"source": [
"img = cv2.imread(\"screenshot.png\")\n",
"img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)\n",
"_, img = cv2.threshold(img, 127, 255, cv2.THRESH_BINARY)"
]
},
{
"cell_type": "code",
"execution_count": 68,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([[255, 255, 255, ..., 255, 255, 255],\n",
" [255, 255, 255, ..., 255, 255, 255],\n",
" [255, 255, 255, ..., 255, 255, 255],\n",
" ...,\n",
" [255, 255, 255, ..., 255, 255, 255],\n",
" [255, 255, 255, ..., 255, 255, 255],\n",
" [255, 255, 255, ..., 255, 255, 255]], dtype=uint8)"
]
},
"execution_count": 68,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"img"
]
},
{
"cell_type": "code",
"execution_count": 71,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"imshow(img)"
]
},
{
"cell_type": "code",
"execution_count": 72,
"metadata": {},
"outputs": [],
"source": [
"k33 = cv2.getStructuringElement(cv2.MORPH_RECT, (3,3))\n",
"k55 = cv2.getStructuringElement(cv2.MORPH_RECT, (5,5))"
]
},
{
"cell_type": "code",
"execution_count": 73,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"imshow(cv2.dilate(img, k33))"
]
},
{
"cell_type": "code",
"execution_count": 75,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.image.AxesImage at 0x200af1bd400>"
]
},
"execution_count": 75,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"img_dilated = cv2.dilate(img, k55)\n",
"\n",
"plt.imshow(img_dilated, cmap='gray')"
]
},
{
"cell_type": "code",
"execution_count": 76,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.image.AxesImage at 0x200af03eb38>"
]
},
"execution_count": 76,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"img_erode = cv2.erode(img_dilated, k55)\n",
"\n",
"plt.imshow(img_erode, cmap='gray')"
]
},
{
"cell_type": "code",
"execution_count": 84,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.image.AxesImage at 0x200af2b8a58>"
]
},
"execution_count": 84,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"img_crop = img_erode[60:500, 50:700]\n",
"\n",
"plt.imshow(img_crop, cmap='gray')"
]
},
{
"cell_type": "code",
"execution_count": 85,
"metadata": {},
"outputs": [],
"source": [
"contours, hierarchy = cv2.findContours(img_crop, cv2.RETR_LIST, cv2.CHAIN_APPROX_NONE)"
]
},
{
"cell_type": "code",
"execution_count": 86,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"(38,\n",
" [31,\n",
" 27,\n",
" 29,\n",
" 26,\n",
" 24,\n",
" 24,\n",
" 26,\n",
" 26,\n",
" 34,\n",
" 29,\n",
" 34,\n",
" 22,\n",
" 24,\n",
" 27,\n",
" 24,\n",
" 25,\n",
" 25,\n",
" 25,\n",
" 25,\n",
" 26,\n",
" 27,\n",
" 25,\n",
" 25,\n",
" 26,\n",
" 29,\n",
" 26,\n",
" 27,\n",
" 23,\n",
" 25,\n",
" 23,\n",
" 26,\n",
" 25,\n",
" 25,\n",
" 23,\n",
" 22,\n",
" 27,\n",
" 26,\n",
" 2176])"
]
},
"execution_count": 86,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"len(contours), [len(c) for c in contours]"
]
},
{
"cell_type": "code",
"execution_count": 87,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"for contour in contours:\n",
" _contour=contour.squeeze(1)\n",
" plt.plot(_contour[:,0],_contour[:,1])\n",
"plt.gca().invert_yaxis()\n"
]
},
{
"cell_type": "code",
"execution_count": 94,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"center_list = []\n",
"for contour in contours:\n",
" if len(contour) < 100:\n",
" center = contour.mean(0)[0]\n",
" center_list.append(center)\n",
"\n",
"center_arr = np.array(center_list)\n",
"plt.scatter(center_arr[:,0], center_arr[:,1])\n",
"plt.gca().invert_yaxis()\n"
]
},
{
"cell_type": "code",
"execution_count": 105,
"metadata": {},
"outputs": [],
"source": [
"first = [-2, -0.0]\n",
"last = [4., 2.0]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"$$\n",
"\\begin{bmatrix}\n",
"1 & x_1 \\\\\n",
"1 & x_2\n",
"\\end{bmatrix}\n",
"\\begin{bmatrix}\n",
"\\alpha \\\\\n",
"\\beta\n",
"\\end{bmatrix}\n",
"=\n",
"\\begin{bmatrix}\n",
"y_1 \\\\\n",
"y_2\n",
"\\end{bmatrix}\n",
"$$"
]
},
{
"cell_type": "code",
"execution_count": 113,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"73"
]
},
"execution_count": 113,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"center_arr.argmin()"
]
},
{
"cell_type": "code",
"execution_count": 114,
"metadata": {},
"outputs": [],
"source": [
"first_idx = center_arr[:,0].argmin()\n",
"last_idx = center_arr[:,0].argmax()"
]
},
{
"cell_type": "code",
"execution_count": 116,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"(-2.443244739107085, 0.010905227708190177)"
]
},
"execution_count": 116,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"Ax = np.array([[1., center_arr[first_idx, 0]], \n",
" [1., center_arr[last_idx, 0]]])\n",
"yx = np.array([first[0], last[0]])\n",
"\n",
"alphax, betax = np.linalg.inv(Ax) @ yx\n",
"alphax, betax"
]
},
{
"cell_type": "code",
"execution_count": 117,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"(3.1070172929846795, -0.007643035715166249)"
]
},
"execution_count": 117,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"Ay = np.array([[1., center_arr[first_idx, 1]], \n",
" [1., center_arr[last_idx, 1]]])\n",
"yy = np.array([first[1], last[1]])\n",
"\n",
"alphay, betay = np.linalg.inv(Ay) @ yy\n",
"alphay, betay"
]
},
{
"cell_type": "code",
"execution_count": 118,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.collections.PathCollection at 0x200af07c908>"
]
},
"execution_count": 118,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"plt.scatter(alphax + betax*center_arr[:,0], alphay + betay * center_arr[:,1])\n",
"#plt.gca().invert_yaxis()\n"
]
},
{
"cell_type": "code",
"execution_count": 119,
"metadata": {},
"outputs": [],
"source": [
"dat = np.c_[alphax + betax*center_arr[:,0], alphay + betay * center_arr[:,1]]"
]
},
{
"cell_type": "code",
"execution_count": 120,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"(37, 2)"
]
},
"execution_count": 120,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"dat.shape"
]
},
{
"cell_type": "code",
"execution_count": 121,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.collections.PathCollection at 0x200af360320>"
]
},
"execution_count": 121,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"plt.scatter(dat[:,0], dat[:,1])"
]
},
{
"cell_type": "code",
"execution_count": 191,
"metadata": {},
"outputs": [],
"source": [
"import json\n",
"\n",
"with open(\"dat.json\", 'w') as f:\n",
" json.dump(dat.tolist(), f)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"original paper, \n",
"MacKay, David JC. \"Bayesian interpolation.\" Neural computation 4.3 (1992): 415-447,\n",
"use cauchy function as radial basis function, namely inverse quadratic RBF:\n",
"\n",
"$$\n",
"\\phi(r) = \\frac{1}{1+(\\epsilon r)^2}\n",
"$$\n",
"> The dataset is interpolated using a radial basis function model with a basic of 60 equally spaced Cauchy functions, all with radius 0.2975\n",
"\n",
"function approximation using radial basis function:\n",
"$$\n",
"y(x) = \\sum_{i=1}^N w_i \\phi(||x - x_i||)\n",
"$$"
]
},
{
"cell_type": "code",
"execution_count": 130,
"metadata": {},
"outputs": [],
"source": [
"epsilon = 0.2975\n",
"def phi(r):\n",
" return 1./(1. + (epsilon*r)**2)\n",
"\n",
"x_anchor = np.linspace(-2,4,60)\n",
"x = np.linspace(-2.5,4.5,300)\n",
"dist = np.abs(x[:, np.newaxis] - x_anchor[np.newaxis])\n",
"\n",
"w = np.random.randn(60)\n",
"y = phi(dist) @ w"
]
},
{
"cell_type": "code",
"execution_count": 131,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"[<matplotlib.lines.Line2D at 0x200b0653080>]"
]
},
"execution_count": 131,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"plt.plot(x,y)\n",
"plt.plot(x_anchor, w, 'o')"
]
},
{
"cell_type": "code",
"execution_count": 132,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"[<matplotlib.lines.Line2D at 0x200b06d6358>]"
]
},
"execution_count": 132,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"w = np.random.randn(60)\n",
"y = phi(dist) @ w\n",
"plt.plot(x,y)\n",
"plt.plot(x_anchor, w, 'o')"
]
},
{
"cell_type": "code",
"execution_count": 134,
"metadata": {},
"outputs": [],
"source": [
"from scipy import optimize"
]
},
{
"cell_type": "code",
"execution_count": 137,
"metadata": {},
"outputs": [],
"source": [
"x_obs = dat[:,0]\n",
"y_obs = dat[:,1]\n",
"\n",
"dist_obs = np.abs(x_obs[:, np.newaxis] - x_anchor[np.newaxis])\n",
"dist_phi_obs = phi(dist_obs)"
]
},
{
"cell_type": "code",
"execution_count": 146,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
" fun: 4.235308423650117\n",
" hess_inv: array([[ 8.81541715e-01, -1.10011773e-01, -1.05072329e-01, ...,\n",
" -4.73026451e-03, -5.19412349e-03, -1.25539241e-02],\n",
" [-1.10011773e-01, 8.93236468e-01, -9.63543240e-02, ...,\n",
" -7.49842441e-03, -1.32449216e-02, -8.57974875e-03],\n",
" [-1.05072329e-01, -9.63543240e-02, 9.04113064e-01, ...,\n",
" -4.02001481e-04, 2.54048685e-03, -8.92364772e-03],\n",
" ...,\n",
" [-4.73026451e-03, -7.49842441e-03, -4.02001481e-04, ...,\n",
" 8.95376388e-01, -1.18057867e-01, -1.14156609e-01],\n",
" [-5.19412349e-03, -1.32449216e-02, 2.54048685e-03, ...,\n",
" -1.18057867e-01, 8.59327427e-01, -1.23141902e-01],\n",
" [-1.25539241e-02, -8.57974875e-03, -8.92364772e-03, ...,\n",
" -1.14156609e-01, -1.23141902e-01, 8.62725502e-01]])\n",
" jac: array([1.78813934e-06, 1.96695328e-06, 1.84774399e-06, 1.84774399e-06,\n",
" 2.08616257e-06, 2.26497650e-06, 2.02655792e-06, 2.38418579e-06,\n",
" 2.26497650e-06, 2.50339508e-06, 2.62260437e-06, 2.68220901e-06,\n",
" 2.80141830e-06, 3.15904617e-06, 3.27825546e-06, 3.09944153e-06,\n",
" 3.33786011e-06, 3.69548798e-06, 3.81469727e-06, 3.99351120e-06,\n",
" 4.23192978e-06, 4.35113907e-06, 4.58955765e-06, 4.88758087e-06,\n",
" 4.88758087e-06, 5.06639481e-06, 4.94718552e-06, 5.18560410e-06,\n",
" 5.12599945e-06, 4.76837158e-06, 4.94718552e-06, 4.76837158e-06,\n",
" 4.82797623e-06, 4.29153442e-06, 4.11272049e-06, 3.93390656e-06,\n",
" 3.45706940e-06, 3.15904617e-06, 3.33786011e-06, 2.56299973e-06,\n",
" 2.38418579e-06, 2.32458115e-06, 1.96695328e-06, 2.02655792e-06,\n",
" 1.60932541e-06, 1.78813934e-06, 2.08616257e-06, 2.02655792e-06,\n",
" 2.20537186e-06, 2.50339508e-06, 2.74181366e-06, 2.98023224e-06,\n",
" 3.45706940e-06, 3.81469727e-06, 3.93390656e-06, 4.52995300e-06,\n",
" 4.70876694e-06, 5.36441803e-06, 5.90085983e-06, 5.96046448e-06])\n",
" message: 'Optimization terminated successfully.'\n",
" nfev: 1488\n",
" nit: 19\n",
" njev: 24\n",
" status: 0\n",
" success: True\n",
" x: array([-5.93741752e-02, -5.72572462e-02, -5.48561347e-02, -5.21839308e-02,\n",
" -4.92590376e-02, -4.61052921e-02, -4.27515090e-02, -3.92301304e-02,\n",
" -3.55781761e-02, -3.18344023e-02, -2.80395108e-02, -2.42339722e-02,\n",
" -2.04567222e-02, -1.67435979e-02, -1.31261232e-02, -9.62945522e-03,\n",
" -6.27109753e-03, -3.06045493e-03, 1.98946453e-06, 2.92563697e-03,\n",
" 5.72875530e-03, 8.43806341e-03, 1.10878231e-02, 1.37179166e-02,\n",
" 1.63716366e-02, 1.90942566e-02, 2.19295378e-02, 2.49182863e-02,\n",
" 2.80947068e-02, 3.14854576e-02, 3.51076152e-02, 3.89664175e-02,\n",
" 4.30559588e-02, 4.73576219e-02, 5.18420230e-02, 5.64686306e-02,\n",
" 6.11878648e-02, 6.59433424e-02, 7.06736911e-02, 7.53140756e-02,\n",
" 7.98008927e-02, 8.40717262e-02, 8.80684562e-02, 9.17395360e-02,\n",
" 9.50401231e-02, 9.79350559e-02, 1.00397499e-01, 1.02410229e-01,\n",
" 1.03965793e-01, 1.05065299e-01, 1.05718065e-01, 1.05940589e-01,\n",
" 1.05755724e-01, 1.05190845e-01, 1.04277263e-01, 1.03049363e-01,\n",
" 1.01542143e-01, 9.97920129e-02, 9.78343836e-02, 9.57035634e-02])"
]
},
"execution_count": 146,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"def f(w):\n",
" y_pred = dist_phi_obs @ w\n",
" return np.linalg.norm(y_obs - y_pred) + np.linalg.norm(w)\n",
"\n",
"res = optimize.minimize(f, np.random.randn(60))\n",
"res"
]
},
{
"cell_type": "code",
"execution_count": 147,
"metadata": {},
"outputs": [],
"source": [
"w = res.x"
]
},
{
"cell_type": "code",
"execution_count": 150,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"[<matplotlib.lines.Line2D at 0x200b10def28>]"
]
},
"execution_count": 150,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAXQAAAD4CAYAAAD8Zh1EAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8QZhcZAAAgAElEQVR4nO3dd3zV5d3/8dcnAwIBwkggYYYlKBuiCLgHIjg6cLVavWtFrVbau3Z4975rau/77ro7UulPtI6qdeNARStUVIYDAgKyNySQsAmQQdb1+yPBQjgnOUnOyfeM9/PxyMOcc66c8yEm73Pl+l7DnHOIiEjki/O6ABERCQ4FuohIlFCgi4hECQW6iEiUUKCLiESJBK9eODU11WVmZnr18iIiEWnZsmX7nXNpvh7zLNAzMzPJzc316uVFRCKSme3w95iGXEREooQCXUQkSijQRUSihAJdRCRKKNBFRKKEAl0kwszZOoeJsyYy/OnhTJw1kTlb53hdkoQJz6Ytikjjzdk6h+yPsymrKgOgoLiA7I+zAZjSb4qHlUk4UA9dJILkLM/5MsxPKKsqI2d5jkcVSThpMNDNLMnMlpjZSjNbY2a/8NGmtZm9ZGabzewzM8sMRbEisa6wuLBR90tsCaSHfhy4xDk3AhgJTDKzc+u0uR045JwbAPwR+E1wyxQRgPTk9EbdL7GlwUB3NY7V3kys/ah7zNG1wNO1n88CLjUzC1qVIgLA9NHTSYpPOuW+pPgkpo+e7lFFEk4CGkM3s3gzWwHsBeY55z6r06QHkAfgnKsEioAuPp5nmpnlmlnuvn37mle5SAya0m8K2eOzyUjOwDAykjPIHp+tC6ICgDXmTFEz6wi8DnzPObf6pPvXAFc45/Jrb28BznHOHfD3XFlZWU6bc4mINI6ZLXPOZfl6rFGzXJxzh4EPgUl1HsoHetW+WAKQAhxsdKUiItJkgcxySavtmWNmbYDLgPV1mr0J3Fr7+VRgvmtM119ERJotkIVFGcDTZhZPzRvAy865t83sISDXOfcm8ATwrJltpqZnfmPIKhYREZ8aDHTn3CpglI/7f37S52XAdcEtTUREGkMrRUWimPZ9iS3ay0UkCszZOoec5TkUFheSnpz+5bx07fsSWxo1bTGYNG1RJDjqbtgFNYuNkhKSOHz88GntM5IzmDt1bkuWKEFU37RF9dBFIpy/Dbvq3neC9n2JXhpDF4lwjQ1o7fsSvRToIhHOX0CntErRvi8xRoEuEuH8bdj1wNgHfO77AmjmS5TSGLpIhDsxY6XuLJcT9588o0UnHkU3zXIRiSETZ02koLjgtPs18yVyaJaLiAD+L6AWFBcwcdZEnz18iRwaQxcJY8Fe6VnfDJeC4gIc7sthGI2tRx4FukiYOjHeHcyg9XUB1RcdPB2ZFOgiYcrfgqHmBK2vE4/80QKkyKMxdJEw5S9Qmxu0U/pNOWV83N+FUi1AijzqoYuEKX+BGuygre/gae3WGFkU6CJhqr6gDSZ/B08DQR/Dl9DSPHSRMOZrW9yWmk6oOevhSfPQRSJU3fHulhSqMXwJHQ25iIhPLTWGL8GjQBcRn1pqDF+CR0MuIuJTQ5t+SfhRoIuIX16O4UvjachFRCRKNBjoZtbLzD4ws3VmtsbMThtAM7OLzKzIzFbUfvw8NOWKiIg/gQy5VAI/dM4tN7P2wDIzm+ecW1un3ULn3FXBL1FERALRYA/dOVfgnFte+/lRYB3QI9SFiYhI4zRqDN3MMoFRwGc+Hh5nZivN7F0zG+Ln66eZWa6Z5e7bt6/RxYqIiH8BB7qZtQNeBb7vnDtS5+HlQB/n3AjgYeANX8/hnHvMOZflnMtKS0tras0iIuJDQIFuZonUhPlzzrnX6j7unDvinDtW+/k7QKKZpQa1UhERqVcgs1wMeAJY55z7g5826bXtMLNzap/3QDALFRGR+gUyy2UCcAvwhZmtqL3vP4DeAM65mcBU4G4zqwRKgRudV9s4iojEqAYD3Tm3CLAG2swAZgSrKBERaTytFBUJEzodSJpLe7mIhIE5W+eQ/XH2l4dCnzgdCNBeKhIw9dBFwkDO8pwvw/yEsqoycpbneFSRRCIFukgY0OlAEgwKdJEwoNOBJBgU6CJhQKcDSTDooqhIGIik04HKKqo4WFzOweJyDhSXc7iknLKKKsoqqjleWUV5ZTVmRkKcER9X8992SYm0T0qgQ1IiHdok0LV9El2SWxEXV++MaGkkBbpImAin04HKKqrYvPcYGwqPsnnfMfIOlpB3qJT8gyUcKC4PymskxhvdOiSRkZJE787J9O+aTL/UdvRPSyYzNZnEeA0gNJYCXSTGVVZVs77wKJ/vPMTynYdZlX+Y7QdKqKquWeydEGf06NSGXp3aMnFIN3p0bEOXdq3pnNyKLsmt6Ni2FW1axZOUEEfrxHhaxcfhcFRVOyqrHZVVjmNllRwpq+BIWQVFJRXsPXqcgqIy9hwpY/fhUhZt3sery/O/rKl1Qhxnde/A8B4pDO/ZkeE9U+iX1o549ejrpUAXiTHOOTbtPcaCjftYsGk/udsPUlJeBUBqu9aM7NWRycMyGJTensHp7cnskkxCM3vLnZNbNdjmaFkF2/YXs2XfMdbsOsKqXUW8siyfpz/ZAUBKm0TO7deZcf26MH5AKgO7tqN2CympZV5tuZKVleVyc3M9eW2RWFNaXsVHG/fy/rq9LNy0n8IjNXPe+6clM2FAKmP6dGJ070707NQmrEKyqtqxbf8xVuYVsWTbQT7eup+8g6UApLZrxfkD07jszG5cOCiNdq1jo39qZsucc1k+H1Ogi0Sn0vIqPtiwlzlfFPDB+r2UlFeR0iaR8wakcv7AVM4bmErPTm29LrPR8g6W8MmWAyzesp+PNu7jcEkFreLjGNe/C5ef1Y2JZ3Wja4ekhp8oQinQRWJEdbVj8Zb9vJybzz/X7qG0oorUdq24Ykg6k4dlMLZv52YPn4STyqpqlu04xLy1e5i3bg87DpQQZzCufxeuHdmDSUPT6ZCU6HWZQVVfoMfG3ygiUS7/UAmv5OYza1k+uw6X0rFtIl8f06M2xLtE7cXEhPg49vMpC8pyONS1kL69u3JW6xv4YmNbfjxrFf/5xmouO7MrXx3Vk4sHpUXVm5kvCnSRCFVd7fho4z6e+ng7CzfVnNF73oBUfnrlYC4/qxtJifEeVxh6dTc121+2hyUVj/Hg1x+ke+IEZn++i7dXFfDOF4V069CaG7J6cf3ZvSJyqCkQGnIRiTDFxyt5bXk+Ty3eztb9xXTr0JqbzunN1DE9ozao/Jk4ayIFxQWn3Z+RnMHcqXMBqKiq5oP1e3lhyU4+3FjzxnfhGWl8c2wfLhncNeL+etGQi0gU2Hu0jCcWbeOFz3ZypKySET1TyLlxJFcOzaBVQnQPJfhT36Zmc7bOOXXl7YXT+eVXLubl3HxeWrqTO57JpU+Xtvzb+Eyuy+pFchTMklEPXSTM7T5cymMLtvLCkp1UVFVz5dAMvn1eX0b37hhWUwy94K+H3rF1R8oqy07ZkjgpPolrB1zLgvwFFBYXkpKYRtKxq9i09Qw6JCVw0zm9uXV8Jt07tmnJf0KjaZaLSATaeaCERz7azKxl+TgHXxvdg7svGkDf1GSvSwsbdcfQoSa4W8e3pqi8qMGvT4pPYny3SSzevZAydwBX2ZEhSTfy0GW3MDi9QyhLbzIFukgE2XOkjD+/v4mXluYRZ8b1Z/fkrgv7x9z4eKBOG1oZPZ0HFj6Ao2nZ5qoTKSv4Ghf3nMR9lwxkWM+UIFfcPAp0aXG+fsnCZeOpcFVUWsHMj7bw1OJtVFY5bjqnN/dcPID0lOhdJBMq/oZiApUcn0rJ5p9ypKySiwal8b1LBjCmT+cgVth0uigqLUrnYzZOWUUVf/t4O498uIWi0gquHdmdf7/8DPp00dBKU00fPf20oZjGKKk6wOKfXsKzn+7g8YXb+PojnzCuXxfuv+KMsAl2XxrsoZtZL+AZIB2oBh5zzuXUaWNADjAZKAFuc84tr+951UOPXoFMJZOaTbLeW7OH/3lnLXkHS7l4UBr3XzGIId3D60/8SFX3r8QLel7A7M2zAwr5k39WS8oref6zncz8aCv7jx3n0sFduf+KQZyZ4c0Ye3N76JXAD51zy82sPbDMzOY559ae1OZKYGDtx1jgkdr/SgxqzPmYsTo0s77wCA+9tZaPtxzgjG7t+PvtYzlvYKrXZUUVX/vLj+o6qsGQT4pP4oKeFzBx1sRTfi4X/PgKnlq8nUc/2sLkPy/k6uE1f0llhtFF6kaPoZvZbGCGc27eSfc9CnzonHuh9vYG4CLnnN9BLPXQo1d9U8naJLRp8Jcpe3x21Ib6oeJy/jBvIy+ufYOkbnMh4TAZMfRGFo4C6cmf/HNZVFLBowu28NTi7ZRXVXN9Vi+mXzqwxa51BO2iqJllAguAoc65Iyfd/zbwa+fcotrb7wM/cc75TWwFevTyNZUsMS4R5xyVrrLBr4/GoZnqasdLuXn8+t31lCQuIbnH61Txr5N/ov2NLJIEOmS492gZf5m/meeX7CTOjNvP68vdF/WnfYg3A6sv0ANeXmZm7YBXge+fHOYnHvbxJae9U5jZNDPLNbPcffv2BfrSEmGm9JtC9vhsMpIzMIyM5AzaJrQNKMzB/5BNpNq45yjXP/oJD7z2BYPS29Oz/4enhDlAWVUZOctz/DyDtKRAhwy7tk/iF9cOZf4PL+LKoen8vw+3cPH/fchzn+2gsqq6JUo9TUCBbmaJ1IT5c86513w0yQd6nXS7J7C7biPn3GPOuSznXFZaWlpT6pUIMaXfFOZOncuqW1cxd+pcjpTX7QP4l56cHsLKWk5ZRRW/e289k3MWsnnfMX43dTgvTTuXA2V7fbaPtjeySOXv58/f/b06t+VPN45i9j0T6Jfajp+9vporcxby4Qbf/59DqcFAr53B8gSwzjn3Bz/N3gS+ZTXOBYrqGz+X2BNoSCfFJzF99PQQVxN6CzftY+IfF/CXD7Zw7cgevP/vF3JdVi/MrNGBIS1r+ujpJMWfOh4eyM/liF4deenOc5l582jKq6q57aml3PLEZ6wvDLwz01yB9NAnALcAl5jZitqPyWZ2l5ndVdvmHWArsBn4K/Dd0JQrkcrfL8kNg244ZWgm0seRi0oquP+VldzyxBIS4ozn7xjL768fQZd2rb9s09TAkJbha8gw0J9LM2PS0Azm/uAC/nPKmazMO8zknIX87PUvOFhc3uDXN5dWikqLac4UxUiY3jh//R4eeO0L9h8r5+4L+3PvJQP87kkeCf8eab5DxeXkvL+JZz/dQXKreP798jO4+dw+zTpoQ0v/JaL524ApXHrzRSUVPPT2Wl5dns/g9Pb833UjGNpDi4PkXzYUHuWht9eweHPNuoPsa4Ywvn/T1h0EZZaLiC9zts5h4qyJDH96OBNnTWTO1jlBf42c5Tmnre4Ll1kh89fvYeKfPuKNFbv43iUDePPe8xTmcppB6e35++1jmXnzGErKq1iRdzgkr6O9XKTJWmrPlsasPG0px45X8tBba3g5t6ZX/sStZyvIpV414+vpXDQojVBtY69Alyarr+fcnECvO76c0jqFw8dP79F4NStk2Y5D/OClFeQfKuGei/sz/dIzYvbEIGm8UJ71qkCXJgtFz9lXrz/BEkiMS6SiuuLLdl7MCqmsqubh+ZuZ8cFm0jsk8eK0cZzTN3x33pPYo0CXJktPTve5RLo5PWdfvf5KV0lKYgptE9t6Nitk+/5ivv/SClbkHeZro3uQfc0QOoR4ibdIYynQpcl87Tnd3J6zv979kfIjLLppUZOft6mcc7y0NI+H3l5LQpwx4xujuGp49xavQyQQCnRpshM95GDOpw5Fr7+pikor+Omrq3h3dSHj+3fh99ePICMlvA8QltimQJdm8bXndHOEotffFJ/vPMT3XvicwqIyHrhyMHec34+4uBBNTRAJEgW6hJVQ9Pobo7ra8fiirfz2HxtIT0nilbvGMap3pxZ5bZHmUqBL2Am01x/s5fMHjh3nh6+s5MMN+5g0JJ3fTB1OShtd+JTIoUCXiBTsRU2fbj3A9Bc/51BxBb+8dgg3n9sHC9XqD5EQ0WoIiUjB2g6gqtqR889NfOOvn9K2VQKv3zOeW8ZlKswlIqmHLhEpGIuaDhw7zn0vfs7izQf4ysju/PdXh9GutX4lJHLpp1ciUnOnN67KP8xdzy5jf3E5v/n6MK6vPXxCJJJpyEUC1hI7KwaqOYdEvLw0j6kzP8HMePWu8dxwdm+FuUQF9dAlIC21s2KgmjK98XhlFb94ay3Pf7aTCQO68PBNo+mc3KqlShYJOR1wIQGZOGuizyGOjOQM5k6d60FFjVNQVMrdf1/OirzD3HVhf+6feEazTo0JlE4mkmCr74AL9dAlIOG4J3mgPt16gHufX05peRWPfHM0Vw7LaJHXDbe/aiT6aQxdAhKJJ9U753h84Va++fhndGiTyOx7J7RYmEN4n7Qk0UmBLgGJtJPqS8orue/FFfz3nHVcOrgrs++ZwICu7Vu0hkj+q0Yik4ZcJCBe77HSGNv3F3Pns8vYuPcoP7piEHdf2N+TjbXCaedIiQ0KdAlYsHdWDIX56/cw/cUVxMcZT//bOVxwRppntYTLzpESOxoMdDN7ErgK2OucG+rj8YuA2cC22rtec849FMwiRRpSXe348/xN/OmfmxjSvQMzbx5Dr85tPa0pkv6qkegQSA/9b8AM4Jl62ix0zl0VlIpEGqmopIIfvLyC+ev38rXRPfjfrw4L6UG8jREJf9VI9Ggw0J1zC8wsM/SliDTe+sIj3PnsMnYdKtUuiRLzgjWGPs7MVgK7gfudc2uC9Lwifs1esYufvvoF7ZMSeOnOcxnTp7PXJYl4KhiBvhzo45w7ZmaTgTeAgb4amtk0YBpA7969g/DSEosqqqr59bvreWLRNs7O7MRfvjmaru1rplRqZabEsmbPQ3fOHXHOHav9/B0g0cxS/bR9zDmX5ZzLSkvzbvaBRK59R49z8+Of8cSibdw2PpPn7zj3lDDP/jibguICHO7LlZlebiIm0pKaHehmlm61g5Zmdk7tcx5o7vOK1LV85yGufngRK/MP88cbRpB9zRAST9qPRSszJdYFMm3xBeAiINXM8oEHgUQA59xMYCpwt5lVAqXAjc6rHb8kKjnneH7JTrLfXEN6ShKv3T2Bs7p3OK2dVmZKrAtklstNDTw+g5ppjSJBV1ZRxc9nr+bl3HwuPCONnBtH0rGt7y1vtTJTYp32cpGwtetwKdfN/ISXc/O575IBPHnb2X7DHCJvvxmRYNPSfwlLizfv53svfE5FZTV//VYWl5/VrcGv0cpMiXUKdAkrzjkeXbCV3/5jPf3T2vHoLWPol9Yu4K/XykyJZQp08cmL+dzHjlfyo1dW8u7qQqYMy+C3U4eT3Fo/oiKB0m+LnMaLk3a27DvGnc8uY+u+Y/xs8pl85/y+WsIv0ki6KCqnaen53O+tKeTaGYs5WFzO328fyx0X9FOYizSBeuhympaaz11V7fjDvA385YMtjOiZwiM3j6F7xzZBfQ2RWKJAl9O0xHzuQ8XlTH9pBQs27uPGs3uRfc2QsNnyViRSachFThPq+dyrdxVx9YxFfLrlAL/62jB+/fXhCnORIFAPXU4TyvncL+fm8V9vrKZzcitevmscI3t1bPZzNkQ7MEqsUKCLT8Gez328sorsN9fywpKdjO/fhYdvGkWXdq2D9vz+tPSMHb15iJc05CIht+twKdfP/IQXluzk7ov688y3z2mRMIeWnbGj7XvFawp0CalFm/Zz1Z8XsnVfMY/eMoafTBpMQnzL/di15A6M2r5XvKYhFwmJ6mrHIx9t4fdzNzCgaztm3ty4JfzB0pI7MGr7XvGaeugSdEWlFUx7dhm/e28DVw3vzhv3TPAkzKFld2D09yah7XulpSjQJajWFx7h2hmL+HDDXh68+ixybhxJ21be/SE4pd8Ussdnk5GcgWFkJGeQPT47JBcqtX2veE1DLhI0b3y+i5++tooOSYm8OO1csjI7e10S0HI7MGr7XvGaAl2a7XhlFf8zZx3PfLKDc/p2ZsY3Rn15cHOs0fa94iUFujTLjgPF3PP8clbvOsId5/flx5MGn3Jws4i0HAW6NNm7XxTw41mrMCPgU4VEJHQU6NJoxyur+NU76/nbx9sZ0asjM24aRa/Obb0uSyTmKdClUfIOlnDP88tZlV/E7ef15SeTBtMqQUMsIuFAgS4B+8fqQn40ayUAj94yhiuGaH61SDhpsGtlZk+a2V4zW+3ncTOzP5vZZjNbZWajg1+meKm8spqH3lrLXX9fRt/UZN6573yFuUgYCqSH/jdgBvCMn8evBAbWfowFHqn9r0SB7fuLmf7i56zML+K28Zk8MHkwrRO0d7lIOGow0J1zC8wss54m1wLPOOcc8KmZdTSzDOfc6RtoSMRwzvHq8l08OHs1CfFxzLx5NJOGZnhdlojUIxhj6D2AvJNu59fed1qgm9k0YBpA7969g/DSEgpFpRX85xureWvlbsb27cwfbxipsz5FIkAwAt3X8ezOV0Pn3GPAYwBZWVk+24i3lu04yH0vrKDwSBn3TzyDuy8aQHycr//FIhJughHo+UCvk273BHYH4XmlBVVWVfOXD7bw5/mb6N4xiVfuGsfo3p28LktEGiEYgf4mcK+ZvUjNxdAijZ9Hll2HS/n+i5+zdPshvjKyO7/8ylDaJyV6XZaINFKDgW5mLwAXAalmlg88CCQCOOdmAu8Ak4HNQAnwb6EqVoLLOcdry3eR/dYanIM/3jCCr47q6XVZItJEgcxyuamBxx1wT9Aqkhax/9hx/uO1L5i7dg9nZ3bi99eNpHeX2Fq+rwOdJdpopWgM+sfqQn72+hccLavkPyYP5vbz+vGP7e/wnQ9iJ9xOHOh84gzQEwc6AwH9u/VmIOFIgR5Dikor+MVba3ht+S6GdO/A83eMZFB6+2aHWySq70Dnhv7Nsfj9ksigXZVixKJN+5n0pwXMXrGb+y4ZwOvfncCg9PZAbJ5W35wDnWPx+yWRQT30KFdUWsGv3lnHi0vz6JeWzKt3j2dkr46ntInF0+rTk9MpKD59MlYgBzrH4vdLIoN66FHsvTWFXP6Hj3g5N487L+zHO/edf1qYQ2yeVt+cA51j8fslkUGBHoX2HT3OPc8t585nl9E5uRVv3DOBB648k6RE35tqxeJp9VP6TSF7fDYZyRkYRkZyBtnjswMaA4/F75dEBg25RJET88ofenstpeVV3D/xDO68sH+DZ3zG6mn1TT3QOVa/XxL+rGYaecvLyspyubm5nrx2NNpxoJj/mr2GBRv3MaZPJ37z9WEM6Nre67JEJMjMbJlzLsvXY+qhR7iyiipmfrSF//fhFhLjjOyrz+Jb4zKJ04ZaIjFHgR7BPtywlwffXMOOAyVcNTyD/5xyFukpSQ1/oYhEJQV6BNp9uJRfvr2Wd1cX0i81mb/fPpbzBqZ6XZaIeEyBHkHKK6t5avE2ct7fRFW140dXDOI75/fVkXAiAijQI4Jzjn+u28v/vrOObfuLuezMrjx49RB6dY6tzbREpH4K9DC3ruAI/z1nLYs3H6B/WjJP3XY2Fw/u6nVZIhKGFOhhav+x4/x+7kZeWrqTDm0S+cU1Q/jG2N4NzikXkdilQA8zxccreXLRNh5dsJWyiipuHZ/J9EsH0rFtK69LE5Ewp0APE+WV1bywZCcPz9/E/mPlXHZmNx6YPJj+ae28Lk1EIoQC3WNV1Y43V+7iD/M2knewlLF9O/PoLYMZ00cHNItI4yjQPVJd7Zi7dg9/+udG1hceZUj3Djz97WFcMDAVM63yFJHGU6C3sOpqx7urC3l4/ibWFx6lb2oyD980iinDMrRcX0SaRYHeQqqqHW+v2s2M+ZvZtPcY/dOS+dMNI7lqeAYJmrkiIkGgQA+x45VVzF6xm5kfbmHr/mLO6NaOh28axeRhGcSrRx4RdCC0RAoFeogUlVTw3JId/G3xdvYePc6ZGR145JujuWJIuoZWIogOhJZIElCgm9kkIAeIBx53zv26zuO3Ab8DdtXeNcM593gQ64wYeQdLeHLxNl5amkdJeRXnD0zl99eP4LwButgZieo7EFqBLuGmwUA3s3jgL8DlQD6w1MzedM6trdP0JefcvSGoMew55/h060Ge/XQ7/1hdSJwZ14zszh3n9+PMjA5elyfNoAOhJZIE0kM/B9jsnNsKYGYvAtcCdQM95hwtq+C15bt49tMdbN57jI5tE7nj/H7cNiGTjJQ2Xpd3Co0DN016cjoFxQU+7xcJN4EEeg8g76Tb+cBYH+2+bmYXABuBHzjn8uo2MLNpwDSA3r17N77aMLF29xGe+2wHr3++i5LyKkb0TOH/rhvBVcMz/B7E7CWNAzfd9NHTT/negQ6ElvAVSKD7GvitexDpW8ALzrnjZnYX8DRwyWlf5NxjwGNQc6ZoI2v11MHicmav2MUrufmsLThC64Q4rhnRnZvP7cOIXh29Lq9eGgduOh0ILZEkkEDPB3qddLsnsPvkBs65Ayfd/Cvwm+aX5r3Kqmo+2riPV3LzeX/9HiqqHMN6pPCLa4ZwzYjudEqOjA2zNA7cPFP6TVGAS0QIJNCXAgPNrC81s1huBL5xcgMzy3DOnRhovAZYF9QqW1B1tWPp9oO8vaqAd1cXsP9YOV2SW/GtcZlMHdMzIi9yahxYJDY0GOjOuUozuxd4j5ppi08659aY2UNArnPuTeA+M7sGqAQOAreFsOagc86xIu8wb60s4J0vCig8UkZSYhyXntmNa0d05+LBXSN6H3KNA4vEBnPOm6HsrKwsl5ub68lrA1RUVbNk20Hmrd3DvLV72HW4lFbxcVw4KI2rR3Tn0sFdSW4dPeuuNMtFJDqY2TLnXJbPx2Ip0I+UVfDRhn3MW7uHDzbs5WhZJa0T4jh/YCqThmYwcUg3OiQltmhNIiKNUV+gR08X1IfKqmpW7Spi0ab9LNy0j893Hqay2tEluRVXDk3nsjO7cf7ANNq0Cr+phiIijRVVge6cI+9gKQs372Phxv18vGU/R8oqMYNhPVKYdkE/LhnclVG9O4VhfWMAAAheSURBVGljLBGJOhEd6NXVjg17jrJ0+0GWbj/E0m0HKTxSc+Gve0oSVw7N4PwzUhnfP5XOETLFsCk0Pi4iEIGBvuNAMXO+KGDptoPk7jjE0bJKANI7JHF2386cndmJCQNS6ZeaHBObYWkVqIicEHGBvr7wKL/9xwYGdG3HVcMzODuzM2dndqZnpzYxEeB1aRWoiJwQcYF+wcA0lv/X5VE9hNIYWgUqIidE3GqZNq3iFeYn8bfaU6tARWJPxAW6nGr66OkkxSedcp9WgYrEpogbcpFTaTdAETlBgR4FtBugiICGXEREooYCXUQkSijQRUSihAJdRCRKKNBFRKKEZrmInEQbnYXIqpfh/YegKB9SesLAibBp7r9uX/rzmnbBaDP8eu/+nR6LqQMuROpTd6MzqFmklT0+OzpDvW7IBitUfd1e+TxUlPqvJS4RzKCqvPltWreH0kNR+0ahE4tEAjBx1kSfh2lnJGcwd+pcDyqqR0M93oZCq00nKD92ajgGK1RPY4A3ORO0f1NiG7j6z2ER6gp0kQAMf3o4zkfwGMaqW1eF5kWb0ksOpMdbV5OCWE6R0gt+sNrrKmL3CDqvaBw2MqUnp/vsofvd6CzYveSiPHjju6cGb1Ee5D7xr9csyoPcJ2l0j7e6onHt5XRF+V5X0CD10IMsGOOwekMIMT9BPKfyINlpnSk7aV/9pOpqskuMKX3US26eBoZdQjbcE0QR0ENXoAdZc8dhY+7C3AmhukAXyNjxSeYktyWnc0cK4+NJr6xi+qHDTCku8dHSw3HhUAlVqCa2gRHfaNxfL01pE8rrAtE0hm5mk4AcIB543Dn36zqPtwaeAcYAB4AbnHPb63vOcAr0YPaImzsOG/YX5kIRvKH8RfS6VxcyjXxD8fV9CNWMEC9niISyYxAGYQ7NDHQziwc2ApcD+cBS4Cbn3NqT2nwXGO6cu8vMbgS+6py7ob7nDZdAD3aPuLmBHLQLc0292BY2MyNiVKC9xYZ6vIGEVhiFlASuuYE+Dsh2zl1Re/sBAOfcr05q815tm0/MLAEoBNJcPU8eLoEe7B5xc98g/NZT5Zi7M8TBW5eCuAEe9pIVxDGrubNcegB5J93OB8b6a+OcqzSzIqALsL9OIdOAaQC9e/cOqPhQa/KZnH56wFPefwgqD5LTpTOF8UZ6lWP63l1Mmf0TuLS45mvr+WWd3msY2dW7KYs79cLc9AMHAed71kPdmRGlB0+vtymzHGJ1ZkQ49JIV2NIEgfTQrwOucM59p/b2LcA5zrnvndRmTW2b/NrbW2rbHPD3vGHfQ09MYe6ewy0/5osxJ7kNOZ06UpjQ0IW5KBbKMfS6veIIH1OV2NLcHno+0Ouk2z2B3X7a5NcOuaQAPrqJ4Wd66liyj75+eo+4YAccPVJzR91ecVN7wAH1eB1TiksiJ8AjYcl23TaBhrECWyJMIIG+FBhoZn2BXcCNwDfqtHkTuBX4BJgKzK9v/DycTPn8dag8EP094mCNobf0XhnBCl6Fs8SABgO9dkz8XuA9aqYtPumcW2NmDwG5zrk3gSeAZ81sMzU98xtDWXRQFeUzpbZXHD48utgW6jFfhapISGlh0R+H1gypNFcwFzBoSpqI+KG9XOpz6c/hrftOXcLt9ZhvU4NYAS4S0xToJ0KwKavLNPQgImFEgQ41Aau5wCIS4XSmqIhIlFCgi4hECQW6iEiUUKCLiEQJBbqISJTwbGGRme0Ddnjy4v6lUmeHyDAXSfVGUq0QWfVGUq0QWfWGY619nHNpvh7wLNDDkZnl+luBFY4iqd5IqhUiq95IqhUiq95IqhU05CIiEjUU6CIiUUKBfqrHvC6gkSKp3kiqFSKr3kiqFSKr3kiqVWPoIiLRQj10EZEooUAXEYkSCvQ6zOx3ZrbezFaZ2etm1tHrmvwxs+vMbI2ZVZtZ2E6tMrNJZrbBzDab2U+9rqc+Zvakme01s9Ve19IQM+tlZh+Y2bran4PpXtfkj5klmdkSM1tZW+svvK6pIWYWb2afm9nbXtcSKAX66eYBQ51zw4GNwAMe11Of1cDXgAVeF+KPmcUDfwGuBM4CbjKzs7ytql5/AyZ5XUSAKoEfOufOBM4F7gnj7+1x4BLn3AhgJDDJzM71uKaGTAfWeV1EYyjQ63DOzXXOVdbe/BTo6WU99XHOrXPObfC6jgacA2x2zm11zpUDLwLXelyTX865BdScixv2nHMFzrnltZ8fpSZ8enhblW+uxrHam4m1H2E7I8PMegJTgMe9rqUxFOj1+zbwrtdFRLgewMmHtuYTpqETycwsExgFfOZtJf7VDmGsAPYC85xzYVsr8Cfgx0C114U0RkyeWGRm/wTSfTz0M+fc7No2P6PmT9rnWrK2ugKpNcyZj/vCtmcWicysHfAq8H3n3BGv6/HHOVcFjKy9LvW6mQ11zoXdtQozuwrY65xbZmYXeV1PY8RkoDvnLqvvcTO7FbgKuNR5PFG/oVojQD7Q66TbPYHdHtUSdcwskZowf84595rX9QTCOXfYzD6k5lpF2AU6MAG4xswmA0lABzP7u3PuZo/rapCGXOows0nAT4BrnHMlXtcTBZYCA82sr5m1Am4E3vS4pqhgZgY8Aaxzzv3B63rqY2ZpJ2aMmVkb4DJgvbdV+eace8A519M5l0nNz+v8SAhzUKD7MgNoD8wzsxVmNtPrgvwxs6+aWT4wDphjZu95XVNdtReY7wXeo+ai3cvOuTXeVuWfmb0AfAIMMrN8M7vd65rqMQG4Bbik9md1RW2vMhxlAB+Y2Spq3uTnOeciZjpgpNDSfxGRKKEeuohIlFCgi4hECQW6iEiUUKCLiEQJBbqISJRQoIuIRAkFuohIlPj/Ky5eft+x438AAAAASUVORK5CYII=\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"y = phi(dist) @ w\n",
"plt.plot(x,y)\n",
"plt.plot(x_anchor, w, 'o')\n",
"plt.plot(x_obs, y_obs, 'o')"
]
},
{
"cell_type": "code",
"execution_count": 154,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
" fun: 3.7331470929354214\n",
" hess_inv: array([[5.01357361, 3.06869342, 2.32051937, ..., 0.79957649, 0.83594203,\n",
" 1.32280719],\n",
" [3.06869342, 3.5570208 , 2.0015183 , ..., 0.72679057, 1.02565489,\n",
" 1.21726038],\n",
" [2.32051937, 2.0015183 , 2.6060131 , ..., 0.65207714, 0.95942826,\n",
" 1.09367469],\n",
" ...,\n",
" [0.79957649, 0.72679057, 0.65207714, ..., 1.8975736 , 1.13794941,\n",
" 1.40389849],\n",
" [0.83594203, 1.02565489, 0.95942826, ..., 1.13794941, 2.75107489,\n",
" 1.79637275],\n",
" [1.32280719, 1.21726038, 1.09367469, ..., 1.40389849, 1.79637275,\n",
" 3.19530106]])\n",
" jac: array([-1.72853470e-06, -2.05636024e-06, -2.17556953e-06, -2.20537186e-06,\n",
" -2.17556953e-06, -1.99675560e-06, -1.99675560e-06, -1.87754631e-06,\n",
" -1.75833702e-06, -1.66893005e-06, -1.31130219e-06, -1.22189522e-06,\n",
" -9.23871994e-07, -4.17232513e-07, 2.98023224e-08, 1.78813934e-07,\n",
" 5.36441803e-07, 8.94069672e-07, 1.16229057e-06, 1.25169754e-06,\n",
" 1.57952309e-06, 1.69873238e-06, 1.57952309e-06, 1.87754631e-06,\n",
" 1.69873238e-06, 1.93715096e-06, 1.57952309e-06, 2.20537186e-06,\n",
" 2.53319740e-06, 2.62260437e-06, 2.50339508e-06, 3.09944153e-06,\n",
" 3.42726707e-06, 3.81469727e-06, 4.35113907e-06, 4.23192978e-06,\n",
" 4.94718552e-06, 5.03659248e-06, 5.54323196e-06, 5.99026680e-06,\n",
" 6.34789467e-06, 6.64591789e-06, 6.76512718e-06, 7.18235970e-06,\n",
" 7.51018524e-06, 7.39097595e-06, 7.74860382e-06, 7.30156898e-06,\n",
" 8.07642937e-06, 7.77840614e-06, 7.71880150e-06, 7.27176666e-06,\n",
" 7.62939453e-06, 7.48038292e-06, 7.30156898e-06, 7.27176666e-06,\n",
" 7.36117363e-06, 7.15255737e-06, 6.97374344e-06, 7.09295273e-06])\n",
" message: 'Optimization terminated successfully.'\n",
" nfev: 2294\n",
" nit: 33\n",
" njev: 37\n",
" status: 0\n",
" success: True\n",
" x: array([-0.33760384, -0.30213991, -0.26427914, -0.22445033, -0.18317104,\n",
" -0.14104665, -0.09876312, -0.05706754, -0.01675903, 0.02133504,\n",
" 0.05639169, 0.08760514, 0.11424253, 0.13565666, 0.15132316,\n",
" 0.16087505, 0.16413553, 0.1611214 , 0.15206854, 0.13743098,\n",
" 0.11788173, 0.09428039, 0.06765954, 0.03919129, 0.01011632,\n",
" -0.01827069, -0.04471598, -0.0680157 , -0.08712561, -0.10116775,\n",
" -0.10948127, -0.11164411, -0.10752024, -0.09723082, -0.08115933,\n",
" -0.05993792, -0.03438232, -0.00550781, 0.0255811 , 0.05769527,\n",
" 0.08963521, 0.12023739, 0.14841769, 0.17321776, 0.19382357,\n",
" 0.20959267, 0.2200839 , 0.22502743, 0.22437372, 0.21820242,\n",
" 0.20679262, 0.19053715, 0.16996084, 0.14564405, 0.11824509,\n",
" 0.08844499, 0.05693469, 0.02437798, -0.0085849 , -0.04136265])"
]
},
"execution_count": 154,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"def f(w):\n",
" y_pred = dist_phi_obs @ w\n",
" return np.linalg.norm(y_obs - y_pred) + np.linalg.norm(w) * 0.1\n",
"\n",
"res = optimize.minimize(f, np.random.randn(60))\n",
"res"
]
},
{
"cell_type": "code",
"execution_count": 155,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"[<matplotlib.lines.Line2D at 0x200b1236668>]"
]
},
"execution_count": 155,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"w = res.x\n",
"\n",
"y = phi(dist) @ w\n",
"plt.plot(x,y)\n",
"plt.plot(x_anchor, w, 'o')\n",
"plt.plot(x_obs, y_obs, 'o')"
]
},
{
"cell_type": "code",
"execution_count": 156,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
" fun: 3.0104599534768703\n",
" hess_inv: array([[694.39650901, 441.00947279, 218.72298175, ..., -35.75484779,\n",
" 175.97699347, 274.08735396],\n",
" [441.00947279, 295.21461483, 157.5910319 , ..., 22.33724786,\n",
" 67.3460828 , 156.71018716],\n",
" [218.72298175, 157.5910319 , 95.06197413, ..., 46.01914646,\n",
" -6.98896692, 57.18303199],\n",
" ...,\n",
" [-35.75484779, 22.33724786, 46.01914646, ..., 238.46610157,\n",
" -70.51268556, 86.1894192 ],\n",
" [175.97699347, 67.3460828 , -6.98896692, ..., -70.51268556,\n",
" 284.19827993, 288.2352633 ],\n",
" [274.08735396, 156.71018716, 57.18303199, ..., 86.1894192 ,\n",
" 288.2352633 , 423.6155548 ]])\n",
" jac: array([ 1.19209290e-06, 1.19209290e-06, 1.13248825e-06, 8.04662704e-07,\n",
" 7.74860382e-07, 6.25848770e-07, 7.45058060e-07, 9.83476639e-07,\n",
" 6.25848770e-07, 1.01327896e-06, 1.34110451e-06, 9.53674316e-07,\n",
" 1.31130219e-06, 7.45058060e-07, 8.34465027e-07, 1.16229057e-06,\n",
" 9.53674316e-07, 1.04308128e-06, 8.94069672e-07, 8.64267349e-07,\n",
" 3.27825546e-07, 1.43051147e-06, 8.64267349e-07, 1.13248825e-06,\n",
" 8.64267349e-07, 5.96046448e-07, 8.04662704e-07, 2.98023224e-07,\n",
" 8.34465027e-07, 3.87430191e-07, 5.96046448e-07, 5.66244125e-07,\n",
" 2.38418579e-07, -1.49011612e-07, 1.49011612e-07, -5.66244125e-07,\n",
" -1.78813934e-07, 8.94069672e-08, -2.98023224e-08, -2.08616257e-07,\n",
" -1.78813934e-07, -2.68220901e-07, -4.76837158e-07, -5.36441803e-07,\n",
" -5.96046448e-07, -2.68220901e-07, -5.96046448e-07, -5.96046448e-08,\n",
" -4.47034836e-07, -8.64267349e-07, -9.53674316e-07, -1.04308128e-06,\n",
" -1.04308128e-06, -8.34465027e-07, -6.25848770e-07, -1.10268593e-06,\n",
" -1.01327896e-06, -6.25848770e-07, -1.49011612e-06, -1.19209290e-06])\n",
" message: 'Optimization terminated successfully.'\n",
" nfev: 4092\n",
" nit: 63\n",
" njev: 66\n",
" status: 0\n",
" success: True\n",
" x: array([ 6.59752233, 3.79007103, 1.26554126, -0.91426064, -2.69283451,\n",
" -4.03093549, -4.90154105, -5.29678068, -5.23137029, -4.73247037,\n",
" -3.85626314, -2.67515505, -1.27095114, 0.25342755, 1.79865422,\n",
" 3.2587973 , 4.53258266, 5.53587673, 6.19738432, 6.47111017,\n",
" 6.33343241, 5.79568972, 4.88079836, 3.65391376, 2.18925274,\n",
" 0.58207028, -1.06234348, -2.64238074, -4.05296541, -5.21274341,\n",
" -6.04684232, -6.51137139, -6.58484389, -6.27099413, -5.59645897,\n",
" -4.61866466, -3.39979326, -2.02515221, -0.58322212, 0.83897905,\n",
" 2.15963432, 3.30647315, 4.22195711, 4.86712573, 5.21977347,\n",
" 5.27802917, 5.05305374, 4.57871155, 3.89102695, 3.04284491,\n",
" 2.0903942 , 1.08948634, 0.09567704, -0.84036351, -1.67518742,\n",
" -2.37576649, -2.91158694, -3.26695338, -3.43924956, -3.42184333])"
]
},
"execution_count": 156,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"def f(w):\n",
" y_pred = dist_phi_obs @ w\n",
" return np.linalg.norm(y_obs - y_pred) + np.linalg.norm(w) * 0.01\n",
"\n",
"res = optimize.minimize(f, np.random.randn(60))\n",
"res"
]
},
{
"cell_type": "code",
"execution_count": 158,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"[<matplotlib.lines.Line2D at 0x200b12ea9e8>]"
]
},
"execution_count": 158,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"w = res.x\n",
"\n",
"y = phi(dist) @ w\n",
"plt.plot(x,y)\n",
"plt.plot(x_anchor, w, 'o')\n",
"plt.plot(x_obs, y_obs, 'o')\n",
"plt.show()\n",
"\n",
"plt.plot(x,y)\n",
"#plt.plot(x_anchor, w, 'o')\n",
"plt.plot(x_obs, y_obs, 'o')\n",
"plt.show()"
]
},
{
"cell_type": "code",
"execution_count": 159,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
" fun: 2.0504574035009107\n",
" hess_inv: array([[20376.03769528, 8108.03081549, -1316.9407302 , ...,\n",
" -2178.86588261, -1328.04179134, 477.26708823],\n",
" [ 8108.03080342, 3462.82948994, -194.92334607, ...,\n",
" -547.49234682, -1010.2639735 , -1405.73978131],\n",
" [-1316.94074977, -194.92335472, 547.97933337, ...,\n",
" 577.86227437, -652.52823011, -2397.59599471],\n",
" ...,\n",
" [-2178.86589684, -547.49235371, 577.86227343, ...,\n",
" 800.58693477, -207.61571653, -1708.56267984],\n",
" [-1328.04169964, -1010.26393397, -652.52823177, ...,\n",
" -207.6157214 , 4918.80428046, 11708.85281337],\n",
" [ 477.26732233, -1405.7396791 , -2397.59599692, ...,\n",
" -1708.56269092, 11708.85280604, 29746.27344335]])\n",
" jac: array([7.42077827e-06, 7.95722008e-06, 7.89761543e-06, 8.10623169e-06,\n",
" 8.19563866e-06, 8.55326653e-06, 8.43405724e-06, 8.28504562e-06,\n",
" 8.70227814e-06, 8.79168510e-06, 8.82148743e-06, 8.91089439e-06,\n",
" 8.94069672e-06, 8.88109207e-06, 8.85128975e-06, 9.00030136e-06,\n",
" 9.20891762e-06, 9.38773155e-06, 9.20891762e-06, 9.17911530e-06,\n",
" 9.17911530e-06, 9.53674316e-06, 8.76188278e-06, 9.17911530e-06,\n",
" 9.26852226e-06, 8.82148743e-06, 8.82148743e-06, 8.07642937e-06,\n",
" 8.82148743e-06, 8.82148743e-06, 8.52346420e-06, 7.83801079e-06,\n",
" 7.95722008e-06, 8.16583633e-06, 7.86781311e-06, 7.15255737e-06,\n",
" 7.53998756e-06, 6.88433647e-06, 6.52670860e-06, 6.31809235e-06,\n",
" 6.61611557e-06, 5.72204590e-06, 5.63263893e-06, 5.21540642e-06,\n",
" 5.39422035e-06, 4.85777855e-06, 4.58955765e-06, 4.58955765e-06,\n",
" 3.99351120e-06, 3.87430191e-06, 3.57627869e-06, 3.24845314e-06,\n",
" 3.09944153e-06, 2.95042992e-06, 2.62260437e-06, 2.14576721e-06,\n",
" 2.20537186e-06, 2.08616257e-06, 1.84774399e-06, 1.81794167e-06])\n",
" message: 'Optimization terminated successfully.'\n",
" nfev: 6634\n",
" nit: 99\n",
" njev: 107\n",
" status: 0\n",
" success: True\n",
" x: array([ 18.49056188, 22.85938644, 22.29383933, 17.6844915 ,\n",
" 9.60002532, -0.52734553, -11.59138636, -22.35774314,\n",
" -31.44303732, -37.70219481, -40.43103522, -39.06442199,\n",
" -33.47527854, -24.01182021, -11.40277637, 3.06850571,\n",
" 18.11280945, 32.34821073, 44.14326734, 52.19227488,\n",
" 55.59016181, 53.89643183, 46.89272059, 35.31766817,\n",
" 20.06190903, 2.63268781, -15.32053152, -32.16234886,\n",
" -45.92908575, -55.61208882, -60.10981824, -59.05876685,\n",
" -52.55786977, -41.1866605 , -26.31237638, -9.36885377,\n",
" 8.12014804, 24.25336865, 37.73094305, 47.25115706,\n",
" 52.15879675, 52.05706675, 47.29787487, 38.46411824,\n",
" 26.63127936, 13.02536851, -1.0422617 , -14.15797307,\n",
" -25.28204221, -33.33514629, -37.82524018, -38.41568927,\n",
" -35.20107932, -28.55647722, -19.08693464, -7.62783438,\n",
" 5.02353972, 17.8947923 , 30.11921501, 40.98493739])"
]
},
"execution_count": 159,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"def f(w):\n",
" y_pred = dist_phi_obs @ w\n",
" return np.linalg.norm(y_obs - y_pred) + np.linalg.norm(w) * 0.001\n",
"\n",
"res = optimize.minimize(f, np.random.randn(60))\n",
"res"
]
},
{
"cell_type": "code",
"execution_count": 161,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"w = res.x\n",
"\n",
"y = phi(dist) @ w\n",
"plt.plot(x,y)\n",
"plt.plot(x_anchor, w, 'o')\n",
"plt.plot(x_obs, y_obs, 'o')\n",
"plt.show()\n",
"\n",
"plt.plot(x,y)\n",
"#plt.plot(x_anchor, w, 'o')\n",
"plt.plot(x_obs, y_obs, 'o')\n",
"plt.show()\n"
]
},
{
"cell_type": "code",
"execution_count": 162,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
" fun: 1.2290933361715748\n",
" hess_inv: array([[ 96.3743743 , -44.7965568 , -108.89443676, ..., -10.74883051,\n",
" 17.92242467, 65.02081896],\n",
" [ -44.79655628, 452.83354067, 558.9822556 , ..., -158.60185627,\n",
" -117.96978446, -72.01416626],\n",
" [-108.89443591, 558.98225638, 724.21128877, ..., -179.96929959,\n",
" -150.13071447, -124.39707381],\n",
" ...,\n",
" [ -10.74883111, -158.6018533 , -179.96929491, ..., 77.57932496,\n",
" 57.4814831 , 32.55742209],\n",
" [ 17.92242429, -117.96978042, -150.13070838, ..., 57.48148208,\n",
" 64.03747153, 69.92615695],\n",
" [ 65.02081915, -72.01415732, -124.39706213, ..., 32.55741763,\n",
" 69.92615309, 121.88928259]])\n",
" jac: array([-8.92579556e-06, -2.77161598e-06, -1.26659870e-06, 5.18560410e-06,\n",
" 3.06963921e-06, 1.51991844e-06, 1.04308128e-06, -1.22189522e-06,\n",
" -1.89244747e-06, -3.45706940e-06, -3.90410423e-06, -4.32133675e-06,\n",
" -5.81145287e-06, -5.27501106e-06, -3.93390656e-06, -4.58955765e-06,\n",
" -1.69873238e-06, -4.17232513e-06, -3.78489494e-06, -9.32812691e-06,\n",
" -6.67572021e-06, -4.81307507e-06, -9.83476639e-06, -1.07884407e-05,\n",
" -1.27255917e-05, -1.09374523e-05, -1.16229057e-05, -9.92417336e-06,\n",
" -1.23083591e-05, -1.28448009e-05, -1.22934580e-05, -1.16527081e-05,\n",
" -1.41113997e-05, -1.40964985e-05, -1.40815973e-05, -1.73151493e-05,\n",
" -1.46776438e-05, -1.69426203e-05, -1.74194574e-05, -1.68383121e-05,\n",
" -1.91032887e-05, -1.43796206e-05, -1.52736902e-05, -1.33812428e-05,\n",
" -1.65998936e-05, -1.64210796e-05, -1.39921904e-05, -1.47670507e-05,\n",
" -1.62124634e-05, -1.64508820e-05, -1.83284283e-05, -1.73598528e-05,\n",
" -1.92970037e-05, -1.98781490e-05, -1.88946724e-05, -1.75237656e-05,\n",
" -1.94162130e-05, -1.85817480e-05, -1.75535679e-05, -1.60187483e-05])\n",
" message: 'Desired error not necessarily achieved due to precision loss.'\n",
" nfev: 25990\n",
" nit: 244\n",
" njev: 419\n",
" status: 2\n",
" success: False\n",
" x: array([-495.23279115, -183.30964897, 59.92289841, 248.14402071,\n",
" 361.35101146, 358.04291887, 308.14447828, 193.54584036,\n",
" 103.39736155, -54.03019632, -208.71326587, -279.89390742,\n",
" -366.20667257, -422.83375148, -377.2382466 , -258.89632547,\n",
" -149.99320289, -29.81516505, 114.34324651, 292.33978998,\n",
" 395.72698798, 468.47098003, 454.27945388, 407.77224365,\n",
" 288.08787667, 150.61343587, -38.95168475, -198.45039744,\n",
" -340.3851643 , -463.02044732, -499.76784117, -483.47047972,\n",
" -415.86270968, -279.60901248, -99.17263439, 81.84952508,\n",
" 257.36937344, 382.42526949, 484.73634391, 511.43917592,\n",
" 465.94842904, 349.83498476, 204.3463795 , 30.16611801,\n",
" -171.51642747, -311.6823957 , -425.021567 , -453.26943012,\n",
" -471.70598013, -366.80844256, -220.39815263, -31.98877286,\n",
" 138.5266828 , 319.86045055, 438.0409878 , 482.62925891,\n",
" 397.4133485 , 190.56282403, -165.88269391, -683.41527419])"
]
},
"execution_count": 162,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"def f(w):\n",
" y_pred = dist_phi_obs @ w\n",
" return np.linalg.norm(y_obs - y_pred) + np.linalg.norm(w) * 0.0001\n",
"\n",
"res = optimize.minimize(f, np.random.randn(60))\n",
"res"
]
},
{
"cell_type": "code",
"execution_count": 163,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"w = res.x\n",
"\n",
"y = phi(dist) @ w\n",
"plt.plot(x,y)\n",
"plt.plot(x_anchor, w, 'o')\n",
"plt.plot(x_obs, y_obs, 'o')\n",
"plt.show()\n",
"\n",
"plt.plot(x,y)\n",
"#plt.plot(x_anchor, w, 'o')\n",
"plt.plot(x_obs, y_obs, 'o')\n",
"plt.show()\n"
]
},
{
"cell_type": "code",
"execution_count": 164,
"metadata": {},
"outputs": [],
"source": [
"epsilon = 1.0\n",
"def phi(r):\n",
" return 1./(1. + (epsilon*r)**2)\n",
"\n",
"x_anchor = np.linspace(-2,4,60)\n",
"x = np.linspace(-2.5,4.5,300)\n",
"dist = np.abs(x[:, np.newaxis] - x_anchor[np.newaxis])\n",
"\n"
]
},
{
"cell_type": "code",
"execution_count": 169,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"[<matplotlib.lines.Line2D at 0x200b2644710>]"
]
},
"execution_count": 169,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"w = np.random.randn(60)\n",
"y = phi(dist) @ w\n",
"\n",
"plt.plot(x,y)\n",
"plt.plot(x_anchor, w, 'o')"
]
},
{
"cell_type": "code",
"execution_count": 175,
"metadata": {},
"outputs": [],
"source": [
"epsilon = 5.0\n",
"def phi(r):\n",
" return 1./(1. + (epsilon*r)**2)\n",
"\n",
"x_anchor = np.linspace(-2,4,60)\n",
"x = np.linspace(-2.5,4.5,300)\n",
"dist = np.abs(x[:, np.newaxis] - x_anchor[np.newaxis])\n"
]
},
{
"cell_type": "code",
"execution_count": 176,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"[<matplotlib.lines.Line2D at 0x200b268ec88>]"
]
},
"execution_count": 176,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"w = np.random.randn(60)\n",
"y = phi(dist) @ w\n",
"\n",
"plt.plot(x,y)\n",
"plt.plot(x_anchor, w, 'o')"
]
},
{
"cell_type": "code",
"execution_count": 177,
"metadata": {},
"outputs": [],
"source": [
"dist_phi_obs = phi(dist_obs)"
]
},
{
"cell_type": "code",
"execution_count": 178,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
" fun: 0.5245116464099808\n",
" hess_inv: array([[ 1.71265047, -1.76505065, -0.80110107, ..., 1.17109254,\n",
" -0.66970008, 0.30973546],\n",
" [-1.76505065, 2.28503052, 0.51021456, ..., -1.33914256,\n",
" 0.76848522, -0.36313264],\n",
" [-0.80110107, 0.51021456, 1.17490741, ..., -0.57603144,\n",
" 0.33048017, -0.15623068],\n",
" ...,\n",
" [ 1.17109254, -1.33914256, -0.57603144, ..., 3.32161086,\n",
" -3.17145801, 1.33662147],\n",
" [-0.66970008, 0.76848522, 0.33048017, ..., -3.17145801,\n",
" 5.30009299, -2.98895335],\n",
" [ 0.30973546, -0.36313264, -0.15623068, ..., 1.33662147,\n",
" -2.98895335, 2.03135775]])\n",
" jac: array([-7.45058060e-07, -6.63101673e-07, -5.81145287e-07, -6.55651093e-07,\n",
" -8.49366188e-07, -7.45058060e-07, -2.68220901e-07, 2.23517418e-07,\n",
" 5.58793545e-07, 4.02331352e-07, 1.49011612e-08, -4.47034836e-08,\n",
" 2.68220901e-07, 0.00000000e+00, -9.53674316e-07, -1.34110451e-07,\n",
" -2.60770321e-07, -8.04662704e-07, 4.47034836e-07, -4.24683094e-07,\n",
" 9.68575478e-08, -5.28991222e-07, -2.98023224e-07, -6.70552254e-08,\n",
" -4.02331352e-07, -2.01165676e-07, -1.57952309e-06, -7.30156898e-07,\n",
" 7.07805157e-07, 2.23517418e-08, -2.38418579e-07, 2.53319740e-07,\n",
" -1.08778477e-06, -1.39325857e-06, -2.22772360e-06, -2.84612179e-06,\n",
" -2.26497650e-06, -1.75833702e-06, -2.30222940e-06, -2.29477882e-06,\n",
" -1.10268593e-06, -1.51246786e-06, -9.08970833e-07, 1.41561031e-07,\n",
" 8.19563866e-08, -2.98023224e-08, -4.47034836e-08, -2.98023224e-08,\n",
" -6.70552254e-08, -5.96046448e-08, 0.00000000e+00, 4.47034836e-08,\n",
" 1.41561031e-07, 3.05473804e-07, 5.14090061e-07, 4.76837158e-07,\n",
" -3.72529030e-07, -1.29640102e-06, -1.31875277e-06, -1.14738941e-06])\n",
" message: 'Optimization terminated successfully.'\n",
" nfev: 5332\n",
" nit: 80\n",
" njev: 86\n",
" status: 0\n",
" success: True\n",
" x: array([-0.03517132, -0.02472596, -0.00911907, 0.00274169, 0.01042114,\n",
" 0.00615406, -0.01394946, -0.04486573, -0.07029373, -0.05641792,\n",
" -0.01985228, 0.05296495, 0.15739034, 0.00954161, -0.33905305,\n",
" 0.26372942, 0.67069429, 0.11533274, 0.33460897, 0.78482809,\n",
" 0.04086696, 0.71039379, 0.24667494, 0.0678785 , 0.75603441,\n",
" 0.26775703, 0.27966886, -0.27664737, 1.27312907, -0.42307864,\n",
" -1.44466366, 1.0908059 , -0.02966346, -0.30659317, 0.55133895,\n",
" 0.26526631, 0.4770533 , 0.32659019, 0.48572846, 1.34354109,\n",
" -0.03878432, 0.63317124, 0.720233 , 0.24200996, 0.59423421,\n",
" 0.63696172, 0.4567532 , 0.31085281, 0.23329472, 0.20077093,\n",
" 0.19973147, 0.2304276 , 0.30612026, 0.43773664, 0.50973779,\n",
" 0.33325525, 0.43031813, 0.34011864, 0.23811258, 1.16977988])"
]
},
"execution_count": 178,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"def f(w):\n",
" y_pred = dist_phi_obs @ w\n",
" return np.linalg.norm(y_obs - y_pred) + np.linalg.norm(w) * 0.1\n",
"\n",
"res = optimize.minimize(f, np.random.randn(60))\n",
"res"
]
},
{
"cell_type": "code",
"execution_count": 179,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"w = res.x\n",
"\n",
"y = phi(dist) @ w\n",
"plt.plot(x,y)\n",
"plt.plot(x_anchor, w, 'o')\n",
"plt.plot(x_obs, y_obs, 'o')\n",
"plt.show()\n",
"\n",
"plt.plot(x,y)\n",
"#plt.plot(x_anchor, w, 'o')\n",
"plt.plot(x_obs, y_obs, 'o')\n",
"plt.show()\n"
]
},
{
"cell_type": "code",
"execution_count": 180,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
" fun: 3.13797738875849\n",
" hess_inv: array([[ 0.64725004, -0.36214053, -0.23115033, ..., -0.00288717,\n",
" 0.01257755, 0.00235044],\n",
" [-0.36214053, 0.7966295 , -0.096595 , ..., 0.00439878,\n",
" -0.00478775, 0.00735827],\n",
" [-0.23115033, -0.096595 , 0.95375378, ..., 0.00261824,\n",
" -0.00752232, 0.00702471],\n",
" ...,\n",
" [-0.00288717, 0.00439878, 0.00261824, ..., 0.83628353,\n",
" -0.24827055, -0.29198826],\n",
" [ 0.01257755, -0.00478775, -0.00752232, ..., -0.24827055,\n",
" 0.70400156, -0.34373673],\n",
" [ 0.00235044, 0.00735827, 0.00702471, ..., -0.29198826,\n",
" -0.34373673, 0.81973717]])\n",
" jac: array([-1.19209290e-07, -1.49011612e-07, -2.08616257e-07, -2.38418579e-07,\n",
" -3.87430191e-07, -3.27825546e-07, -5.96046448e-08, 3.87430191e-07,\n",
" 6.25848770e-07, 5.36441803e-07, 1.78813934e-07, 8.94069672e-08,\n",
" 2.38418579e-07, 6.55651093e-07, 1.22189522e-06, 1.75833702e-06,\n",
" 1.75833702e-06, 1.46031380e-06, 8.64267349e-07, -1.19209290e-07,\n",
" -2.08616257e-07, -5.36441803e-07, -1.04308128e-06, -1.87754631e-06,\n",
" -2.41398811e-06, -2.35438347e-06, -2.80141830e-06, -1.40070915e-06,\n",
" -9.23871994e-07, -1.19209290e-07, 6.25848770e-07, 7.15255737e-07,\n",
" 1.57952309e-06, 1.22189522e-06, 1.46031380e-06, 1.72853470e-06,\n",
" 2.68220901e-07, -2.38418579e-07, -5.96046448e-07, -2.35438347e-06,\n",
" -2.98023224e-06, -3.42726707e-06, -3.36766243e-06, -3.54647636e-06,\n",
" -3.57627869e-06, -2.29477882e-06, -1.31130219e-06, -8.64267349e-07,\n",
" -6.25848770e-07, -4.76837158e-07, -3.27825546e-07, -2.68220901e-07,\n",
" -2.08616257e-07, -1.19209290e-07, -2.98023224e-08, -1.78813934e-07,\n",
" -3.57627869e-07, -1.49011612e-07, 1.78813934e-07, -8.94069672e-08])\n",
" message: 'Optimization terminated successfully.'\n",
" nfev: 3038\n",
" nit: 36\n",
" njev: 49\n",
" status: 0\n",
" success: True\n",
" x: array([-0.03110375, -0.02177099, -0.00784673, 0.00263589, 0.00905321,\n",
" 0.00364232, -0.01793071, -0.05088632, -0.072297 , -0.03471594,\n",
" 0.03071757, 0.0561739 , 0.01047214, -0.03660102, -0.00356212,\n",
" 0.18274769, 0.35700926, 0.37587606, 0.39721912, 0.45459123,\n",
" 0.42741425, 0.39094276, 0.31820956, 0.33543346, 0.41303945,\n",
" 0.33979498, 0.25445004, 0.29752842, 0.25465664, -0.18389981,\n",
" -0.39988198, -0.02878765, 0.15985309, 0.13060427, 0.21737063,\n",
" 0.33726111, 0.38860325, 0.46716474, 0.64469609, 0.72212498,\n",
" 0.5462478 , 0.49614304, 0.49718946, 0.49463375, 0.55409919,\n",
" 0.57269843, 0.44031814, 0.30134613, 0.22183805, 0.18563672,\n",
" 0.17860523, 0.19852667, 0.25450797, 0.36091626, 0.47407611,\n",
" 0.44641765, 0.34401046, 0.3507326 , 0.56662942, 0.79692013])"
]
},
"execution_count": 180,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"def f(w):\n",
" y_pred = dist_phi_obs @ w\n",
" return np.linalg.norm(y_obs - y_pred) + np.linalg.norm(w) * 1.\n",
"\n",
"res = optimize.minimize(f, np.random.randn(60))\n",
"res"
]
},
{
"cell_type": "code",
"execution_count": 181,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"w = res.x\n",
"\n",
"y = phi(dist) @ w\n",
"plt.plot(x,y)\n",
"plt.plot(x_anchor, w, 'o')\n",
"plt.plot(x_obs, y_obs, 'o')\n",
"plt.show()\n",
"\n",
"plt.plot(x,y)\n",
"#plt.plot(x_anchor, w, 'o')\n",
"plt.plot(x_obs, y_obs, 'o')\n",
"plt.show()\n"
]
},
{
"cell_type": "code",
"execution_count": 182,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
" fun: 11.239147440819652\n",
" hess_inv: array([[ 1.07069634e-07, -2.19399851e-08, -2.35650853e-08, ...,\n",
" 1.97180140e-08, -8.99381197e-09, 1.22573211e-08],\n",
" [-2.19399852e-08, 1.44162350e-07, -2.14643880e-08, ...,\n",
" 1.22140058e-08, -5.25504448e-09, 1.49612327e-08],\n",
" [-2.35650852e-08, -2.14643880e-08, 1.73413402e-07, ...,\n",
" 1.91381719e-08, -5.65598558e-09, 1.30588450e-08],\n",
" ...,\n",
" [ 1.97180141e-08, 1.22140058e-08, 1.91381719e-08, ...,\n",
" 8.34840890e-08, -2.34923177e-08, 2.34553342e-08],\n",
" [-8.99381199e-09, -5.25504444e-09, -5.65598557e-09, ...,\n",
" -2.34923177e-08, 7.56745764e-08, -8.05419260e-09],\n",
" [ 1.22573211e-08, 1.49612327e-08, 1.30588450e-08, ...,\n",
" 2.34553342e-08, -8.05419260e-09, 4.86488704e-08]])\n",
" jac: array([-0.40549755, -0.10834432, 1.17103076, -0.262972 , 0.43839586,\n",
" -1.48447418, 0.02624166, -0.00235283, 0.07683146, 0.08637464,\n",
" -0.10827446, 0.71543586, 1.71595728, 1.70811379, 0.44279325,\n",
" 0.47880816, 0.37600183, 0.25557518, -0.54365003, -0.32091105,\n",
" -0.02844369, -1.97597432, 1.31287384, -1.03044605, 0.40167236,\n",
" 1.28695178, 0.60675466, 0.78032148, 1.18266833, 0.82883811,\n",
" 1.16211414, 0.90793598, 0.20586145, -0.14965498, -0.73586488,\n",
" -1.18700123, 0.11643779, 0.138901 , -0.87827814, -0.36650085,\n",
" -0.20282149, -0.04125774, 0.85300815, 0.82188904, 1.69752896,\n",
" 0.76963806, 0.61419713, -0.10616088, -0.11282861, 0.34835446,\n",
" 0.92447591, -0.09910917, 0.06338751, 0.28566337, 0.71426046,\n",
" -1.33261108, -0.78918481, 0.46730125, -0.03459811, 1.11845565])\n",
" message: 'Desired error not necessarily achieved due to precision loss.'\n",
" nfev: 25184\n",
" nit: 160\n",
" njev: 406\n",
" status: 2\n",
" success: False\n",
" x: array([-9.06149126e-09, -7.78310715e-09, -2.16779006e-09, -8.40480349e-09,\n",
" -5.35362568e-09, -1.34437983e-08, -7.08462917e-09, -7.16653197e-09,\n",
" -6.76446149e-09, -6.63557720e-09, -7.34442377e-09, -3.58658158e-09,\n",
" 1.12490334e-09, 1.38157118e-09, -3.92554669e-09, -3.31361951e-09,\n",
" -3.37386033e-09, -3.58346301e-09, -6.81309815e-09, -5.63897766e-09,\n",
" -4.23089313e-09, -1.24918057e-08, 1.80423248e-09, -8.65462013e-09,\n",
" -2.54052367e-09, 1.27245899e-09, -2.04950543e-09, -1.54113961e-09,\n",
" -7.44339324e-12, -1.83350192e-09, -4.02576295e-10, -1.41668624e-09,\n",
" -4.27086778e-09, -5.44253859e-09, -7.53920027e-09, -9.07570690e-09,\n",
" -3.05126271e-09, -2.60501702e-09, -6.80236232e-09, -4.44174381e-09,\n",
" -3.73336457e-09, -3.11478927e-09, 7.61844411e-10, 3.83101687e-10,\n",
" 3.99828972e-09, -9.80047286e-10, -2.55783963e-09, -6.37642226e-09,\n",
" -6.77115948e-09, -4.95126508e-09, -2.46731980e-09, -6.90678613e-09,\n",
" -6.01467008e-09, -4.64648829e-09, -2.16117125e-09, -1.05584524e-08,\n",
" -8.04694125e-09, -2.55860359e-09, -4.98593042e-09, -3.14993795e-10])"
]
},
"execution_count": 182,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"def f(w):\n",
" y_pred = dist_phi_obs @ w\n",
" return np.linalg.norm(y_obs - y_pred) + np.linalg.norm(w) * 10.\n",
"\n",
"res = optimize.minimize(f, np.random.randn(60))\n",
"res"
]
},
{
"cell_type": "code",
"execution_count": 183,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"w = res.x\n",
"\n",
"y = phi(dist) @ w\n",
"plt.plot(x,y)\n",
"plt.plot(x_anchor, w, 'o')\n",
"plt.plot(x_obs, y_obs, 'o')\n",
"plt.show()\n",
"\n",
"plt.plot(x,y)\n",
"#plt.plot(x_anchor, w, 'o')\n",
"plt.plot(x_obs, y_obs, 'o')\n",
"plt.show()\n"
]
},
{
"cell_type": "code",
"execution_count": 184,
"metadata": {},
"outputs": [],
"source": [
"epsilon = 1.0\n",
"def phi(r):\n",
" return 1./(1. + (epsilon*r)**2)\n",
"\n",
"x_anchor = np.linspace(-2,4,60)\n",
"x = np.linspace(-2.5,4.5,300)\n",
"dist = np.abs(x[:, np.newaxis] - x_anchor[np.newaxis])\n"
]
},
{
"cell_type": "code",
"execution_count": 185,
"metadata": {},
"outputs": [],
"source": [
"dist_phi_obs = phi(dist_obs)"
]
},
{
"cell_type": "code",
"execution_count": 186,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
" fun: 1.1130141364534685\n",
" hess_inv: array([[ 7.44189227, -0.06493864, -1.54263244, ..., 0.22402989,\n",
" -0.38965744, -1.79286814],\n",
" [-0.06493864, 3.98242334, 1.10749992, ..., -0.02959418,\n",
" -0.01024098, 0.69709979],\n",
" [-1.54263244, 1.10749992, 1.86218962, ..., -0.1088403 ,\n",
" 0.07765537, 0.70132929],\n",
" ...,\n",
" [ 0.22402989, -0.02959418, -0.1088403 , ..., 1.05316945,\n",
" 0.16548185, 0.23161441],\n",
" [-0.38965744, -0.01024098, 0.07765537, ..., 0.16548185,\n",
" 1.70718531, 1.25240151],\n",
" [-1.79286814, 0.69709979, 0.70132929, ..., 0.23161441,\n",
" 1.25240151, 3.5806469 ]])\n",
" jac: array([ 1.43051147e-06, 3.65078449e-06, 6.22868538e-06, 8.03172588e-06,\n",
" 8.53836536e-06, 7.64429569e-06, 6.02006912e-06, 4.38094139e-06,\n",
" 2.99513340e-06, 1.89244747e-06, 2.68220901e-06, 3.23355198e-06,\n",
" 3.91900539e-06, 4.51505184e-06, 4.76837158e-06, 5.14090061e-06,\n",
" 4.48524952e-06, 4.06801701e-06, 2.93552876e-06, 1.74343586e-06,\n",
" 1.01327896e-06, 1.44541264e-06, 2.35438347e-06, 4.06801701e-06,\n",
" 5.79655170e-06, 6.28829002e-06, 5.64754009e-06, 3.76999378e-06,\n",
" 2.11596489e-06, 8.34465027e-07, 8.19563866e-07, 2.54809856e-06,\n",
" 4.60445881e-06, 5.52833080e-06, 4.72366810e-06, 2.65240669e-06,\n",
" 2.53319740e-07, -1.29640102e-06, -1.93715096e-06, -1.04308128e-06,\n",
" 3.42726707e-07, 1.92224979e-06, 2.45869160e-06, 1.98185444e-06,\n",
" 1.13248825e-06, -7.15255737e-07, -1.65402889e-06, -3.11434269e-06,\n",
" -3.81469727e-06, -3.79979610e-06, -2.96533108e-06, -2.25007534e-06,\n",
" -1.49011612e-06, -7.45058060e-08, 3.27825546e-07, 5.51342964e-07,\n",
" 5.06639481e-07, -3.42726707e-07, -1.26659870e-06, -2.45869160e-06])\n",
" message: 'Optimization terminated successfully.'\n",
" nfev: 3100\n",
" nit: 44\n",
" njev: 50\n",
" status: 0\n",
" success: True\n",
" x: array([-0.14903011, -0.07076855, 0.0086407 , 0.07528495, 0.11534474,\n",
" 0.11859798, 0.08122767, 0.00713146, -0.09222631, -0.19892983,\n",
" -0.29048417, -0.34334397, -0.33827347, -0.26769087, -0.14158604,\n",
" 0.01235469, 0.15709128, 0.26132889, 0.31396075, 0.33011581,\n",
" 0.3435716 , 0.38772175, 0.47349295, 0.5758253 , 0.63727986,\n",
" 0.59023152, 0.3894186 , 0.04001936, -0.39304191, -0.80172167,\n",
" -1.07167784, -1.12342803, -0.93936562, -0.56620331, -0.09551716,\n",
" 0.3663219 , 0.72684227, 0.92743992, 0.95228766, 0.82661209,\n",
" 0.60538774, 0.35542353, 0.13563431, -0.01759112, -0.09528641,\n",
" -0.11069781, -0.08800126, -0.05135147, -0.01769761, 0.0050947 ,\n",
" 0.01689966, 0.02263641, 0.0297913 , 0.04630687, 0.07865343,\n",
" 0.13023221, 0.199855 , 0.28136737, 0.36494243, 0.43967655])"
]
},
"execution_count": 186,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"def f(w):\n",
" y_pred = dist_phi_obs @ w\n",
" return np.linalg.norm(y_obs - y_pred) + np.linalg.norm(w) * 0.1\n",
"\n",
"res = optimize.minimize(f, np.random.randn(60))\n",
"res"
]
},
{
"cell_type": "code",
"execution_count": 187,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"w = res.x\n",
"\n",
"y = phi(dist) @ w\n",
"plt.plot(x,y)\n",
"plt.plot(x_anchor, w, 'o')\n",
"plt.plot(x_obs, y_obs, 'o')\n",
"plt.show()\n",
"\n",
"plt.plot(x,y)\n",
"#plt.plot(x_anchor, w, 'o')\n",
"plt.plot(x_obs, y_obs, 'o')\n",
"plt.show()\n"
]
},
{
"cell_type": "code",
"execution_count": 188,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
" fun: 3.141186288549833\n",
" hess_inv: array([[ 0.94028314, -0.06782996, -0.07608555, ..., 0.00478955,\n",
" 0.00429539, 0.00710602],\n",
" [-0.06782996, 0.92557276, -0.08035583, ..., 0.00112885,\n",
" 0.00747158, 0.00601882],\n",
" [-0.07608555, -0.08035583, 0.91733606, ..., -0.00622206,\n",
" 0.01266531, 0.00338509],\n",
" ...,\n",
" [ 0.00478955, 0.00112885, -0.00622206, ..., 0.91435803,\n",
" -0.13094249, -0.09948519],\n",
" [ 0.00429539, 0.00747158, 0.01266531, ..., -0.13094249,\n",
" 0.89936898, -0.11467925],\n",
" [ 0.00710602, 0.00601882, 0.00338509, ..., -0.09948519,\n",
" -0.11467925, 0.89888915]])\n",
" jac: array([1.28149986e-06, 1.60932541e-06, 1.90734863e-06, 1.96695328e-06,\n",
" 2.56299973e-06, 2.71201134e-06, 2.62260437e-06, 2.98023224e-06,\n",
" 3.21865082e-06, 3.48687172e-06, 3.90410423e-06, 3.96370888e-06,\n",
" 4.17232513e-06, 4.32133675e-06, 5.06639481e-06, 5.36441803e-06,\n",
" 5.00679016e-06, 5.60283661e-06, 5.84125519e-06, 5.99026680e-06,\n",
" 5.96046448e-06, 6.25848770e-06, 6.13927841e-06, 6.37769699e-06,\n",
" 6.37769699e-06, 6.28829002e-06, 5.81145287e-06, 5.36441803e-06,\n",
" 5.21540642e-06, 4.32133675e-06, 3.81469727e-06, 3.33786011e-06,\n",
" 3.01003456e-06, 2.80141830e-06, 2.44379044e-06, 1.90734863e-06,\n",
" 1.75833702e-06, 1.60932541e-06, 1.37090683e-06, 1.34110451e-06,\n",
" 8.34465027e-07, 1.01327896e-06, 9.53674316e-07, 9.53674316e-07,\n",
" 7.45058060e-07, 1.10268593e-06, 1.25169754e-06, 1.49011612e-06,\n",
" 1.31130219e-06, 1.90734863e-06, 1.46031380e-06, 1.49011612e-06,\n",
" 1.54972076e-06, 1.78813934e-06, 1.72853470e-06, 1.90734863e-06,\n",
" 1.72853470e-06, 1.49011612e-06, 1.90734863e-06, 1.66893005e-06])\n",
" message: 'Optimization terminated successfully.'\n",
" nfev: 1736\n",
" nit: 23\n",
" njev: 28\n",
" status: 0\n",
" success: True\n",
" x: array([ 0.01100701, 0.00169608, -0.01103041, -0.02731105, -0.04688993,\n",
" -0.06896498, -0.09206212, -0.11400435, -0.13200243, -0.14286266,\n",
" -0.14330898, -0.13041571, -0.10213771, -0.05789378, 0.0009411 ,\n",
" 0.07079919, 0.14609556, 0.21982111, 0.28441557, 0.33272001,\n",
" 0.35878282, 0.35843579, 0.32966709, 0.27290757, 0.19130073,\n",
" 0.09093406, -0.01916239, -0.12750564, -0.22134015, -0.2884838 ,\n",
" -0.31949707, -0.30961704, -0.25983822, -0.17681741, -0.07166039,\n",
" 0.04204128, 0.15045134, 0.24159126, 0.30699408, 0.3426704 ,\n",
" 0.3492436 , 0.33125988, 0.2958426 , 0.25105508, 0.20436295,\n",
" 0.16154511, 0.12621617, 0.09994635, 0.08277727, 0.07388214,\n",
" 0.07212981, 0.07644864, 0.08592869, 0.09973323, 0.11689165,\n",
" 0.13610015, 0.15564646, 0.17355028, 0.18789613, 0.19723319])"
]
},
"execution_count": 188,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"def f(w):\n",
" y_pred = dist_phi_obs @ w\n",
" return np.linalg.norm(y_obs - y_pred) + np.linalg.norm(w) * 1.0\n",
"\n",
"res = optimize.minimize(f, np.random.randn(60))\n",
"res"
]
},
{
"cell_type": "code",
"execution_count": 189,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAXQAAAD4CAYAAAD8Zh1EAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8QZhcZAAAgAElEQVR4nO3dd3iUZdb48e9JL4RAIJBA6L23SJEVXQsCUVBs2HfRRXfXFd2i6xZEt72+v11XXHl1XWVB14ZgQaIrdkQRCC30XhISIBASSG/3748kkDKTTJLJPPPMnM915SIzzzPznITJmXvO3cQYg1JKKfsLsDoApZRS7qEJXSmlfIQmdKWU8hGa0JVSykdoQldKKR8RZNWFO3bsaHr27GnV5ZVSypY2btx4yhgT6+iYZQm9Z8+epKSkWHV5pZSyJRE54uyYllyUUspHaEJXSikfoQldKaV8hCZ0pZTyEZrQlVLKR2hCV8pmkg8mM3nZZIYvGc7kZZNJPphsdUjKS1g2bFEp1XTJB5OZ/+18isqLAMjMz2T+t/MBSOqdZGFkyhtoC10pG1mwacH5ZF6tqLyIBZsWWBSR8iaNJnQRCROR9SKyVUR2iMgTDs4JFZG3RGS/iKwTkZ6tEaxS/u54/vEm3a/8iyst9GLgcmPMCGAkMEVExtc55x7gjDGmL/B34Cn3hqmUAoiLjGvS/cq/NJrQTaW8qpvBVV91tzmaASyp+n4ZcIWIiNuiVEoBMHf0XMICw2rdFxYYxtzRcy2KSHkTl2roIhIoIluAk8Anxph1dU7pCqQBGGPKgFygg4PnmSMiKSKSkpWV1bLIlfJDSb2TmH/xfOIj4xGE+Mh45l88XztEFQDSlD1FRaQd8C7wM2PM9hr37wCuNsakV90+AIw1xpx29lyJiYlGF+dSSqmmEZGNxphER8eaNMrFGJMDfAlMqXMoHehWdbEgIBrIbnKkSimlms2VUS6xVS1zRCQcuBLYXee0FcDdVd/fCHxumtL0V0op1WKuTCyKB5aISCCVbwBLjTErReRJIMUYswJ4GXhVRPZT2TKf1WoRK6WUcqjRhG6MSQVGObh/Xo3vi4Cb3BuaUqqlkg8ms2DTAo7nHycuMo65o+fW6kCtqDCknylkf9Y5Tp0rITBAiAwNol/nNvSIiSAoUOce2olO/VfKBzhK3IDTZQIGRl3KWxvSWLk1g4zcIofP2SY0iEv7xzJlaBxXD4kjJEiTu7dr0igXd9JRLkq5R931XaBybHpYUBg5xTn1zg+Xjpze/SsCBCb1i+WKQZ3p37kNcdFhGANnCkrYeyKPjUey+WTnSU7lFRMbFcqd43vww4k9iQoL9uSPp+poaJSLJnSlbG7ysslk5me6fL4xcGPMm/z0+32JjQpt8NyKCsPX+0+x+JtDfLEni/YRwTxweT/untBDyzEWaSiha8lFKZtr6jouncI7M3/6EJfODQgQLu0fy6X9Y9mWnstT/93NH1bu5J1N6Tx1w3CGdo1uTsiqlehbrFI252wdl+iQaIfLBPziooebdZ1hCdH8595xvHDHaE6eK2bGwm/4n492U1xW3qznU+6nCV0pm3O2vstj4x5jbJs5VJS0Azi/TADQog0ypgyN59OHL+XG0Qm88NUBbnx+LUdO57vlZ1EtowldKZtztr5L4ZkRJH/XhWvaL2TrnamsunEVUDnyJTM/E4M5P/KlqUk9OiKYp24czot3juHI6XySnl3DytSM1vjxVBNop6hSPmjjkWxufXEdiT3bs2T2WIKrOjCddaDGR8afT/hNlX6mgJ+9sZnNR3P40SW9+PXUQQQG6GKrrcVta7kopbxfTkEJP3ltE13ahfF/t48+n8zBeQdqZn5ms8swCe0jWHrfBO6e0IN/fX2I2Ys3kFtY2uKfQzWdJnSlvFhTN4Q2xvDbd7eTnV/Cc7eNpl1ESK3jDW2E0ZIyTHBgAE/MGMpfZg7j2wOnuH7hNxzIymv8gcqtNKEr5aWqJww1JdG+u/kYydsyefiq/g6HFDrqQHWkufuU3jq2O6/dO56cwlKuW/gN3+w/1eTnUM2nCV0pL9XUDaFP5RUzf8UOLurZnvsm9XF4jqMOVGeau0/p2F4xrHhgIl2iw7l70XqWb0xv1vOoptOJRUp5qaZuCP3UR7spKCnnLzOHNdgpmdQ7qdYCXc46SuMi4xpd3MuZhPYRvP3jCfz4Pxv5xdtbycgp5IHL+6I7U7YubaEr5aWasiF0yuFs3t6Yzj2X9KJvp6gmXcfZOPZJCZNaNMSxbVgw//7BWGaO7srfPtnLY+9so7S8okmxqabRhK6Ul3J1Q+iKCsPjK3YQHx3Gg5f3a/J1nI1jX52+ukklH0dCggL4200jePDyvry5IY17l6SQV1zW5BiVa7TkopSXqi5tNFby+CA1gx0ZZ3nmlpFEhjbvT7puGQbgsa8fc3huU2vrIsLPJw+gS7twfvvedm5+YS2Lf3gRndo23jmrmkYTulJezFGiramkrIK/rdrLoPi2TB/Rxa3XjouMc1pbb45ZY7vTOTqMn762iZnPf8ur94yjV8fIloapatCSi1I29uaGoxzNLuCRKQMIcPPsTFdLPk3x/QGdeHPOeApKyrnx+W9JTa+/XrtqPk3oStlUUWk5//h8P2N7xXBZ/1i3P7+z2roro1waMjyhHcvun0B4SCCzXvyOr/dluSlipWu5KGVTr6w9zLz3d/DGj8YzoU8Hq8NpspNni7hr0XoOZOXx15tGMGNkV6tDsoUWreUiIt1E5AsR2SUiO0Sk3uctEblMRHJFZEvV1zxHz6WUco/S8gr++dVBxvRoz/jeMVaH0yyd2oax9P4JjO7enrlvbmHRmkNWh2R7rpRcyoBfGGMGAeOBn4rIYAfnfW2MGVn19aRbo1RK1fLe5mMcyynkge/be7JO27Bglswey5QhcTy5cidP/Xc3VlUNfEGjCd0Yk2mM2VT1/TlgF6CfjZSySEWF4fmvDjA4vi2XDXB/7dzTwoIDWXj7aG4b153nvzzAI8tSKdMJSM3SpE5REekJjALWOTg8QUS2ishHIuJww0IRmSMiKSKSkpWlHSFKNceXe09yMCuf+y7tbevWeU2BAcKfrhvKQ1f24+2N6dz36kYKS3Rru6ZyOaGLSBtgOfCQMeZsncObgB7GmBHAP4D3HD2HMeZFY0yiMSYxNtb+LQulrLBozWHi2oYxbZjzhbXsSER46Mr+/PG6oXy+5yR3vLyOnIISq8OyFZcSuogEU5nMXzPGvFP3uDHmrDEmr+r7D4FgEeno1kiVUuw+fpY1+09x18U9am1c4UvuGN+D/7ttNNvSc7nphbVk5BRaHZJtuDLKRYCXgV3GmKednBNXdR4iMrbqeU+7M1ClFPx7zWHCggO4bWx3q0NpVVOHxbNk9liO5xZx0wtrOXxKN6F2hStv8ROBO4HLawxLnCYi94vI/VXn3AhsF5GtwLPALKNd1Uq5VU5BCe9uOcbM0Qn1diLyRRP6dOCNOeMpKCnjpn+uZe+Jc1aH5PUaXcvFGLMGaLDnxRjzHPCcu4JSyh81tvb48k3HKCmr4I5xPSyM0rOGdo1m6X0TuP2lddzyz7W8MnscwxLq78SkKvlmEU4pm2lsuzljDK+vO8LIbu0Y3KWtxdF6Vr/OUbx9/wQiQoK47V/fseFwttUheS1N6Ep5gca2m9tw+AwHsvK5bZxv186d6dEhkmU/nkBs21DufHmdrv/ihCZ0pbxAY9vNvb7uCFGhQVwz3LeGKjZFfHQ4S++bQM8OkdyzOIVPdp6wOiSvowldKS/Q0HZzZ/JL+HD7ca4f3ZWIEP/ewqBjm1DemjOBQV3a8pPXNvKpJvVaNKEr5QUaWnt8+aZ0SsoquNXHhyq6KjoimFfvGcvg+Lb8+LWNfL5bk3o1TehKeQFna49P6zWNN9YfZVT3dgyK96/O0Ia0DQvmlXvGMTCuLfe/uokv95y0OiSvoOuhK+XFNh45ww3Pf8tTNwzjlou0hV5XTkEJt/1rHfuz8nj57kQu6ef7S4q0aD10pZR1lm9KJyw4wOfWbXGXdhEhvHbvOHp3jGTOKxvZdPSM1SFZShO6Ul6qqLSclVszmDIkjqiwYKvD8VrtI0N49Z5xdGobyuzFG9jnxzNKNaEr5aU+23WSs0VlzBydYHUoXi82KpRXZ48jODCAuxat55ifLuilCV0pL7V8UzpxbcOY2FcXLnVF9w4RvDJ7LHnFZdz18jqy8/1v6V1N6Ep5oaxzxXy1N4vrRnUlMMA3NrHwhEHxbXn57otIP1PI7MUbKCr1r00yNKEr5YXe33KM8grDDaN1t8fGJB9MZvKyyQxfMpzJyyaTZdayYNYotqbn8Mu3t/rVHqWa0JXyQss3HWN4QjT9OkdZHYpXc7aoWXnERh65eiArUzN55tN9VofpMZrQlfIye46fY1fmWWaO0tZ5Yxpa1Kxbt13EDv5/vHzsBi55/YrzK1f6Mv9eGEIpL/T+lmMEBghJw7tYHYrXc7aoWWZ+Jk+sfYIiU4QI5JSeZN43j7P55GZWp692uua83WlCV8qLGGP4IDWDi/t0IDYq1OpwvF5cZByZ+Zn17g+QgHot95KKYt7a89b529XlGV9K8lpyUcqLbE7LIS27kOkjtHXuCmeLmlWYCpceX1RexFt73nK6sYjdaEJXraLuyAO7/oF42ootGYQEBXD1UMfL6aranC1qFh/Z/KUSam4sYjdaclFuVz3yoPojb3WrB7DtR1lPKCuvYGVqJpcP6ERbnervsqTeSQ5fVzVfg03lrDbv7RptoYtINxH5QkR2icgOEZnr4BwRkWdFZL+IpIrI6NYJV9lBY9upKce+O5jNqbxipo/UcktLOWq53zLglnrlGWecbTji7VxpoZcBvzDGbBKRKGCjiHxijNlZ45ypQL+qr3HA81X/Kj/U0MiDycsm1+p8Ahrc6d6frNh6jDahQVw+sJPVofgERy33UZ1G8XTKM5wsOE5gRQzXDbiC5EMf1GqAhAWGMSlhUr3Xqh1el40mdGNMJpBZ9f05EdkFdAVqJvQZwCumckrWdyLSTkTiqx6r/IyzkQfA+fsz8zP53ZrfISKUVpSev89fSjPJB5NrvZH9ZMTP+Gh7CJOHdCYsONDq8HxWdZL/fPcJZi9OISC2F/MvHlPr/2JSwiTe3/++LUuGTeoUFZGewChgXZ1DXYG0GrfTq+5TfsjRyANHykzZ+WRezR9KM45mNz753RMUhmzQ0S0ecvnAztw9oQeLvjlEm7KxrLpxFal3p7LqxlWsTl9t25KhywldRNoAy4GHjDFn6x528JB6CyiIyBwRSRGRlKysrKZFqmzDUf2yKezaIeUqR30MpRXFhHdepSsretBj0wbRr1Mbfvn2Vk7nFZ+/39nrzw6vS5cSuogEU5nMXzPGvOPglHSgW43bCUBG3ZOMMS8aYxKNMYmxsb6/VZQ/S+qdVKvV05SkbtcOKVc5TQxBOQQH6khiTwkLDmTBrFHkFpTy6PJt5xfxcvb6s8Pr0pVRLgK8DOwyxjzt5LQVwF1Vo13GA7laP1c1OSrDBEkQwQG1h+dV73Tvy5wlhg6h2hnqaYO7tOWRKQP4dNcJXl9/FHA+WckOr0tXRrlMBO4EtonIlqr7fgN0BzDGvAB8CEwD9gMFwA/dH6qys+rOpLojWhzd56jjqW4nol1GHTgyd/Tc+mOkK4L5ReJD1gXlx2ZP7MVXe7P4w8qdXNyno9PXqh1eb2LVWsGJiYkmJSXFkmsre6k7UQkqW0zzL55viz8yR2q+QZWXRjMx5k5enDnH6rD81omzRVz19FcMiIvirTkTCPDiTUVEZKMxJtHRMS3YKa/nixOVqvsYHh34Afn7f83c8bdYHZJf69w2jHnXDmHD4TMs/vaw1eE0myZ01SKeWLPFzqMOGrNiSwZ9YiMZHN/W6lD83g2ju3L5wE7878e7OXQq3+pwmkUTumo2Z7vFtDSp132TiA6NdnieHUYdNOR4bhHrD2czfURXKsceKCuJCH+ZOYyQwAAeWbaVigr7bV2nCV01W2uUQhy9SeSV5PnkaJiVqRkYg67d4kXsXnrR1RZVs7laCqmoMHx36DSf7TrJ3hPnyCsuIyYihGEJ0UwdGs+AuAv7Zjp6kygzZUQHRxMRHGG7UQcNWbE1g2Fdo+nVMdLqUFQNN4zuyofbMvnfj3dzxaBO9Ohgn/8fTeiq2Zyt2VKzFLJm3yn+mLyT3cfPERoUwMC4KKLCgkk/U8gXe07yzKf7mNQ/lvnXDqZ3bBunbxJnS86y5tY1rfazeNqhU/mkpufy22mDrA5F1SEi/Pn6YVz59Ff87r3tvDJ7rG1KYprQVbM5Gk9dXQoprzD8+cNdvLzmED06RPDXm0aQNCye8JALC0+dyivm7ZR0XvjqAFMXfM2jUwa69CbhCz7YmoEIXDOi+RsxqNYTFx3Go1MG8Pv3d/Du5mPMHJ1gdUgu0Rq6ajZnu8Vc2vVqfvRKCi+vOcTdE3rw8UOTuHFMQq1kDtCxTSg/vqwPqx6exMS+HXly5U46llxn21l6rjLGsGJrBhf1jCE+OtzqcJQTt4/rweju7fjDyp1k55dYHY5LdGKRcqui0nLuXrSelCNnmD99CHeO7+HS44wxLPhsH898uo+Rgw6SH/EBJwp8c/bozoyzTHv2a/543VDucPH3o6yx5/g5kp79mukju/D0zSOtDgdoeGKRllyU25RXGH6+dAvrDmWzYNZIZox0fQVlEeGhK/sTExnCvPfhmuH/w8d3jnI6Y8/O29yt2JpBUIAwbZiWW7zdgLgo7r+0D899sZ+ZoxL4Xj/vXg1TSy7Kbf66ag8fbjvO75IGNSmZ13TXhJ48NnUgK1Mzeeq/u52eZ9fZo8YYPtiawff6dSQmMsTqcJQLHri8L706RvKbd7dRWFJudTgN0oSu3GL13iye//IAt47txr2X9G7Rc82Z1Ju7JvTgn6sP8nZKmsNz7Dp7dNPRMxzLKdSNLGwkLDiQP10/lKPZBTz7+T6rw2mQJnTVYlnnivn50q3079yGedcMafHziQiPXzuEi/t04Pfvb2fviXP1zrHrmtUrtmQQGhTA5CHeHaeq7eI+HblpTAIvrj7Irsy6+/t4D03oymXO1m353XvbOFdUyj9uHV1vJEtzBQYIz8waSZvQYH7y2iYKSspqHbfjmtVl5RUkb8vkikGdaBOq3Vd285tpg2gXHsyv39lGuZcuC6AJXbnE2botf1n9Gh/vOMHDV/WvNePTHTpFhbFg1kgOZOXxlw9r19OdDZn05g7Rbw+c5lReCdcO13KLHbWPDGHetYPZmpbDq2sPWx2OQzpsUblk8rLJDif8SFl7upz7Ix/87Huttn3akx/sZNE3h3j93nFcbLM9N2sOrQwlhqKTk9nw0KOEBbvnk4zyLGMMdy1az+ajOXzy80mWzCPQ9dBViznrbKwIPMOfrh/Wqnth/urqAfTqGMkjy1PJLy5r/AFeou6nmiJOE9hpOZ+l/dfq0FQziQh/um4YpeUVPLFip9Xh1KMJXbnEWWdjeEAHxvRo36rXDg8J5H9vHM6xnEKe/mRvq17LnRwNrSynxOuHVqqGde8Qwdwr+/HfHcf5ZOcJq8OpRRO6comjTkhTEcxDHuqEvKhnDLMu6s7ibw+z+7j3jjKoya5DK1XjfnRJbwZ0jmLe+9vJ86JPjZrQlUtqdkKCUFHSjkntfsztQ6/3WAyPXD2AtmFB/P697VjV99MUdh1aqRoXHBjAn2cOIzO3iKdXec+nRk3oymXV+2COLPsXocfn8dTUH3j0+u0jQ/j11IFsOHyG5ZuOefTazWHHoZXKdWN6tOf2cd1Z/O0htqXnWh0O4EJCF5FFInJSRLY7OX6ZiOSKyJaqr3nuD1N5iy1pOXy97xRzJvUmKiy48Qe42U1jujG6ezv+8uEucgtKPX79pkjqncTjEx4noLw9GGwxtFI1zSNTBtKhTSiPvZtKWXmF1eG41EJfDExp5JyvjTEjq76ebHlYyls99/k+2kUEW7ZKYECA8IfrhnKmoISnP9ljSQxN0SV4Irl7H+X3Qz5k1Y2rNJn7mOjwYB6/djDbj51lydojVofTeEI3xqwGsj0Qi/JyOzJy+XTXSWZP7GXpTMchXaK5fVwP/rPuKHuO118WwJu8se4oESGBTBuuKyv6qqRh8Xx/QCx/W7WHYzmFlsbirhr6BBHZKiIfiYjTxTxEZI6IpIhISlZWlpsurTxl4Rf7iQoN4u6Le1odCj+/qj9tQoN44oMdtTpInS1PYIWzRaV8kJrBjJFddKq/DxMRnpwxFGPg8fet7bB3R0LfBPQwxowA/gG85+xEY8yLxphEY0xibGysGy6tPGXfiXN8tP04d1/ck+hwz9fO62ofGcIvJvfn2wOn+XhH5TBAZ8sTWJXU39t8jKLSCm4bq5tY+LpuMRE8fFU/Pt118vzr0QotTujGmLPGmLyq7z8EgkXEXvOzVaP+78sDhAcHMvt7vawO5bzbxnZnYFwUf0zeRVFpuVetkW6M4fV1RxnWNZphCdEev77yvB9O7MWg+LY8vmIH54qs6bBvcUIXkTip2hJbRMZWPefplj6v8h4nzhbxwdYMbk7s5lWbMgQFBjDv2sGknynkX6sPetVEnk1Hc9h9/By3jevu8WsrawQHBvCXmcM4ea6Yv35sTYe9K8MW3wDWAgNEJF1E7hGR+0Xk/qpTbgS2i8hW4FlglrHDrA/lslfXHqHcGH44safVodRzcZ+OTB0ax8Iv9xMb3tnhOVZM5Hlj/VEiQwK5Vjey8Csju7XjrvE9eOW7I2xJy/H49V0Z5XKrMSbeGBNsjEkwxrxsjHnBGPNC1fHnjDFDjDEjjDHjjTHftn7YylOKSst5bd0RrhzUmR4dIq0Ox6HfTBuEMdCh5DqvmMiTW1jKytQMZozqqp2hfuiXVw+gU1Qoj72zjVIPj03XmaKqQe9tPsaZglJmT/Se2nld3WIiuO/SPqzf3pM7+v7S8jXSl21Mr+oM1XKLP4oKC+aJ6UPYlXmWl74+5NFra/NBOVS9jndmXibt+sdwml8B11gdllM/vrQPy1LS+HhdWz762ccEBoglcZSVV7BozSHG9oxhaFftDPVXVw+JY8qQOP7+6V6uGtyJvp3cu/mLM9pCV/XUHP6HQHlgNk+sfcLSMd2NCQ8J5LFpg9iZeZa3NjjeWNoTPt5xgmM5hdxzifd+olGtT6RyRnNESCC/fDvVY1vWaUJX9XjT8L+muGZ4PGN7xfDXVXssW+flpTUH6dEhgisHOe6gVf4jNiqUJ6YPYUtaDi99fdAj19SErurxpuF/TSEiPH7tYHIKSnjmM88vabrxSDabj+Ywe2Ivy0o+yrtMH9GFq4d05m+f7GX/ybxWv54mdFWPndfxHtIlmllju/PK2iPsO+HZdV7+8fl+2kcEc+OYBI9eV3mvmqWXXy3b2uqlF03oqp6fjXwQKmpP77fTOt6/nDyAyJBAnly502PramxJy+HLPVn8aFJvInWooqqhU1QYT0wfwuajOby8pnVLL5rQVT1R5WMpzJxJu+BOlg7/a66YyBAevqo/X+87xSc7T3hkwa4Fn+6lfUQwd03o6fbnVvY3fUQXJg/uzF9XtW7pRaya1JmYmGhSUlIsubZq2P2vbmT94WzWPnY5oUGBVofTLKXlFUxb8DW5QeswMW/X6uQNCwxz6xvU1rQcZiz8hl9dPYCePfawYNMCjucfJy4yjrmj59rmjVC1rpPnipj899X06BDJ8vsnEBTYvPa0iGw0xiQ6OqYtdFVL1rliPt11gpmjuto2mUPluhqPXzuE/PAPWnXEjjGGPyXvokNkCHFddnrVao/Ku3SKCuNP1w1ja1oOC7840CrX0ISualm2MZ2yCsOssd2sDqXFvtevIwEhjtfTcNeInY+2H2f94Wx+MXkA/9z2nC2HeyrPSRoez08u68Ml/VtnQVpN6Oo8YwxvbTjKRT3be2xmW2vrHNF6I3aKSsv584e7GBgXxS0XdbPtcE/lWY9MGcjo7u1b5bk1oavzvjuYzeHTBcy6yHfWIHl4zEMEB4TWus9dI3b+78sDpJ8pZN61gwkMEFsP91S+QRO6Ou/NDUeJCgti2jDf2f8yqXcSf5j4BOHSEWOgfUgnt3SIVtZB93P9qK5c3Kfy4/Pc0XO9YrVH5b90wKwCIKeghI+2H2fWRd0ID7FvZ6gjSb2TuKLbFG54/luOZhcwbPIlLXq+otJyfr50C7FtQpk//cIWutVvEjrKRVlFE7oC4J1Nxygpq/CpcktNYcGBvHDHGK75xxpmL9nA0vsmNGv3JWMMv39vOwey8nn1nrH19ldN6p2kCVxZRksuCmMMb244yoiEaAZ3aWt1OK2mW0wE/7xzDGnZBfzw3+vJKy5r8nMs/GI/b29M58HL+3JJP93oXHkXTeiKTUdz2Hsij1l+sCHD+N4dWHjbaLZnnOWul9dxKq/Y5ccu3ZDGX1ft5bqRXXj4qv6tGKVSzaMJXfHm+qNE+NH+l1cO7sxzt45iZ+ZZZjz3DTszzjZ4fkWF4bnP9/HI8lQu6deRp24cTtW+6Ep5FU3ofu5cUSkrUzOZPqKLX+1/OXVYPEvvm0BZRQUzFq7hfz7azWkHrfXNR88w68Xv+OuqvcwY2YWX7k609Qxa5dsa/QsWkUVU7j120hgz1MFxARYA04AC4AfGmE3uDlS1jve3ZFBYWu4X5Za6hie048MHL+FPH+7in6sP8NLXBxnToz29OkZSUlZB6rFc9p/Mo31EMP97w3BuSkzQlrnyaq40yRYDzwGvODk+FehX9TUOeL7qX2UDb244ysC4KEYk+Of+lx3ahPL0zSP5yWV9WbYxnbUHT/PZ7pMEBwh9O0dx14QezByd4FefXpR9NfoqNcasFpGeDZwyA3jFVC7b+J2ItBOReGNMpptiVK1k+7Fcth87yxPTh/h9y7Nvpzb8eupAq8NQqkXcUUPvCtTclTe96r56RGSOiKSISEpWVpYbLq1a4o31RwkNCuC6kQ7/u5RSNuOOhO6oaedwkXVjzIvGmERjTGJsrI7htVJBSRnvb8kgaVg80RHBjT9AKeX13JHQ04Gaa60mABlueF7VilamZpJXXB5aVQQAABQ5SURBVOaXnaFK+Sp3JPQVwF1SaTyQq/Vz7/fWhjR6x0ZyUc/WWcZTKeV5rgxbfAO4DOgoIunA40AwgDHmBeBDKocs7qdy2OIPWytY5R57T5xj45Ez/GbaQL/vDFXKl7gyyuXWRo4b4Kdui0i1ujfXpxEcKNwwOuH8fckHk/1ulcCW/Mz++PtS3k8H1/qZotJy3tmczuTBcXRoU7nxQ/LBZOZ/O//89mnVe2ECPpukWvIz++PvS9mDTv33Mx/vOE5OQWmtPUMXbFrgd3thtuRn9sffl7IHTeh+5s31aXSLCWdinwub1PrjXpgt+Zn98fel7EETuh85dCqftQdPc0tiNwICLnSG+uNemC35mf3x96XsQRO6H3lj/VGCAoSbE7vVut8f98Jsyc/sj78vZQ/aKeonisvKWbYxnSsHdaZT29rJyB/3wmzJz+yPvy9lD1I56tDzEhMTTUpKiiXX9kcrtmbw4BubeWX2WCb112UXlLIrEdlojEl0dExLLn7i9XVH6BYTzvf6dmz8ZKWULWlC9wMHsvL47mA2sy7qXqszVCnlWzSh+4E3qzpDb0pMaPxkpZRtaUL3cUWllZ2hVw3uTKeosMYfoJSyLU3oPu7jHcc5U1DKbeN0mVylfJ0mdB/3+rqjdI+JqDUzVCnlmzSh+7C9J86x7lA2t47VzlCl/IEmdB+25NvDhAQFcMtF3Ro/WSlle5rQfVRuYSnvbDrGjBFdiIkMsTocpZQHaEL3UW+npFFYWs7dF/e0OhSllIdoQvdBFRWGV787wpge7RnaNdrqcJRSHqIJ3Qd9ufckR04XaOvcTZIPJjN52WSGLxnO5GWTST6YbHVISjmkqy36oMXfHqFTVChTh+r63C2l280pO9EWuo/Zf/Icq/dmcfu4HgQH6n9vS+l2c8pOXPqLF5EpIrJHRPaLyK8dHP+BiGSJyJaqr3vdH6pyxYurDxIaFMAd43VmqDvodnPKThpN6CISCCwEpgKDgVtFZLCDU98yxoys+nrJzXEqF5w4W8R7mzO4ObEbHdqE1jqmdeDm0e3mlJ240kIfC+w3xhw0xpQAbwIzWjcs1Rz//uYwZRUV3HtJr1r3V9eBM/MzMZjzdWBN6o3T7eaUnbiS0LsCaTVup1fdV9cNIpIqIstExOHURBGZIyIpIpKSlZXVjHCVM+eKSnlt3RGmDo2nR4fIWse0Dtx8Sb2TmH/xfOIj4xGE+Mh45l88XztElVdyZZSLo0VA6u5b9wHwhjGmWETuB5YAl9d7kDEvAi9C5RZ0TYxVNeDN9WmcKypjzqTe9Y5pHbhlknonaQJXtuBKCz0dqNniTgAyap5gjDltjCmuuvkvYIx7wlOuKCmrYNE3hxjfO4YR3drVO651YKX8gysJfQPQT0R6iUgIMAtYUfMEEYmvcXM6sMt9IarGLNuYTmZuEfdf2sfhca0DK+UfGi25GGPKROQB4GMgEFhkjNkhIk8CKcaYFcCDIjIdKAOygR+0YsyqhpKyChZ+sZ+R3dpxaf9Yh+dUlwsWbFrA8fzjxEXGMXf0XC0jKOVjxBhrStmJiYkmJSXFkmv7kv98d4TfvbedJbPHOk3oXiF1KXz2JOSmQ3QC9JsM+1ZduH3FPBh+s9VRKuX1RGSjMSbR0TGd+m9jxWXlLPxiP6O7t2NSPy/ekSh1KXzwIJQWVt7OTYOUly8cz02rPA6a1F2lb5DKAW2h29iraw/z+/d38Oo9Y7mknxe1zusmm5J8KMxu/HESCKZCE1Jj6r5BOhIQDKFRUHhGf58+RlvoPqiotJyFXxwgsUd7cgPWMXnZs95RH3fUGneVKb/wGG2xX+DoDbKhZA5QUXrhTVR/n35DE7pNvbL2MMfPFnHLZVk8sfZv1q4GWDPhSMCFxNwSpYWVz+nvCaglb5A1lRbCR4/WfmPQVrvP0eX4bCg7v4R/fL6f7w+I5aOMRdbOAq1OOLlpgHFPMq+WmwZ/Hwrz21X+m7rUfc9tF5892Xhr3FWF2Rf+n6pb7f74O/VhmtBt6NnP9pFfXMZj0wZZPwvU1YQTHgPR3QCp/Dfxngu3JdDJg0QTUG566z13aSG8e79/v2H6GC252MyBrDz+890RZo3tTv/OUcRFxpGZn1nvPI/NAnUl4QSHw9SnnH+8d9jJJ9RbYcJfyjCulLDCYyAk0vEol/D2UJIH5SWNX0v7LXyKJnQbMcbw+Ps7CA8J5OEr+wOVs0Br7qgDrTwLtG4HXXh7xyNYmjJipfpYzed1VituzRarN6j75uYomTf2Bln9PE0daeQvb5g+TBO6jSRvy2TN/lM8MX0IsVGV6517dBaoow66gGAIDKndGgwOh2ufbVpiGH5z7fP/PtRxUo9OaF7sduGshNXUIZ11f5+uDHWEC/0W2nFqSzoO3Sbyisu44m9f0rFNKCse+B6BAY4WwWxlzpJs3Y//7kgCjhKQP4ytnt+O+ouZAgjMz2nZc7s0GqlOqas5b852ZKOJWjoO3Qf8+cNdnDxXzAt3jLEmmYPzckfhGXj0kHuvVbcMU10X9vWx1c7KTe74ZFKz1e7P/RaOkvfW131iJrMmdBv4el8Wr687ypxJvRnVvb11gbRmsnGkZgL6+9D6NWBfSDaNJReobCVfMc+9121Sv0Va5ScHL2upuqzm77huh3FuGqQswvGnohps8lrThO7lzhaV8uiyVHrHRvLzq/p7PoC6fwyO6uXuTjaOOPt0YOdOUkd9EltfhxG3eebjvqv9FkCtoaPVj/VGjb1BOuwYdrHsbIPXmiZ0L2aM4bF3tnHiXDFv3z+BsGBn47VbSd2EU5hdWccOj/F8HdtDnw6SDyZ7bplhRx2gpYWVyfzh7a1zzYZcMa/xjlNvm3Hqjta3q2zQIa8J3Yu9tu4oyamZPDJlAKOtKLU4SjgVpZUdoO6umTfGUbJx86eD6s20PbaMgrd96qhbhnGWCAuza/dlvPeTyiTviTf5hhJ4S1rfjvoPavLUJ9EW0pmiXmpbei5PrtzJpf1juX+S452IWp03JZzhN1eOtqg52/TaZyuPuWl5AI9vpu2sxWdlS3D4zZWfDubnVP2uXXB+ITBzIcE/1avl/yepS2v/3678ee1lJgqzXZs81ZjgcEic7Xwmc/VrzVvLTDVoC90LZeYWcs+SDcS2CeXpm0cQ4KlRLa5OGrIq4TQ2trqFNV6PL6PggU8dLeJKCcYRRys9Hv2udr+Ao2GB0Erlkzqtbx8e/qoJvRW0pA6bX1zGPYtTKCgpZ/mPx9GhTWgrR1ulKZOGvCXhOKtBN3M0gseXUXA00sSbkouj+Fxd276m0sLaydjRsMD3fgIibiqf1BAc7rlOZi+gCd3NWlKHLSwp594lKezL/4r4gV9w08dZnlvf3Fm9vDUmDbmLm0tCHllGoe6noCvmWdMB6qrmzjitp5FkXFHa5NAc8uHWtys0oYPjP7JmvggaqsM2lJSLSsuZ82oKKac+JSrhPc6UFAMeXN/ck5OG3MXNI19afRkFN5eILOFswpc7atku8Z/ySXO4NPVfRKYAC4BA4CVjzP/UOR4KvAKMAU4DtxhjDjf0nM2d+l9WXkGAiPvqyqlLSf70VyxoG8HxoEDiysqZe7aApP43NOtj2vAlwzEOWiOCkHp3qsPH5BaU8qNXU1h/KJuE4U+TW3qy3jnxkfGsunFV03++hrgyFTy6m/e2IB21Fr15qrrT9Wm8+HfsioZGngCNjiBxlZ+VT5xp0dR/EQkEFgJXAenABhFZYYzZWeO0e4Azxpi+IjILeAq4peWh1/fV3ix+9sZm+nZqQ99ObejfOYp+Vf92bRfe5ESf/PWTzG/fhqKAygE/mcFBzG/fBna9SVJ+fuVJTRia1dQ6bFp2AbMXb+DI6QIWzBrJ77dmOTzP7R1zrq7q5y31ckcc1Xj7Ta68/c4c7/uD96ZRQ+7kqCzT2OzXugKCa9fQq+/T1neTuFJyGQvsN8YcBBCRN4EZQM2EPgOYX/X9MuA5ERHTCit/xUeHc8tF3dh3Io9v9p/inU3Hzh+LCAlkUHxbhnWNZmjXaIZ2bUvf2DYEBTofnbkgtJyigNq/hqKAABa0j76Q0KF+z72TBN+UOuyH2zJ5dHkqAiyZPZYJfTqwcL+HOubctaqf1Rpan8TbShqeXjrBKnUTPED38Y0vfgXe20FsE64k9K5AzVdhOjDO2TnGmDIRyQU6AKdqniQic4A5AN27d29WwIO7tOXxLkPO384tKGV/1jn2nshjz/Fz7MjIZWlKGou/PQxAWHDA+SQ/rGs0I7u1o3dsm/MLXB0Pcjz70tn95zkZmpW0bxWUZbOgQwzHA4W4yPh6ddhTecX8OXkX72w+xohu7Xju1lF0i4kAPLi+ubNWoalo+ap+VnHzqBe38/Zhiq3JUZJ3dp5qNlcSuqMaRt2WtyvnYIx5EXgRKmvoLly7UdERwYzpEcOYHjHn7yuvMBw6lce2Y7lsSz/L9mO5LN+YzitrjwAQGRLI0KrkHhPYltMV5+o9b1xZE/fGrDE0KwkqW/cBwRCaB9tvh+gEii79HUvOXcTCL/ZTWFrOA9/vy4NX9CMk6MIniFbtmHOpZm7j1qK3lTQcdbZf+6y2QlWrcSWhpwM1p4wlABlOzkkXkSAgGmjiYFX3CQwQ+naKom+nKK4fVXlfeYXhYFYeW9NzSU3PYWtaDv/+5jAVkdOIjF9GRcCF5BZKAA+eLWjGleu8R9VpxZsVP2NHyb2M7Hs9864ZTN9ObRw+S1LvJPePaPGFmnljvKmk4az8c+2z9u4AVV6t0VEuVQl6L3AFcAzYANxmjNlR45yfAsOMMfdXdYrONMY02Ozwhg0uSsoq2H38LG/seI9PTyymqOI0FWXtKD55NdPy8vlNyNt05hSFgVGEVhQSaFo+VrYspB1B4VGt30JzdQsyu9XMG+JNo158dUSLslxDo1xcHbY4DXiGymGLi4wxfxKRJ4EUY8wKEQkDXgVGUdkyn1XdieqMNyR0R/KLy9h+LJfU9Fy2pueQmp5L2pkCrpU1PBK0lC5ymhwiaSNFhFB2/nEVNHNhnNboyW/S5A837ITjTdw4p6BFWnPnIeXXWpzQW4O3JnRHikrLST9TwJHTlV9ZecX0OJbMVZn/JKbsJNlBsWyPmMCEc/8lxBS37GLNHWvr0vZiDvhDi9GKJK8tdNVKNKF7SqMTLFzVyGy4ukO+XBnn64g3T8JxF6vKMN5U/lE+RRO6VVytY7eYizPxvHldltZiZUvZW8o/yqfoJtFWcdvCRo1xIZkHh8PUp/wvoXhyKKPdFt5SPkc3uPCkups0hMdULk9bixvXPpdA7LZAv9t5ahOJ6jfr6s0XqocptmDDDaWaSksuVmvOuhcO1Sm7aL22kqNPRa0xskg7QZWHaMnFmzW27oUrnau6Cp1zzpZ7rbtsQ81zm8PbZqkqv6QtdDtw1IrX5N087mxJ2335YWVL2kK3O1cXNlKNc1dL2h+WUlC2o52iyr846wyVgKbtUt/Q8sP+3hGtLKMtdOVfnO1kX93CdlZTr1v2clS2AXsvP6xsTxO68i91O0kd1b5LCys3L3HWMZ2bhtPJXHZefljZniZ05X9q9knMb+f4nMLsCyNhHM7uNTgcKqo1c2UhraEr/9aiFrW5MElMa+bKC2gLXfk3ZzV1V+iQROVltIWu/Fvd5Riiu1UuydAYLa8oL6QtdKVcWUStNZYLUMrNNKErVVfdkTCawJVNaEJXyhGdnatsSGvoSinlIzShK6WUj9CErpRSPkITulJK+QhN6Eop5SMs2+BCRLKAI5Zc3LmOwCmrg2gCO8Vrp1jBXvHaKVawV7zeGGsPY0ysowOWJXRvJCIpznYC8UZ2itdOsYK94rVTrGCveO0UK2jJRSmlfIYmdKWU8hGa0Gt70eoAmshO8dopVrBXvHaKFewVr51i1Rq6Ukr5Cm2hK6WUj9CErpRSPkITeh0i8v9EZLeIpIrIuyLiZNNJ64nITSKyQ0QqRMRrh1aJyBQR2SMi+0Xk11bH0xARWSQiJ0XE67ciEpFuIvKFiOyqeh3MtTomZ0QkTETWi8jWqlifsDqmxohIoIhsFpGVVsfiKk3o9X0CDDXGDAf2Ao9ZHE9DtgMzgdVWB+KMiAQCC4GpwGDgVhEZbG1UDVoMTLE6CBeVAb8wxgwCxgM/9eLfbTFwuTFmBDASmCIi4y2OqTFzgV1WB9EUmtDrMMasMsaUVd38DmjJLsKtyhizyxizx+o4GjEW2G+MOWiMKQHeBGZYHJNTxpjVQLbVcbjCGJNpjNlU9f05KpNPV2ujcsxUyqu6GVz15bUjMkQkAUgCXrI6lqbQhN6w2cBHVgdhc12BtBq30/HSpGNnItITGAWsszYS56pKGFuAk8AnxhivjRV4BngEqLA6kKbwyx2LRORTIM7Bod8aY96vOue3VH6kfc2TsdXlSqxeThzc57UtMzsSkTbAcuAhY8xZq+NxxhhTDoys6pd6V0SGGmO8rq9CRK4BThpjNorIZVbH0xR+mdCNMVc2dFxE7gauAa4wFg/UbyxWG0gHutW4nQBkWBSLzxGRYCqT+WvGmHesjscVxpgcEfmSyr4Kr0vowERguohMA8KAtiLyH2PMHRbH1SgtudQhIlOAR4HpxpgCq+PxARuAfiLSS0RCgFnACotj8gkiIsDLwC5jzNNWx9MQEYmtHjEmIuHAlcBua6NyzBjzmDEmwRjTk8rX6+d2SOagCd2R54Ao4BMR2SIiL1gdkDMicr2IpAMTgGQR+djqmOqq6mB+APiYyk67pcaYHdZG5ZyIvAGsBQaISLqI3GN1TA2YCNwJXF71Wt1S1ar0RvHAFyKSSuWb/CfGGNsMB7QLnfqvlFI+QlvoSinlIzShK6WUj9CErpRSPkITulJK+QhN6Eop5SM0oSullI/QhK6UUj7i/wPeikrWlitCMQAAAABJRU5ErkJggg==\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAXQAAAD4CAYAAAD8Zh1EAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8QZhcZAAAgAElEQVR4nO3deXyU1fX48c/JHsgGWYEEghLWyCKRRa0iuKAFcaXWpa6lVq1LW7uLS9tftfZrq9XaUlfcUVDRiogLKihLCBDWYFiTQEgCZIHsyf39MUFDMpNMkkmeeWbO+/XKK8k8z8wchsnJzX3OPVeMMSillLK/AKsDUEop5Rma0JVSykdoQldKKR+hCV0ppXyEJnSllPIRQVY9cVxcnElNTbXq6ZVSypbWrVtXYoyJd3bMsoSemppKZmamVU+vlFK2JCJ7XR3TKRellPIRmtCVUspHaEJXSikfoQldKaV8hCZ0pZTyEZrQlbKb7AXw93R4IMbxOXuB1REpL2FZ2aJSqhOyF8B7d0JdleP7sjzH9wCjZ1sXl/IKOkJXyk4+eei7ZH5cXZXjduX32k3oIhImImtEZKOIbBGRB52cEyoib4hIroisFpHU7ghWKb9Xlt+x25VfcWeEXgNMNcaMAcYC00VkUotzbgaOGGOGAH8HHvFsmEopAKKTO3a78ivtJnTjcLTp2+Cmj5bbHM0CXmz6+i1gmoiIx6JUSjlMmwvB4SfeFhzuuF35Pbfm0EUkUEQ2AEXAMmPM6hanDADyAIwx9UAZEOvkceaISKaIZBYXF3ctcqX80ejZMPMJiE4BxPF55hN6QVQBbla5GGMagLEiEgO8LSLpxpjNzU5xNhpvtVmpMWYeMA8gIyNDNzNVqjNGz9YErpzqUJWLMaYUWA5Mb3EoH0gBEJEgIBo47IH4lFJKucmdKpf4ppE5IhIOnAtsb3HaYuD6pq+vAD41xugIXCmlepA7Uy79gBdFJBDHL4AFxpj3ReQhINMYsxh4FnhJRHJxjMyv6raIlVJKOdVuQjfGZAPjnNw+t9nX1cCVng1NKaVUR+jSf6V8WfYCxyrSsnxHrfq0uSdcUP3mYAVf7TxEzsEKisprCAoQIsOCGJYUyZiUGE4d2IfAAK1AtgtN6Er5AmeJG5z2fTHA4sYzeHbFbrLzywCIDg+mX3QYxsDhylreXOdYeRoXEcqM0f244fRUUuN6W/APUx0hVl27zMjIMLqnqFIe0LJhFzgWGwWFQ1XrYrOigAQmVP6DoYkRzM5I4aJT+tEvOozmawFLjtawatchPth0gI+3FlHf2MhFp/Tj3guGMShWE7uVRGSdMSbD6TFN6ErZ3N/THaNvNzUivPX9TVwxPpkAN6ZTisqreW7lHuZ/vYf6BsMt3xvMndPSCAsO7ELQqrPaSujabVEpu+tgYy4TOYDZp6W4lcwBEqLC+M2Fw/nsl1OYMaYf/1q+k5n/XMHmgrLORKu6kSZ0pezOVWOu8L6t+r6Y4HACz7u/U0+TGBXGY7PHMv+mCZRX13HJUyt56rNcGhp1yYm30ISulN25ath14SN8OWIu+Y1xGAQTnYLMfMJxvAs7Hp01NJ6ld5/F9PQkHl2aw80vrqWsqs5D/xjVFZrQlbI7Fw271kSeyw2Zqdx/0uvU33cYuaep/dJ7dzbNuZvvdjzqYFKP6RXCP384jj9dks7K3BJmPbmCHQcrPP5PUx2jF0WV8kFFFdXMeGIFvUODePeOM4gKC3YccHUBNToF7tnc+nY3ZO45zK0vZ1FZW89TV5/KOcMTuhC5ao9eFFXKjxhjuOeNDZRX1/H0tad+l8yhjR2P8jo9DZOR2pf3f3YmJ8X35pb5mby2Zl8X/wWqszShK+XNshd0ONG+sTaPlbmHuG/GSIYnRZ140OXORtKlaZik6DBenzOZM4fE8dtFm3jsoxy0P1/P04SulLc6vmCoA4m2sKyaP/9vG5NPiuXqCQNbn+DsAipCq+0LOrHxdERoEM9cn8HsjGSe+DSXX76ZTV1DY4ceQ3WNJnSlvNUnD524+hPaTbRz391MXWMjf7nsFJzuAunsAmrrvWgcOrHxdHBgAI9cPpq7z01jYVY+t760juq6hg4/juocTehKeSuX893Ob/8qt4SPth7kZ1PT2u67Mnq24wLoA6WOz9Epzs+LTu7UlI+IcPe5Q/njJel8mlPEjc+v5WhNfbv3U12nCV0pb+VqvtvJ7Q2Nhj/9bxsDYsK5+czBHXseV3Xsaed3qcTxukmDeGz2GNbsOcy1z6ymtLK2Y3GpDtOErpS3cpVop81tderCrHy2Hijn1xcO73iPFVcbT3/zUYenfFq6dFwyT19zKlv3l3PVvFUUVVR3LDbVIVqHrpQ3a6efOUB1XQNTHl1OUnQYb992uvO58854IAbn8+vimK7pgBXflPDj+ZkkRYfx8i0TGRDT8sKscpfWoStlVy3nu1skc4AFmXkUlldz7wXDPJfMoUNTPu05My2Ol2+ZQMnRGq58+it2lxzrYnDKGU3oStlYTX0DTy/fScagPpx+cqxnH7wDUz7uGD+oL6/PmURNfSM/+M/X5BZpqwBP04SulI29mZnPgbJq7pyW5tnRObieW3fyV4K7RvWP5rU5k2g0cNW8VeQUalL3JJ1DV8qm6hsaOfvR5SREhbLopx6cO+8BO4uPcvV/V1Fb38jLt0xkVP9oq0OyDZ1DV8oHLdlcSEFpFbdNGWKrZA5wcnwEb8yZTHhwIFf/dzXZ+R27yKqcazehi0iKiHwmIttEZIuI3OXknCkiUiYiG5o+OjfJppRyizGGZ77cRWpsL6bZtLthalxv3vjJZCLDgrjmv6vJ2nfE6pBsz50Rej3wC2PMCGAScLuIjHRy3pfGmLFNHx1rAqGU6pB1e4+wMb+Mm88c7PZWct4opW8vFvxkMrERIVz3zGrW7mm9qbVyX7sJ3RhzwBiT1fR1BbANGNDdgSmlXHvmy91Ehwdz+fiOlxB6m/4x4bzxk8kkRofxo2fX8NXOEqtDsq0OzaGLSCowDljt5PBkEdkoIktEZJQHYlNKOVFQWsVHWwu5euJAeoUEWR2ORyRGhfHGnMmk9A3nxufX8sWOYqtDsiW3E7qIRAALgbuNMeUtDmcBg4wxY4B/Au+4eIw5IpIpIpnFxfofplRnvLFmHwact8e1sfjIUF778SROio/glvmZfLa9yOqQbMethC4iwTiS+SvGmEUtjxtjyo0xR5u+/gAIFpE4J+fNM8ZkGGMy4uPjuxi6Uv6nrqGR19fmMWVoPCl9e1kdjsfFRoTy2o8nMiwxkjkvZfLRlkKrQ7IVd6pcBHgW2GaMeczFOUlN5yEiE5oe95AnA1VKwSfbDlJUUcO1kwZZHUq3iekV8m1t+m2vZLFk0wGrQ7INd0boZwDXAVOblSVeJCK3isitTedcAWwWkY3AE8BVRvefUsrjXl61jwEx4UwZZs9SRXdFhwfz0s0TGJsSw89eW68jdTe1e0XFGLMCxx5VbZ3zJPCkp4JSSrWWd7iSFbkl/Py8oQTauFTRXZFhwTx/42n86Lk13P5qFv+5bjxThydaHZZX05WiSnmLdnYHWpRVgAg+UarorsiwYF64cQIj+kVx60tZfK7VL23ShK6UN2hnQ2hjDIvW5zP5pFi/6yUeHR7M/JsmMCQhgjnzM1mZq3XqrmhCV8obtLMhdObeI+w9VMkVfjQ6b+74hdLBcb25+cW1rNqlNRfOaEJXyhu0syH0W5n59A4JZHp6Ug8G5V369nYk9eQ+vbjphbVkapuAVjShK+UN2tgdqKq2gf9tOsCFp/TzmZWhnRUXEcqrt0wkKSqMG19Yy9b9Ldc4+jdN6Ep5gzZ2B1q6pZCjNfV+O93SUkJUGC/dMpGI0CCuf34N+w5VWh2S19CErpQ3aGN3oIVZ+ST3CWdCal+ro/QaA2LCmX/TBOoaGrnuudUUVVRbHZJX0ISulLdwsiH0wfJqVuSWcNmpybZuk9sd0hIjee6G0ygqr+H659ZSXl1ndUiW04SulBf7X/YBjIGLx/S3OhSvdOrAPvz7uvHkFlUwZ34mtfWNVodkKU3oSnmx97L3M7JfFEMSIqwOxWudPTSeR68Yw6pdh/n925vw564jmtCV8lJ5hytZv6+UmTo6b9cl4wZw17Q03lyXz9Of77Q6HMv4dw2UUl7s/WxHl8EZo/tZHIk93H1uGrtLjvHXD3NIje3NRaf43+umI3SlvNR7G/czbmCMT/Y97w4iwl+vGM34QX24540NbMgrtTqkHqcJXSkvlFt0lK0Hypk5WqdbOiIsOJB5140nISqUH8/PpKjcv8oZNaEr5YXez96PCHxfp1va16JLZeyud3nmR6dxtLqeO15dT12D/1S+aEJXyssYY3hv434mDu5LYlSY1eF4NxddKocVLeHhy09hzZ7DPLxku9VR9hhN6Ep5mZyDFewsPsYMnW5pXxtdKmcFrGRD5D38fu1kKh8Z0aq/vC/SKhelvMySTYWIwAWj/Lezottcdql0jNRj6qpAoFfVfhoX3+kYwY6e3ZMR9ihN6Ep5mQ83F3Jaal/iI0OtDsX7RSc3Tbe0IIGtRu4B9VWYJb9GPnnI8YsgOtnRFA0cI/3mt9k06euUi1JeZFfxUXIOVnChH/c97xBXXSpNg/Pzqw6fON/+7u3wzm0ud4qyG03oqnu0sz+mcm7JZsfu9v68kUWHuOpSGZ3i9PRW7c0aaqGxRVOvZjtF2Y1OuSjPO155cPxP3uOjHrDtn7I95cPNhYxNiaFftH/tG9olo2c7f181fw8CBicJ3RVXc/NeTkfoyvPa2R9TOZd3uJJNBWU63eIJTkbuEt6BfvKudpDycu2O0EUkBZgPJAGNwDxjzOMtzhHgceAioBK4wRiT5flwlS20sz/mCbIX+MwFqa5ausUx3XJhui4m8oiWI/eWfzkCBIaAMSdOuwSHQ9r5jqlCm70v3ZlyqQd+YYzJEpFIYJ2ILDPGbG12zoVAWtPHRODpps/KH7mqPAjvc+IPSdr5sPFV/5yacfKLbMnmZEb2i2JgrPZu6RZN7ynT9LrvN7Fw9lwGxISf+H9h4/eldLR3sIi8CzxpjFnW7Lb/AMuNMa81fZ8DTDHGHHD1OBkZGSYzM7NzUSvv5u5ICMExs9lCdIpjxx5f5eT1aQwK5+7KG0mbdhM/m5ZmYXD+4fCxWs7/++ckRYfx9m1nEBzYbPb57+nOByRe8r4UkXXGmAxnxzo0hy4iqcA4YHWLQwOA5q9AftNtLe8/R0QyRSSzuLi4I0+t7MRZ5UFIROtqAmfJHGx7QcptTq4xBNRX8augBVrd0kP69g7hj7PS2VxQzrwvdp14sCNThl7G7YQuIhHAQuBuY0x5y8NO7tLqp9UYM88Yk2GMyYiPj+9YpMpeWu6PWXXE/fva9IKU21wkhv4Bh0hLjOzhYPzXhaf04/un9OPxj79hx8GK7w64ev/Z4H3pVkIXkWAcyfwVY8wiJ6fkA80LP5OB/V0PT/kMlz8MLcYCweHfrd7zVS5ei4qQxB4ORD04axQRYUHc++ZG6o93ZXS1WMkG78t2E3pTBcuzwDZjzGMuTlsM/EgcJgFlbc2fKz/k6ock46bWi0K8/MJTlzl5LSpNCOVn/NaigPxXXEQoD148io35ZTyzYrfjRleLlWzwvnSnyuUM4Dpgk4hsaLrtd8BAAGPMv4EPcJQs5uIoW7zR86EqWzv+w6Aliq1ei5LAeJ4KuJq5Z11vbVx+asbofryfvZ/Hlu3gglFJDI7r7XqxkpfrcJWLp2iVi+oQH61XL6uqY/wfl3HTmYP53UUjrA7HbxWVVzPt/z5n7MAY5t80AcfEhHfyWJWLUpZwsYmBL/SH+WTbQeobjVa3WCwhKox7pw/jy29KWLzRvpf/NKGrrumJJlw+3EpgyeZCkqLCGJscY3Uofu+aiYMYkxzNH9/fRllVyxJbe9CErjqvu0bOLX9JOFvkAbaoC27LsZp6vthRzPT0JAICvPdPfH8RGCD8+dJTOHyshkeX2nPbOk3oqvO6Y+Ts7JeEqx55NqgLbsvynGJq6ht1usWLpA+I5obTB/PK6n2s39eBtRNeQhO66rwOrqgrqqjm8x3FfLDpAKt2HeJoTX3rk5z9knDW+NQmdcFtWbL5ALG9QzgttQNdAFW3+/n5Q0mKCuN3b2/+rjbdJrQfuuo8V024mo2cjTEs23qQ/3yxi3V7TxzxBAUI00YkcNuUIYxJaZpDdjmNYhz1wD5S5VJd18Bn24u4eGx/AnW6xatEhAZx/8yR3PpyFi+v2ssNZwy2OiS3aUJXnTdtbusmXM1GzkUV1fzqrWyW5xSTGtuLey8YxvhBfYgKC+ZgRTUrvynhrax8lm5ZybWTBvKH748kzOUvCe9ojOQpK74p4VhtA9O1Va5XumBUEt9Li+OxZTuYOaY/sRH22N9VE7rqvDYWC+UUVnDD82s4UlnL/TNHct2kQQQ162g3kijOGZbAXeem8Y+Pv+G5lbvZXFDO/DN+R9Syn7v8JeErlmwuJDIsiMknxVodinJCRLh/5kim/+NL/vZRDn+5bLTVIblFE7rqGicr6nYVH+WaZ1YRGCC8devppA+Idnn3yLBg7psxktNS+3L3G+v5/vIk3pn6N2JXPewz0yst1TU08vG2g5w3IpGQIL2M5a2GJERyw+mpPLtyN1dPGMQpya7fx95C303KowpKq7j2mdUYA6/cMqnNZN7c9PQkXp8zmfKqeq5cmczhOVnfdWp0lcxtuhH1ql2HKKuq0+oWG7jr3DRie4dy/+LNNDZas6q+IzShK4+pqW/g1pfWUVFTz0s3T2RIQkSH7j82JYZnr8+goLSKG19YS2WtkyqY42y8enTJ5kJ6hQRy1lBtIe3tIsOC+fX0YWTtK+Xt9QVWh9MuTejKY/7ywXY2FZTxf1eOYWT/qE49RkZqX5744Tiy80uZ++4W1yfadPVoQ6Phoy2FnDMsgbDgQKvDUW64/NRkxqbE8PCH26mo9u4VpJrQlUcs3VLIC1/t4eYzB3P+qK5NJVwwKomfTU3jrXX5vLWug7vHePnq0XV7j1BytFanW2wkIEB48OJRlByt4Z+f5lodTps0oasuK6+u4w/vbGZU/yh+PX24Rx7zrmlpTDqpL/e9s5ncoqOtT7DprjJLNh8gJCiAc4YnWB2K6oAxKTHMHp/Ccyt2O38/eglN6KrLHv0wh0NHa3j4stEeq9oIDBCeuGococEB/OqtjTS0vCBlw11ljDEs3VzIWWlxRIRqgZnd3Dt9GOEhgTz43hasajveHk3oyn1Oqkqy9h3h5dV7uf70VI+XdSVEhfHAzFFk7Svlha/2nHjQhrvKbMwvY39ZtS4msqm4iFDuOXcoX35TwrKtB60OxykdJij3HK8qOX4hsiwP896dfBZ2BwmRk/jF+cO65Wlnje3P4o37eXTpds4bkcjA2F7fHbTDrjLNNuZIDUnk0qDLOW/E+VZHpTrpusmDeG3NPv70v22cNTTe6y5s6whducdJVYnUVfGDsuf5xXnDum0KQUT486XpBIrw0Ptbu+U5uk2L0sqY2kIeDn6G6Ny3rY5MdVJwYAD3zxzFvsOVPHt8D1IvoglducdF9Uj/gENcPr57L0T2iw7nZ9PS+HjbQb7YUdytz+VRTn4Jhpoary+tVG07My2O80cm8tRnuRSWVVsdzgk0oSv3uKgeqenVr0e6Bd54Riqpsb148L0t1NmlpalNSytV+/7w/ZHUNxoe+dC7NsLQhK7c46SqpJpQwqY/2CNPHxoUyH0zRrKz+BgvtrxA6q1sWlqp2jcwthc//t5g3l5f0KottJU0oSv3NKsqMQj5jXHsnvwXpAcvSk4dnsDZQ+N5/ONvKDla02PP22k2LK1U7rttyhASo0J5YPEWr+nzoglduW/0bOrvzOasXou4LeFFhp9/U48+vYgwd+ZIquoaePzjb3r0uTul6ZfgkeBEGo3QGJXs9aWVyn29Q4P43UUj2FRQxpvrXOx728PaTegi8pyIFImI090FRGSKiJSJyIamDx1++LDFG/eTd7iKO84ZgkjP77RzcnwEV01I4bU1+9hTcqzHn7+jakdewTkNT3LPiM8I+PkWTeY+5uIx/ckY1IdHl+ZQ7gV9XtwZob8ATG/nnC+NMWObPvQSvo8yxjDvi10MS4zk3BGJlsVx57Q0ggMDeGzZDsticNeK3GJKK+uYMbq/1aGobiAiPHDxKA4dq+UJL/irsd2Eboz5AjjcA7EoL7cy9xDbCyu4+XuDCbBwH8yEyDBuPnMwizfuZ3NBmWVxuGPhugL69ArmbG2V67PSB0Tzg4wUXvhqj+V9Xjw1hz5ZRDaKyBIRGeXqJBGZIyKZIpJZXGyjemIFwDMrdhEXEcqssdaPNuecfRIxvYL569KcEw940aYXZZV1LNt6kFljB+jORD7ulxc4+rz88f2tlvZ58cS7LAsYZIwZA/wTeMfVicaYecaYDGNMRny8jljsJLeoguU5xVw3aRChQdYvd44KC+b2KUP4YkcxX+0scdzoZZteLM7eT21DI1d088IrZb24iFDumpbG5zuK+XR7kWVxdDmhG2PKjTFHm77+AAgWkbguR6a8yvMr9xASFMC1kwZaHcq3rps8iH7RYTzyYY5jVORlm14sXJfP8KRIRnVysw9lL9efnsrJ8b354/tbqalvsCSGLid0EUmSpnIHEZnQ9JiHuvq4ynscrannnfUFXDymP7ERoVaH862w4EDuOXcoG/NKWbql0KtWZuYWHWVDXimXn5psSTWQ6nnH+7zsOVTJcyv2WBKDO2WLrwFfA8NEJF9EbhaRW0Xk1qZTrgA2i8hG4AngKuOtzYJVp7yzvoBjtQ1cO2mQ1aG0ctmpAxiSEMFfl+Zgogc4P8mClZkLs/IJDBBmjbP+eoPqOWcNjefcEYk8+ek3FJX3fJ8Xd6pcfmiM6WeMCTbGJBtjnjXG/NsY8++m408aY0YZY8YYYyYZY77q/rBVTzHG8PKqvYzqH8UYD/c794SgwADuvWAYu4qPsWrwHV6xMrOh0fB2VgFnD40nITKsR59bWe++GSOoazA8bEGfF730rtqUta+U7YUVXDNxkNdOHZw/MpFxA2O4Z+tQai/6h+WbXqzILaGwvFovhvqpQbG9ufl7g1mUVUDWvp7t86IJXbXpldV7iQgN8opSRVdEhF9PH05heTXPl58G92yGB0odny1YmfnKqr307R3CtBG6b6i/uuOcISRFhfGHtzdT34PdQTWhK+eyF9Dw2Cj+tmUKX4b8jN45i6yOqE2TToplyrB4/rV8J2VV1i3B3l9axcfbDvKD01K8orxTWaN3aBD3zxzJ1gPlrbdP7Eaa0FVrTfXcgeX5BIihT91BS+u53fWrC4ZTXl3Hfz7faVkMr67ehwGumeg95Z3KGtPTkzhnWDyPLdvB/tKq9u/gAZrQVWteVs/trpH9o5g1pj/PrdzNQQsqDGrrG3l97T6mDU8guU+v9u+gfJqI8NCsdBqN4aH3emb7RE3oqjUvqufuqJ+fN4yGRsPjn/R8o6Qlmw9QcrTWK8s7lTVS+vbizmlpfLilkE+2Hez259OErlqz8U47A2N7cfWEgbyxNo/dPdhe1xjDfz7fxUnxvTkrTdtaqO/ccuZJpCVEMPfdLVTW1nfrc2lCV63Un3MfVYSceKONdtq5Y2oaoUEBPLxkW48954rcErYeKOcnZ51kaSdK5X1CggL40yXpFJRW8cQnud36XJrQVSufh07h17W3UNWrP1bWc3dWfGQot58zhKVbDvLFjuIe6cD47893khAZyiXjXKxWVX5t4kmxXDk+mWe+3EVOYUW3PY8mdNXKoqwCVoZPJegXWyyt5+6KW743mNTYXnyx8F+Ybu7AuCm/jJW5h7jpzMGEbl3oNe17lXf57UUjiAwL4jeLsmnopj1INaGrE5RV1rFs20FmjulPcKB93x6hQYHMnTmSG6rmI91csfP3j3cQFRbEjyLWeFX7XuVd+vYOYe7MkazfV8r8r/d0y3PY9ydWdYv/bTpAbX0jl5/q/RdA2zN1eCIDAlw0/vRQxc6a3Yf5dHsRP50yhF5f/NmW5Z6q51wydgCzM5JJ6aay1qBueVRlW4uy8klLiCB9gG/08G6I7E9QRUHrAx6o2DHG8MiH20mMCuWG01NhuX3LPVXPEBH+esWYbnt8HaGrb+09dIzMvUe4zId6eAed9wB1AS06HnqoYmfZ1oOs23uEu6YNJTwk0Nblnso3aEJX33p7fQEicIkv9fAePRu5+AmKAuJpRGiISvZIxc7RmnoeWLyFtIQIrsxoStjT5npF+17lvzShK8AxfbAoq4AzTo6jX3R4+3ewkaCxP6D0J+sZXvcaP4l9gcb0K7v8mH9bmsOB8moevvyU7y4ej57t+GVhcfte5b90Dl0BsG7vEfYdruSuaWlWh9IthiZG8tuLhvPge1t5+vOd3H7OkE4/Vta+I7z49R6unTiI8YP6nnhw9GxN4MoyOkJXACzMKiA8OJDp6UlWh9Jtbjg9lVlj+/O3j3L4fEdxpx6j5GgNd7ySRf/ocH41fZiHI1SqazShK6rrGng/ez8XpifRO9R3/2gTEf5y2SkMS4zktpfXsW5vx3aTqWto5LZXsjh0rJb/XDeeyLDgbopUqc7RhK74ZFsRFdX1XOYDteft6RUSxIs3TSA+MpQbnlvDxrxSt+7X0Gj49cJs1uw+zCOXjyZ9gPftr6qUJnTFoqx8kqLCmHxyrNWh9IjEqDBe/fEkonsF88P/rmLJpgNtnn+spp7bX8liUVYBPz9vqPZrUV5LE7qfKzlaw+c7irlk3AAC/ahLYP+YcBb+9HTSEiP56StZ3PFqFjuLj55wTmOjYemWQi58/Es+2lrIfTNGcqePXjRWvqHdCVMReQ6YARQZY9KdHBfgceAioBK4wRiT5elAVfd4b+N+6hsNl53qf6POxKgw3vzJZJ76LJf/fLGT97MPMKJfFEMSIqitb2BDXikHy2sYHNebV388iUkn+cdfMMq+3LkC9gLwJDDfxfELgbSmj4nA002flQ0syiogfUAUQxMjrQ7FEiFBAdxz3lCumTSQRVkFrPimhE35pQQHBpAxqC/T05O4MNoV8ZsAAA9ASURBVD2JIBs3KlP+o92Eboz5QkRS2zhlFjDfGGOAVSISIyL9jDFtT0wqy+04WMGmgjLmzhhpdSiWS4gM49azT+bWs0+2OhSlOs0Tw44BQF6z7/ObbmtFROaISKaIZBYXd64OWHnOoqwCAgOEi8f60FJ/pfyYJxK6sytpTru3G2PmGWMyjDEZ8fG676KVGhoN76wvYMrQeOIiQq0ORynlAZ5I6PlASrPvk4H9Hnhc1Y2+3nmIwvJqv6g9V8pfeCKhLwZ+JA6TgDKdP/d+i9bnExkWxLQRCVaHopTyEHfKFl8DpgBxIpIP3A8EAxhj/g18gKNkMRdH2eKN3RWs8oxjNfV8uLmQWWP7ExYcaHU4SikPcafK5YftHDfA7R6LSHW7pVsKqaxt0OmW7AWO7eHK8h2bUEybq50Sla35bicm5dKirAJS+oaTMajPdzf6W3LLXuDYwPn4HqDHN3QG9/7d/vZ6KVvQ1RJ+5kBZFSt3lnDZuGbbzB1Pbv60W/0nD3V+Q2d/fL2ULWhC9zPvrN+PMZy41L8ryc2uXG3c7M6Gzv74eilb0ITuRxzbzOWTMagPg2J7f3egK8nNrrqyobM/vl7KFjSh+5FNBWV8U3SUS1s24vLH3eq7sqGzP75eyhY0ofuRhevyCQkKYMboFkv9/XG3+q5s6OyPr5eyBa1y8RM19Q28u3E/549MJDq8xdZpx5OYv1VtdHZDZ399vZTX04TuJz7bXkRpZR1XjHcxLaC71XeMvl7KC+mUi594a10BCZGhfC9Nm6Ip5as0ofuBkqM1LM8p4tJT/WubOaX8jSZ0P/DuBsc2c1f4+1J/pXycJnQ/sHBdPqOTo0nz023mlPIXmtB93Nb95Ww9UO76YqhSymdoQvdxC7PyCQ4UZrasPVdK+RxN6D6srqGRdzcUMG14In16h1gdjlKqm2lC92GfbDtIydFaZp+m0y1K+QNN6D7s1TV59IsO4+yhus2cUv5AE7qPyjtcyZffFHNlRorWnivlJzSh+6g3M/MA+MFpKRZHopTqKZrQfVB9QyNvZOZx9tB4BsSEt38HpZRP0ITug5bnFHOwvIarThtodSi+IXsB/D0dHohxfNat5pSX0m6LPui1NfuIiwhl2gi9GNplXd1MWqkepCN0H1NQWsVnOUVcmZFMcKD+93aZ7h+qbMStn3gRmS4iOSKSKyK/cXL8BhEpFpENTR+3eD5U5Y6XV+0F4JqJOt3iEbp/qLKRdqdcRCQQeAo4D8gH1orIYmPM1hanvmGMuaMbYlRuqq5r4PU1+zh3RCLJfXpZHY5viE52TLM4u10pL+POCH0CkGuM2WWMqQVeB2Z1b1iqMxZv3M+RyjpuOD219UG9sNc5un+oshF3EvoAoPkQJb/ptpYuF5FsEXlLRJwWP4vIHBHJFJHM4uLiToSrXDHG8OJXexiaGMHkk2NPPHj8wl5ZHmC+u7CnSb19XdlMWqke5k6Vi7NlhqbF9+8BrxljakTkVuBFYGqrOxkzD5gHkJGR0fIxVBes23uELfvL+dMl6Yi0+C9r68KeJqb26f6hyibcGaHnA81H3MnA/uYnGGMOGWNqmr79LzDeM+Epd73w1R4iw4K4dJyTP570wp5SfsGdhL4WSBORwSISAlwFLG5+goj0a/btxcA2z4Wo2nOgrIoPNxcyOyOF3qFO/uhydQFPL+wp5VPaTejGmHrgDmApjkS9wBizRUQeEpGLm067U0S2iMhG4E7ghu4KWLX27Je7MeD8YijohT2l/IRbK0WNMR8AH7S4bW6zr38L/NazoSl3lFbW8uqafVw8pj8pfV2UKh6f//3kIcc0S3SyI5nrvLBSPkWX/tvc/K/3UlnbwE/OPqntE/XCnlI+T9eG21hlbT3Pr9zNtOEJDE+KsjocpZTFNKHb2IK1eRyprOOnU062OhSllBfQhG5TdQ2N/PfL3ZyW2oeM8o91FahSSufQ7WrhunwKSquYN3YnvHeftndVSukI3Y5q6ht44pNvGJsSw8htj2t7V6UUoAndll5bvY/9ZdX88vxhiK4CVUo10YRuM1W1DTz52U4mDu7LGUNidRWoUupbmtBt5r9f7qLkaA33XjDM0YRLV4EqpZpoQreRg+XVPL18JxemJ5GR2tdxo7Z3VUo10SoXG/nb0hwaGg2/uXD4iQd0FahSCh2h28am/DLeysrnhjNSGRTb2+pwlFJeSBO6DTQ0Gn739ibiIkK5/ZwhVoejlPJSmtBtYP7Xe9hUUMbcGSOJDg+2OhyllJfShO7lDpRV8X8f7eDsofHMGN2v/TsopfyWJnQv1thouPfNbBqN4Y+znOwVqjwve4H2xVG2pVUuXuzFr/ewIreEv1x2CgNjXWxeoTwne4GjD472xVE2pSN0L5VTWMHDS7YzbXgCV52W0v4dVNd98pD2xVG2pgndC5VV1XHry+uICg/m4ctH61RLT9G+OMrmNKF3hy7MwzY2Gn6xYAN5hyv51zWnEh8Z2o2BqhNoXxxlc5rQPe34PGxZHmC+m4d1M6n/dWkOH28r4g/fH8Fpx5f3q56hfXGUzWlC97QuzMM+t2I3//58J39N2871a2ZqpUVP0744yua0ysXTOjkPuyAzj4fe38p9AzdzZeHfEa20sIb2xVE25tYIXUSmi0iOiOSKyG+cHA8VkTeajq8WkVRPB3rc7pJjPPVZLp9sO0hBaRXGmK4/qCdrjzsxD/vCyt386q1svpcWx43V879L5sdppYVSyg3tjtBFJBB4CjgPyAfWishiY8zWZqfdDBwxxgwRkauAR4AfdEfA2fmlPLo059vvI8OCGJEUxfB+kQxPimJ0cjTDkiIJDnRzNsnTtcfT5p74eOByHrah0fC3j3J4evlOLhiVyBM/HEfAnwqcP65WWiil2uHOlMsEINcYswtARF4HZgHNE/os4IGmr98CnhQRMR4ZPp9o1tgBTB2ewI6DFWw7UMH2wnJyCit4O6uAipq9AIQFB5DeP5oxKTGMbfpI7hPuvPyvrTnvziT04/f55CFHEo5OdiTzFo915Fgtd7+xgc93FPPDCQP546xRBAUGOM4vy2v9uFppoZRqhzsJfQDQPMPkAxNdnWOMqReRMiAWKGl+kojMAeYADBw4sJMhQ2RYMOMH9WX8oO+qQIwx5B+pYkNeKRvyStmYV8rLq/by7IrdAMRFhDA2pQ+nDorh1IF9GJMcQ3hIYPfUHrczD/vh5gP84Z0tlFXV8v8uPYWrJzZ7LTowwldKqebcSejOVrW0HHm7cw7GmHnAPICMjAyPjt5FhJS+vUjp24uZY/oDUNfQSE5hBevzStmwr5T1+47w8baDAAQGCCP7RfFScAIxdQdbP2A3jIg3F5Tx6NIcPt9RzKj+Ubx402mM6h994klujvCVUqoldxJ6PtB87XkysN/FOfkiEgREA4c9EmEXBAcGkD4gmvQB0Vw3aRDgmOpYn3eEdXuPkLW3lD/XXMmDMo9eUvvt/eoCwsgb/XP61zUQFhzYpRjqGhr5bHsRr67Zx/KcYqLDg/ndRcO58YzBruf5tdJCKdUJ7iT0tUCaiAwGCoCrgKtbnLMYuB74GrgC+LQ75s89oU/vEKYOT2Tq8EQA6hsmcGBFGo1fP0zv6kIOShz/r/pKFi9LJPjTpYzsH82o/lGcFNebwXG9SY3rzYCYcKeJ3hhDeXU9u0uOsamgjNW7DvH5jmIqqutJjArl7nPTuOnMwUSFaU9zpZTniTt5V0QuAv4BBALPGWP+LCIPAZnGmMUiEga8BIzDMTK/6vhFVFcyMjJMZmZml/8B3aG4oob1+46Qta+UrL1H+KaogiOVdSecExoUQEyvYEKDAmloNNQ3NlJRXU9lbcO358RFhDJ1eDznjUzinGHxjoueSinVBSKyzhiT4fSYVQNpb07ozhw5VsvuQ8fYXXyMgxXVlFbWceRYLXUNjQQFBhAUIPQKCaJfdBgpfXuRPiCKATEuKmuUUqqT2kroulLUTX16h9CndwinDuxjdShKKeWUzgEopZSP0ISulFI+QhO6Ukr5CE3oSinlIzShK6WUj9CErpRSPkITulJK+QhN6Eop5SMsWykqIsXAXkue3LU4WrT89XJ2itdOsYK94rVTrGCveL0x1kHGmHhnByxL6N5IRDJdLan1RnaK106xgr3itVOsYK947RQr6JSLUkr5DE3oSinlIzShn2ie1QF0kJ3itVOsYK947RQr2CteO8Wqc+hKKeUrdISulFI+QhO6Ukr5CE3oLYjIoyKyXUSyReRtEYmxOiZXRORKEdkiIo0i4rWlVSIyXURyRCRXRH5jdTxtEZHnRKRIRDZbHUt7RCRFRD4TkW1N74O7rI7JFREJE5E1IrKxKdYHrY6pPSISKCLrReR9q2Nxlyb01pYB6caY0cAO4LcWx9OWzcBlwBdWB+KKiAQCTwEXAiOBH4rISGujatMLwHSrg3BTPfALY8wIYBJwuxe/tjXAVGPMGGAsMF1EJlkcU3vuArZZHURHaEJvwRjzkTGmvunbVUCylfG0xRizzRiTY3Uc7ZgA5BpjdhljaoHXgVkWx+SSMeYLHBudez1jzAFjTFbT1xU4ks8Aa6Nyzjgcbfo2uOnDaysyRCQZ+D7wjNWxdIQm9LbdBCyxOgibGwDkNfs+Hy9NOnYmIqnAOGC1tZG41jSFsQEoApYZY7w2VuAfwK+ARqsD6Qi/3CRaRD4Gkpwc+r0x5t2mc36P40/aV3oytpbcidXLiZPbvHZkZkciEgEsBO42xpRbHY8rxpgGYGzTdam3RSTdGON11ypEZAZQZIxZJyJTrI6nI/wyoRtjzm3ruIhcD8wAphmLC/Xbi9UG8oGUZt8nA/stisXniEgwjmT+ijFmkdXxuMMYUyoiy3Fcq/C6hA6cAVwsIhcBYUCUiLxsjLnW4rjapVMuLYjIdODXwMXGmEqr4/EBa4E0ERksIiHAVcBii2PyCSIiwLPANmPMY1bH0xYRiT9eMSYi4cC5wHZro3LOGPNbY0yyMSYVx/v1Uzskc9CE7syTQCSwTEQ2iMi/rQ7IFRG5VETygcnA/0RkqdUxtdR0gfkOYCmOi3YLjDFbrI3KNRF5DfgaGCYi+SJys9UxteEM4DpgatN7dUPTqNIb9QM+E5FsHL/klxljbFMOaBe69F8ppXyEjtCVUspHaEJXSikfoQldKaV8hCZ0pZTyEZrQlVLKR2hCV0opH6EJXSmlfMT/B/WjfchDutgTAAAAAElFTkSuQmCC\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"w = res.x\n",
"\n",
"y = phi(dist) @ w\n",
"plt.plot(x,y)\n",
"plt.plot(x_anchor, w, 'o')\n",
"plt.plot(x_obs, y_obs, 'o')\n",
"plt.show()\n",
"\n",
"plt.plot(x,y)\n",
"#plt.plot(x_anchor, w, 'o')\n",
"plt.plot(x_obs, y_obs, 'o')\n",
"plt.show()\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"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.6.5"
}
},
"nbformat": 4,
"nbformat_minor": 2
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment