Note
Click here to download the full example code
VES inversion for a blocky model#
This tutorial shows how an built-in forward operator is used for inversion. A DC 1D (VES) modelling is used to generate data, noisify and invert them.
We import numpy, matplotlib and the 1D plotting function
import numpy as np
import pygimli as pg
from pygimli.physics import VESManager
some definitions before (model, data and error)
ab2 = np.logspace(-0.5, 2.5, 40) # AB/2 distance (current electrodes)
define a synthetic model and do a forward simulatin including noise
the forward operator can be called by f.response(model) or simply f(model)
synthModel = synthk + synres # concatenate thickness and resistivity
ves = VESManager()
rhoa, err = ves.simulate(synthModel, ab2=ab2, mn2=ab2/3,
noiseLevel=0.03, seed=1337)
7 [0.4825899923714223, 3.303908903637452, 8.495898121775843, 96.69006658660493, 508.39516916123904, 41.4920681563085, 835.2425040326069]
show estimated&synthetic models and data with model response in 2 subplots
fig, ax = pg.plt.subplots(ncols=2, figsize=(8, 6)) # two-column figure
ves.showModel(synthModel, ax=ax[0], label="synth", plot="semilogy", zmax=20)
ves.showModel(ves.model, ax=ax[0], label="model", zmax=20)
ves.showData(rhoa, ax=ax[1], label="data", color="C0", marker="x")
ves.showData(ves.inv.response, ax=ax[1], label="response", color="C1")

(<matplotlib.axes._subplots.AxesSubplot object at 0x7fa06fdceca0>, None)
Total running time of the script: ( 0 minutes 11.035 seconds)