{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "Custom linear model\n", "==================" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Input values for mock data: OrderedDict([('const', -0.5), ('slope', 1.1)])\n", "\n", "Optimization terminated successfully.\n", " Current function value: 18.343126\n", " Iterations: 34\n", " Function evaluations: 67\n", "-------------------- Parameter summary ---------------------\n", " const = -0.314227, free: T, restricted: F, related: F\n", " slope = 1.06682, free: T, restricted: F, related: F\n", "------------------------------------------------------------\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "from __future__ import print_function, division\n", "import numpy as np\n", "import matplotlib.pylab as plt\n", "from PyAstronomy import funcFit2 as fuf2\n", "import scipy.optimize as sco\n", "\n", "np.random.seed(1234)\n", "\n", "class LinMod(fuf2.MBOEv):\n", " \"\"\" Linear model \"\"\"\n", "\n", " def __init__(self):\n", " # 'pars' specifies parameter names in the model\n", " fuf2.MBOEv.__init__(self, pars=[\"const\", \"slope\"], rootName=\"LinMod\")\n", "\n", " def evaluate(self, x, *args):\n", " \"\"\"\n", " Evaluate model at 'x' here and return y = const + x*slope\n", " \n", " args receives the remianing arguments specified in the call to fmin but\n", " not needed here\n", " \"\"\"\n", " return self[\"const\"] + x * self[\"slope\"]\n", "\n", "\n", "# Instantiate model\n", "lm = LinMod()\n", "\n", "lm[\"slope\"] = 1.1\n", "lm[\"const\"] = -0.5\n", "\n", "# Get some 'data' and add Gaussian noise with STD 10\n", "x = np.arange(15.)\n", "y = lm.evaluate(x) + np.random.normal(0,1,len(x))\n", "yerr = np.ones_like(x)\n", "\n", "print(\"Input values for mock data: \", lm.parameters())\n", "print()\n", "\n", "lm.thaw([\"slope\", \"const\"])\n", "\n", "# Because ln inherited from MBOEv, it has a default chi-square objective function\n", "fr = sco.fmin(lm.chisqr, x0=lm.freeParamVals(), args=(x,y,yerr))\n", "lm.setFreeParamVals(fr)\n", "\n", "lm.parameterSummary()\n", "\n", "plt.errorbar(x, y, yerr=yerr, fmt='b+')\n", "plt.plot(x, lm.evaluate(x), 'r--')\n", "plt.show()" ] } ], "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.10" } }, "nbformat": 4, "nbformat_minor": 4 }