{ "cells": [ { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "import sys\n", "sys.path.insert(0, '/home/leo/src/fatiando-inversion')" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "from fatiando.inversion.base import Misfit\n", "import matplotlib.pyplot as plt\n", "import numpy as np" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Equação da reta: $ y = a x + b$\n", "* Dados = y\n", "* Parâmetros para determinar = a, b" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "x = np.linspace(0, 100, 100)" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "x" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "y = 2*x + 30" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "y" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "%matplotlib inline" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "plt.plot(x, y, '.k')" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "from fatiando import utils" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "y = utils.contaminate(y, 0.05, percent=True)" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "plt.plot(x, y, '.k')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Determinar a e b que ajuste esses dados." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "$y_1 = a x_1 + b$\n", "\n", "$y_2 = a x_2 + b$\n", "\n", "...\n", "\n", "$y_i = a x_i + b$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "$\\mathbf{y} = \\mathbf{A}\\mathbf{p}$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "$\\mathbf{A}^T \\mathbf{A} \\mathbf{p} = \\mathbf{A}^T \\mathbf{y}$" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "class AjusteReta(Misfit):\n", " def __init__(self, x, y):\n", " super(AjusteReta, self).__init__(data=y, nparams=2, islinear=True)\n", " self.x = x\n", " \n", " def predicted(self, p):\n", " a, b = p\n", " return a*self.x + b\n", " \n", " def jacobian(self, p):\n", " jac = np.empty((self.ndata, self.nparams))\n", " jac[:, 0] = self.x\n", " jac[:, 1] = 1\n", " return jac" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "solver = AjusteReta(x, y)" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "solver.fit()" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "solver.estimate_" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "solver.predicted()" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "solver.hessian(None)" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "solver.gradient(None)" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "plt.plot(x, y, '.k', x, solver.predicted(), '-r')" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "solver.config('newton', initial=[0, 0]).fit()" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "solver.estimate_" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "solver.config('levmarq', initial=[0, 0]).fit()" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "solver.estimate_" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "solver.config('acor', bounds=[0, 10, -1000, 1000]).fit()" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "solver.estimate_" ] } ], "metadata": { "kernelspec": { "display_name": "Python 2", "language": "python", "name": "python2" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 2 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython2", "version": "2.7.9" } }, "nbformat": 4, "nbformat_minor": 0 }