Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save farzadab/d94640a637b71e2fefb1e806cff930ce to your computer and use it in GitHub Desktop.
Save farzadab/d94640a637b71e2fefb1e806cff930ce to your computer and use it in GitHub Desktop.
Linear Algebra Tutorial notebook [by Wilder Lavington]
{
"cells": [
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "# lets get all of our imports \nimport numpy as np\nfrom scipy import linalg",
"execution_count": 5,
"outputs": []
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "# scaler - scaler multipliction\nx = 1\ny = 10\nx*y",
"execution_count": 6,
"outputs": [
{
"output_type": "execute_result",
"execution_count": 6,
"data": {
"text/plain": "10"
},
"metadata": {}
}
]
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "# other functions \nx*y + 1 - np.sin(x)\nx*y + 1 + np.log(x)\nx*y + 1 + np.exp(x)",
"execution_count": 7,
"outputs": [
{
"output_type": "execute_result",
"execution_count": 7,
"data": {
"text/plain": "13.718281828459045"
},
"metadata": {}
}
]
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "# generating arrays (random)\nnp.random.rand(2)",
"execution_count": 8,
"outputs": [
{
"output_type": "execute_result",
"execution_count": 8,
"data": {
"text/plain": "array([0.05119316, 0.95945369])"
},
"metadata": {}
}
]
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "# generating arrays (linspace)\nnp.linspace(2.0, 3.0, num=20)",
"execution_count": 9,
"outputs": [
{
"output_type": "execute_result",
"execution_count": 9,
"data": {
"text/plain": "array([2. , 2.05263158, 2.10526316, 2.15789474, 2.21052632,\n 2.26315789, 2.31578947, 2.36842105, 2.42105263, 2.47368421,\n 2.52631579, 2.57894737, 2.63157895, 2.68421053, 2.73684211,\n 2.78947368, 2.84210526, 2.89473684, 2.94736842, 3. ])"
},
"metadata": {}
}
]
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "# generating matrices (random)\nnp.random.rand(2,3)",
"execution_count": 10,
"outputs": [
{
"output_type": "execute_result",
"execution_count": 10,
"data": {
"text/plain": "array([[0.95843142, 0.93179404, 0.83591989],\n [0.26030427, 0.82862825, 0.55423052]])"
},
"metadata": {}
}
]
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "# generating a array of zeros\nnp.zeros(5)",
"execution_count": 11,
"outputs": [
{
"output_type": "execute_result",
"execution_count": 11,
"data": {
"text/plain": "array([0., 0., 0., 0., 0.])"
},
"metadata": {}
}
]
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "# generating a matrix of zeros\nnp.zeros((2, 4))",
"execution_count": 8,
"outputs": [
{
"output_type": "execute_result",
"execution_count": 8,
"data": {
"text/plain": "array([[0., 0., 0., 0.],\n [0., 0., 0., 0.]])"
},
"metadata": {}
}
]
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "# generating a matrix of ones\nnp.ones((2, 4))",
"execution_count": 13,
"outputs": [
{
"output_type": "execute_result",
"execution_count": 13,
"data": {
"text/plain": "array([[1., 1., 1., 1.],\n [1., 1., 1., 1.]])"
},
"metadata": {}
}
]
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "v = np.random.rand(10)\ns = 10",
"execution_count": 15,
"outputs": []
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "# scaler - vector multipliction\ns * v",
"execution_count": 30,
"outputs": [
{
"output_type": "execute_result",
"execution_count": 30,
"data": {
"text/plain": "array([3.37087199, 3.19873035, 5.16301149, 1.81301167, 9.50608079,\n 7.85936299, 3.50233133, 2.06077056, 5.43221286, 2.12565731])"
},
"metadata": {}
}
]
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "# vector - vector multipliction: element-wise multiplication\nv1 = np.random.rand(5)\nv2 = np.random.rand(5)\n\nv1 * v2",
"execution_count": 34,
"outputs": [
{
"output_type": "execute_result",
"execution_count": 34,
"data": {
"text/plain": "array([0.88838432, 0.74905216, 0.27255124, 0.12250431, 0.04525032])"
},
"metadata": {}
}
]
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "# element-wise multiplication: matching shapes\nv2 = np.random.rand(4)\n\nv1 * v2",
"execution_count": 32,
"outputs": [
{
"output_type": "error",
"ename": "ValueError",
"evalue": "operands could not be broadcast together with shapes (5,) (4,) ",
"traceback": [
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[0;31mValueError\u001b[0m Traceback (most recent call last)",
"\u001b[0;32m<ipython-input-32-ec75d435b1b5>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m()\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[0;31m# element-wise multiplication: matching shapes\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 2\u001b[0m \u001b[0mv2\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mrandom\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mrand\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m4\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 3\u001b[0;31m \u001b[0mv1\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0mv2\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m",
"\u001b[0;31mValueError\u001b[0m: operands could not be broadcast together with shapes (5,) (4,) "
]
}
]
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "# make a two norm (l2)\nv = np.random.rand(100)\nnp.sqrt(sum(v*v))",
"execution_count": 33,
"outputs": [
{
"output_type": "execute_result",
"execution_count": 33,
"data": {
"text/plain": "5.6292714435169"
},
"metadata": {}
}
]
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "# vector - matrix multipliction: broadcast\nv1 = np.array([1,100])\nv2 = np.array([1,2,3,4,5,6]).reshape(3,2)\n\nv1 * v2",
"execution_count": 36,
"outputs": [
{
"output_type": "execute_result",
"execution_count": 36,
"data": {
"text/plain": "array([[ 1, 200],\n [ 3, 400],\n [ 5, 600]])"
},
"metadata": {}
}
]
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "# \"element-wise\" matrix - matrix multipliction: \nv1 = np.random.rand(3,3)\nv2 = np.random.rand(3,3)\nv1 * v2",
"execution_count": 46,
"outputs": [
{
"output_type": "execute_result",
"execution_count": 46,
"data": {
"text/plain": "array([[0.0349701 , 0.31071419, 0.3563422 ],\n [0.40592048, 0.19475094, 0.37454803],\n [0.18862149, 0.84884285, 0.90960497]])"
},
"metadata": {}
}
]
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "# \"element-wise\" matrix - matrix multipliction: : size mismatch\nm1 = np.random.rand(3,8)\nm2 = np.random.rand(8,3)\nm1 * m2",
"execution_count": 47,
"outputs": [
{
"output_type": "error",
"ename": "ValueError",
"evalue": "operands could not be broadcast together with shapes (3,8) (8,3) ",
"traceback": [
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[0;31mValueError\u001b[0m Traceback (most recent call last)",
"\u001b[0;32m<ipython-input-47-d4ac30799317>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m()\u001b[0m\n\u001b[1;32m 2\u001b[0m \u001b[0mv1\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mrandom\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mrand\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m3\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;36m8\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 3\u001b[0m \u001b[0mv2\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mrandom\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mrand\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m8\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;36m3\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 4\u001b[0;31m \u001b[0mv1\u001b[0m \u001b[0;34m*\u001b[0m \u001b[0mv2\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m",
"\u001b[0;31mValueError\u001b[0m: operands could not be broadcast together with shapes (3,8) (8,3) "
]
}
]
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "# matrix - matrix multipliction\nm1 = np.random.rand(3,8)\nm2 = np.random.rand(8,3)\nnp.matmul(m1, m2)",
"execution_count": 88,
"outputs": [
{
"output_type": "execute_result",
"execution_count": 88,
"data": {
"text/plain": "array([[2.38098437, 2.70527655, 2.36424057],\n [2.76582467, 2.15053236, 2.25971462],\n [2.85678593, 2.32536773, 1.49983105]])"
},
"metadata": {}
}
]
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "# option 2 for matrix multiplication: @\nm1 @ m2",
"execution_count": 89,
"outputs": [
{
"output_type": "execute_result",
"execution_count": 89,
"data": {
"text/plain": "array([[2.38098437, 2.70527655, 2.36424057],\n [2.76582467, 2.15053236, 2.25971462],\n [2.85678593, 2.32536773, 1.49983105]])"
},
"metadata": {}
}
]
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "# matrix - matrix multipliction: size mismatch\nm1 = np.random.rand(3,8)\nm2 = np.random.rand(3,3)\nnp.matmul(m1, m2)",
"execution_count": 85,
"outputs": [
{
"output_type": "error",
"ename": "ValueError",
"evalue": "shapes (3,8) and (3,3) not aligned: 8 (dim 1) != 3 (dim 0)",
"traceback": [
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[0;31mValueError\u001b[0m Traceback (most recent call last)",
"\u001b[0;32m<ipython-input-85-062e974cab63>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m()\u001b[0m\n\u001b[1;32m 2\u001b[0m \u001b[0mm1\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mrandom\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mrand\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m3\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;36m8\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 3\u001b[0m \u001b[0mm2\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mrandom\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mrand\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m3\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;36m3\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 4\u001b[0;31m \u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mmatmul\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mm1\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mm2\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m",
"\u001b[0;31mValueError\u001b[0m: shapes (3,8) and (3,3) not aligned: 8 (dim 1) != 3 (dim 0)"
]
}
]
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "# option 3 for matrix multiplication: np.matrix\nm1 = np.matrix(np.random.rand(5,4))\nm2 = np.matrix(np.random.rand(4,5))\nm1 * m2",
"execution_count": 49,
"outputs": [
{
"output_type": "execute_result",
"execution_count": 49,
"data": {
"text/plain": "matrix([[1.52944453, 0.52535152, 1.10522876, 1.84089603, 1.67559165],\n [1.42694103, 0.75291401, 1.09411873, 1.3024963 , 1.51751165],\n [1.10570363, 0.44129516, 0.64177185, 1.19396572, 1.01129319],\n [0.98769848, 0.27332851, 0.66693344, 0.86839107, 1.15408258],\n [0.72794788, 0.47725534, 0.60221488, 0.46389334, 0.79510672]])"
},
"metadata": {}
}
]
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "# matrix - vector multipliction\nm = np.matrix(np.random.rand(5,4))\nv = np.matrix(np.random.rand(4,1))\nm * v",
"execution_count": 50,
"outputs": [
{
"output_type": "execute_result",
"execution_count": 50,
"data": {
"text/plain": "matrix([[1.46877674],\n [0.54569547],\n [1.05901183],\n [1.13739921],\n [0.66695699]])"
},
"metadata": {}
}
]
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "# matrix - vector multipliction: size mismatch\nm = np.matrix(np.random.rand(5,4))\nv = np.matrix(np.random.rand(4))\nm * v",
"execution_count": 52,
"outputs": [
{
"output_type": "error",
"ename": "ValueError",
"evalue": "shapes (5,4) and (1,4) not aligned: 4 (dim 1) != 1 (dim 0)",
"traceback": [
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[0;31mValueError\u001b[0m Traceback (most recent call last)",
"\u001b[0;32m<ipython-input-52-7195480c4f51>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m()\u001b[0m\n\u001b[1;32m 2\u001b[0m \u001b[0mm\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mmatrix\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mrandom\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mrand\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m5\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;36m4\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 3\u001b[0m \u001b[0mv\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mmatrix\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mrandom\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mrand\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m4\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 4\u001b[0;31m \u001b[0mm\u001b[0m \u001b[0;34m*\u001b[0m \u001b[0mv\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m",
"\u001b[0;32m~/anaconda3_420/lib/python3.5/site-packages/numpy/matrixlib/defmatrix.py\u001b[0m in \u001b[0;36m__mul__\u001b[0;34m(self, other)\u001b[0m\n\u001b[1;32m 213\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0misinstance\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mother\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0mN\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mndarray\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mlist\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mtuple\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 214\u001b[0m \u001b[0;31m# This promotes 1-D vectors to row vectors\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 215\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mN\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mdot\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0masmatrix\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mother\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 216\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0misscalar\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mother\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32mor\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0mhasattr\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mother\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m'__rmul__'\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 217\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mN\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mdot\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mother\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;31mValueError\u001b[0m: shapes (5,4) and (1,4) not aligned: 4 (dim 1) != 1 (dim 0)"
]
}
]
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "# matrix norms \nfrom numpy.linalg import norm\n\nm = np.matrix([1,2,3,4]).reshape(2,2)\n\nprint(norm(m))\nprint(norm(m, 'fro'))\nprint(norm(m, np.inf))\nprint(norm(m, -np.inf))\nprint(norm(m, 2))\nprint(norm(m, -2))",
"execution_count": 76,
"outputs": [
{
"output_type": "stream",
"text": "5.477225575051661\n5.477225575051661\n7.0\n3.0\n5.464985704219043\n0.36596619062625746\n",
"name": "stdout"
}
]
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "# solving a linear system\n# from numpy.linalg import solve\n\nA = np.matrix(np.random.rand(5,5))\nb = np.matrix(np.random.rand(5,1))\nnp.linalg.solve(A, b)",
"execution_count": 78,
"outputs": [
{
"output_type": "execute_result",
"execution_count": 78,
"data": {
"text/plain": "matrix([[ 0.98458229],\n [-0.69050311],\n [ 0.65658468],\n [ 0.05219171],\n [-0.18769165]])"
},
"metadata": {}
}
]
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "import scipy.linalg as sla\n\n# solving a linear system (LU)\nA = np.matrix(np.random.rand(5,5))\nb = np.matrix(np.random.rand(5,1))\nP, L, U = sla.lu(A)\n# LU x = P^{-1} * b\nPb = P.transpose()*b\n# Ly = Pb\ny = sla.solve_triangular(U, Pb)\n# Ux = y\nx = sla.solve_triangular(L, y, lower=True)\nx",
"execution_count": 98,
"outputs": [
{
"output_type": "execute_result",
"execution_count": 98,
"data": {
"text/plain": "array([[ 0.19169271],\n [ 2.02041356],\n [-1.78465993],\n [ 0.10167166],\n [-1.89017998]])"
},
"metadata": {}
}
]
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "# finding a determinant\nimport numpy.linalg as la\n\nA = np.matrix(np.random.rand(5,5))\nla.det(A)",
"execution_count": 105,
"outputs": [
{
"output_type": "execute_result",
"execution_count": 105,
"data": {
"text/plain": "0.009537127775052836"
},
"metadata": {}
}
]
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "# finding a determinant: only for square matrices\nA = np.matrix(np.random.rand(5,2))\nla.det(A)",
"execution_count": 107,
"outputs": [
{
"output_type": "error",
"ename": "LinAlgError",
"evalue": "Last 2 dimensions of the array must be square",
"traceback": [
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[0;31mLinAlgError\u001b[0m Traceback (most recent call last)",
"\u001b[0;32m<ipython-input-107-f3ed28bdff00>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m()\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[0;31m# finding a determinant: only for square matrices\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 2\u001b[0m \u001b[0mA\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mmatrix\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mrandom\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mrand\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m5\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;36m2\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 3\u001b[0;31m \u001b[0mla\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mdet\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mA\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m",
"\u001b[0;32m~/anaconda3_420/lib/python3.5/site-packages/numpy/linalg/linalg.py\u001b[0m in \u001b[0;36mdet\u001b[0;34m(a)\u001b[0m\n\u001b[1;32m 2017\u001b[0m \u001b[0ma\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0masarray\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0ma\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 2018\u001b[0m \u001b[0m_assertRankAtLeast2\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0ma\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 2019\u001b[0;31m \u001b[0m_assertNdSquareness\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0ma\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 2020\u001b[0m \u001b[0mt\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mresult_t\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0m_commonType\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0ma\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 2021\u001b[0m \u001b[0msignature\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m'D->D'\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0misComplexType\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mt\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32melse\u001b[0m \u001b[0;34m'd->d'\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m~/anaconda3_420/lib/python3.5/site-packages/numpy/linalg/linalg.py\u001b[0m in \u001b[0;36m_assertNdSquareness\u001b[0;34m(*arrays)\u001b[0m\n\u001b[1;32m 213\u001b[0m \u001b[0mm\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mn\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0ma\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mshape\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m-\u001b[0m\u001b[0;36m2\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 214\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mm\u001b[0m \u001b[0;34m!=\u001b[0m \u001b[0mn\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 215\u001b[0;31m \u001b[0;32mraise\u001b[0m \u001b[0mLinAlgError\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'Last 2 dimensions of the array must be square'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 216\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 217\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0m_assertFinite\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0marrays\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;31mLinAlgError\u001b[0m: Last 2 dimensions of the array must be square"
]
}
]
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "# solving least squares normal equations\nA = np.matrix(np.random.rand(10,3))\nb = np.matrix(np.random.rand(10,1))\n# Ax = b --> x = (A^t A)^-1 A^t b --> (A^t A) x = A^t b\nla.solve(A.transpose(1,0)*A, A.transpose(1,0)*b)",
"execution_count": 230,
"outputs": [
{
"output_type": "execute_result",
"execution_count": 230,
"data": {
"text/plain": "matrix([[-0.28516054],\n [ 0.98967105],\n [-0.20840818]])"
},
"metadata": {}
}
]
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "# solving least squares normal equations: QR\n\n# A = QR\n# (A^t A) x = A^t b --> (R^t Q^t Q R) x = R^t Q^t b --> (R^t R) x = R^t Q^t b --> R x = Q^t b\nQ, R = np.linalg.qr(A)\nnp.linalg.solve(R, Q.transpose()*b)",
"execution_count": 231,
"outputs": [
{
"output_type": "execute_result",
"execution_count": 231,
"data": {
"text/plain": "matrix([[-0.28516054],\n [ 0.98967105],\n [-0.20840818]])"
},
"metadata": {}
}
]
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "# solving least squares SVD\n# A = U S V\n# |Ax-b| = |U^t (Ax - b)| = |SVx - U^t b| = |Sz - U^t b| --> S^t S x = S^t U^t b --> x = (S^t S)^-1 S^t U^t b\nU, s, V = la.svd(A)\nS = np.matrix(np.append(np.diag(s), np.zeros((7,3)), axis=0))\nV.transpose() * np.diag(np.power(1/s, 2)) * S.transpose() * U.transpose() * b",
"execution_count": 232,
"outputs": [
{
"output_type": "execute_result",
"execution_count": 232,
"data": {
"text/plain": "matrix([[-0.28516054],\n [ 0.98967105],\n [-0.20840818]])"
},
"metadata": {}
}
]
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "# finding eigen values cholesky decomposition\nB = np.matrix(np.random.rand(4,4))\nA = B * np.transpose(B) \nL = la.cholesky(A)\nL",
"execution_count": 254,
"outputs": [
{
"output_type": "execute_result",
"execution_count": 254,
"data": {
"text/plain": "matrix([[ 1.33128599, 0. , 0. , 0. ],\n [ 0.98050935, 0.43465579, 0. , 0. ],\n [ 0.88163049, -0.04960794, 0.7781799 , 0. ],\n [ 0.5850072 , -0.09671825, 0.39623734, 0.25361176]])"
},
"metadata": {}
}
]
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "# eigen decomposition LL' = A -> ED*D'E' -> eigs = D.^2\n# print(np.sqrt(np.linalg.eigvals(A)))\n# np.linalg.norm(L, axis=1)",
"execution_count": 255,
"outputs": []
},
{
"metadata": {
"trusted": false
},
"cell_type": "code",
"source": "# finding eigen values QR algorithm (this ones wierd!)\nA = np.matrix(np.random.rand(4,4))\nA = np.transpose(A)*A\nA_iter = A\nQ, R = la.qr(A)\nfor i in range(10**4):\n A_iter = R*Q\n Q, R = la.qr(A_iter)\nprint(np.transpose(Q)*A_iter)\nprint(la.eig(A)[0])",
"execution_count": 414,
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": "[[ 5.62337093e+00 7.30621903e-16 -5.58503854e-16 -1.45752362e-16]\n [ 0.00000000e+00 4.81876877e-01 -7.85316443e-17 3.50929779e-17]\n [ 0.00000000e+00 0.00000000e+00 6.86708026e-02 -4.31502051e-17]\n [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.38738068e-03]]\n[5.62337093e+00 4.81876877e-01 6.86708026e-02 1.38738068e-03]\n"
}
]
},
{
"metadata": {
"trusted": false
},
"cell_type": "code",
"source": "# finding eigen vectors power method\nA = np.matrix(np.random.rand(5,5))\nA = A*np.transpose(A)\nx = np.matrix(np.random.rand(5,1))\nfor i in range(10**3):\n x = A*x/la.norm(A*x)\nAx = A*x\nprint(Ax[0,0]/x[0,0])\nprint(la.eig(A)[0])",
"execution_count": 326,
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": "8.332651802211897\n[8.3326518 0.83269214 0.37356706 0.17681973 0.024805 ]\n"
}
]
},
{
"metadata": {
"trusted": false
},
"cell_type": "code",
"source": "# finding eigen vectors inverse power method\nA = np.matrix(np.random.rand(5,5))\nA = A*np.transpose(A)\nx = np.matrix(np.random.rand(5,1))\n# pick an eigen value\neig3 = la.eig(A)[0][3]\nfor i in range(10**4):\n x = la.solve(A,x)/la.norm(la.solve(A,x))\nAx = A*x\nprint(Ax[0,0]/x[0,0])\nprint(eig3)",
"execution_count": 406,
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": "0.025304822560150934\n0.025304822560150524\n"
}
]
},
{
"metadata": {
"trusted": false
},
"cell_type": "code",
"source": "# finding eigen vectors shifted inverse power method\nA = np.matrix(np.random.rand(5,5))\nA = A*np.transpose(A)\nx = np.matrix(np.random.rand(5,1))\n# pick an eigen value\neig3 = la.eig(A)[0][3]\nfor i in range(10**4):\n x = la.solve(A-eig3*np.eye(5),x)/la.norm(la.solve(A-eig3*np.eye(5),x))\nAx = A*x\nprint(Ax[0,0]/x[0,0])\nprint(eig3)",
"execution_count": 405,
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": "0.16029749338013227\n0.16029749338013202\n"
}
]
},
{
"metadata": {
"trusted": false
},
"cell_type": "code",
"source": "import matplotlib.pyplot as plt\n# plotting stuff\nplt.plot([1, 2, 3, 4])\nplt.ylabel('some numbers')\nplt.show()",
"execution_count": 15,
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": "<Figure size 432x288 with 1 Axes>"
},
"metadata": {},
"output_type": "display_data"
}
]
},
{
"metadata": {
"trusted": false
},
"cell_type": "code",
"source": "plt.plot([1, 2, 3, 4], [1, 4, 9, 16])\nplt.ylabel('some numbers')\nplt.show()",
"execution_count": 16,
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": "<Figure size 432x288 with 1 Axes>"
},
"metadata": {},
"output_type": "display_data"
}
]
},
{
"metadata": {
"trusted": false
},
"cell_type": "code",
"source": "# function interpolation by solving polynomial basis vandermonde\n# 1 x x^2 x^3 ...\nx = np.linspace(0,1,10)\ny = 1.5*x**3 + 1 - 0.5*x**2 + 2*x\nN = 4\nV = np.array([[x_i**i for i in range(0,4)] for x_i in x])\ny = np.transpose(np.matrix(y))\n# lets get the coefficients V b = y \nb = la.solve(np.matmul(np.transpose(V),V), np.transpose(V)*y)\nf = lambda x: b[0,0] + b[1,0]*x + b[2,0]*x**2 + b[3,0]*x**3\ny_hat = np.array([f(x_i) for x_i in x])\n# lets see\nplt.plot(x,y)\nplt.plot(x,y_hat)\nprint(b)",
"execution_count": 60,
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": "[[ 1. ]\n [ 2. ]\n [-0.5]\n [ 1.5]]\n"
},
{
"data": {
"image/png": "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\n",
"text/plain": "<Figure size 432x288 with 1 Axes>"
},
"metadata": {},
"output_type": "display_data"
}
]
},
{
"metadata": {
"trusted": false
},
"cell_type": "code",
"source": "# function interpolation by solving polynomial basis vandermonde\n# 1 x x^2 x^3 ...\nx = np.linspace(0,1,10)\ny = 3*x**5+2*x**4+1.5*x**3 + 1 - 0.5*x**2 + 2*x\nN = 4\nV = np.array([[x_i**i for i in range(0,4)] for x_i in x])\ny = np.transpose(np.matrix(y))\n# lets get the coefficients V b = y \nb = la.solve(np.matmul(np.transpose(V),V), np.transpose(V)*y)\nf = lambda x: b[0,0] + b[1,0]*x + b[2,0]*x**2 + b[3,0]*x**3\ny_hat = np.array([f(x_i) for x_i in x])\n# lets see\nplt.plot(x,y)\nplt.plot(x,y_hat)\nprint(b)",
"execution_count": 63,
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": "[[ 0.94049688]\n [ 4.06797744]\n [-10.0308642 ]\n [ 13.95679012]]\n"
},
{
"data": {
"image/png": "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\n",
"text/plain": "<Figure size 432x288 with 1 Axes>"
},
"metadata": {},
"output_type": "display_data"
}
]
},
{
"metadata": {
"trusted": false
},
"cell_type": "code",
"source": "# function interpolation by solving polynomial basis vandermonde\n# 1 x x^2 x^3 ...\nx = np.linspace(0,1,10)\ny = 3*x**5+2*x**4+1.5*x**3 + 1 - 0.5*x**2 + 2*x\nN = 3\nV = np.array([[x_i**i for i in range(0,3)] for x_i in x])\ny = np.transpose(np.matrix(y))\n# lets get the coefficients V b = y \nb = la.solve(np.matmul(np.transpose(V),V), np.transpose(V)*y)\nf = lambda x: b[0,0] + b[1,0]*x + b[2,0]*x**2\ny_hat = np.array([f(x_i) for x_i in x])\n# lets see\nplt.plot(x,y)\nplt.plot(x,y_hat)\nprint(b)",
"execution_count": 65,
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": "[[ 1.42295382]\n [-3.8753315 ]\n [10.90432099]]\n"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAW4AAAD8CAYAAABXe05zAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvhp/UCwAAIABJREFUeJzt3Xd81dX9x/HXySKQBWSwd8LeBBTqRlTcIFgQF2px1aq1Q21/rbWt1bqqraPUulCUKSJ14AAXQ8LeJGETyAIyybzn98f3iowAN5h7b27u+/l45MHN/R6Sz5eEd04+93y/x1hrERGRwBHi7wJERKR2FNwiIgFGwS0iEmAU3CIiAUbBLSISYBTcIiIBRsEtIhJgFNwiIgFGwS0iEmDCvPFBExISbMeOHb3xoUVEGqTly5fnWWsTPRnrleDu2LEjaWlp3vjQIiINkjFmh6dj1SoREQkwCm4RkQCj4BYRCTAKbhGRAKPgFhEJMB4FtzHmXmPMOmPMemPMfd4uSkRETuyUwW2M6Q38DBgC9AMuN8Yke7swERGpmScz7h7AUmttqbW2CvgSGO3dskREAstXW3J5/dttVFa7vP65PAnudcDZxph4Y0wT4FKg3bGDjDGTjDFpxpi03Nzcuq5TRKTecrksj324kdcXbcf44POdMrittRuBJ4D5wMfAKqC6hnGTrbWp1trUxESPrtoUEWkQPly3l037irh/RFfCQr2/5sOjz2Ct/a+1dpC19hzgALDFu2WJiASGqmoXz3y6ha4torm8b2uffE5PV5Ukuf9sj9PfnurNokREAsWcVVlszS3hlyO6Ehrii0aJ5zeZmmWMiQcqgbuttQe9WJOISECoqHLx3Odb6N0mlot7tfTZ5/UouK21Z3u7EBGRQDNj+S527T/EoxN7Y4xvZtugKydFRE5LWWU1//w8g0EdmnFeV98uyFBwi4ichqlLd7KvsIwHLurq09k2KLhFRGqttKKKFxdmMKxLPMO6JPj88yu4RURq6fVF28krruCBi7r55fMruEVEaqGwrJJ/f7mVC7onMahDM7/UoOAWEamF/369jYJDlfxyRFe/1aDgFhHx0IGSCv77zTZG9m5J7zZxRx+sKofyYp/UoeAWEfHQv7/aSklFFffXNNv+9A8w+TyfhLeCW0TEAzlFZby+aBtX929D1xYxRx/c9D9Y+jIkXwiNor1ei4JbRMQDLy7IpLLacu/wlKMPHNwFc+6CVv1gxJ98UouCW0TkFLIOHmLq0p2MHdSWjglRPxyoroJZt4GrCsa8BmGNfFKPpzeZEhEJWv/8IgOAe46dbS/8G+xaAqNfgfguPqtHM24RkZPYkV/CjLRdjB/SjjZNG/9wYOtC+PppGHA99B3r05oU3CIiJ/HcZ+mEhRruPv+IPdKLc2D2JEjoCiP/7vOaFNwiIieQnl3Ee6v2cNPQjiTFRjpPulzw3u1w6CCMfQ0iok7+QbzA0x1w7jfGrDfGrDPGvGOMifR2YSIi/vaPz9JpEh7K7ece0b9e9DxkfgGX/A1a9PJLXacMbmNMG+AXQKq1tjcQCozzdmEiIv60PquA/63dy61ndaJ5VITz5K5l8MWfoedVkHqL32rztFUSBjQ2xoQBTYAs75UkIuJ/z366hdjIMG49u7PzxKGDMPMWiG0NVzwPPr4H95FOGdzW2j3AU8BOYC9QYK2d7+3CRET8ZcXOA3y2MYfbz+1CXONwsBbm3gNFWc567cZN/VqfJ62SZsBVQCegNRBljLm+hnGTjDFpxpi03Nzcuq9URMRHnpm/hfioCG4e1tF5Iu1V2DgXhv8B2qb6tTbwrFVyIbDNWptrra0EZgPDjh1krZ1srU211qYmJvp2/zURkbqyODOfbzLyuPO8LkQ1CoN96+Djh6DLcBh6j7/LAzwL7p3AmcaYJsbZWG04sNG7ZYmI+J61lmc+3UyL2EZcf2YHqCiBmROd1siof0NI/VhB7UmPeykwE1gBrHX/nclerktExOe+Ss9j2fYD/PyCFCLDQ+HD30BeOoyeDNH1p5Pg0b1KrLV/BP7o5VpERPzGWsvT8zfTtlljfpraDtZMh1VvwTm/hs7n+bu8o9SPeb+IiJ/N35DNmt0F3Ds8hYiCbTDvfmg/FM590N+lHUd3BxSRoOdyWZ6Zv4XOCVGM6pMAr18MoeFwzSsQWv9iUjNuEQl689buZXN2EfeN6ErYF4/A3tVw1YsQ19bfpdVIwS0iQa2q2sU/Pt1C95YxXB6x0tmC7Iw7oPul/i7thOrf7wAiIj40e+UetuaV8MY1rQmZeyO07AsjHvV3WSelGbeIBK2KKhfPfZZO/zbRnLP2IaiuhLGv+2wLstOlGbeIBK1pabvYc/AQU7t8i1m/GEb/x6dbkJ0uzbhFJCiVVVbzry/SmdhqB+3Xvwj9J0Dfa/1dlkc04xaRoPTWkh1UFebwUOgzmIQUuPRJf5fkMQW3iASdkvIqXl6QzmtN/0tERSHcNMcvW5CdLgW3iASd1xdtZ3T5e/R1pcFlT0PL3v4uqVYU3CISVAoOVbL4y494PXw69LgSUm/1d0m1phcnRSSovLVgNX9zPYcruhVc+U+/bkF2ujTjFpGgsb+4nOSlD9M6JJ/Qn873+xZkp0szbhEJGktnPsXFZikHzvwttBvs73JOm4JbRIJCfuZyLtj2LJuihpBw0W/8Xc6P4slmwd2MMauOeCs0xtzni+JEROpERQmu6RMpIIqoca/Umy3ITtcpe9zW2s1AfwBjTCiwB3jPy3WJiNSZkjkPEF+2k1c7P8tt7Tr4u5wfrbY/doYDmdbaHd4oRkSkzq2ZQdSGd3jZXs1lV4/zdzV1orarSsYB73ijEBGROpefieuDe1nh6kZe6v20imvs74rqhMczbmNMBHAlMOMExycZY9KMMWm5ubl1VZ+IyOmpKoeZEzlUHcJv7C+44/xu/q6oztSmVTISWGGtza7poLV2srU21VqbmphYf7axF5Eg9ekfYe9q7i+/jYuGpZIUE+nviupMbYJ7PGqTiEgg2PQhLH2JBXGjWBw2lNvP6ezviuqUR8FtjIkCRgCzvVuOiMiPVLAb3r+LQ/G9uT37am49uxPNoiL8XVWd8ujFSWttCRDv5VpERH6c6iqY9TOoquBPjR6gSZMm3HJWJ39XVecCexW6iMiRvnwCdi5i29A/8+7WRtx+ThdiI8P9XVWdU3CLSMOw9Uv46knodx2/y+xFQnQENw0L/IttaqLgFpHAV5wLs38G8cks6f4gizLzueu8ZJpENMwboCq4RSSwuVww5w44dBA75lWeXLiHVnGRXHdGe39X5jUKbhEJbF89CRmfwcV/ZWFBS5bvOMA9F6QQGR7q78q8RsEtIoFrzXRY+Bj0HYdNvZWn5m+mffMmjE1t6+/KvErBLSKBafu38P7d0OEsuPJ5PtmQzfqsQu4dnkJ4aMOOtoZ9diLSMOVlwLQJ0LQD/HQK1SERPPPpFrokRnH1gDb+rs7rFNwiElhK8uHtMWBCYMJ0aNKceWuy2JJdzC9HdCM0JPA2/62thrlWRkQapsoyeHc8FGbBTR9A885UVrt49tMt9GgVy8jeLf1doU9oxi0igcHlgjl3wq6lMPrf0P4MAN5YtJ3t+aU8MKIrIUEw2wYFt4gEigV/gfWz4cJHoNcoAFbtOsgTH2/iwh5JDO+R5NfyfEnBLSL134op8PXTMPBG+ImzV/nB0grufnsFSTGRPDW2H8YEx2wb1OMWkfoucwHMuw86nw+XPQPG4HJZHpi+mpyiMmbcMYymTRrWbVtPRTNuEam/cjbC9BshoStc+waEOnf6m/z1Vj7flMPvL+tJ/3ZN/Vyk7ym4RaR+KsqGt6+F8MZw3XSIjAPgu237efKTzVzWpxU3Dm2Yd/87FU93wGlqjJlpjNlkjNlojBnq7cJEJIhVlMI746A0D8a/C03bAZBXXM4976ygXbPGPH5Nn6Dqax/J0x73c8DH1tox7t3em3ixJhEJZq5q5xatWSth3NvQZiAA1S7Lfe+u4kBpJa/dNYSYBrhBgqdOGdzGmDjgHOBmAGttBVDh3bJEJGh9+gfYNA8u/ht0v+zw0//6IoNvMvJ4fHQferaO9WOB/udJq6QTkAu8ZoxZaYx5xb158FGMMZOMMWnGmLTc3Nw6L1REgsCyV2Dxv2DIJDjzzsNPf5uRxz8+38LoAW346eB2fiywfvAkuMOAgcBL1toBQAnw4LGDrLWTrbWp1trUxMTEOi5TRBq8LfPhw19DysXObNvdv84uLOPed1eSnBjNX0b1Dtq+9pE8Ce7dwG5r7VL3+zNxglxEpG7sWwszJ0KL3jDmVQh1urhV1S7umbqSkvJqXpwwsMFuRVZbpwxua+0+YJcxppv7qeHABq9WJSLBozDLWfbXKBaumwaNog8fevrTLXy3fT+Pje5NSosYPxZZv3j64+se4G33ipKtwETvlSQiQaO8CKZeC+WFcMvHENv68KEvNmXz0sJMxg9pz6gBDXtHm9ryKLittauAVC/XIiLBpLoKZt4C2RucmXbLPocP7T5Qyv3TVtOzVSx/vKKnH4usn9QwEhHfsxY+fhDS5zv3H0kZcfhQRZWLn09dSbXL8uKEgQ1609/TpeAWEd9b8iIs+w8MuwcG33rUocc/2sSqXQd5ccJAOiYct/JY0L1KRMTXNs6DT34HPa6ACx896tDH6/by6rfbuHlYRy7t08pPBdZ/Cm4R8Z09y2HWbc5l7KMmQ8gPEbQ9r4Rfz1hDv3ZNefjSHn4ssv5TcIuIbxzcCVPHQXSic+OoiB9ueVRWWc1db68gJMTwwnUDiAhTNJ2Metwi4n1lBc5a7apyZ5Pf6KO3GXt03gY27C3kvzel0raZ7mF3KgpuEfGu6kpnM4T8dLh+FiR1P+rwnJV7mLp0J3ec24XhPVr4qcjAouAWEe+xFubdD1sXwlUvQOfzjjqckVPEw++tZUjH5vzqoq7+qDAgqZEkIt7zzbOwcgqc/SsYcP1Rh0orqrjr7RU0Dg/l+fEDCAtVHHlKM24R8Y51s+DzP0HvMXDB7486ZK3l93PWkZ5TzJu3DKFlXKSfigxM+hEnInVv51J4705od6bTIjnmVqzT03Yxe8UefnFBCmen6DbQtaXgFpG6tX8rvDse4trAuKkQfvRsekNWIX94fz1nJSfwi+EpfioysCm4RaTulO6Ht8eCdcGEmRAVf9ThorJK7p66grjG4fxjXH9CQ7QpwulQj1tE6kZVOUy73rnQ5sb3Ib7LUYettTw4ay0795cy9bYzSIhu5KdCA59m3CLy41kLc++BHd/CVS9Ch2HHDZmyZAf/W7uXX13UjTM6x9fwQcRTHs24jTHbgSKgGqiy1ure3CLyg4WPw5ppcP7voe/Y4w6v3nWQP8/bwAXdk7j9nM5+KLBhqU2r5HxrbZ7XKhGRwLTqHfjyceg/Ac751XGHC0qdvnZSTCRPj+1HiPraP5p63CJy+rZ97bRIOp0Dl//juGV/1loemLGa7MIypt8+lGZREX4qtGHxtMdtgfnGmOXGmEneLEhEAsS+tTBtAjTvDNdOgbDjQ/k/X2/ls43ZPDSyBwPaN/NDkQ2TpzPus6y1e4wxScCnxphN1tqvjhzgDvRJAO3bt6/jMkWkXtmzHKaMhohomDAdGjc9bkja9v088fFmRvZuycSfdPR9jQ2YRzNua+0e9585wHvAkBrGTLbWplprUxMTdSWUSIO1cwm8eTVExsHED6FZx+OG5BeX8/OpK2nbrDFPjOmLMepr16VTBrcxJsoYE/P9Y+AiYJ23CxORemjrlzBllHM/7Ykf1RjaLpflvmmr2F9awQvXDSQ2Mtz3dTZwnrRKWgDvuX9ihgFTrbUfe7UqEal/0j9zetrNOjkX2MTUfO/sFxZk8HV6Ho+N6kPvNnE+LjI4nDK4rbVbgX4+qEVE6quN82DGzZDUA26Yc9yl7N9blJHHs59t4er+rRk/pJ1vawwiunJSRE5u3SxnB5tW/Zxtx04Q2jmFZfzi3VV0Sojir6P6qK/tRQpuETmxVVOdXdnbnwk3zqlx9QhAVbWLe95ZSUl5FS9dP4ioRrpExJsU3CJSs7RXYc6dzsU1E2ZCo5gTDn32sy0s3bafv47qTdcWJx4ndUPBLSLHW/yis1dkysUwfhpEnHjn9QWbc3hhQSbjBrdj9MC2PiwyeCm4ReRoXz8NnzwEPa6En7513EYIR8o6eIj7p62ie8sYHrmylw+LDG5qRImIw1pY8Bh89XfoMxaufhlCTxwR5VXV/HzqCqqqLS9OGEhkeKgPiw1uCm4RcUL70/+DRf+EATfAFc9ByImDuKC0kklT0lix8yD/um4AnROjfVisKLhFgp3LBR/9Bpb9Bwb/DEb+HUJO3EXdtb+Uia8vY2d+Kc+N68/lfVv7sFgBBbdIcHNVwwf3wsopMOweGPHn427NeqS1uwu45Y1llFdW8+atQzhTO9n4hYJbJFhVV8GcO2DtDDjnN3D+wycN7QWbcrh76gqaNYlg6m1nkKJlf36j4BYJRlUVMOtW2DgXhv8Bzn7gpMOnLt3J/72/ju4tY3jt5sEkxZ54pYl4n4JbJNhUljmXsKd/Ahf/DYbedcKh1lqemr+ZFxZkcl63RF64bqCuiqwH9BUQCSYVJfDudbB1IVz+LKTecsKh5VXV/HbmGuasymL8kHb8+arehIXq0o/6QMEtEizKi+Dta2HXErj6Jeh/3QmHFhyq5PYpaSzZup9fX9yNu87roptG1SMKbpFgcOggvHUNZK2Ea16B3teccOieg4e4+dXv2J5fwrM/7ceoAbqMvb5RcIs0dCX5MOVqyNkI174JPS4/4dB1ewq45fVlHKqs5o1bhjCsS4IPCxVPeRzcxphQIA3YY6098VdeROqPomx48yo4sA3GvwspF55w6MLNOdz99griGocz685hustfPVabGfe9wEYg1ku1iEhdKtgDb14JhVlw3XTofO4Jh7773U5+N2cd3VrE8NrEwbTQcr96zaOXiI0xbYHLgFe8W46I1IkDO+C1kc6M+4b3Thja1lqenr+ZB2ev5SfJCUy/Y6hCOwB4OuP+B/AbQL87idR3+ZnwxhXO0r+b3oc2g2ocVlHl4sFZa5i9cg/jBrfjz1f3JlzL/QLCKYPbGHM5kGOtXW6MOe8k4yYBkwDat29fZwWKSC3kbHLaI64quHketOxT47DCskrumLKcRZn5/Oqirtx9frKW+wUQT368/gS40hizHXgXuMAY89axg6y1k621qdba1MTExDouU0ROae8aeP1SwMDNH54wtLMOHmLsS4v5btt+nrm2Hz+/IEWhHWBOGdzW2oestW2ttR2BccAX1trrvV6ZiHhu93J443IIawwTP4Sk7jUOW59VwKgXvyXr4CHeuGWIthoLUFrHLRLodiyGt8dCVDzcOBeadahx2JdbcrnrreXENg5nxp1D6d5SC8QCVa2C21q7EFjolUpEpPa2LoR3xkNsG7hpLsTWvKnB9GW7eOi9tXRt4dzdr2WcVo4EMs24RQLVlvkw7XqIT4Yb50B00nFDrLU8+1k6z3+eztkpCbw4YSAxkeF+KFbqkoJbJBBt/ABmTIQWPeGGOdCk+XFDKqpcPDR7LbNW7GbsoLY8NrqPlvs1EApukUDicsE3z8CCvzrrsyfMhMZNjxtWWFbJXW+t4JuMPH45oiv3XKDlfg2JglskUJTuh/fucDZA6H0NXPE8NDp+d/W9BYeY+NoyMnKKeWpsP8YM0sqRhkbBLRII9qyAGTdB4V4Y+SQM+VmN+0Nu3FvIxNeWUVxexesTh3BWiu7u1xApuEXqM2th+Wvw0W8hKglu+RjaptY49Ov0XO58awXRjcKYccdQerTScr+GSsEtUl9VlMC8+2HNNEi+EEb/p8YXIQFmpO3iodlrSU6K5rWJg2kV19jHxYovKbhF6qO8dJh2A+RugvN/B2f/CkKOXxFireX5zzN49rMtWu4XRBTcIvXNutkw9x4IawQ3zIYuF9Q4rLLaxcOz1zJj+W7GDGrL37TcL2gouEXqi6oK+PT/YOnL0HYIjH0d4trUOLSorJK73l7B1+l53Ds8hfsu1I2igomCW6Q+KNgNM26G3cvgzLtgxKMQWnPLY/mO/Tw8ex2ZucX8fUxfrk1t59taxe8U3CL+lvEZzPoZVFfC2Deg19U1Dttz8BBPfLSJuauzaBHbiNcmDubsFN1CORgpuEX8xVUNX/4dvnwCknrAtVMgIfm4YaUVVby8MJN/f7UVgF9ckMzt53YhqpH++wYrfeVF/KEkH2bfBplfQL/xcNkzENHkqCEul2XOqj088fEmsgvLuaJfax4c2Z02TbXUL9gpuEV8bdcy5yrIkjy44jkYeNNxV0Eu37GfRz/YwOrdBfRrG8eLEwYyqEPNa7gl+Ci4RXzFWvhuMnzyO+e+2bfOh9b9jxpybB/7mWv7cXX/NoSEaMWI/MCTzYIjga+ARu7xM621f/R2YSINSnmRszZ7/XvQdSSMegkaNzt8uLSiipe/3MrkrzKxVn1sOTlPvivKgQustcXGmHDgG2PMR9baJV6uTaRhyNnoXAW5PxMu/BMM+8XhqyBr6mP/9pJutG3W5BQfVILZKYPbWmuBYve74e43682iRBqM1dNg3n0QEQ03fQAdzzp8aPmOAzw6bwOrdx2kb9s4XrhuIKkd1ceWU/Po9zBjTCiwHEgGXrDWLq1hzCRgEkD79u3rskaRwFNZBh8/6NzZr8NPYMyrENMSgKyDh3jc3cdOimnE02P7MWqA+tjiOY+C21pbDfQ3xjQF3jPG9LbWrjtmzGRgMkBqaqpm5BK8DuyA6TfC3lXwk/vggv+D0LDj+tj3XJDMHepjy2mo7S7vB40xC4BLgHWnGi8SdLZ8ArMnOStIxr0D3S/F5bK8v3I3T3y0mX2FZVzetxUPjuyuPracNk9WlSQCle7QbgyMAJ7wemUigaS6ChY+Bl8/DS37wrVvQvNOrNh5gEc/2MAqdx/7X9cNUB9bfjRPZtytgDfcfe4QYLq1dp53yxIJIMU5MPMW2P61czHNyL+TVWJ54t2VvL/K6WM/NbYfo9XHljriyaqSNcAAH9QiEnh2LIIZE6GsAK5+idKe1/LyQvWxxbv03SRyOqyFRf+Ezx6BZh1xTZjJ3H3NefypL9XHFq9TcIvUVlkBzLkLNs2DnlexauBfeGT2Llbt2qk+tviEglukNvaucZb6Feyi4JxH+UP22bz/ylr1scWnFNwinijdDwsfh2Wv4IpOYnqvl3lkQTQum83Pz0/mzvPUxxbf0XeayMlUV8Ky/8LCv2HLC8lsN5a7945k87IILu/bQn1s8QsFt0hNrIX0T7GfPIzJT2dzVCq/rv4pa7a0oU+bOGZM6Mlg9bHFTxTcIsfK2cSheb+l8c6F7DKteaTiV3xnB3N5v9b8YVBbBnVoph3Vxa8U3CJuxQey2Tvnj3TeMY0KG8mT1TewteM4RqV24oWeLWkcEervEkUABbcEOZfLsiR9LzlfvMD5+16jE4f4IOIS8gf/ktuG9Ka19neUekjBLUFpe14Js5bvYm/aXO4sf5VhIXvZEjOEygv/wlX9hqgVIvWagluCRmFZJR+u2cvM5bsp2LmW/wufwjkhaymK7UTFZdPo2v3i4zbtFamPFNzSoFW7LN9m5DFrxW4+XrePJlUHeSRmLlc0+hgaxcD5jxMz+DYIDfd3qSIeU3BLg5SZW8ys5buZvWIP+wrLaB4Jz7ZfzMV5bxBSWYIZchuc9xA00ZI+CTwKbmkwCkor+WBNFrNW7GblzoOEGDg3JYF/DtrHoM1PE5KVCckXwkV/haTu/i5X5LQpuCWgVVW7+Dojj1nLdzN/QzYVVS66tojm4Uu7c02bAuK//RMsXggJXWHCTEgZ4e+SRX40BbcEpPTsImau2M17K/aQU1RO0ybhjB/cjjGD2tG7aQVm4WOw4HVoFAsj/w6pt6iPLQ2GJ1uXtQPeBFoAFphsrX3O24WJHOtgaQVzV2cxa/luVu8uIDTEcH63RMYMasv53ZNoRDV892+Y8iRUFMOQSXDub9XHlgbHkxl3FfCAtXaFMSYGWG6M+dRau8HLtUmQq3ZZ1mcVsDgzn8Vb81mUkU9FtYvuLWP4/WU9uKp/GxJjGjn3Fdn8Icz/PezfCikXwUV/gcRu/j4FEa/wZOuyvcBe9+MiY8xGoA2g4JY65XJZNu0rYvHWfBZn5rN0Wz5FZVUAdE6M4vozO3DNoDb0ah33w1/atw4+eRi2fQkJ3WDCLEi50E9nIOIbtepxG2M64uw/ubSGY5OASQDt27evg9KkobPWkpFTzKLMH4L6QGklAB3im3BZn1YM7RLPmZ3jaREbefRfLs6FBX+FFW9AZByMfBJSJ6qPLUHB4+A2xkQDs4D7rLWFxx631k4GJgOkpqbaOqtQGgxrLdvySg7PqJds3U9ecTkAbZo2ZniPFgztHM/QLvEnvkdIVTks/Td89SRUlsKQ2+Hc36iPLUHFo+A2xoTjhPbb1trZ3i1JGpJd+0tZnJnPosw8lmzdz77CMgBaxDbirGQnpId2TqBd88Ynvz+ItbDpf04f+8A2SLnY3cfu6qMzEak/PFlVYoD/Ahuttc94vyQJZFkHDx1+MXFxZj57Dh4CICE6gjM6xzOsSzxDO8fTKSHKsxs5le6HdbNg5VuwdxUkdofrZzkX0ogEKU9m3D8BbgDWGmNWuZ972Fr7offKkkCRU1Tmbnvksygznx35pQA0bRLOmZ3imXROZ4Z2iSclKdrzO+5VV0Hm57Dqbdj8EVRXQIs+cPmzMOBGCNXlBxLcPFlV8g2gW6YJAPnF5SzZup/FW/NYnJlPZm4JADGRYZzRqTk3nNmBYV0S6N4ypva7nWevh1VTYc10KMmBJvEw+DboNx5a9fXC2YgEJk1d5KRyispYufPg4Vn1pn1FAERFhDK4U3OuTW3H0C7x9GodR2htgxqgJB/WzXRm13tXQ0gYdL0E+l8HySMgLKKOz0gk8Cm4BXDWUO/cX8r6rELWZxW4/yw8vOojMjyE1A7N+fXFrRnaJZ4+beIIDw05vU9WXQnpnzphveUTcFVCy75wyRPQZwxEJdThmYk0PAruIFTZayLCAAAKkUlEQVRR5SI9p4j1WYVscAf1xr1FFJc7F7uEhRiSk6I5t2sivVrH0qdtHH3bxtEo7EfuubhvLax6B9ZMg9I8iEqEM253WiEte9fBmYkEBwV3A1dcXsXGvYWs3/PDLDo9p4jKamepfZOIUHq0imX0wDb0ah1Lr9ZxpLSI/vEh/b2SPFg7w5ld71sLIeHQbST0nwDJw3XBjMhpUHA3IDlFZe4Z9A8z6e3uVR4A8VER9GwdyzldO7tDOpYO8VGn15s+maoKSJ/vvNCY/gm4qqD1AOfqxj5jdLGMyI+k4A5A3/ejN+w9uh+dW1R+eEy75o3p1SqOawa2pVcbZyadFNPIe5vgWgv71jhhvXYGlOZDdAs4807odx206OmdzysShBTc9dz3/egjZ9Ib9hYe7keHhhhSkqI5OyWBXq3j6NU6lh6tYolr7KMWRHGOs3xv9TuQvQ5CI6DbpU4rpMsFWnMt4gX163/VlvnQvBM07wIhp7liIUBVuyy79peSnlNMek4RGdnFbM4uIj27mIpqFwCNw0Pp0SqGUQOO7kdHhtdRP9pTVeWw5WPnhcb0+WCroc0guOxp6DVarRARL6s/wV1dCdNvgKoyiGzqBEHbVGg72HncQMKgstrFjvwS0rOL3SFdTHp2EVvzSqioch0e1youkuSkaCae1fHwTLqjN/rRnrLWueT8+1bIoQMQ3RKG3eOsuda9r0V8pv4EtwmFSQthdxrsXgZ7ljt3gLPuMGve2R3iqU6gt+hdry/OKK+qZlveDwGdkePMnrfllVDl+uHmiW2bNSYlKZpzuiaSnBRNSlI0yUnRxETWg9UWVeWQuxm2LnRaITkbILQRdL/MaYV0Pk+tEBE/MNbW/R1YU1NTbVpa2o//QOXFkLUS9qS5Az0Nivc5x0IbQat+Tpi3HeQEetP24K0X307gUEU1mbnFZLhbHOnZzuPt+SV8n88hBjrERx0O5pQW0aQkxdA5MYomEfUg+KyFgzudYM5e77zlbIC8dKcNAs6/c//roNcoaNzMv/WKNEDGmOXW2lSPxtbr4D6WtVC4x5mR705zZuVZK532CkBUkjMbbzPIPTsfCI1i6uRTF5dXOeGcXURGzvdBXcyuA6V8/08YFmLomBDlhHNSNMktYkhJiqZTQpTv+9Ancujg8QGdsxHKj7jFetP2zm80ST2d1SCtBzi/8YiI1zTc4K5JdaUTQN+3V3anQX66+6CBpB5H98sTu0PIiUO0oLSSjNyio3rQGdlFZBWUHR4TERpC58TvZ9Ax7hl0NB3io4gIqycvqlZVOP8O2Rsgxx3S2RugcPcPYyLjjg7oFr2df5/IWP/VLRKkgiu4a3LogDvEl7sDPc15DiAiGtu6PyWJA9jZuCdrSGZtQWMycorJzC0mr7ji8IeJDA85HM5H9p/bN29C2Onep6OuWQuFWe7Z8xEBnbfFuQcIOFcrJnSFFr2cgE7q5TyObe3z1pKI1EzB7VZV7WLH/lIysovI3bkJs3sZcftX0/HQBrqxg3Dj9G+zSGBbo+4caNaX6tapxHVOpUvrRNo0bVz7W5N6U1mh09bIcYfz92FdVvDDmNi2xwd0fHK9fiFXRGoX3J7sgPMqcDmQY62tl3cCKq2oYmtuyeHec0ZOMRm5xezILzl8Tw6AlrGDSE4615k9x4fTN3QHHcvW0yp3Na33pMG+b2AfsDIEwiKdmWpomPvPcOeWo6Hhp3i+Lsa536+ugtxN7p70OucFxO9FxDih3Psad6ujt9MWatzU918AEfEpT5Y0vA78C3jTu6Wc2v6SiuPCOTOn+PD2WOBcSdiheRO6JEUzomcLkhOj6ZIUTZfEqBqW2HUFRvzwbnGO0yPfuxoqip17bFRXOi0HV/UPj6srjz5WXeW8QFrT84fHH/M+Hv6mY0IhIcXpzw+8yT2b7gVx7dTmEAlSnuyA85UxpqP3S3G4XJasgkOHwzkzt5jMnBIycovZX3J0/7lLYjSpHZsxLrEdXdz95w7xTU7/znbRSdD9UufN2071g8BVCRjnStKwRt6vR0QCRj1YROyoqnYx+qVFpGcXc6iy+vDzzZqEk5wUzcW9WtDFPXtOToyuf/3n2goJda9uifR3JSISYOosuI0xk4BJAO3bt699IaHODHpQh2Yku8M5OSma+GjNNkVEjuTRqhJ3q2Sepy9O1pdVJSIigaI2q0rqyWJkERHx1CmD2xjzDrAY6GaM2W2MudX7ZYmIyIl4sqpkvC8KERERz6hVIiISYBTcIiIBRsEtIhJgFNwiIgFGwS0iEmC8cltXY0wusOM0/3oCkFeH5QQCnXPDF2znCzrn2upgrU30ZKBXgvvHMMakeXr1UEOhc274gu18QefsTWqViIgEGAW3iEiAqY/BPdnfBfiBzrnhC7bzBZ2z19S7HreIiJxcfZxxi4jISfgtuI0xlxhjNhtjMowxD9ZwvJExZpr7+FJfbp/mDR6c7y+NMRuMMWuMMZ8bYzr4o866dKpzPmLcNcYYa4wJ+BUInpyzMeZa99d6vTFmqq9rrGsefG+3N8YsMMasdH9/+2BvQO8xxrxqjMkxxqw7wXFjjHne/e+xxhgzsM6LsNb6/A0IBTKBzkAEsBroecyYu4CX3Y/HAdP8UasPz/d8oIn78Z2BfL6enrN7XAzwFbAESPV33T74OqcAK4Fm7veT/F23D855MnCn+3FPYLu/6/6R53wOMBBYd4LjlwIfAQY4E1ha1zX4a8Y9BMiw1m611lYA7wJXHTPmKuAN9+OZwHBjAnZb81Oer7V2gbW21P3uEqCtj2usa558jQH+DDwBlPmyOC/x5Jx/BrxgrT0AYK3N8XGNdc2Tc7ZArPtxHJDlw/rqnLX2K2D/SYZcBbxpHUuApsaYVnVZg7+Cuw2w64j3d7ufq3GMtbYKKADifVJd3fPkfI90K85P7EB2ynN2/wrZzlr7P18W5kWefJ27Al2NMd8aY5YYYy7xWXXe4ck5PwJcb4zZDXwI3OOb0vymtv/fa63e7PIuDmPM9UAqcK6/a/EmY0wI8Axws59L8bUwnHbJeTi/VX1ljOljrT3o16q8azzwurX2aWPMUGCKMaa3tdbl78IClb9m3HuAdke839b9XI1jjDFhOL9i5fukurrnyflijLkQ+B1wpbW23Ee1ecupzjkG6A0sNMZsx+kFzg3wFyg9+TrvBuZaayuttduALThBHqg8OedbgekA1trFQCTOPT0aKo/+v/8Y/gruZUCKMaaTMSYC58XHuceMmQvc5H48BvjCujv/AeiU52uMGQD8Gye0A73vCac4Z2ttgbU2wVrb0VrbEaevf6W1Ns0/5dYJT76v5+DMtjHGJOC0Trb6ssg65sk57wSGAxhjeuAEd65Pq/StucCN7tUlZwIF1tq9dfoZ/PjK7KU4s41M4Hfu5x7F+c8Lzhd3BpABfAd09veryV4+38+AbGCV+22uv2v29jkfM3YhAb6qxMOvs8FpEW0A1gLj/F2zD865J/AtzoqTVcBF/q75R57vO8BeoBLnN6hbgTuAO474Gr/g/vdY643va105KSISYHTlpIhIgFFwi4gEGAW3iEiAUXCLiAQYBbeISIBRcIuIBBgFt4hIgFFwi4gEmP8He+zSTgLW4CEAAAAASUVORK5CYII=\n",
"text/plain": "<Figure size 432x288 with 1 Axes>"
},
"metadata": {},
"output_type": "display_data"
}
]
},
{
"metadata": {
"trusted": false
},
"cell_type": "code",
"source": "# function interpolation by solving exponential basis vandermonde\n# 1 x x^2 x^3 ...\nx = np.linspace(0,1,10)\ny = 1.5*x**3 + 1 - 0.5*x**2 + 2*x\nN = 4\nV = np.array([[np.exp(x_i)**i for i in range(0,4)] for x_i in x]) # change made here\ny = np.transpose(np.matrix(y))\n# lets get the coefficients V b = y \nb = la.solve(np.matmul(np.transpose(V),V), np.transpose(V)*y)\nf = lambda x: b[0,0] + b[1,0]*np.exp(x) + b[2,0]*np.exp(x)**2 + b[3,0]*np.exp(x)**3 # change made here\ny_hat = np.array([f(x_i) for x_i in x])\nplt.plot(x,y)\nplt.plot(x,y_hat)",
"execution_count": 77,
"outputs": [
{
"data": {
"text/plain": "[<matplotlib.lines.Line2D at 0x1142dbc50>]"
},
"execution_count": 77,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAXcAAAD8CAYAAACMwORRAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvhp/UCwAAIABJREFUeJzt3Xl4VPXd/vH3JztbCEuAsIMKiICIEUG04oKiKCiCohZFEJSi1tal7qj1aWt/1lYfrIIobij7poAKuCBWkEU2QRAB2SIJBLKQfeb7+yN5elEKZEImOZnJ/bquXJyZ+WbOfZhwc3LmO+eYcw4REQkvEV4HEBGR4FO5i4iEIZW7iEgYUrmLiIQhlbuISBhSuYuIhCGVu4hIGFK5i4iEIZW7iEgYivJqxQ0bNnStW7f2avUiIiFp9erVB5xziaWN86zcW7duzapVq7xavYhISDKznwMZp8MyIiJhSOUuIhKGVO4iImFI5S4iEoZU7iIiYSjgcjezSDP7zsw+Os5jsWY21cy2mdkKM2sdzJAiIlI2Zdlz/y2w+QSPjQAOOedOB/4OPF/eYCIicuoCKnczaw70AyaeYMgA4O2S5RnAZWZm5Y8nIhJGnGP/vGfI37OuwlcV6J77P4CHAf8JHm8G7AZwzhUBGUCDcqcTEQkj+xb+lcZrXmT5vNcrfF2llruZXQOkOudWl3dlZjbKzFaZ2aq0tLTyPp2ISMjY//V7NP32TyyJ7MWZt/61wtcXyJ57L6C/me0EpgCXmtl7x4zZC7QAMLMooC5w8Ngncs5NcM4lO+eSExNLPTWCiEhYSN+wiPqLfstqOnL6yHdpVLdmha+z1HJ3zj3qnGvunGsNDAE+c879+phh84DbS5YHlYxxQU0qIhKCMnd+R+zM29jpkqhx21RaNamcI9anPM/dzJ41s/4lN98AGpjZNuD3wCPBCCciEsryDvxM4Ts3kOXiyBj4Ph3btqy0dZfprJDOuS+AL0qWnzrq/jxgcDCDiYiEssLsdA6M70+8L4dNfaZw0dldKnX9+oSqiEiQucJcdv3zOhoV7GZF9//logt7V3oGlbuISDD5/Wx+9VZOy1nHkg7P0qefNwc1VO4iIkG0ftI9dExfwidNx9B3yBjPcqjcRUSCZP205+iyezKfJwzk8hHP4eUH9VXuIiJBsPHTN+my6f+xosZFXPCb8URGeluvKncRkXLasnwB7b5+iO+jzuKse6YQGxPjdSSVu4hIeezYtJKkj0ewL6IJSXfNonat2l5HAlTuIiKnLGXXNmpNu5E84ogZNpv6iU28jvRvKncRkVOQfiCV3LcGUpNcjgz6gKat2nkd6T+o3EVEyujIkSPsHT+Q5r497Lniddp06uF1pP+ichcRKYOCwiI2jLuZzoUb2NrjeTpccK3XkY5L5S4iEiC/3/HVP0fTI/dL1nf4PZ2uGul1pBNSuYuIBMA5xydvjOWyQ9PY0Owmutz0VOnf5CGVu4hIAD6e+hpX7nmZHxIuptPwf0IVv0y0yl1EpBSLFs7i0s1PsLNmJ9qNnoJFluls6Z5QuYuInMSyr5fSffkYDkYn0WLMXCJiK/4SecGgchcROYHVG76n7afD8EfGUn/Uh0TXrpxL5AVD1f/dQkTEA5t27KbOjCEkWA6+ofOJa9TG60hloj13EZFj/Jx6iOx3bqat7SV34FvUaXOu15HKTOUuInKU1Mwcto6/je5uAwcve5EGXfp6HemUqNxFREpk5hXy5Sv30Me3lH3JD9P4omFeRzplKncRESCv0MfMfz7J4PyZ7DvjVpr2e8zrSOWicheRas/nd7w18SVuz3iNlKTLaHrz/1b5DymVRuUuItWac47XJ0/mjl/+xIGEziQNnwwRkV7HKrdSy93M4szsWzNbZ2bfm9kzxxkzzMzSzGxtydedFRNXRCS4Js35hCHbHuZIjSQa3TUXomt4HSkoApnnng9c6pzLNrNoYJmZLXTOLT9m3FTn3D3BjygiUjGmLlnBFWvHEBkdS91R86Bmfa8jBU2p5e6cc0B2yc3oki9XkaFERCra/JVb6PzlSBpGHiFq2EKsfmh9SKk0AR1zN7NIM1sLpAKLnHMrjjPsBjNbb2YzzKzFCZ5nlJmtMrNVaWlp5YgtInLqvtq8l4QPh9MuYg8RN71DVPNzvI4UdAGVu3PO55zrCjQHuptZp2OGfAi0ds51ARYBb5/geSY455Kdc8mJiYnlyS0ickrW7jrEoSl30StiI4X9XiKmwxVeR6oQZZot45w7DHwO9D3m/oPOufySmxOB0PusroiEvW2p2ax5837621dk93qEGucN9TpShQlktkyimSWULNcA+gA/HDMm6aib/YHNwQwpIlJeKRm5zJ3wNMOZQ1anodS+/BGvI1WoQGbLJAFvm1kkxf8ZTHPOfWRmzwKrnHPzgPvMrD9QBKQDwyoqsIhIWe07nMv41/7B2MKJZLa6nPjr/xHyH1IqjRVPhql8ycnJbtWqVZ6sW0Sqj5/Ssnl3/F95vGgc+YldqD1yAcSExgU3jsfMVjvnkksbp/O5i0jY2rg3g4UTx/K0m0R20wuofdvUkC72slC5i0hYWv7TAda98xAP2SyOtL2a2jdPgug4r2NVGpW7iISdxRv3cWDaPdwVsYScTrdSa+D/hsX5YspC5S4iYWXuqu3EzLuLIRHfktvjfmpe+XTYv3l6PCp3EQkb7325gTaL76JX5PfkX/Y/1Lio+p7uSuUuIiHPOcf4BSvoteIuOkbupqD/a8R2u9nrWJ5SuYtISPP7HS/PXEL/DWNoHnkIbnqfmA6hed3TYFK5i0jIKvT5efG9OQzb/jvio31EDZ1LROueXseqElTuIhKS8gp9/P3Nd/nNvkeJjK1F3IgFWOOzvI5VZajcRSTkZOYV8sr4f3J/+nMU1kqi9sgPoV4rr2NVKSp3EQkpB7PzmfTa8zyU9XeyEzqQMHIe1NYpxI+lcheRkLH3cC5zXn2cB/Pf4FDjntQbPg3i4r2OVSWp3EUkJGzbn8XXE+5jjG8W6a36Uv/Xb1er0wmUlcpdRKq8DbsO8uOkkdzulnCow63Uv7H6nU6grFTuIlKlLd+6j+zJtzPQvuVw8m+p1++Zank6gbJSuYtIlfXZup+oOfPXXB6xicyL/0jCJfd5HSlkqNxFpEqa/6+1tPr4djpE7OZIv1eJP+8WryOFFJW7iFQ50xcvI3npcJpGHqZw8PvU6qjTCZSVyl1EqgznHO/OXciV342mdpQPhs6lRhudTuBUqNxFpErw+x1vTfmAG7Y8ANE1iR2xgKgknU7gVEV4HUBEpNDn5403X+WWLfdRFNeQ+DGfqdjLSXvuIuKpvEIf743/C3ekvUB6nfYk3v0hptMJlJvKXUQ8k5lXyOxXHuXOrNdJaXg+SaNmQmwdr2OFBZW7iHjiQFYen78yhtvzZrCv6ZU0Hf4uRMV6HStslHrM3czizOxbM1tnZt+b2TPHGRNrZlPNbJuZrTCz1hURVkTCw970LFa8dCuD82aw9/QhNL3zAxV7kAXyhmo+cKlz7mygK9DXzHocM2YEcMg5dzrwd+D54MYUkXDx074DbBs3kH5Fi9l79r00u/U1nSemApRa7q5YdsnN6JIvd8ywAcDbJcszgMvMdPIHEflP32/fzaEJ13Kx/1t+ueAZml3/nM4TU0ECmgppZpFmthZIBRY551YcM6QZsBvAOVcEZAANjvM8o8xslZmtSktLK19yEQkpqzb+QMTb19CVLaT2GUeTK+73OlJYC6jcnXM+51xXoDnQ3cw6ncrKnHMTnHPJzrnkxERNdRKpLpZ9u5LE6f1pbSlkXv8ejXoN9TpS2CvTh5icc4eBz4FjT/SwF2gBYGZRQF3gYDACikho+3jxp7SbP4h6ETkU3jqH+mdf7XWkaiGQ2TKJZpZQslwD6AP8cMywecDtJcuDgM+cc8celxeRaiS/yMf0ic/T+6tbiIqKIvLOj4k/4wKvY1UbgcxzTwLeNrNIiv8zmOac+8jMngVWOefmAW8A75rZNiAdGFJhiUWkytt3IJ2NE+9mcN4n/Fz3XJrf+T6R8U28jlWtlFruzrn1wDnHuf+po5bzgMHBjSYioWj1d6upNXc4V7CTnzrczWmD/wci9XnJyqa/cREJCuccn8x8gws2PAkWwb6r3+a07td5HavaUrmLSLllHcnhmwm/pW/GNH6Oa0/i8Ck0bdzW61jVmspdRMplx44fyXrvNq7wbWJTs8GcOWwcFh3ndaxqT+UuIqdsxZLZnLb0tzSxPH7s9SId+4zwOpKUULmLSJkVFRWx7K3HuWj3ePZFNcfdOo8z2nb1OpYcReUuImVyMO0Xfp44lN7537K+3mW0HzWJ2Jp1vY4lx1C5i0jAtqxZSvy84XRy6azp8gTdBj6oE39VUSp3ESmV8/tZOeNvdP3+L6RH1GP3gNl0O+dir2PJSajcReSk8o5ksGnCCLpnLGJdjfNoded7NGmoT5tWdSp3ETmhlG1rKfhgKGcX7WZZq7vpefufiIzUhTVCgcpdRI5r86dv0upfj5BLLGt7T+LCS673OpKUgcpdRP6DvyCPjZPuoUvKdDZGnkn80Pc4t/XpXseSMlK5i8i/Ze3fzoE3h9AlfwtL6t1Iz1EvU7NGDa9jySlQuYsIAHtWzCF+4RgaOh9Lzv4bl14/Al0KOXSp3EWqO7+PrVMfpd2W8WylNbkDJ3HZ2d28TiXlpHIXqcYKM/ez5/WbaZe1miVxV9B55ATaNajndSwJApW7SDV1aPOXuOl3kOTLZG6rx7jqtoeIiSrTZZWlClO5i1Q3zrF7wV9JWvkX9rhGfHfJFAb0vtzrVBJkKneRasTlHmbXpDtolfoZX0b2oMnQN7isdXOvY0kFULmLVBN5u9eS9c4tNCtIYWr9u+l75x+pWyvG61hSQVTuItXAga8mUmfJo/hcLWZ3mcDg6wcREaFpjuFM5S4SzgpySPngHpJ2zGQ5nSka+DqDzz7T61RSCVTuImHKn7qFg2/dSlLOj7wfN4QLR7xAy8Q6XseSSqJyFwk3viIOLX6BWt+8QJSLZULL5xk6dCQ1YnQ2x+qk1HI3sxbAO0BjwAETnHMvHTOmNzAX2FFy1yzn3LPBjSoipfGnbCT9/ZE0zNrEp+58cvs8z8heXXUagWookD33IuAB59waM6sDrDazRc65TceM+8o5d03wI4pIqYoKOPTpX6jz7UvgajIu8UluGDqGpLo66Vd1VWq5O+dSgJSS5Swz2ww0A44tdxHxgH/PdxyaMooG2VuZz4UUXflnxvTsrL31aq5Mx9zNrDVwDrDiOA/3NLN1wD7gQefc98f5/lHAKICWLVuWNauIHK0wj8MfP0ed1a9Q5OJ5ufGz3HjrXTSpG+d1MqkCAi53M6sNzATud85lHvPwGqCVcy7bzK4G5gBnHPsczrkJwASA5ORkd8qpRao5365vyZwyino5O5hNbyKv+jP3nn+m9tbl3wIqdzOLprjYJzvnZh37+NFl75xbYGb/NLOGzrkDwYsqIhTkcHj+WOLXvU6Oq8+kJn/m1luH0zhee+vynwKZLWPAG8Bm59yLJxjTBNjvnHNm1h2IAA4GNalINefbsYzsaXeTkLubqVxBzX5/5HfntdfeuhxXIHvuvYChwAYzW1ty32NASwDn3GvAIGC0mRUBucAQ55wOu4gEQ342hz98nISNb3HY34gJTV/g9luG0kh763ISgcyWWQacdNfAOTcOGBesUCJSzLftc3JmjCY+9xfes34k9H+GB889XXvrUip9QlWkKsrLIGPuH6i7+QNS/UnMaP4P7rh5CI3qaG9dAqNyF6lifD8sJHfWfdTOT2OSDSDxuqd5+Jw22luXMlG5i1QVOelkznmQ+K0z2etvzqwWr3DnkEEk1on1OpmEIJW7SBXg+34e+XPup0bBYcbbIJpf9ySPnNNKe+tyylTuIl7KTiNr9u+o89OHbPe3Zl7rPzPqxutoWFt761I+KncRLziHb/0MCj56kNiCbMZF3EzbgY/xWFedlkOCQ+UuUtmyfiFr5r3U2fkpW/yn8VGbFxk9+BoaaG9dgkjlLlJZnKPou8kULXiE6MI8/h5xG+0H/YEnujT3OpmEIZW7SGXI2EP2jDHU3v0Fq/0d+OS0J7hn0JXUrxXjdTIJUyp3kYrkHEWrJuH7+AmsqIi/Ro6gyw0P8FTnZl4nkzCnchepKOk7ODJjDLX2fc0K31ksPuMJ7r3hcu2tS6VQuYsEm99H0YrXcYvG4nzGc5F3c96g+xnbKcnrZFKNqNxFgmnnMnLmPkjNQ5v53Hc2S9s/wX3X96ae9talkqncRYLh0M/kzH+Mmts+It015H+iHqD34FGMPauJ18mkmlK5i5RHfjYFX/6NiG/Ggd94yQ3GLriPxy/tSM0Y/fMS7+inT+RU+P34108lb+FT1MxPZbavF+vb38+oay8iqW4Nr9OJqNxFymz3SrLmPECdg+vY6m/L1AaPcNPAG7i+RYLXyUT+TeUuEqjMfWTPf4LaW2aS4xL4R8x9dO13F386u5nO3ihVjspdpDSFueQtfYmIr/9OtM/HeK7HLvo9D118FnHRkV6nEzkulbvIiTiHb+Nscuc/Tu28fSz0dWftmb9nxDWX6OLUUuWp3EWOJ2Udh2c/QELqSnb7WzKt4fPccMPNXNWsrtfJRAKichc5WnYaGfOfos7mD/C52rwQM5pO/e/lqU5NdVxdQorKXQSgqIDcZa9gS/8fNX15vMfV+H/1MPde3JnYKB1Xl9BTarmbWQvgHaAx4IAJzrmXjhljwEvA1UAOMMw5tyb4cUWCzDmKfljAkQ8foW7OLj73dWVtx4cZeu3lutSdhLRA9tyLgAecc2vMrA6w2swWOec2HTXmKuCMkq/zgVdL/hSpslzqZtJnPUiDX5ZxwJ/E+MTn6D/4di5pEu91NJFyK7XcnXMpQErJcpaZbQaaAUeX+wDgHeecA5abWYKZJZV8r0jVkpPOoQXPEr/xbaJcHONi76TjgN/xUEfNV5fwUaZj7mbWGjgHWHHMQ82A3Ufd3lNyn8pdqg5fEdn/mkDEF38mviiLGdaHoosf5a6LuxIdGeF1OpGgCrjczaw2MBO43zmXeSorM7NRwCiAli11lXepPAVbF5M992HqH/mJb/wdWdvxEYZce5VOxSthK6ByN7Noiot9snNu1nGG7AVaHHW7ecl9/8E5NwGYAJCcnOzKnFakjNzBn0id8SCNUz4jy9+IyY3HctWgOxndWMfVJbwFMlvGgDeAzc65F08wbB5wj5lNofiN1AwdbxdP5WVyYMFzJKx/g1ouiolxt9Huuj9w75nNvU4mUikC2XPvBQwFNpjZ2pL7HgNaAjjnXgMWUDwNchvFUyHvCH5UkQD4fWQufwtb8kca+g4xl94UXvIkwy7qRpSOq0s1EshsmWXASacQlMySGROsUCJl5hx5mz4ma+FYErO3sNrfjnVnvcAN/QdQt0a01+lEKp0+oSqhzTlyt37G4flPk5S5njR/Iq83eYw+g8cwPLG21+lEPKNyl5CV8+NSDn00lmYZazjs6vNWg9/S9doxjGzT2OtoIp5TuUvIyd6+goPznqLV4eUccXV5v8EYzrr2Poa10cWoRf6Pyl1CRtbONaTOe4rT0r+iwNVmWoNRnNn/99zSOsnraCJVjspdqrysXRv4Ze5TnHHwM/yuJrPrD6d9/we5sU0zr6OJVFkqd6myMvdsZu+csbRP+5QmxPFR/V9zWv8/cH0bfbpZpDQqd6lyMvb+yK45z3Bm6nxaEc2iejfRuv9jXNO2ldfRREKGyl2qjEO/7OTnWU9z1v55tCOCpfUG0qL/Y1zZ9jSvo4mEHJW7eC59/y62z/ojnX+ZTUf8fJPQj+b9n+TS09p5HU0kZKncxTMHU/fx46znODtlOl0pYmVCX5pc8yS/OqOj19FEQp7KXSrdgbT9/DDrT5yzbwrdyWd13ctpdO1Yep7R2etoImFD5S6VJu1AGt/Pep5ueydzoeWwNr439a8Zy3ntu3kdTSTsqNylwqUePMi6WS+QvOcdels2G+MvpF6/sXTt0N3raCJhS+UuFeaXg4dZO/tFkne/RR/L4Ic655N71Vg6ndXL62giYU/lLkGXkp7Bqlkvc97uN+lr6Wyr3Y2ivmPp0Lm319FEqg2VuwTNvvQsls8eR/ddE7nWDrCzVmdSr5zA6Wf38TqaSLWjcpdy++mXQ6yeP5HuuyYy0H5hT80OpF3xEq279gM76XVeRKSCqNzllDjn+HbLbrZ/+ioXHZzGjXaAlBqncbDP2zTvNkClLuIxlbuUSaHPz6KVG8n48hWuyvmQ8+0Ie+qeQ8Zl/yCpcz+I0HVKRaoClbsEJCO3kAVffk3Mt6/Sz7eEGCtib5NLqNH3YZq36el1PBE5hspdTmp3eg4ff/oxzTdP4EaW47co0k67jiZ9H6JFo/ZexxORE1C5y3F993M6yz6ZTrc9bzMy4ntyI2uR3vluEi/7LU3jdeUjkapO5S7/5vM7Fm/cw6bF73LF4SncG/EzWbENyezxJPG9RlEjLt7riCISIJW7cCS/iDkrtpK27E1uyJvDlRFpHK7ThvyLX6ZOtyEQFet1RBEpo1LL3czeBK4BUp1znY7zeG9gLrCj5K5ZzrlngxlSKsb+zDymfrmW6NUTucktpL5lk554Dr7LXyKh/VWa+SISwgLZc38LGAe8c5IxXznnrglKIqlwm/ZlMvOzr2m15U1GRnxBDSvgcMvLoc9D1G/Zw+t4IhIEpZa7c26pmbWu+ChSkZxzfLE1jUVLPuX8lMk8GrEci4ogt8MguOR3JDTq4HVEEQmiYB1z72lm64B9wIPOue+D9LxSTnmFPuas2cOaL+dyTdY0/hS5gYKYWvi6jSb2onuoHd/U64giUgGCUe5rgFbOuWwzuxqYA5xxvIFmNgoYBdCyZcsgrFpO5GB2PpO/2c6+b6ZxS9FshkTsIK9mQ4p6jSXmvOFQI8HriCJSgcpd7s65zKOWF5jZP82soXPuwHHGTgAmACQnJ7vyrlv+27bUbN5e+gNR6yYzzD6iVUQquXXb4Hq/TFyXmyA6zuuIIlIJyl3uZtYE2O+cc2bWHYgADpY7mQTMOcc32w8y5Yt1tNr+PvdHfUqDyEzyGp8DvV+kRvurISLS65giUokCmQr5AdAbaGhme4CxQDSAc+41YBAw2syKgFxgiHNOe+WVIL/Ix/z1KXy4dAUXHZjGX6K+oGZ0HgVt+8Cvfkdcqwt0dkaRaiqQ2TI3l/L4OIqnSkol+SUjj8nLd/L9t4sYULCAiZHLsegIXOfB0Os+Yhp39DqiiHhMn1ANEc45Vu48xPvLfiBuy2yGRnzCAxE/UxRXh4hzR2M9fwN1m3sdU0SqCJV7FZdb4GPu2r18umw5PdLn8EzUF9SNOkJBgzOh5z+I6nIjxNTyOqaIVDEq9ypqd3oO736zgz0rP2KQbwETI9dBdCT+DtdAj7uIadlTx9NF5IRU7lWIc45l2w4w/asNNNo+g6GRi2ll+ymonYh1fxg79w4idLpdEQmAyr0KyM4vYubqPSxb9hmXZs7jr1FfExdVQEHT8+GCPxPT4VqIivE6poiEEJW7h35Ky2bysh/JWjubG91Cbo/YSlFsHNZlCJw/ipgmnb2OKCIhSuVeyXx+x+c/pDJ32WpO3zWduyM/o5EdJj++FVzwJ6K63gI16nkdU0RCnMq9khzOKWDayl2s/9dC+uZ8yN8jVxEZ5aeg7eXQ825iT7tU508XkaBRuVewzSmZfPDVJmzjdIbwCaMidlMQVxdLHo2ddyex9dt4HVFEwpDKvQIU+vws2rSfT5Yu4+yUGTwYuZT4iBxyG5wFvcYR0+kGiKnpdUwRCWMq9yA6kJ3P1BU72PHNHK7Nn89LkevxRUfh6zAAet5FjRbdNTddRCqFyj0I1u0+zPSl64j/YQo32yJaRKSRV7sx/vMfI/LcYUTWaex1RBGpZlTupyi/yMeCDSl89eVieh6YyROR3xAXWUhO057Q6wXiOvSDyGivY4pINaVyL6NfMvKY9q/NpK+cTv+iT7g+YhuFsTVwXX4NPUZRU2dkFJEqQOUeAOccK3eks/SzBbT4eSbDI76htuWRk9AWf8+/EH3OLRBX1+uYIiL/pnI/idwCHx+vWMfBf71D7yOf8GDEPgqia1DQ/jroeQc1W5yvN0hFpEpSuR/H7rQMln86hQY/Tudat5oo85PWoCsFFzxCTJeBxMTW8TqiiMhJqdxLOOdYvXoFaV+9ybmHP2GwHSYzsh6pHe4kqfedJCa29zqiiEjAqn25Z2ceYt0nb1F38xSS/T9QRAQ7G1xI1IUjqH92P+I140VEQlD1LHfn2Lv+c/Z/OZEOBxfTy/LZHdmCDR0foN0Vd3J6QlOvE4qIlEu1KndfRgrbF0+k9uYpNCvaQ10Xx/p6l1P/whG0O/dSWujNUREJE+Ff7r5Cjmycz4GlE2l28GvOwM931pGN7cbS9crb6dGggdcJRUSCLnzLPfUHDi57g5hN06lTdIhsl8CHtQdR74I76NWjB9GROr2uiISv8Cr3vEyKNswk65tJ1EtfR7yL5HO6kdLmBs67/Caub17f64QiIpWi1HI3szeBa4BU51yn4zxuwEvA1UAOMMw5tybYQU/IOfj5X+StfJvIzXOJ9ueR5m/G5Nhh1D1/KNde0IWEmrr+qIhUL4Hsub8FjAPeOcHjVwFnlHydD7xa8mfFytwHa98nf9W7xGbupMjVYJbvArY2HcCFF/dl9JmNiYzQG6QiUj2VWu7OuaVm1vokQwYA7zjnHLDczBLMLMk5lxKkjP9pz2p8X/yZiG1LMPx85z+TeTaGWl0HclOvDtzSqHaFrFZEJJQE45h7M2D3Ubf3lNxXIeW+Zvs+mm9bzbSia1le9yr69OrJo92aUSdOHzYSEfk/lfqGqpmNAkYBtGzZ8pSeI759bx7f/gG39TqNMac3xDQ3XUTkvwSj3PcCLY663bzkvv/inJsATABITk52p7Ky0xvX4fVhPU7lW0VEqo1gTPaeB9xmxXoAGRV2vF1ERAISyFTID4DeQEMz2wOMBaIBnHOvAQsonga5jeKpkHdUVFgREQlMILOPb3QhAAAEBUlEQVRlbi7lcQeMCVoiEREpN30GX0QkDKncRUTCkMpdRCQMqdxFRMKQyl1EJAxZ8WQXD1Zslgb8fIrf3hA4EMQ4oUDbXD1om6uH8mxzK+dcYmmDPCv38jCzVc65ZK9zVCZtc/Wgba4eKmObdVhGRCQMqdxFRMJQqJb7BK8DeEDbXD1om6uHCt/mkDzmLiIiJxeqe+4iInISVbrczayvmW0xs21m9shxHo81s6klj68o5XKAISGAbf69mW0ys/VmtsTMWnmRM5hK2+ajxt1gZs7MQn5mRSDbbGY3lrzW35vZ+5WdMdgC+NluaWafm9l3JT/fV3uRM1jM7E0zSzWzjSd43Mzs5ZK/j/Vm1i2oAZxzVfILiAR+AtoCMcA6oOMxY34DvFayPASY6nXuStjmS4CaJcujq8M2l4yrAywFlgPJXueuhNf5DOA7oF7J7UZe566EbZ4AjC5Z7gjs9Dp3Obf5V0A3YOMJHr8aWAgY0ANYEcz1V+U99+7ANufcdudcATCF4otxH20A8HbJ8gzgMgvt6+6Vus3Ouc+dczklN5dTfOWrUBbI6wzwR+B5IK8yw1WQQLZ5JPCKc+4QgHMutZIzBlsg2+yA+JLlusC+SswXdM65pUD6SYYMAN5xxZYDCWaWFKz1V+VyP9GFt487xjlXBGQADSolXcUIZJuPNoLi//lDWanbXPLragvn3PzKDFaBAnmd2wHtzOxrM1tuZn0rLV3FCGSbnwZ+XXJRoAXAvZUTzTNl/fdeJpV6gWwJHjP7NZAMXOx1lopkZhHAi8Awj6NUtiiKD830pvi3s6Vm1tk5d9jTVBXrZuAt59zfzKwn8K6ZdXLO+b0OFoqq8p57IBfe/vcYM4ui+Fe5g5WSrmIEdLFxM7sceBzo75zLr6RsFaW0ba4DdAK+MLOdFB+bnBfib6oG8jrvAeY55wqdczuArRSXfagKZJtHANMAnHPfAHEUn4MlXAX07/1UVeVyXwmcYWZtzCyG4jdM5x0zZh5we8nyIOAzV/JORYgqdZvN7BxgPMXFHurHYaGUbXbOZTjnGjrnWjvnWlP8PkN/59wqb+IGRSA/23Mo3mvHzBpSfJhme2WGDLJAtnkXcBmAmZ1JcbmnVWrKyjUPuK1k1kwPIMM5lxK0Z/f6HeVS3m2+muI9lp+Ax0vue5bif9xQ/OJPp/ji3N8Cbb3OXAnbvBjYD6wt+ZrndeaK3uZjxn5BiM+WCfB1NooPR20CNgBDvM5cCdvcEfia4pk0a4ErvM5czu39AEgBCin+TWwEcDdw91Gv8Sslfx8bgv1zrU+oioiEoap8WEZERE6Ryl1EJAyp3EVEwpDKXUQkDKncRUTCkMpdRCQMqdxFRMKQyl1EJAz9fzG7D1KXXP7HAAAAAElFTkSuQmCC\n",
"text/plain": "<Figure size 432x288 with 1 Axes>"
},
"metadata": {},
"output_type": "display_data"
}
]
},
{
"metadata": {
"trusted": false
},
"cell_type": "code",
"source": "# numerical stability point\nx = np.linspace(0,1,4)\ny = 1.5*x**3 + 1 - 0.5*x**2 + 2*x\nV_n = np.array([[np.exp(x_i)**i for i in range(0,4)] for x_i in x]) # change made here\nV_e = np.array([[x_i**i for i in range(0,4)] for x_i in x])\n# look at the condition number\nprint(la.norm(la.inv(V_n),2)*la.norm(V_n,2))\nprint(la.norm(la.inv(V_e),2)*la.norm(V_e,2))",
"execution_count": 87,
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": "1315.566624409681\n98.86773850722757\n"
}
]
}
],
"metadata": {
"kernelspec": {
"name": "python3",
"display_name": "Python 3",
"language": "python"
},
"language_info": {
"mimetype": "text/x-python",
"nbconvert_exporter": "python",
"name": "python",
"pygments_lexer": "ipython3",
"version": "3.5.4",
"file_extension": ".py",
"codemirror_mode": {
"version": 3,
"name": "ipython"
}
}
},
"nbformat": 4,
"nbformat_minor": 2
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment