Note
Click here to download the full example code
Inversion: Linear ProblemΒΆ
Here we go over the basics of creating a linear problem and inversion.

Out:
SimPEG.Survey assigned new std of 1.00%
SimPEG.DataMisfit.l2_DataMisfit assigning default eps of 1e-5 * ||dobs||
SimPEG.InvProblem will set Regularization.mref to m0.
SimPEG.InvProblem is setting bfgsH0 to the inverse of the eval2Deriv.
***Done using same Solver and solverOpts as the problem***
model has any nan: 0
============================ Inexact Gauss Newton ============================
# beta phi_d phi_m f |proj(x-g)-x| LS Comment
-----------------------------------------------------------------------------
x0 has any nan: 0
0 1.40e+02 7.99e+04 0.00e+00 7.99e+04 3.59e+05 0
1 1.40e+02 3.36e+04 9.54e-01 3.37e+04 1.58e+05 0
2 1.40e+02 2.13e+04 2.76e+00 2.17e+04 7.99e+04 0
3 1.40e+02 7.57e+03 1.14e+01 9.17e+03 7.47e+04 0 Skip BFGS
4 1.40e+02 6.13e+03 1.12e+01 7.71e+03 7.55e+04 0
5 1.40e+02 5.52e+03 1.32e+01 7.38e+03 7.33e+04 0
6 1.40e+02 5.29e+03 1.35e+01 7.18e+03 8.09e+04 0
7 1.40e+02 5.11e+03 1.38e+01 7.05e+03 7.76e+04 0
8 1.40e+02 4.96e+03 1.39e+01 6.91e+03 7.13e+04 0
9 1.40e+02 3.78e+03 1.67e+01 6.12e+03 7.95e+04 0
10 1.40e+02 3.74e+03 1.66e+01 6.07e+03 7.72e+04 0
11 1.40e+02 3.69e+03 1.68e+01 6.05e+03 7.22e+04 0 Skip BFGS
12 1.40e+02 3.67e+03 1.69e+01 6.04e+03 7.78e+04 0
13 1.40e+02 3.67e+03 1.69e+01 6.03e+03 7.59e+04 0
14 1.40e+02 3.67e+03 1.69e+01 6.03e+03 7.56e+04 0
15 1.40e+02 3.28e+02 1.84e+01 2.91e+03 8.13e+03 0 Skip BFGS
16 1.40e+02 3.23e+02 1.84e+01 2.90e+03 4.63e+03 0
17 1.40e+02 3.27e+02 1.84e+01 2.90e+03 4.02e+03 0
18 1.40e+02 3.02e+02 1.85e+01 2.90e+03 3.51e+03 0 Skip BFGS
19 1.40e+02 3.19e+02 1.84e+01 2.90e+03 3.70e+03 0
20 1.40e+02 3.59e+02 1.79e+01 2.87e+03 3.96e+03 0 Skip BFGS
21 1.40e+02 3.59e+02 1.79e+01 2.87e+03 3.19e+03 0
22 1.40e+02 3.58e+02 1.79e+01 2.87e+03 2.76e+03 0 Skip BFGS
23 1.40e+02 3.56e+02 1.79e+01 2.87e+03 3.18e+03 0
24 1.40e+02 3.55e+02 1.79e+01 2.87e+03 2.89e+03 0 Skip BFGS
25 1.40e+02 3.56e+02 1.79e+01 2.87e+03 4.89e+03 0
26 1.40e+02 3.57e+02 1.79e+01 2.87e+03 3.66e+03 0
27 1.40e+02 3.44e+02 1.80e+01 2.87e+03 2.59e+03 0 Skip BFGS
28 1.40e+02 3.44e+02 1.80e+01 2.87e+03 2.60e+03 0
29 1.40e+02 3.44e+02 1.80e+01 2.87e+03 2.58e+03 0
30 1.40e+02 3.29e+02 1.81e+01 2.86e+03 2.44e+02 0 Skip BFGS
31 1.40e+02 3.29e+02 1.81e+01 2.86e+03 2.45e+02 0
32 1.40e+02 3.25e+02 1.81e+01 2.86e+03 3.78e+02 0 Skip BFGS
33 1.40e+02 3.25e+02 1.81e+01 2.86e+03 3.68e+02 0
34 1.40e+02 3.25e+02 1.81e+01 2.86e+03 2.77e+02 0 Skip BFGS
35 1.40e+02 3.25e+02 1.81e+01 2.86e+03 3.03e+02 0
36 1.40e+02 3.25e+02 1.81e+01 2.86e+03 1.89e+02 0 Skip BFGS
37 1.40e+02 3.25e+02 1.81e+01 2.86e+03 1.81e+02 0
38 1.40e+02 3.25e+02 1.81e+01 2.86e+03 1.86e+02 0 Skip BFGS
39 1.40e+02 3.25e+02 1.81e+01 2.86e+03 1.83e+02 0
40 1.40e+02 3.26e+02 1.81e+01 2.86e+03 1.35e+02 0 Skip BFGS
41 1.40e+02 3.27e+02 1.81e+01 2.86e+03 2.20e+02 0
42 1.40e+02 3.28e+02 1.81e+01 2.86e+03 2.49e+02 0 Skip BFGS
43 1.40e+02 3.27e+02 1.81e+01 2.86e+03 1.78e+02 0
44 1.40e+02 3.27e+02 1.81e+01 2.86e+03 2.77e+02 0
45 1.40e+02 3.27e+02 1.81e+01 2.86e+03 1.04e+02 0 Skip BFGS
46 1.40e+02 3.27e+02 1.81e+01 2.86e+03 1.05e+02 0
47 1.40e+02 3.27e+02 1.81e+01 2.86e+03 5.44e+01 0 Skip BFGS
48 1.40e+02 3.27e+02 1.81e+01 2.86e+03 6.42e+01 0
49 1.40e+02 3.27e+02 1.81e+01 2.86e+03 6.53e+01 0 Skip BFGS
50 1.40e+02 3.27e+02 1.81e+01 2.86e+03 6.42e+01 0
51 1.40e+02 3.27e+02 1.81e+01 2.86e+03 6.34e+01 0 Skip BFGS
52 1.40e+02 3.27e+02 1.81e+01 2.86e+03 6.13e+01 0
53 1.40e+02 3.26e+02 1.81e+01 2.86e+03 1.30e+02 0 Skip BFGS
54 1.40e+02 3.27e+02 1.81e+01 2.86e+03 4.03e+01 0
55 1.40e+02 3.27e+02 1.81e+01 2.86e+03 3.23e+01 0
56 1.40e+02 3.27e+02 1.81e+01 2.86e+03 3.04e+01 0
57 1.40e+02 3.27e+02 1.81e+01 2.86e+03 3.10e+01 0 Skip BFGS
58 1.40e+02 3.27e+02 1.81e+01 2.86e+03 3.02e+01 0
59 1.40e+02 3.27e+02 1.81e+01 2.86e+03 3.39e+01 0 Skip BFGS
60 1.40e+02 3.27e+02 1.81e+01 2.86e+03 3.30e+01 0
------------------------- STOP! -------------------------
1 : |fc-fOld| = 2.5879e-05 <= tolF*(1+|f0|) = 7.9851e+03
1 : |xc-x_last| = 1.2302e-04 <= tolX*(1+|x0|) = 1.0000e-01
0 : |proj(x-g)-x| = 3.3003e+01 <= tolG = 1.0000e-01
0 : |proj(x-g)-x| = 3.3003e+01 <= 1e3*eps = 1.0000e-02
1 : maxIter = 60 <= iter = 60
------------------------- DONE! -------------------------
/Users/lindseyjh/git/simpeg/simpeg/examples/01-basic/plot_inversion_linear.py:84: UserWarning: Matplotlib is currently using agg, which is a non-GUI backend, so cannot show the figure.
plt.show()
from __future__ import print_function
import numpy as np
from SimPEG import Mesh
from SimPEG import Problem
from SimPEG import Survey
from SimPEG import DataMisfit
from SimPEG import Directives
from SimPEG import Optimization
from SimPEG import Regularization
from SimPEG import InvProblem
from SimPEG import Inversion
import matplotlib.pyplot as plt
def run(N=100, plotIt=True):
np.random.seed(1)
mesh = Mesh.TensorMesh([N])
nk = 20
jk = np.linspace(1., 60., nk)
p = -0.25
q = 0.25
def g(k):
return (
np.exp(p*jk[k]*mesh.vectorCCx) *
np.cos(np.pi*q*jk[k]*mesh.vectorCCx)
)
G = np.empty((nk, mesh.nC))
for i in range(nk):
G[i, :] = g(i)
mtrue = np.zeros(mesh.nC)
mtrue[mesh.vectorCCx > 0.3] = 1.
mtrue[mesh.vectorCCx > 0.45] = -0.5
mtrue[mesh.vectorCCx > 0.6] = 0
prob = Problem.LinearProblem(mesh, G=G)
survey = Survey.LinearSurvey()
survey.pair(prob)
survey.makeSyntheticData(mtrue, std=0.01)
M = prob.mesh
reg = Regularization.Tikhonov(mesh, alpha_s=1., alpha_x=1.)
dmis = DataMisfit.l2_DataMisfit(survey)
opt = Optimization.InexactGaussNewton(maxIter=60)
invProb = InvProblem.BaseInvProblem(dmis, reg, opt)
directives = [
Directives.BetaEstimate_ByEig(beta0_ratio=1e-2),
Directives.TargetMisfit()
]
inv = Inversion.BaseInversion(invProb, directiveList=directives)
m0 = np.zeros_like(survey.mtrue)
mrec = inv.run(m0)
if plotIt:
fig, axes = plt.subplots(1, 2, figsize=(12*1.2, 4*1.2))
for i in range(prob.G.shape[0]):
axes[0].plot(prob.G[i, :])
axes[0].set_title('Columns of matrix G')
axes[1].plot(M.vectorCCx, survey.mtrue, 'b-')
axes[1].plot(M.vectorCCx, mrec, 'r-')
axes[1].legend(('True Model', 'Recovered Model'))
axes[1].set_ylim([-2, 2])
return prob, survey, mesh, mrec
if __name__ == '__main__':
run()
plt.show()
Total running time of the script: ( 0 minutes 6.922 seconds)