{ "metadata": { "name": "" }, "nbformat": 3, "nbformat_minor": 0, "worksheets": [ { "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# A Simple Filter\n", "\n", "This example will demonstrate the importance of removing the redundancies from the regression. This notebook will\n", "\n", " - define a simple 1D filter,\n", " - generate influence coefficients using the filter,\n", " - use these coefficients to calculate a response from a microstructure,\n", " - back calculate the influence coefficients,\n", " - compare the back calculated influence coefficients with the original,\n", " - introduce the `MKSRegressionModel` class and\n", " - show how the this class deals with redundancies.\n", " " ] }, { "cell_type": "code", "collapsed": false, "input": [ "%matplotlib inline\n", "%load_ext autoreload\n", "%autoreload 2\n", "\n", "import numpy as np\n", "import matplotlib.pyplot as plt" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "The autoreload extension is already loaded. To reload it, use:\n", " %reload_ext autoreload\n" ] } ], "prompt_number": 57 }, { "cell_type": "markdown", "metadata": {}, "source": [ "## The filter" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Create a filter." ] }, { "cell_type": "code", "collapsed": false, "input": [ "def filter(x):\n", " return np.where(x < 10,\n", " np.exp(-abs(x)) * np.cos(x * np.pi),\n", " np.exp(-abs(x - 20)) * np.cos((x - 20) * np.pi))\n", "\n", "x = np.linspace(0, 20, 100)\n", "a = plt.plot(x, filter(x))" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "display_data", "png": "iVBORw0KGgoAAAANSUhEUgAAAXoAAAD7CAYAAABkO19ZAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAH4VJREFUeJzt3XtsW+d5BvCHku04ciwfUmriJq5j0XKyZLVDxU7X7tIS\nJrVuw9JhUVK57ZZsQahsxS4oFkXehsHyWsyOtWFD0WKL6CJbV6SNJqbpLugW8xRM1zRbQ5OZHTfL\nYh/ajdPEdXiRHTuxZfnsj1ekSYm3c6FJHj0/gJDEc/k+H5MvX77nO99x6bqug4iIHKuj2R0gIqLG\nYqAnInI4BnoiIoezHOjHxsYqLguHwwiHw9i5c6fVZoiIyCRLgX5ychKRSKTsMlVVEQwGEQqFoGka\nVFW10hQREZlkKdCPjIzA6/WWXaZpGqLRKADA6/VC0zQrTRERkUnLGrXjUChU+D2RSGDHjh2NaoqI\niKpo+MnYRCKBrVu3wufzNbopIiIqo+GBXlVV7Nmzp9HNEBFRBbaXbnK5HBRFASAna0dHRwFIwA8E\nAovWd7lcdneBiMjxjExqYCmjn56eRjwex/79+wvPBYNBAEA0GsXOnTvR398Pj8dTNaDrus6HDY9d\nu3Y1vQ9OevB48ni26sMoSxn9vffei3vvvbfkuXg8DkACfiaTsbJ7IiKyAa+MJSJyOAZ6B/H7/c3u\ngqPweNqLx7N5XLqZgo+dHXC5TNWciIiWKqNxkxk9EZHDMdATETkcAz0RkcMx0BMRORwDPRGRwzHQ\nExE5HAM9EZHDMdATETkcAz0RkcMx0BMRORwDPRGRwzHQExE5HAM9EZHDMdATETkcAz0RkcMx0BMR\nOZzlQD82NlZxWSQSgaqqCIfDVpshIiKTLAX6yclJRCKRsssSiQQAIBAIAACSyaSVpoiIyCRLgX5k\nZARer7fssqmpKbjdbgCA1+tFNBq10hQREZnUsBp9LpeDx+Mp/J1OpxvVFBERVdHQk7G86TcRUfM1\nLNArioJMJgMAyGaz6OnpaVRTRERLhpn8eZndncjlclAUBcPDw4jH4wgEAkilUhgcHKy4zfj4eOF3\nv98Pv99vd7eIiNpWLBZDLBYDAFy4YHx7l26hvjI9PY2RkRHs27cPDz30EABg27ZtiMfjAIBwOAyv\n1wtN0xAKhcp3wOViiYeIqE7HjwN9fcbipqVAbwcGeiKi+iUSwNatxuImr4wlImoj86c+DWGgJyJq\nI2ZGqjPQExG1EWb0REQOx0BPRORwDPRERA7HQE9E5HAM9EREDte2gZ7XSxER1adth1eeOdPsHhAR\ntYe2zejNdJyIaKnRdQZ6IiJHO3cOWL7c+HYM9EREbSKTAYpu3Fc3BnoiojbBQE9E5HCZDGDmZn0t\nEeh533AiotrSaWb0RESOxtINEZHDMdATETkcAz0RkcOZDfTLrDQaiUSgKAo0TUMoFDK8PI+Bnoio\ntque0ScSCQBAIBAAACSTyZLlyWQSXq8XgUAAXq930fJiDPRERLVd9eGVU1NTcLvdAACv14toNLpo\nnbGxMQCApmkYGBiouK9MhjNYEhHVctWHV+ZyOXiKWkwvGAw/MDCAvr4+eDyekvXKWbECeOcdsz0h\nIloamnIyVq+ShudyOfT39yMcDiMUCiGVSlVct6eH5RsiomryM1de1ZOxiqIgMx+ds9ksehYUjsLh\nMB5++GF0d3dDURRMT09jdHS07L4uXhzHnj3A2rWA3++H3+832y0iIseJxWI4cCCGuTngsceMb286\n0A8PDyMejyMQCCCVSmFwcBCAZPKKogAAuru7AcgJW03TKu7r9tvHcd99wPx5XSIiKuL3+9Hf78ff\n/z0wPg7s3r3b0PamA/3AwADi8ThUVYWiKPD5fACAYDCIeDyO0dFRTExMwOv1IpPJVB1e6fGwdENE\nVI3Zsg0AuPRqhfarwOVyYWREx513Ag8/3MyeEBG1rlgM2LULeO45iZtGQndLXBnr8XAGSyKiatJp\nc2PogRYK9CzdEBFVZqV00xKBnsMriYiqa/tAz4yeiKg6BnoiIodjoCcicjgGeiIihzM7oRnQIoHe\n7ZZ/BGewJCIqr+0z+muvBTo7gfPnm90TIqLWZHYueqBFAj3AIZZERNW0fUYPsE5PRFTJu+8Cc3NA\nV5e57RnoiYhaXDYrMdLlMrc9Az0RUYuzUrYBWizQc2IzIqLFrAytBFos0DOjJyJajBk9EZHDOSbQ\nr1kDnDnT7F4QEbWemRmJkWa1TKDv7gbOnm12L4iIWs/ZsxIjzWqZQL96NTN6IqJyzpyRGGmW6ZuD\nA0AkEoGiKNA0rezNvxOJBFKpVM2bgwPM6ImIKjl7FrjlFvPbm87oE4kEACAQCAAAksnkonX27t2L\noaEh5HK5ssuLMaMnIirPakZvOtBPTU3B7XYDALxeL6LRaMny6elp3HXXXQCA0dFRDAwMVN0fM3oi\novKaVqPP5XLwFI33SS8YGxmPx5FOp5FMJjExMVFzf8zoiYjKa1pGDwB6jQnke3t7C5l8JBKpui4z\neiKi8qxm9KZPxiqKgsz8pazZbBY9CyZK7unpQV9fX2HdF198EUNDQ2X3NT4+DgC4cAGIRv0IBv1m\nu0VE5DinTsXwxBMxfOtb5rZ36bXS8gqSySTi8ThCoRAmJiYwODgIn8+HXC4HRVGQSqUwPT2N0dFR\nTExMYOPGjbjnnnsWd8DlKnwz8HiAo0etXQFGROQ073sfcOQIcP318ndx3KyH6dJNviSjqioURYHP\n5wMABINBAEBfXx8URUEkEkEmkykb5BdinZ6IaDGrNXrTGb1dij+ZNm8GnnxSfhIRkZS0r7sOuHjx\nynz0Vy2jbwRm9EREpc6eldho9qYjQIsFeo68ISIqZXXEDdBigZ4ZPRFRKav1eaDFAj0zeiKiUszo\niYgcjhk9EZHDMaMnInI4ZvRERA7HjJ6IyOGY0RMRORwzeiIih2NGT0TkcMzoiYgcjhk9EZHDMaMn\nInI4x2X0K1cCc3My7zIRETkwo3e55JOL5RsiIuG4jB5goCciKtb0jD4SiUBVVYTD4arrTUxM1L3P\n7m7W6YmIALmN4OXLwDXXWNuP6UCfSCQAAIFAAACQTCbLrheNRnHgwIG698uMnohI5LN5K7cRBCwE\n+qmpKbjdbgCA1+tFNBotu57LYA+Z0RMRCTvq84CFQJ/L5eDxeAp/p9PpReskk8lCxl8vZvRERMKO\n+jxgsUav63rV5ZlMxvA+mdETEYmmZ/SKohQCeTabRU9PT8lyM9k8wIyeiCjProx+mdkNh4eHEY/H\nEQgEkEqlMDg4CEBKOoqiQNM0aJqGdDqNTCaDZDKJgYGBsvsaHx8v/J7J+OF2+812i4jIMfIZfSwW\nQywWM70f04F+YGAA8XgcqqpCURT4fD4AQDAYRDwex9DQEAAgHA5jZmam6knZ4kA/MQGcOmW2V0RE\nzpHP6P1+P/x+f+H53bt3G9qPS69VaG8wl8tVUut//HHg4EFgcrKJnSIiagF/9VfAyZPAX/916fML\n42YtvDKWiKhFtcSom0bgqBsiInHmjEMDPTN6IiJx9myTh1c2CjN6IiLBjJ6IyOGY0RMRORwzeiIi\nh3NsRs/bCRIRCcdm9LydIBGRcGxGD7BOT0QEODijB5jRExFduCA/rd5GEGjRQM+MnoiWOruyeaBF\nAz0zeiJa6uyqzwMtGuiZ0RPRUseMnojI4ZjRExE5HDN6IiKHY0ZPRORwzOiJiByOGT0RkcPZmdEv\ns7JxJBKBoijQNA2hUGjR8nA4DAA4duwY9u7dW/d+mdET0VJ39ixw00327Mt0Rp9IJAAAgUAAAJBM\nJkuWq6qKYDCIUCgETdOgqmrd+2ZGT0RLXUvU6KempuB2uwEAXq8X0Wi0ZLmmaYXnvF4vNE2re9/M\n6IloqbOzRm+6dJPL5eDxeAp/p9PpkuXFpZxEIoEdO3bUvW9m9ES01LVERg8Auq7XXCeRSGDr1q3w\n+Xx173f1agZ6IlraWiKjVxQFmUwGAJDNZtHT01N2PVVVsWfPnqr7Gh8fL/zu9/vxkY/4MTMD6Lrc\niISIaKnJ5YA1a+T3WCyGWCxmel8uvZ60vIxkMol4PI5QKISJiQkMDg7C5/Mhl8tBURQAwOTkJEZG\nRgBIwM+fuC3pgMtV9ptBVxdw+jSwapWZ3hERtbd164AXXgA+8IHFyyrFzUpMl24GBgYASABXFKVQ\nmgkGgwCAaDSKnTt3or+/Hx6PBy6DqbmiANms2d4REbW3bFbioB1MZ/R2qfTJ9NM/DTz1FPDBDzah\nU0RETXTxolQ1ZmfLl6+vWkbfaMzoiWipyuUkBtp1jrJlA73bLf9YIqKlJpeTGGiXlg30isJAT0RL\nUz6jt0vLBnq3m6UbIlqasllm9Jb9wz8Aa9cCgQDwh38IfOMbjWmHiJzlwAHg0UeBX/kVYP164E//\ntDHtMKO3wd/+LfDYY8DYGHDzzfIf99xzjWmLiJzhRz8ChoclNv3u7wL/+I/A/v0yMsZudg6tBCxO\nU9xIigIcPmz/fl99FTh+HPjMZ4Bly4Bf/EVp6/OfBz72MfvbIyJneOwxIBQC/viPrzy3aRPw7W8D\nn/iEvW0tmZOxjcrov/rVK0E+7zd/Ezh2DPj+9+1vj4ja3xtvAF//OvBHf1T6/AMPSEyxm90ZfcsG\n+kbU6C9flq9b999f+vzy5fIp/fnP29seETnDxATwW78FXH996fP33QdEo8D8tF+2YUZvQSwGeDzA\nHXcsXvbAA8CRI8APfmBvm0TU3t56S7L20dHFyxQF+KVfkqv47cSM3oKvfnVxNp93zTXAzp3M6omo\n1F/+JfAbvwG8//3ll99/v4zks5PdGX3LznUzMyOzttk1L/25c3L/xf/9XxlaWc577wEbNwL/+q/A\n/JxtRLSEvf02cMstwKFDMptkOZcuSayKxYBbb7Wn3bvuAr70JeBnfqb8csfMdbN6NXD+vBxEOzz9\nNPBzP1c5yAPAypXAH/wB8OUv29MmEbW3J56QETWVgjwgAzs+/Wl7T8oumRp9R4fcRmtmxp79Pflk\n5bJNsQceACIR3rOWaKnTdRknX3RX1Iruv19ijF2WTI0esK9Or+vAiy8CH/1o7XXXrgX8fvtPrhBR\ne/ne9yTh/Nmfrb3uli0SnN9+23q7ur6ErowF7Bt589ZbMt1ntbJNsYcekk9yIlq69u+XWFDPVMEu\nF7B5sz0Xeb7zjgwOWbHC+r7yWjrQ25XRHzokn7j1zu388Y8DJ08CL79svW0iaj8zM8C3viUXU9Zr\nyxaJNVbZXZ8HWjzQ2zUnfT7Q12vZMrk44itfsd42EbWfr38dGBxcfIFUNXYGejvLNkCLB3q77jJl\nNNADwIMPAl/7GnDhgvX2iai95Ms2RmzebE+gt3uKYsBioI9EIlBVFeFw2NTyWuzK6A8flv8EI7xe\nuYL2mWest09E7SOZBE6fBoJBY9t98IPAD38IzM1Za78RGb3p2SsTiQQAIBAIQNM0JJNJDBRdZVRr\neT3syOhnZ2XGyttvN77tQw/JlMbDw9b6UM7rr8uHyKlTMoy0uxu48UYZ8dPdbX97RO3qvfeA734X\nOHFCaudnzgCrVsn49ttus7+9xx8Hfvu3gc5OY9t1dwM33CATJN5yi/n2Wyqjn5qagnu+N16vF9Fo\n1NDyetiR0b/6qsw539VlfNuhIXlxfe971vqQNzsL/M3fyNVuPh+QSMjZ9dOnJYv40pfk6t3t2+Wy\n61TKnnaJ2s1PfiIB9+67pU7+538u81C9+aYE4Ndflxr67bcDu3bZdwX9yZPA1BTw2c+a296O8k1L\nZfS5XA4ej6fwdzqdNrS8HnZk9Gbq83nLl8sdZHbvljvLWHHsGPCpTwE9PcAXviCZ+/Lli9c7dw74\nzndkGoYPfUimZPjUp4Bf/3W5o41Vui4z7Z0+LVce5x+AvIE6O2VYV1eXZE1dXcB118nvy1r27gVk\nh7k5eS288468DvOvjQsX5Ar1uTl5/Vx7rbwuurqA3l55TRvNfss5fRr4l3+RO7794AdyF6dPf1rm\nkSkKJQVf/KKs93d/J1OWPPlk5SkD6rV3r5yfM3IStlj+hOy995rvQyMyektv3VpzLVidRseOjN5M\nfb7Y/fdLYP7+9+u7cKKcr30N+NzngD/7M+D3f7/6MM9VqySLuftuyfC/8x0ZAfCFL8gHXyAgF355\nvTK/xtq18ibTdfnGcOaMzJ198qRkPSdOyI1WUil5/tQpCdy9vfKzq0veuC7XlTfzxYtX3uT5N/25\nc/LBlF9/5Up55D8c8m90XZfH5cuyv/xjdrb077k5eVy+fGX9Yi6XPDo6Fv9e/FzxY6H8y6/458Ln\nrMq3W9yHhT/L9Sv/7y4+XuV+Luxn/t/f0SHHvKNDPoCXLZP/n/zv+UdnZ+kxyh/3S5fk//ndd6U0\ncv68/Fy16soj/2G/YkXpvvLrnzsHpNMSmHp75dvohg3yuPlmeX2uWycPt1v243LJv+3tt+X1efw4\n8PzzgKrK78GgXIn6zDO1v4V3dAAf/rA8nn5aSjmf+5zcMa7DRK3ijTfkw+KVV4xvm7dli/UrZHM5\nOX52Mh3oFUVBZn4S5mw2i56eHkPLi42Pjxd+9/v98Pv98/uwJ6MfGTG//YoVwJ/8iWT1//EfxrbV\ndblRwbe/LXNWl5seuZrly2VM/8c/Lm+Ol1+WwP/00xLAT56UN1pHh7xpOzsleOffXPk33q/+KtDX\nJ3+vXSvlIqN0XYJC/vHee/LIB478CajioJwPPJ2di4NQ/sMhH7SKA2VxAFwY9C5fXhwki4OhrpcG\n2HLBt1YgNnJMivu78LlKfQLKf4AVB/FyH2ILj0H+g7LcB2o+mF+6VHqcOjuvHP8VK+RDO//B3dVl\nLkDOzko2fvKkBOvjx+Wk5LPPynMnT0ptfXZW2tR1qWfnPwg+/GEp02zbZv5b4z33yERgn/kM8F//\nJd8KVq40to/HHpNh1TfcYK4PgAT6nTvNbw9IzPP5Sp+LxWKIxWLmd6qblEgk9MnJSV3XdX3fvn16\nMpnUdV3Xs9ls1eULVevCK6/o+q23mu2hWLdO1zXN2j4uXND19et1/YUX6t/m0iVdf/BBXf/IR3Q9\nk7HWfq2+nT+v63NzjWuDyA5zc7r+3nvyaJQLF3T9vvt0fft2XT97tv7t3nhD191uXX/zTWvtX7qk\n69deq+tnzpjfxyc+oevf/Gb1dYyGbtMnY/MjaFRVhaIo8M1/BAXnxyRVWm6E1Yw+m5VMwurXoBUr\n5A5Uu3fXt/7Fi8COHXIz4Weftb/etrBv115rLhMjupo6OuTbpJlvlPVasUJKnX19Ugaq985P+/ZJ\nmbbeaVIq6eyUE8RHjpjfRyNq9C07Hz0gpYE1a+Snma/Z3/2uBOjnn7fYScgJqdtuk/rf7/xO5fXe\nfltOnq5eLS+4Rr6oiag8XQceeUTKrc88A/T3V1733/9dbixy6JAMcbbqwQelHGW2ZLxli9zytFqp\n1zHz0QNSY+vokJqwGYcOWTsRW+yaa2Tkzb59Ussr57//G9i6FbjzThmixSBP1BwulwxR/uxnZRBF\npQsf/+mfZGryf/5ne4I8YH0qBLunKAYsjrq5GvIjb8yMgz90aPFJDSs2bgT+8z9l/G4uB/zFX8jJ\nrh//GPjmN+XvcBj4tV+zr00iMsflkkC/bZvcxPv55+Xb+E03SRL5la/ISLhnnzU+UKKazZtlwIRZ\nS25SM8Banf7wYfNj6Cu56SYpCR04ALzvfTL87Od/XkbWvPACgzxRq/nQh4CDB2U4ZzAo5eDeXrkI\nKxazN8gDEnMOHzY3hHd2VioY111nb5/aJqM3Kj8c0a7STbHeXhlXf/q0DMXihUREra23V4ZcAhIb\nTp+WJM3ugApIArhypQwr/cAHjG07MyMfRHYPrnBsRn/8uFxNt2aN7V0CIGf3b7qJQZ6o3XR0SILW\niCCfZ/YmJI2ozwNtEOjNZvT/93/23ZGdiMiIW2+VGGRUI+rzQBsEerN3mXrttepDqoiIGqW/X2KQ\nUY2Y0Axog0Bv9r6xr70GbNpkf3+IiGrZtAk4etT4do24WApog0BvNqM/epSBnoiaY9MmZvSGWMno\nWbohombYsEFmw7x40dh2zOgNmJ2VMbNeb2P6RERUzfLlMrTS6M2DmNEbcOKEXM68YkVj+kREVIuZ\n8g0zegNYtiGiZjMT6JnRG8ARN0TUbP39xkfeMKM3gIGeiJqNGb0B3d1y39L8rerqcfQoSzdE1Fys\n0RvQ0SE38Thzpv5tmNETUbPdfDPw5pty06J6LdmMHjBWp88Prezra2yfiIiqMTrEUteX8KRmgLE6\n/fHjMqskh1YSUbMZKd+cPy8fDo24M53lSXYjkQgURYGmaQiFQouWh8NhAMCxY8ewd+9eU20YmaqY\nZRsiahVG5rxpVH0esJjRJxIJAEAgEAAAJJPJkuWqqiIYDCIUCkHTNKiqaqqdnh656XY9GOiJqFUY\nmcUynW7RQD81NQX3fM+8Xi+i0WjJck3TCs95vV5ommaqnfXrgR/9qL51ebEUEbUKI6WbEyfkBG4j\nWCrd5HI5eDyewt/pdLpkeXEpJ5FIYMeOHaba6esDfvjD+tY9ehT45V821QwRka2MlG5SqcYNIrFc\no9fruANuIpHA1q1b4fP5yi4fHx8v/O73++H3+0uW9/UB//Zv9fWHpRsiahXFQyxrnWStFuhjsRhi\nsZjpftQM9PmTqcU8Hg+GhoagKAoymQwAIJvNoqenp+w+VFXFnj17KrZRHOjL6eurb4jSxYtyQ94N\nG2qvS0TUaMuWSelZ04Dbbqu+bioFfPSj5ZctTIB3795trB+1Vig3kiZveHgY8XgcgUAAqVQKg4OD\nAKSko8wPBp2cnMTo6CgACfj5E7dGbNgg9avLl6vfHf34cWDdOg6tJKLWkS/f1BPoG1W6sXQydmBg\nAIAEcEVRCqWZYDAIAIhGo9i5cyf6+/vh8XjgcrlMtdPVBaxZA7z1VvX1WLYholZTz8gbXW/xGn0+\n4y/O1OPxOAAJ+PnSjlX58s2NN1ZehyNuiKjVbNoEHDlSfZ10Wso8jbgqFmiTK2OB+ur0r7wC3Hrr\n1ekPEVE9fuqnJDZV08hsHmijQL9hQ+1A/z//A1QY2ENE1BRbtkhsqjZAMZVq7CCStgn0fX1ysrWS\nuTng5ZfloBIRtYrrr5fzjNUu+jx+nBk9gNqlm6NHgRtukJO2RESt5I47gJdeqrycpZt5tQL9Sy/J\nwSQiajU+n5RvKmGgn7d+PfDjHwOXLpVf/tJLrM8TUWvy+ZjR12X5cmDtWrmpSDkM9ETUqqoF+suX\n5YJQnoydV618wxE3RNSqNm4EfvITYGZm8bI335Tx811djWvfEYH+1Cng3Xfltl1ERK2msxPYvBk4\ndGjxskaXbYA2C/SVxtLns3mTMywQETVcpfJNo8fQA20W6Ctl9CzbEFGrqzTEkhn9ApUumuKJWCJq\ndZUy+kZfLAW0YaAvl9FzDD0RtbrNm2XOm9nZ0ueZ0S9w441AJiMnXvPefVcO1O23N69fRES1rFol\nA0ZefbX0eQb6BTo65MKpEyeuPHfkCHDLLbzZCBG1voXlm9lZGV65fn1j222rQA8sLt+wPk9E7WJh\noH/9dbkQdPnyxrbriEDP+jwRtYM77iid8+ZqlG2ANgz0xWPpL14EDh5kRk9E7cHnA5LJK+cZr8YY\nesCGQB+JRKCqKsLhcNX1JiYmrDYFQC4lfuIJqWmtXg288w5w55227JqIqKHe/34J9m63/L5rF+D1\nNr5dS4E+kUgAuHK/2GQyWXa9aDSKAwcOWGmq4O67gUgEeO45CfKHD3MO+rxYLNbsLjgKj6e9eDzl\n6v1oFDh/HnjxReAb3wB+7/ca366lQD81NQW32w0A8Hq9iEajZddz2Tg3wcqVwMc+JnWtRp/AaDd8\nI9mLx9NePJ5XdHQA69YBv/ALgMdzFdqzsnEul4OnqJfpdHrROslkspDxExHR1We5Rq9Xu+MtgEwm\nY7UJIiKyYFmtFcqdZPV4PBgaGoKiKIVAns1m0dPTU7Jevdm8naWdpW737t3N7oKj8Hjai8ezOWoG\n+lAoVHHZ8PAw4vE4AoEAUqkUBgcHAUhJR1EUaJoGTdOQTqeRyWSQTCYxMDBQso9a3wiIiMgaS6Wb\nfNBWVRWKosA3P6A9GAwCAIaGhjA0NASXy4WZmRlm7tTyxsbGSv6ud/gwLbbwWOb/5rFsAr1Jpqen\n9Wg0qk9OTjarC47x6KOP6rqu81ha9Pjjj+sbN24s/H3w4EF9enpa13U5tolEolldazsLj6Wu67rb\n7db7+/t1VVWb1Kv2NTk5qU9OTupjY2OF54zE0KZcGVvv+HuqTzgcxqZNm7Bx48Zmd6WtjYyMwFt0\n9Uq9w4dpsYXHEpDX6WuvvYbt27c3qVftSVVVBINBhEIhaJoGVVULMbPeGNqUQM83kL34BmqMeoYP\nU/0ymQxUVbXtKvmlQtO0Qoz0er3QNA1PPfUUFEUpPFcrhjYl0PMNZC++gRpH52AB24RCIQQCAaTT\naaiq2uzutI1QKFQYFJNIJLBt2zbkcrmSUY61YmjTJjXjG8g+fAM1Rq3hw1S/cDiMSCQCAOjp6YGm\naU3uUftJJBLYunVrYRCMkRjalEDPN5B9+AZqnOHh4cLxLB4+TMZ5vd7CaLx0Oo277rqryT1qP6qq\nYs+ePQCMx9CmBHq+gezDN5B9pqenEY/HsX//fgCVhw9TbQuPZSAQQDQaRSQSQW9vL4+lQZOTkxgd\nHQUgr0ejMdSlN6mGEg6HCycWql2URbXlM/pUKoVHHnmkyb0hIjtFo1F88pOfhMfjQSaTwfT0NLZv\n324ohjYt0BMR0dXRdneYIiIiYxjoiYgcjoGeiMjhGOiJiByOgZ6IyOEY6ImIHO7/AZ+uJKhINfYA\nAAAAAElFTkSuQmCC\n", "text": [ "" ] } ], "prompt_number": 58 }, { "cell_type": "code", "collapsed": false, "input": [ "?np.linspace" ], "language": "python", "metadata": {}, "outputs": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Construct the coefficients, `coeff`" ] }, { "cell_type": "code", "collapsed": false, "input": [ "Nbin = 2\n", "Nspace = 81\n", "\n", "coeff = np.linspace(0, 1, Nbin)[None,:] * filter(np.linspace(0, 20, Nspace))[:,None]\n", "print coeff.shape" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "(81, 2)\n" ] } ], "prompt_number": 59 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Take the Fourier transform." ] }, { "cell_type": "code", "collapsed": false, "input": [ "Fcoeff = np.fft.fft(coeff, axis=0)" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 60 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Make some sample microstructures, `X`" ] }, { "cell_type": "code", "collapsed": false, "input": [ "Nsample = 400\n", "\n", "np.random.seed(2)\n", "X = np.random.random((Nsample, Nspace))\n", "print X.shape" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "(400, 81)\n" ] } ], "prompt_number": 62 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Discretize the microstructure" ] }, { "cell_type": "code", "collapsed": false, "input": [ "H = np.linspace(0, 1, Nbin)\n", "X_ = np.maximum(1 - abs(X[:,:,None] - H) / (H[1] - H[0]), 0)" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 63 }, { "cell_type": "code", "collapsed": false, "input": [ "print X_[0, 0]\n", "print X[0, 0]" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "[ 0.5640051 0.4359949]\n", "0.435994902142\n" ] } ], "prompt_number": 64 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Calculate the responses" ] }, { "cell_type": "code", "collapsed": false, "input": [ "FX = np.fft.fft(X_, axis=1)\n", "Fy = np.sum(Fcoeff[None] * FX, axis=-1)\n", "y = np.fft.ifft(Fy, axis=1).real" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 65 }, { "cell_type": "markdown", "metadata": {}, "source": [ "## What is a Filter?\n", "\n", "A convolution\n", "\n", "$$ y_k = \\sum_{i=0}^{N - 1} x_{k-i} h_i $$\n", "\n", "where $h$ is filter and $x$ is periodic in this case.\n", "\n", "## Exercise 03-0\n", "\n", "Use the `scipy.ndimage.convolve` function to construct the `y`.\n", "\n", " - look at `scipy.ndimage.convove` documentation\n", " - just do the first sample\n", " - the `convolve` function must be in `wrap` mode to be periodic\n", " - use a small `Nspace` to test\n", " - use `np.roll` to align the results\n", " - check the answer with `np.allclose`\n", " \n" ] }, { "cell_type": "code", "collapsed": false, "input": [ "import scipy.signal\n", "import scipy.ndimage\n", "?scipy.signal.fftconvolve\n", "\n", "y_alt = scipy.ndimage.convolve(X[0], filter(np.linspace(0, 20, Nspace)), mode='wrap')\n", "print np.allclose(np.roll(y_alt, 40), y[0])" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "True\n" ] } ], "prompt_number": 66 }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Calculate the influence coefficients using the regression\n", "\n", "Use the binned microstructure, `X_`, and the repsonses, `y` to recalculate the coefficients. " ] }, { "cell_type": "code", "collapsed": false, "input": [ "model_Fcoeff = np.zeros((Nspace, Nbin), dtype=np.complex)\n", "for i in range(Nspace):\n", " model_Fcoeff[i] = np.linalg.lstsq(X_[:,i], y[:,i] )[0]\n", " \n", "model_coeff = np.fft.ifft(model_Fcoeff, axis=0)\n", "for b in range(Nbin):\n", " plt.figure()\n", " plt.plot(coeff[:,b], label='orignal')\n", " plt.plot(model_coeff[:,b], label='MKS')\n", " plt.legend()" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "display_data", "png": "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\n", "text": [ "" ] }, { "metadata": {}, "output_type": "display_data", "png": "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\n", "text": [ "" ] } ], "prompt_number": 67 }, { "cell_type": "markdown", "metadata": {}, "source": [ "The calculated influence coefficients are not even close to the originals. What's going on? The equation,\n", "\n", "$$ \\sum\\limits_{h=0}^{H-1} m^h_{a, s} = 1 $$\n", "\n", "is not being taken into account. Using this, we can rewrite the convolution as\n", "\n", "$$ \\begin{split}\n", "p_{a,s} &= \\sum\\limits_{h=0}^{H - 1} \\sum\\limits_{t=0}^{S-1} \\alpha_t^h m_{a,s + t}^h \\\\\n", " &= \\sum\\limits_{t=0}^{S-1} \\left[ \\sum\\limits_{h=0}^{H - 2} \\alpha_t^h m_{a,s + t}^h + \n", " a_t^{H-1} \\left( 1 - \\sum\\limits_{h=0}^{H - 2} m_{a,s+t}^h \\right) \\right] \\\\\n", " &= \\sum\\limits_{t=0}^{S-1} \\alpha_t^{H - 1} +\n", " \\sum\\limits_{h=0}^{H - 2} \\sum\\limits_{t=0}^{S-1} \\left(\\alpha_t^h - \\alpha_t^{H-1} \\right) m_{a,s + t}^h \\\\\n", " &= b_0 + \\sum\\limits_{h=0}^{H - 2} \\sum\\limits_{t=0}^{S-1} b_t^h m_{a,s + t}^h\n", "\\end{split}$$\n", "\n", "This removes the redundancies from the regression. Coding this in 1D is easy, we simply replace\n", "\n", "```python\n", "for k in range(Nspace):\n", " model_Fcoeff[k] = np.linalg.lstsq(X_[:,k], y[:,k] )[0]\n", "```\n", "\n", "with\n", "\n", "```python\n", "for k in range(Nspace):\n", " if k == 0:\n", " model_Fcoeff[k] = np.linalg.lstsq(X_[:,k], y[:,k] )[0]\n", " else:\n", " model_Fcoeff[k,:-1] = np.linalg.lstsq(X_[:,k,:-1], y[:,k] )[0]\n", "```" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Introducing the `MKSRegressionModel`\n", "\n", "The `MKSRegressionModel` takes a test microstructure `X` and a test response `y` in any dimension and does a linear regression to determine the influence coefficients. So,\n", "```python\n", "model = MKSRegressionModel(Nbin=10)\n", "model.fit(X, y)\n", "```\n", "After the fit, the `predict` method can be used to fit new data.\n", "```python\n", "y_predict = model.predict(X_predict)\n", "```\n", "The `MKSRegressionModel` inherits from Scikit-learn's `LinearRegression` class so that we can start doing cross validation in the next tutorial." ] }, { "cell_type": "code", "collapsed": false, "input": [ "from pymks import MKSRegressionModel\n", "\n", "??MKSRegressionModel" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 68 }, { "cell_type": "code", "collapsed": false, "input": [ "model = MKSRegressionModel(Nbin=2)\n", "model.fit(X, y)" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 69 }, { "cell_type": "code", "collapsed": false, "input": [ "model.coeff = np.fft.ifft(model.Fcoeff, axis=0)\n", "model.coeff = -(model.coeff - model.coeff[0, 1])[:,::-1]\n", "for b in range(Nbin):\n", " plt.figure()\n", " plt.plot(model.coeff[:,b], label='MKSRegressionModel')\n", " plt.plot(coeff[:,b], label='original')\n", " plt.legend()" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "display_data", "png": "iVBORw0KGgoAAAANSUhEUgAAAX8AAAD7CAYAAACCEpQdAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAF4JJREFUeJzt3c9W4mj+x/FPPL3WEPoCSmDWIyXVa38FeAGNf3o/Q+ns\n27ZqNlOzGUu5gBqhL2DagtlPF6l2XwgX0GWYGwDiXMDkt3BIi4oIsTTW836dwzmGJ3++BPiYPAmJ\nFQRBIACAUeYeugAAwP0j/AHAQIQ/ABiI8AcAA30VZeJGoyHbtuV5nsrl8q3a2+22ut2u+v3+tdMA\nAD6/mbf82+22JCmfz0uSOp3OrdrfvHmjUqkk3/evTAMAuB8zh//R0ZESiYQkKZVKqdlsTmxvNBp6\n9uyZJGlnZ0fZbHbWxQMAIpg5/H3fl+M44XCv15vY/vHjR/V6PXU6HVUqlVkXDQCIKNIB30m/D7uu\n/euvvw63+BuNRpTFAwBmNPMBX9u21e/3JUmDwUDJZHJsu+/7Yfvi4mLY/vHjR5VKpSvztixr1rIA\nwFjTXLBh5i3/zc1NeZ4nSep2uyoWi5LOg/5yu+d5KhaLWltbC5/zfV/ffPPN2PkHQRD7x1/+8pcH\nr+FLqJE6qTPuj8dQ57RmDv9h143rurJtW0tLS5KkQqEwtn1xcVG2bavRaKjf7+vbb7+ddfEAgAgi\nnec/PE9/eDqnJLVarRvbh89d190DALgf/MI3gpWVlYcuYaLHUKNEnXeNOu/WY6lzGlYwS2fRZ2ZZ\n1kx9WABgqmlzM1K3D2ASx3E0GAweugwYLpFIhGdSRsGWP3BLfC4RB+M+h9N+PunzBwADEf4AYCDC\nH3jkfN/X3Nyctre3r7Str69rbm5uZLyLPM+T4zj65z//Ken8arzFYlFzc3NyHEcbGxs6OzsLx08k\nEpqbmxt5XB4nTtrttnK53MzT33bdTjvPi9c9u0673VYmk5l63tMg/IEvxLt3764812w2x14uxfM8\n5XI5/fjjj+EPLvP5vHK5nDzPU7fbleM4I7/TsSxLzWZTvu/L932dnJzI8zzt7e19nhcVUTqd1v7+\nfuT5TLtuHwPCH/hC5HK5kXtkNJtNFYvFaw8C+r6vXC6ng4ODMPg9z9PZ2Zn29vb05MkTLSws6O9/\n//uV63Y5jqP5+XnNz88rm82OXMpluNx0Oq25uTmtrq6O7BVUq1U5jqNMJqNqtapMJhNeHmZ3dzfc\nSr9pHltbW3IcR47jjFwd+LrnT09Ptbu7G45Tr9fD+V7cY/E8T8vLy6pUKmF9F9flbdbtuHlL0sHB\nQVhbtVq91br67IIYimlZMFxcP5eDwSCwLCuo1WrB1tZW+PzW1lZQr9cDy7JGxvM8L0ilUsHLly+v\nzCudTgfFYjFoNpvXLiuRSATtdntk2cViMajVauFwIpEIPnz4EJydnQVbW1vB+vp6EARBcHp6GiQS\niaDT6QS+7wdPnz4NMplM4HleYFlWsL29HXS73Rvn8e7duyCdTgdnZ2dBu90O5ubmgrOzs7HPn5yc\nBMvLy+HyLcsKXNcNfN8P1tfXw/U1bKtUKuG6KxaLge/7t1q3N8375OTkyut2HCfwfX/s6zw5OQnS\n6fS178G4z+G0n89Yfprj+iWD2eL6uRyG+jBMhoZ/Xw7/dDodrK6uhqF4WbVaDYrFYpBIJIJisRh4\nnhe22bYdWJY18igWi2H74eFhGGCX6/jhhx9G/uHU6/UgnU6H4X+beQxDfvgPyPf9kXldfv5i+O/v\n7wfb29vhPD3PC+c7/Mc01G63g+Xl5TD8J63bm+b94sWLkdfdbDaDRCIRVKvVsa/zPsKfbh/gC7Gw\nsBB2TzSbzfCueZe9evVK//rXvyTp2psqlctl/fzzz+r3+1pfX1c6nda///1vSed9/vV6XZ7nyfM8\nnZycqNVqyXVdSefdLPV6PezicBwn7BfvdrtKp9PhcoaXd5fO7/Y3dNM81tbWtLu7q/X19ZEulFKp\ndO3zF/X7/ZHlLC4uhlchljRyEDa41FU2ad3eNO/BYHDt677pdd4Hwh+4Q5Z1N49Zra+v6x//+Ifq\n9bq2trauHecPf/iDpPODmLu7u+p2u5LO+6xXV1dHxi2Xy3r69Gl4T27pPKifPHmiJ0+eKJvNamNj\nI2zPZDJaW1tTv98PH8NbvKZSKX369Cmcz8XjBBfdNA/P81QoFPTp0yednJzo8PBQjUZD3W732ucv\nSiaTOj09DYd935dt25NX6v/ctG5vmve4151Op8e+znsx1X7CPYlpWTBcXD+Xw+6c4d+2bYf930Fw\ntdvnooODg7BbZNh+cHAQnJ6eBqenp8H+/n7Yfx4EQdh3fXkew/7tYX99s9kMBoNB8OLFi7BbqN1u\nh8cMBoPBSJ//xS6OYRfLxXmsrq4GQXDevTLsjjk9PQ3S6XTQaDTC13H5+ev6/IfzXVtbC7tqhtMM\n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\nbyVJ/X5f2Ww2lqEqnX+Bhl8mSTo7O4vd+16r1fTrr7/q+fPnkuL5XarX61dO8Y5jnRff61arpcXF\nxVjWKf22x+d53kzfodiEfxzDdJK4HZgul8vhHla73VYulxs50C7FZ72enZ2pUqno1atX4XAc3//h\nCQsXxe197/f7cl03PHU6jt+lVqt15RTvONY55LquNjc3JcWzzmw2q8XFRTmOE9Y2bZ2xCX8pfl+q\nm0w60+khtdttLS8vh8dc4rheFxYWtLOzo8PDQ3W7XUnxq/PyVr8Uz/d92LXa6/Xkuq6k+K1L6bdT\nvCWFx8/iWKckvX//XvPz8+Fw3Or0fV+ZTEa1Wk3lcnmm71Dk8/zvShy/VDcZd6ZTHLiuGx5PieN6\nbbfbsixL2WxWT58+Vb1ej2WdnufJ8zz1ej31+311Op3Yve+1Wi089TqZTMrzvFiuy2QyeeUU7zjW\nOTTs55fi+R2q1Wra2trS/Py8bNue6TsUmy3/zc1NeZ4nSbH4Ul1Wr9fVarX0448/Shp/ptNDq1ar\n4SmJw13XuK1X13VHfv+RTqdjWWepVFKpVJJlWTo7Owv/YUnxed9TqVR4dl2v19OzZ89iuS7X1tbC\nmoaneMexTklhTUNxrXO4Z5LP58NT66ep0wpitD9Tq9XCA5WcPz29ZrOpjY0NOY6jfr+ver2u58+f\nx269np2d6ejoSNL5F224lxK3Oh+LYRdKt9vV999/Lyme63K4l9JqtWL9nne7XR0cHIQnJUjxrLNS\nqSiVSqnf74c1TVNnrMIfAHA/YtPtAwC4P4Q/ABiI8AcAAxH+AGAgwh8ADET4A4CB/h+su6ZuQREK\nLQAAAABJRU5ErkJggg==\n", "text": [ "" ] }, { "metadata": {}, "output_type": "display_data", "png": "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\nQmCC\n", "text": [ "" ] } ], "prompt_number": 70 }, { "cell_type": "markdown", "metadata": {}, "source": [ " The `model.coeff` needed rearranging as the `MKSRegressionModel` coefficients are\n", " using the coefficients that have the redundancies removed." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Exercise 03-1\n", "\n", "Create a random sample and check that using `scipy.ndimage.convolve` to create the responses gives the same result as the `MKSRegressionModel`.\n", " \n", " - Use `np.roll` to align the result from `scipy.ndimage.convolve`\n", " - Use `np.allclose` to compare." ] } ], "metadata": {} } ] }