算法艺术创作
algorithmic-art
通过代码和可调参数创作生成艺术与交互式视觉效果。
simpeg【设计与创意】Simulation and Parameter Estimation in Geophysics. Framework for geophysical forward modeling and inversion. Use when the agent needs to: (1) Run geophysical inversions (DC resistivity, magnetics, gravity, EM), (2) Create forward models for potential fields or electromagnetic methods, (3) Build survey geometries and receiver configurations, (4) Desig…
独立 GitHub 快照 · 自动分类 · 以原作者文档为准
from discretize import TensorMesh
from simpeg.electromagnetics.static import resistivity as dc
from simpeg import maps, data_misfit, regularization, optimization
from simpeg import inverse_problem, inversion, directives
import numpy as np
# Create mesh
hx, hz = np.ones(100) * 10, np.ones(50) * 5
mesh = TensorMesh([hx, hz], origin='CN')
# Forward model
simulation = dc.Simulation2DNodal(mesh, survey=survey, sigmaMap=maps.ExpMap(mesh))
dpred = simulation.dpred(model)
# Inversion
dmis = data_misfit.L2DataMisfit(data=data, simulation=simulation)
reg = regularization.WeightedLeastSquares(mesh)
opt = optimization.InexactGaussNewton(maxIter=20)
inv_prob = inverse_problem.BaseInvProblem(dmis, reg, opt)
inv = inversion.BaseInversion(inv_prob, directiveList=[...])
mrec = inv.run(m0)
| Class | Purpose |
|---|---|
TensorMesh, TreeMesh | Discretization (regular grid, adaptive octree) |
Survey | Data acquisition geometry |
Simulation | Forward modeling engine |
Data | Observed/predicted data container |
InvProblem | Combines misfit, regularization, optimization |
from discretize import TensorMesh
# 2D mesh (x, z) - centered in x, top at z=0
hx, hz = np.ones(100) * 20, np.ones(50) * 10
mesh = TensorMesh([hx, hz], origin='CN')
# 3D mesh
mesh = TensorMesh([np.ones(50)*25, np.ones(50)*25, np.ones(30)*10], origin='CCN')
from simpeg.electromagnetics.static import resistivity as dc
elec_locs = np.c_[np.linspace(-95, 95, 20), np.zeros(20)]
source_list = []
for i in range(17): # dipole-dipole
rx = dc.receivers.Dipole(elec_locs[[i+2]], elec_locs[[i+3]])
src = dc.sources.Dipole([rx], elec_locs[i], elec_locs[i+1])
source_list.append(src)
survey = dc.Survey(source_list)
model = np.ones(mesh.nC) * 100 # 100 ohm-m
simulation = dc.Simulation2DNodal(mesh, survey=survey, sigmaMap=maps.ExpMap(mesh))
dpred = simulation.dpred(np.log(1/model)) # input: log(conductivity)
from simpeg import data_misfit, regularization, optimization
from simpeg import inverse_problem, inversion, directives, data
obs_data = data.Data(survey, dobs=dobs, standard_deviation=0.05*np.abs(dobs))
dmis = data_misfit.L2DataMisfit(data=obs_data, simulation=simulation)
reg = regularization.WeightedLeastSquares(mesh, alpha_s=1e-4, alpha_x=1, alpha_z=1)
opt = optimization.InexactGaussNewton(maxIter=20)
inv_prob = inverse_problem.BaseInvProblem(dmis, reg, opt)
dir_list = [directives.BetaSchedule(coolingFactor=2), directives.TargetMisfit()]
inv = inversion.BaseInversion(inv_prob, directiveList=dir_list)
mrec = inv.run(m0)
| Map | Description | Use Case |
|---|---|---|
IdentityMap | No transformation | Susceptibility, density |
ExpMap | exp(m) | Log-parameterized conductivity |
ReciprocalMap | 1/m | Resistivity to conductivity |
Wires | Split model | Joint inversion |
| Property | Typical Range | Units |
|---|---|---|
| Resistivity | 1 - 10000 | ohm-m |
| Conductivity | 0.0001 - 1 | S/m |
| Susceptibility | 0 - 0.1 | SI |
| Density contrast | -1 to 1 | g/cc |
| Scenario | Recommendation |
|---|---|
| Multi-method geophysical inversion (DC, magnetics, gravity, EM) | SimPEG - broadest method coverage |
| Near-surface ERT with standard arrays | pyGIMLi - simpler API, built-in array support |
| ERT-focused inversion with GUI export | pyGIMLi - better ERT-specific tooling |
| Custom forward modelling with flexible physics | SimPEG - modular design, easy to extend |
| Joint inversion of multiple geophysical datasets | SimPEG - built-in support via Wires maps |
| Commercial ERT processing | Res2DInv / Res3DInv - industry standard |
Choose SimPEG when: You need a unified framework for multiple geophysical methods, custom forward operators, or research-grade flexibility. Its modular design (mesh + survey + simulation + inversion) suits complex and non-standard problems.
Avoid SimPEG when: You only need standard ERT inversion (pyGIMLi is faster to set up), or you need a turnkey commercial solution.
TensorMesh or TreeMesh with appropriate cell sizesdc.Simulation2DNodal with mesh, survey, and ExpMapdata.Data with standard deviationsL2DataMisfit, WeightedLeastSquares regularization, and optimizerBetaSchedule, TargetMisfitBaseInvProblem and BaseInversioninv.run(m0) using a homogeneous starting model