{ "metadata": { "name": "" }, "nbformat": 3, "nbformat_minor": 0, "worksheets": [ { "cells": [ { "cell_type": "code", "collapsed": false, "input": [ "import SimPEG\n", "from SimPEG.mesh import TensorMesh\n", "from SimPEG.regularization import Regularization\n", "import SimPEG.inverse as inverse\n", "from SimPEG.inverse import Minimize\n", "import numpy as np\n", "import scipy.sparse as sp" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 1 }, { "cell_type": "code", "collapsed": false, "input": [ "from SimPEG.forward.LinearProblem import example as LinExample\n", "\n", "prob, m_true = LinExample(1000)\n", "M = prob.mesh\n", "\n", "reg = Regularization(M)\n", "opt = inverse.InexactGaussNewton(maxIter=100,debug=False,LSreduction=0.3,maxIterLS=50)\n", "inv = inverse.Inversion(prob,reg,opt,beta0=1e-4,maxIter=2)\n", "m0 = np.zeros_like(m_true)\n", "\n", "mrec = inv.run(m0)\n", "\n", "plt.plot(M.vectorCCx, m_true, 'b-')\n", "plt.plot(M.vectorCCx, mrec, 'r-')" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "=================== Inexact Gauss Newton ===================\n", " # beta phi_d phi_m f |g| LS \n", "------------------------------------------------------------\n", " 0 1.00e-04 9.53e+02 0.00e+00 9.53e+02 8.99e+03 0 \n", " 1 1.00e-04 6.23e-01 2.62e+04 3.24e+00 1.53e+01 0 \n", " 2 1.00e-04 8.70e-02 2.29e+04 2.37e+00 1.15e+02 0 \n", " 3 1.00e-04 4.58e-02 2.28e+04 2.32e+00 1.02e+00 0 \n", " 4 1.00e-04 3.59e-02 2.27e+04 2.31e+00 1.49e+01 0 " ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n", " 5 1.00e-04 2.80e-02 2.27e+04 2.30e+00 5.71e-01 0 \n", " 6 1.00e-04 2.46e-02 2.27e+04 2.30e+00 1.50e+01 0 \n", " 7 1.00e-04 2.17e-02 2.27e+04 2.29e+00 3.62e-01 0 \n", " 8 1.00e-04 2.05e-02 2.27e+04 2.29e+00 2.61e-01 0 " ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n", " 9 1.00e-04 1.91e-02 2.27e+04 2.29e+00 2.59e-01 0 \n", " 10 1.00e-04 1.85e-02 2.27e+04 2.29e+00 1.98e-01 0 \n", " 11 1.00e-04 1.76e-02 2.27e+04 2.29e+00 2.06e-01 0 \n", " 12 1.00e-04 1.73e-02 2.27e+04 2.29e+00 1.64e-01 0 " ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n", " 13 1.00e-04 1.66e-02 2.27e+04 2.29e+00 1.74e-01 0 \n", " 14 1.00e-04 1.63e-02 2.27e+04 2.29e+00 2.93e-01 0 \n", " 15 1.00e-04 1.58e-02 2.27e+04 2.29e+00 1.51e-01 0 \n", " 16 1.00e-04 1.56e-02 2.27e+04 2.29e+00 1.22e-01 0 " ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n", " 17 1.00e-04 1.51e-02 2.27e+04 2.29e+00 1.33e-01 0 \n", " 18 1.00e-04 1.50e-02 2.27e+04 2.29e+00 1.07e-01 0 \n", " 19 1.00e-04 1.46e-02 2.27e+04 2.29e+00 5.30e-01 0 \n", " 20 1.00e-04 1.45e-02 2.27e+04 2.28e+00 9.43e-02 0 " ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n", "------------------------- STOP! -------------------------\n", "1 : |fc-fOld| = 2.2048e-04 <= tolF*(1+|f0|) = 9.5415e+01\n", "1 : |xc-x_last| = 7.2682e-03 <= tolX*(1+|x0|) = 1.0000e-01\n", "1 : |g| = 9.4320e-02 <= tolG = 1.0000e-01\n", "0 : |g| = 9.4320e-02 <= 1e3*eps = 1.0000e-02\n", "0 : maxIter = 100 <= iter = 20\n", "------------------------- DONE! -------------------------\n", "20" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n" ] }, { "metadata": {}, "output_type": "display_data", "png": "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\nAAAASUVORK5CYII=\n", "text": [ "" ] } ], "prompt_number": 17 }, { "cell_type": "code", "collapsed": false, "input": [ "def Quadratic(x, return_g=True, return_H=True):\n", " A = sp.identity(2)\n", " b = np.array([-5,-5])\n", " f = 0.5 * x.dot( A.dot(x)) + b.dot( x )\n", " out = (f,)\n", " if return_g:\n", " g = A.dot(x) + b\n", " out += (g,)\n", " if return_H:\n", " H = A\n", " out += (H,)\n", " return out if len(out) > 1 else out[0]\n", "\n", "# FUN = SimPEG.tests.Rosenbrock\n", "FUN = Quadratic\n", "\n", "f = FUN(np.array([1,2]))\n", "print f\n", "n = 50\n", "l = -10\n", "u = 10\n", "I = np.zeros((n,n))\n", "X = np.linspace(l,u,n)\n", "for i, x in enumerate(X):\n", " for j, y in enumerate(X):\n", " f, g, H = FUN(np.array([x,y]))\n", " I[i,j] = f\n", "\n", "colorbar(contourf(X,X, I.T))\n", "\n", "GN = inverse.GaussNewton()\n", "xopt = GN.minimize(FUN,np.array([0,0]))\n", "print xopt" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "(-12.5, array([-4., -3.]), <2x2 sparse matrix of type ''\n", "\twith 2 stored elements (1 diagonals) in DIAgonal format>)\n", "======== Gauss Newton ========" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n", " # f |g| LS \n", "------------------------------\n", " 0 0.00e+00 7.07e+00 0 \n", " 1 -2.50e+01 0.00e+00 0 \n", "------------------------- STOP! -------------------------\n", "0 : |fc-fOld| = 2.5000e+01 <= tolF*(1+|f0|) = 1.0000e-01\n", "0 : |xc-x_last| = 7.0711e+00 <= tolX*(1+|x0|) = 1.0000e-01\n", "1 : |g| = 0.0000e+00 <= tolG = 1.0000e-01\n", "1 : |g| = 0.0000e+00 <= 1e3*eps = 1.0000e-02\n", "0 : maxIter = 20 <= iter = 1\n", "------------------------- DONE! -------------------------\n", "[ 5. 5.]\n" ] }, { "output_type": "stream", "stream": "stderr", "text": [ "/Users/rowan/Library/Enthought/Canopy_64bit/User/lib/python2.7/site-packages/scipy/sparse/linalg/dsolve/linsolve.py:87: SparseEfficiencyWarning: spsolve requires A be CSC or CSR matrix format\n", " warn('spsolve requires A be CSC or CSR matrix format', SparseEfficiencyWarning)\n" ] }, { "metadata": {}, "output_type": "display_data", "png": "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\nBFYAAAAASUVORK5CYII=\n", "text": [ "" ] } ], "prompt_number": 3 }, { "cell_type": "code", "collapsed": false, "input": [ "opt = inverse.ProjectedGradient(maxIter=50,maxStep=np.inf, maxIterLS=20, debug=False)\n", "opt.remember('f')\n", "opt.lower = np.array([-2,-1])\n", "opt.upper = np.array([2,10])\n", "opt.minimize(FUN,np.array([50,0]))\n", "plot(opt.recall('f'))" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "===================== Projected Gradient =====================\n", " # f |g| LS itType aSet bSet Comment\n", "-------------------------------------------------------------\n", " 0 -8.00e+00 5.83e+00 0 SD 1 1 \n", " 1 -2.05e+01 3.00e+00 0 SD 1 1 \n", " 2 -2.05e+01 3.00e+00 0 .CG. 1 1 \n", " 3 -2.05e+01 3.00e+00 0 .CG. 1 1 \n", " 4 -2.05e+01 3.00e+00 0 .CG. 1 1 \n", " 5 -2.05e+01 3.00e+00 0 .CG. 1 1 \n", " 6 -2.05e+01 3.00e+00 0 .CG. 1 1 \n", " 7 -2.05e+01 3.00e+00 0 .CG. 1 1 \n", " 8 -2.05e+01 3.00e+00 0 .CG. 1 1 \n", " 9 -2.05e+01 3.00e+00 0 .CG. 1 1 \n", " 10 -2.05e+01 3.00e+00 0 .CG. 1 1 \n", " 11 -2.05e+01 3.00e+00 0 .CG. 1 1 \n", " 12 -2.05e+01 3.00e+00 0 .CG. 1 1 \n", " 13 -2.05e+01 3.00e+00 0 .CG. 1 1 \n", " 14 -2.05e+01 3.00e+00 0 .CG. 1 1 \n", " 15 -2.05e+01 3.00e+00 0 .CG. 1 1 \n", " 16 -2.05e+01 3.00e+00 0 .CG. 1 1 \n", " 17 -2.05e+01 3.00e+00 0 .CG. 1 1 \n", " 18 -2.05e+01 3.00e+00 0 .CG. 1 1 \n", " 19 -2.05e+01 3.00e+00 0 .CG. 1 1 \n", " 20 -2.05e+01 3.00e+00 0 .CG. 1 1 \n", " 21 -2.05e+01 3.00e+00 0 .CG. 1 1 \n", " 22 -2.05e+01 3.00e+00 0 .CG. 1 1 \n", " 23 -2.05e+01 3.00e+00 0 .CG. 1 1 \n", " 24 -2.05e+01 3.00e+00 0 .CG. 1 1 \n", " 25 -2.05e+01 3.00e+00 0 .CG. 1 1 \n", " 26 -2.05e+01 3.00e+00 0 .CG. 1 1 \n", " 27 -2.05e+01 3.00e+00 0 .CG. 1 1 \n", " 28 -2.05e+01 3.00e+00 0 .CG. 1 1 \n", " 29 -2.05e+01 3.00e+00 0 .CG. 1 1 \n", " 30 -2.05e+01 3.00e+00 0 .CG. 1 1 \n", " 31 -2.05e+01 3.00e+00 0 .CG. 1 1 \n", " 32 -2.05e+01 3.00e+00 0 .CG. 1 1 \n", " 33 -2.05e+01 3.00e+00 0 .CG. 1 1 \n", " 34 -2.05e+01 3.00e+00 0 .CG. 1 1 " ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n", " 35 -2.05e+01 3.00e+00 0 .CG. 1 1 \n", " 36 -2.05e+01 3.00e+00 0 .CG. 1 1 \n", " 37 -2.05e+01 3.00e+00 0 .CG. 1 1 \n", " 38 -2.05e+01 3.00e+00 0 .CG. 1 1 \n", " 39 -2.05e+01 3.00e+00 0 .CG. 1 1 \n", " 40 -2.05e+01 3.00e+00 0 .CG. 1 1 \n", " 41 -2.05e+01 3.00e+00 0 .CG. 1 1 \n", " 42 -2.05e+01 3.00e+00 0 .CG. 1 1 \n", " 43 -2.05e+01 3.00e+00 0 .CG. 1 1 \n", " 44 -2.05e+01 3.00e+00 0 .CG. 1 1 \n", " 45 -2.05e+01 3.00e+00 0 .CG. 1 1 \n", " 46 -2.05e+01 3.00e+00 0 .CG. 1 1 \n", " 47 -2.05e+01 3.00e+00 0 .CG. 1 1 \n", " 48 -2.05e+01 3.00e+00 0 .CG. 1 1 \n", " 49 -2.05e+01 3.00e+00 0 .CG. 1 1 \n", " 50 -2.05e+01 3.00e+00 0 .CG. 1 1 \n", "------------------------- STOP! -------------------------\n", "1 : |fc-fOld| = 0.0000e+00 <= tolF*(1+|f0|) = 9.0000e-01\n", "1 : |xc-x_last| = 0.0000e+00 <= tolX*(1+|x0|) = 3.0000e-01\n", "0 : |g| = 2.0000e+00 <= tolG = 1.0000e-01\n", "0 : |g| = 3.0000e+00 <= 1e3*eps = 1.0000e-02\n", "1 : maxIter = 50 <= iter = 50\n", "0 : probSize = 2 <= bindingSet = 1\n", "------------------------- DONE! -------------------------\n" ] }, { "metadata": {}, "output_type": "pyout", "prompt_number": 4, "text": [ "[]" ] }, { "metadata": {}, "output_type": "display_data", "png": "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\nVq1evVo9PT1OLMMR3/72t9Xa2nrV2Nq1a5WVlaV3331Xt956q5555hmHVnd93XDDDVqxYoU6Ozv1\n4osv6sknn1RfX19S7seIESP02muvaf/+/dq+fbueffZZvfvuu0m5F5etXLlSkydPlmEYkpL3/xPD\nMBQOh/XWW2/1f8pArHtx3YP+P//5jySpoqJC48ePV01NjXbt2nW9l+GY6dOnKz09/aqxjo4OzZs3\nT8OHD9cjjzySNPsxduxYFRUVSZJuueUW5eXlaffu3Um7H6NGjZIknTx5Uh9//LGGDx+etHvxwQcf\n6OWXX9Z3vvMdXe4uJ+teSNL/d9hj3YvrHvS7d+9WTk5O/9eTJ09We3v79V6Gq1y5Jzk5OUn52UCH\nDx9WZ2enSktLk3Y/Ll68qMLCQmVkZOj73/++srKyknYvFi1apKefflo+3ycRlax7YRiGqqqqVF9f\nr02bNkmKfS+u+YYp2C/Z74f39fXpa1/7mlasWKHRo0cn7X74fD799a9/1fvvv6977rlHd955Z1Lu\nRUtLiz7/+c+ruLj4qo8+SMa9kKQ33nhD48aN06FDhxQMBlVaWhrzXlz3in7KlCn629/+1v91Z2en\npk2bdr2X4SpTpkzRoUOHJEmHDh3SlClTHF7R9fPRRx9pzpw5mjt3rmbPni0pufdDunTz7Z577tGu\nXbuSci/efPNNbdq0SV/+8pf10EMP6S9/+Yvmzp2blHshSePGjZMk5ebm6r777tPmzZtj3ovrHvQ3\n3XSTpEu/efP++++rra1NU6dOvd7LcJWpU6dqw4YNOnPmjDZs2JA03/hM09S8efP01a9+VQsXLuwf\nT8b96OnpUW9vryTpxIkTevXVVzV79uyk3IumpiYdPXpU7733nv7whz+oqqpKv//975NyL06fPq2+\nvj5J0vHjx7VlyxbNmjUr9r2I+b20FgiHw2ZOTo45YcIEc+XKlU4swTEPPvigOW7cODM1NdW89dZb\nzQ0bNpgffvihed9995mZmZnm7Nmzzb6+PqeXeV3s3LnTNAzDLCwsNIuKisyioiLzlVdeScr9OHDg\ngFlcXGwWFBSYNTU15m9/+1vTNM2k3IsrhcNhMxgMmqaZnHvxj3/8wywsLDQLCwvNqqoq89lnnzVN\nM/a94A1TAOBx/ClBAPA4gh4API6gBwCPI+gBwOMIegDwOIIeADyOoAcAjyPoAcDj/gvEIhLEY38C\n3QAAAABJRU5ErkJggg==\n", "text": [ "" ] } ], "prompt_number": 4 }, { "cell_type": "code", "collapsed": false, "input": [ "opt = inverse.ProjectedGradient(maxIter=50, maxStep=0.3,debug=False, maxIterLS=20, tolCG=1e-5, maxIterCG=1000)\n", "opt.lower, opt.upper = -0.4, 0.9\n", "opt.remember('f', 'xc', ('norm_g', lambda M: np.linalg.norm(M.g)), 'phi_d', 'phi_m')\n", "inv = inverse.Inversion(prob,reg,opt,beta0=1e-4)\n", "m0 = np.zeros_like(m_true)\n", "mrecB = inv.run(m0)" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "==================================== Projected Gradient ====================================\n", " # beta phi_d phi_m f |g| LS itType aSet bSet Comment\n", "-------------------------------------------------------------------------------------------\n", " 0 1.00e-04 9.78e+02 0.00e+00 9.78e+02 7.08e+03 0 SD 0 0 \n", " 1 1.00e-04 9.48e+02 3.40e-02 9.48e+02 2.32e+02 8 SD 0 0 \n", " 2 1.00e-04 5.30e+02 1.47e+03 5.30e+02 1.73e+02 0 .CG. 0 0 " ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n", " 3 1.00e-04 2.32e+02 5.87e+03 2.33e+02 1.15e+02 0 .CG. 0 0 " ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n", " 4 1.00e-04 1.30e+02 9.16e+03 1.31e+02 1.19e+03 1 .CG. 21 21 " ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n", " 5 1.00e-04 1.29e+02 9.16e+03 1.30e+02 6.04e+02 10 SD 21 0 \n", " 6 1.00e-04 6.84e+01 1.30e+04 6.97e+01 2.64e+03 1 .CG. 59 59 " ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n", " 7 1.00e-04 6.47e+01 1.30e+04 6.60e+01 9.40e+02 9 SD 59 0 \n", " 8 1.00e-04 5.79e+01 1.39e+04 5.93e+01 1.83e+03 3 .CG. 89 85 " ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n", " 9 1.00e-04 5.78e+01 1.39e+04 5.92e+01 1.75e+03 9 SD 85 7 \n", " 10 1.00e-04 5.68e+01 1.39e+04 5.81e+01 1.17e+03 10 SD 11 8 Stop SD\n", " 11 1.00e-04 5.67e+01 1.39e+04 5.81e+01 1.18e+03 12 .CG. 89 86 " ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n", " 12 1.00e-04 5.61e+01 1.39e+04 5.75e+01 6.03e+02 10 SD 86 15 Stop SD\n", " 13 1.00e-04 3.93e+01 2.72e+04 4.20e+01 6.11e+03 0 .CG. 216 157 " ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n", " 14 1.00e-04 1.76e+01 2.72e+04 2.03e+01 9.85e+02 8 SD 157 6 \n", " 15 1.00e-04 1.71e+01 2.72e+04 1.99e+01 4.69e+02 11 SD 8 8 \n", " 16 1.00e-04 1.71e+01 2.72e+04 1.98e+01 4.28e+02 11 SD 62 22 Stop SD\n", " 17 1.00e-04 1.71e+01 2.71e+04 1.98e+01 4.04e+02 7 .CG. 199 165 " ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n", " 18 1.00e-04 1.70e+01 2.71e+04 1.97e+01 4.59e+01 12 SD 165 164 \n", " 19 1.00e-04 1.70e+01 2.71e+04 1.97e+01 4.57e+01 15 SD 176 176 \n", " 20 1.00e-04 1.70e+01 2.71e+04 1.97e+01 6.65e+01 14 SD 183 182 Stop SD\n", " 21 1.00e-04 1.69e+01 2.72e+04 1.97e+01 2.83e+02 8 .CG. 213 86 " ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n", " 22 1.00e-04 1.69e+01 2.72e+04 1.96e+01 7.42e+01 13 SD 86 73 \n", " 23 1.00e-04 1.69e+01 2.72e+04 1.96e+01 4.78e+01 14 SD 187 187 \n", " 24 1.00e-04 1.69e+01 2.72e+04 1.96e+01 4.35e+01 15 SD 210 209 Stop SD\n", " 25 1.00e-04 9.31e+00 3.57e+04 1.29e+01 9.48e+02 1 .CG. 235 80 " ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n", " 26 1.00e-04 8.92e+00 3.57e+04 1.25e+01 4.85e+02 11 SD 80 13 \n", " 27 1.00e-04 8.88e+00 3.57e+04 1.24e+01 4.15e+02 11 SD 48 21 Stop SD\n", " 28 1.00e-04 8.80e+00 3.56e+04 1.24e+01 9.73e+01 8 .CG. 209 180 " ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n", " 29 1.00e-04 8.80e+00 3.56e+04 1.24e+01 2.17e+01 14 SD 180 180 \n", " 30 1.00e-04 8.80e+00 3.56e+04 1.24e+01 2.53e+01 16 SD 202 202 Stop SD\n", " 31 1.00e-04 8.78e+00 3.57e+04 1.23e+01 2.11e+02 7 .CG. 235 105 " ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n", " 32 1.00e-04 8.76e+00 3.57e+04 1.23e+01 1.41e+02 13 SD 105 56 \n", " 33 1.00e-04 8.75e+00 3.57e+04 1.23e+01 8.27e+01 13 SD 183 157 \n", " 34 1.00e-04 8.75e+00 3.57e+04 1.23e+01 1.89e+01 15 SD 182 182 \n", " 35 1.00e-04 8.75e+00 3.57e+04 1.23e+01 7.51e+01 13 SD 233 208 \n", " 36 1.00e-04 8.75e+00 3.57e+04 1.23e+01 2.09e+01 15 SD 208 208 Stop SD\n", " 37 1.00e-04 8.75e+00 3.57e+04 1.23e+01 2.74e+01 13 .CG. 234 227 " ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n", " 38 1.00e-04 8.75e+00 3.57e+04 1.23e+01 3.25e+01 15 SD 227 227 Stop SD\n", " 39 1.00e-04 8.65e+00 3.60e+04 1.23e+01 3.73e+02 5 .CG. 236 91 " ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n", " 40 1.00e-04 8.63e+00 3.60e+04 1.22e+01 3.37e+02 12 SD 91 26 \n", " 41 1.00e-04 8.57e+00 3.60e+04 1.22e+01 1.14e+02 12 SD 141 78 Stop SD\n", " 42 1.00e-04 8.57e+00 3.60e+04 1.22e+01 1.13e+02 14 .CG. 224 132 " ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n", " 43 1.00e-04 8.57e+00 3.60e+04 1.22e+01 6.28e+01 14 SD 138 116 Stop SD\n", " 44 1.00e-04 8.57e+00 3.60e+04 1.22e+01 6.34e+01 17 .CG. 214 192 " ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n", " 45 1.00e-04 8.56e+00 3.60e+04 1.22e+01 4.77e+01 14 SD 208 201 Stop SD\n", " 46 1.00e-04 8.56e+00 3.60e+04 1.22e+01 4.84e+01 16 .CG. 230 223 " ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n", " 47 1.00e-04 8.56e+00 3.60e+04 1.22e+01 3.88e+01 15 SD 225 211 Stop SD\n", " 48 1.00e-04 6.48e+00 4.91e+04 1.14e+01 1.51e+03 0 .CG. 264 170 " ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n", " 49 1.00e-04 5.17e+00 4.91e+04 1.01e+01 2.64e+02 10 SD 170 14 \n", " 50 1.00e-04 5.14e+00 4.91e+04 1.00e+01 1.04e+02 13 SD 16 16 \n", "------------------------- STOP! -------------------------\n", "1 : |fc-fOld| = 3.5178e-02 <= tolF*(1+|f0|) = 9.7931e+01\n", "1 : |xc-x_last| = 4.3861e-04 <= tolX*(1+|x0|) = 1.0000e-01\n", "0 : |g| = 1.7094e+01 <= tolG = 1.0000e-01\n", "0 : |g| = 1.0410e+02 <= 1e3*eps = 1.0000e-02\n", "1 : maxIter = 50 <= iter = 50\n", "0 : probSize = 1000 <= bindingSet = 16\n", "------------------------- DONE! -------------------------\n" ] } ], "prompt_number": 7 }, { "cell_type": "code", "collapsed": false, "input": [ "# First set up the figure, the axis, and the plot element we want to animate\n", "fig = plt.figure()\n", "ax = plt.axes()\n", "ax.plot(M.vectorCCx, m_true, 'b-')\n", "txt = plt.text(0.8,0.9,'')\n", "line, = ax.plot([], [], 'r-', lw=1)\n", "\n", "def animate(i):\n", " txt.set_text('iteration %d'%i)\n", " line.set_data(M.vectorCCx, np.array(opt.recall('xc')[i]))\n", "\n", "SimPEG.utils.animate(fig, animate, frames=len(opt.recall('xc')))" ], "language": "python", "metadata": {}, "outputs": [ { "html": [ "" ], "metadata": {}, "output_type": "pyout", "prompt_number": 14, "text": [ "" ] } ], "prompt_number": 14 }, { "cell_type": "code", "collapsed": false, "input": [ "plot(opt.recall('phi_m'))" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 13, "text": [ "[]" ] }, { "metadata": {}, "output_type": "display_data", "png": "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\n", "text": [ "" ] } ], "prompt_number": 13 }, { "cell_type": "code", "collapsed": false, "input": [], "language": "python", "metadata": {}, "outputs": [] } ], "metadata": {} } ] }