{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Building a non-linear gravity inversion from scratch (almost)\n", "\n", "In this notebook, we'll build a non-linear gravity inversion to estimate the relief of a sedimentary basin. We'll implement smoothness regularization and see its effects on the solution. We'll also see how we can break the inversion by adding random noise, abusing regularization, and breaking the underlying assumptions." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Imports\n", "\n", "We'll use the basic scientific Python stack for this tutorial plus a custom module with the forward modelling function (based on the code from the [Harmonica](https://github.com/fatiando/harmonica) library)." ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", "import matplotlib.pyplot as plt\n", "import cheatcodes as cc " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This is a little trick to make the resolution of the matplotlib figures better for larger screens." ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "plt.rc(\"figure\", dpi=120)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Assumptions\n", "\n", "Here are some assumptions we'll work with:\n", "\n", "1. The basin is much larger in the y-dimension so we'll assume it's infinite (reducing the problem to 2D)\n", "1. The gravity disturbance is entirely due to the sedimentary basin\n", "1. The top of the basin is a flat surface at $z=0$\n", "1. The data are measured at a constant height of $z=1\\ m$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Making synthetic data\n", "\n", "First, we'll explore the forward modelling function and create some synthetic data." ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "(0, 100000.0)\n", "[ 10.10105917 18.81092435 29.38998081 42.16839388 57.51774684\n", " 75.85246428 97.63037844 123.35222519 153.55985009 188.83290654\n", " 229.78383989 277.05097454 331.28955675 393.1606554 463.31788573\n", " 542.39199706 630.97345373 729.59323554 838.70218841 958.64936255\n", " 1089.65988011 1231.81297121 1385.02090173 1549.00958058 1723.30167502\n", " 1907.20307243 2099.79350393 2299.92208393 2506.20842163 2717.04982321\n", " 2930.63493217 3144.96395261 3357.87537423 3567.07887609 3770.19383914\n", " 3964.79265602 4148.44780248 4318.78143888 4473.51615424 4610.52535757\n", " 4727.88177002 4823.90248153 4897.18910944 4946.66173395 4971.58548322\n", " 4971.58889307 4946.67346668 4897.21419639 4823.95117457 4727.97279851\n", " 4610.69145219 4473.81290687 4319.30099926 4149.33939015 3966.2923388\n", " 3772.66640115 3571.07472151 3364.2050895 3154.79214739 2945.59306685\n", " 2739.36473798 2538.83917762 2346.69270631 2165.50377716 1997.6945141\n", " 1845.45234455 1710.63077305 1594.63228888 1498.28126903 1421.69982545\n", " 1364.20386762 1324.23908356 1299.37606027 1286.37970806 1281.36048532\n", " 1280.00436832 1277.86656035 1270.70261956 1254.80221173 1227.28696229\n", " 1186.33602894 1131.31108729 1062.765288 982.33628338 892.53894688\n", " 796.4862351 697.57464821 599.17280554 504.34781951 415.65556423\n", " 335.00950302 263.63067355 202.0707732 150.29253113 107.78743462\n", " 73.71036175 47.0131077 26.56315486 11.23920733 0. ]\n" ] } ], "source": [ "depths, basin_boundaries = cc.synthetic_model()\n", "\n", "print(basin_boundaries)\n", "print(depths)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Plot the model." ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "cc.plot_prisms(depths, basin_boundaries)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Forward model some gravity data at a set of locations." ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "x = np.linspace(-5e3, 105e3, 60)\n", "density = -300 # kg/m³\n", "data = cc.forward_model(depths, basin_boundaries, density, x)\n", "\n", "plt.figure(figsize=(9, 3))\n", "plt.plot(x / 1000, data, \".k\")\n", "plt.xlabel(\"x [km]\")\n", "plt.ylabel(\"gravity disturbance [mGal]\")\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Calculating the Jacobian matrix\n", "\n", "The first step to most inverse problems is being able to calculate the Jacobian matrix. We'll do this for our problem by a first-order finite differences approximation. If you can get analytical derivatives, that's usually a lot better." ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [], "source": [ "def make_jacobian(parameters, basin_boundaries, density, x):\n", " \"\"\"\n", " Calculate the Jacobian matrix by finite differences.\n", " \"\"\"\n", " jacobian = np.empty((x.size, parameters.size))\n", " step = np.zeros_like(parameters)\n", " delta = 10\n", " for j in range(jacobian.shape[1]):\n", " step[j] += delta\n", " jacobian[:, j] = (\n", " (\n", " cc.forward_model(parameters + step, basin_boundaries, density, x)\n", " - cc.forward_model(parameters, basin_boundaries, density, x)\n", " ) \n", " / delta\n", " )\n", " step[j] = 0\n", " return jacobian" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Calculate and plot an example so we can see what this matrix looks like. We'll use a parameter vector with constant depths at first." ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "parameters = np.zeros(30) + 5000\n", "\n", "jacobian = make_jacobian(parameters, basin_boundaries, density, x)\n", "\n", "plt.figure()\n", "plt.imshow(jacobian)\n", "plt.colorbar(label=\"mGal/m\")\n", "plt.xlabel(\"columns\")\n", "plt.ylabel(\"rows\")\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Solve the inverse problem \n", "\n", "Now that we have a way of forward modelling and calculating the Jacobian matrix, we can implement the Gauss-Newton method for solving the non-linear inverse problem. The function below takes the input data, model configuration, and an initial estimate and outputs the estimated parameters and a list with the goal function value per iteration. " ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [], "source": [ "def basin2d_inversion(x, data, basin_boundaries, density, initial, max_iterations=10):\n", " \"\"\"\n", " Solve the inverse problem using the Gauss-Newton method.\n", " \"\"\"\n", " parameters = initial.astype(np.float64).copy() \n", " predicted = cc.forward_model(parameters, basin_boundaries, density, x)\n", " residuals = data - predicted\n", " goal_function = [np.linalg.norm(residuals)**2]\n", " for i in range(max_iterations): \n", " jacobian = make_jacobian(parameters, basin_boundaries, density, x)\n", " hessian = jacobian.T @ jacobian\n", " gradient = jacobian.T @ residuals\n", " deltap = np.linalg.solve(hessian, gradient)\n", " new_parameters = parameters + deltap\n", " predicted = cc.forward_model(new_parameters, basin_boundaries, density, x)\n", " residuals = data - predicted\n", " current_goal = np.linalg.norm(residuals)**2\n", " if current_goal > goal_function[-1]:\n", " break\n", " parameters = new_parameters\n", " goal_function.append(current_goal)\n", " return parameters, goal_function" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now we can use this function to invert our synthetic data." ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [], "source": [ "estimated, goal_function = basin2d_inversion(\n", " x, data, basin_boundaries, density, initial=np.full(30, 1000),\n", ")\n", "predicted = cc.forward_model(estimated, basin_boundaries, density, x)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Plot the observed vs predicted data so we can inspect the fit." ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "data": { "image/png": "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HMBVV13FBRdcQKtWrQqsRHv88cfTpUuXYr+Xc45HH32UVq1aUbt2bbp06cJHH31Uon9PkXIjOhomTYLu3b3tDz6AK66ArCx/45JyIxAIkJSURLfYWBYecQRkZnoHbrwRhg/3NzgRESm3wpmipY9z7kPnnD6N+CDnD39cXBxJSUkEAgFf4pgxYwannHIKf/zxB6+88gqpqanUq1ePc889l3feeWevtldffTXVqlVj7NixPPnkk/z444/06NGDzaHqm1u3bqVXr16sWbOG5557jk8//ZQnn3ySli1b8tdff+VeZ9CgQdx2222cdtppTJw4kdGjR5ORkUH37t1ZkzMELGTVqlUMGDCASy65hGnTpnHjjTdy1VVXsWzZMr744ou92s6fP58ff/yRgQMHFvu9hg0bxl133UWvXr2YOHEiN9xwA9deey2//PJLaf1Ti/ijbl1vSO4xx3jbY8fC9deDphOq8gKBAAkJCUwYN44RmZm037gRgE1nnQXPPAOq+C0iIoVxzoW9AAcDLfMvpXHt8r4AsYBLT093BVm0aJFbtGhRgcdKavbs2S46OtoBuUt0dLSbPXt2qb5PUXTr1s01adLE/fXXX7n7du/e7Tp27OhatGjhsrOz3ZgxYxzg+vTps9e53377rQPciBEjnHPOzZw50wFu4sSJhb5fWlqaA9zjjz++1/7ly5e76Ohod+edd+buO/nkkx3gPv/8873a7tq1yzVt2tRdcskle+2/8847Xc2aNd369euL9V6bNm1ytWvXLvTnO/nkkwv9efIqi3tFpNSsX+9cx47OeTM+Onfzzc5lZ/sdlfgoMTHR1QI3MeeeADcF3KX9+/sdmoiIRFh6enpOXhLripBDhVUd18zuM7O1wGpgcQGLlIGUlBSC+SpVBoNBUlJSIhrH1q1b+eGHH+jXrx9169bN3R8VFcVll13GihUr9uoJvPTSS/c6v3v37rRq1Yrp06cD0L59exo2bMhdd93FCy+8QGbOsK48pkyZgpkxYMAAdu/enbs0a9aM+Ph4vvzyy73aN2zYkFNynmkLqV69OgMGDGDChAn8EaremJWVxZtvvsn5559P48aNi/VeaWlpbN++vdCfT6RSaNwYPvsMjjjC237mGbj7bi/1kCppyZw5TAPOD21/DVwEzJ0/37+gRESkQginMNFVQDLwNGDAw8BIYAWwALimNAKUv8vIyChwf0FJW1natGkTzjkOOeSQvx1r3rw5ABs2bMjd16xZs7+1a9asWW6b+vXrM2PGDDp37sw999xDbGwszZs3Z+jQoezatQuANWvW4JyjadOm1KhRY6/l+++/Z/369Xtdv6DYAK666iq2b9/OuHHjAPjkk09YtWrVXkNxi/peOfEX9vOJVBpNm8Lnn0Pr1t72I4/wblyc748FiA/WruXtVavI+YpvBtAbCAIxMTH+xSUiIhVCOFO03ISXeD4CDAc+cM79z8wewpsr9KBSiE8KEBsby9y5c/+2P9J/+Bs2bEi1atVYtWrV346tXLkSgIMOOogFCxYAsHr16r+1W716Ne3bt8/d7tSpE+PGjcM5x5w5c3jttdcYPnw40dHRJCcnc9BBB2FmfP3119QqYKqI/PuskGeSYmJi6Nq1K2PGjGHQoEGMGTOG5s2bc/rpp+e2Kep75fScFvbztc75wC5SGbRoAZ9/zs6EBGquXUv/9HR+AP5v7lwmTZpEWloa8fHxfkcpZWnpUjj9dNpu2gTAZOBiYDvk/q4WERHZl3CG47YHvgdyqlPUBHDOBYHHgevCC00Kk5ycTHR09F77/PjDX6dOHY4//ngmTJiw1/Dg7Oxs3nrrLVq0aMEROUP3gLfffnuv87/77juWLl1Kjx49/nZtMyM+Pp4nnniCBg0a8L///Q+A3r1745zj999/59hjj/3b0qlTpyLHP3DgQH744Qe++eYbPvzwQ6644gqioqJyjxf1vbp160bt2rUL/flEKp22bUk+9lhySnM9DgzGn8cCJMIyM+GEE+DXXwHYeO65vNO/P0fExZGYmKgvIUREpEjC6QndDeCcc2b2J9Aiz7H1wKHhBCaFi4+PJy0tjZSUFDIzM4mJiSE5OdmXP/wjR46kV69e9OzZk8GDB1OzZk1Gjx5Neno6qampe/VEzpw5k2uuuYaLLrqI5cuXc++993LooYdy4403At4zmKNHj+aCCy6gbdu2OOeYMGECmzdvplevXgCccMIJXHfddQwcOJCZM2dy0kknUadOHVatWsU333xDp06duOGGG4oUe1JSEv/6179ISkpix44dXJlvQvWivlfDhg0ZPHgwI0aM2Ovne+CBBzQcVyqtz5Yv5zNgOtAYeAyvIt2rhTwuIJXADz/A2WdDqAout99Oo1GjeLtaWOUlRESkCgonCV0AHBZa/wm41swm4fWMXgcsCS802Zf4+HhSU1P9DoOTTz6ZL774gqFDh3LllVeSnZ1NfHw8kydPpnfv3nu1feWVV3jzzTdJTExkx44d9OzZk6eeeopGjRoBcPjhh9OgQQMeffRRVq5cSc2aNTnyyCN57bXXuOKKK3Kv8+KLL9KtWzdefPFFRo8eTXZ2Ns2bN+eEE06ga9euRY69fv369OnTh7Fjx3LCCSfs1Wtb3PcaPnw4derUYfTo0bz55pt06NCBF154gVGjRhX3n1SkQoiNjWXc3Ln0BKbhfQt5M9Bt40bYtg0OOMDfAKV0ffop9OkDW7d62w8/DMnJmoZFRERKxFwJKxua2VC8aViuNrNTgE+AnXg9pHWBq5xzr5dapOWUmcUC6enp6cTGxv7t+G+//QZA27ZtIxyZVDS6V6QiyZkjMhgMciheIhqXc7BrV/jwQ2jSxL8ApfS89x5ceins2uUlnS+8ANfpiRsREdkjIyODjh07AnR0zu13WFSJx9A454Y5564OrX8BdAdeAF4CTqsKCaiISFWV81hAYmIijePieLJvX/46/njv4I8/QkJC7nODUoG9+CJcfLGXgNasCe++qwRURETCVqLhuGZWG7gc+No5Nw/AOfcT3rBcERGpAv72WMDOnXDttfDGG/Dbb9C9O0ye7L1KxeIcjBwJ997rbdepAxMnwmmn+RqWiIhUDiXqCXXObcebH1RjrURExFOzJrz2GgwZ4m1v2ACnnALjx/salhRNIBAgKSmJ+E6dmHrUUXsS0EaN4IsvlICKiEipCacw0W+ASn+KiMgeZjBsGLRq5Q3b3LEDLroIHn8cbr/d7+ikEDnP+O4KBnkFOCe0f2fTptScPh2OOsrP8EREpJIJp676U0CymR1YWsGIiEglcdVVMHUq1K3rDe3817/gttsgK8vvyKQAKSkp1AsGmYb3rA3AfOBfXbsqARURkVIXTk9oLHAQsMTMvgBWAXlL7Trn3K3hBCciIhXYGWfA1197c0uuWgVPPQXLlsHbb0N0tN/RSR4H/PADs4FDQtszgbOA5kuX+haTiIhUXuEkof/Ms963gOMOUBIqIlKVde4M33/vJaIZGfDBB/x62GFc26QJzePjSU5OJj4+3u8oq66sLHjoIV5asiR3aNRbwPXAVuC0mBj/YhMRkUornClaqu1niSrNQEVEpIJq2RK++Ya/unYF4IgNG3hl3jzSx40jISGBQCDgc4BV1OrVcPrpMHQo1ZwjCFwNXIaXgEZHR5OcnOxvjCIiUimF80xouWBmPczMFbJ0K6B9FzP7zMy2mNlmM5tgZm39iF1EpMpo0IAbWrXijdBme7whn/8MBnnk4Yd9DKyK+uILr5f6iy+87Q4dWPbee2xLTCQuLo7ExETS0tLUSy0iImUinOG45c09wPR8+9LzbphZB+BLYDbQH6gNDAe+NrPOzrl1ZR+miEjVNGf+fN4GFgBDgVrAo8D/pkzx5hVtq+8Dy1xWFgwfDg8+6BWMArjsMhg9miPr1iW1Xz9/4xMRkSqhxD2hZpZtZlmFLLvNbL2ZfWxmPUsz4H1Y4Jz7Pt+yJV+b4cAOoLdzbppzbgJeJfqDgcERilNEpEqKjY0FYARwAvBraH+XbdsgPh5efnlPYiSlb9Uq6NXLS0Kd84pDvfoqvP66V8VYREQkQsIZjjscWApsBF7H+0L7zdD2MrzaBi2AT82sV5hxhs3MqgO9gfHOuT9z9jvnluL1oPbxKzYpuSVLlmBmvPbaa7n7HnjgAcys2NcaO3YsTz75ZOkFl0fr1q258sory+TaIhVFcnIy0aGquD8CRwMvRIXKB2zZAtdeC+ee6z2rKKXrs8+84bfTQwOGjjoKfvoJBg705nYVERGJoHCS0I3AaqC1c+4q59zdzrkrgTbAGuB3oDPwNXBvmHEWxXOhHtg/zewTMzsx3/F2QDQwp4Bz5wDtzax2mUcpZe6aa64hLS2t2OeVZRIqIhAfH09aWhqJoecOz0tMJOHnn+GTT6B5c6/R1KnQsSOMH+9vsJVAIBDg0osv5sUmTcju1QvWrvUOXHmll4CGeqZFREQiLZxnQm8B7nTObc270zm3xcxGAaOcc4+Z2QvAS+EEuR9/AE/hPeu5Aa/exb+BL83sHOfcJ6F2jUOvGwu4xkbAgIZ4850WyMya4A3dzatdiSOv4oLBYG6vSGlq0aIFLVq0KPXrikj44uPjSU1N/fuB9HT45z9h7FjYsAH69fOeVXz6aWjQIOJxVnSBQICLjj+e/+zYQY/Qvq3AhuHDaXn//T5GJiIiEl5PaAtgVyHHdgPNQuurgBpFueB+Kt3mXzoDOOdmOeduc85NdM597ZwbA3QPve+jBbzNvh442t/DSDfiFTvKu0wqys9WWeUMfZ01axZ9+/blwAMPpH79+gwYMIB16/bUeWrdujW9e/dmwoQJHH300dSuXZthw4YBsHr1agYNGkSLFi2oWbMmbdq0YdiwYezevXuv91q5ciX9+/enXr161K9fn4svvpjVBQzbK2w47tixY0lISKBu3brUrVuXzp0788orrwDQo0cPpk6dytKlSzGz3CXHzp07GTFiBB06dKBWrVocfPDBDBw4cK+fEWDXrl3ceeedNGvWjAMOOIATTzyRH3/8seT/wCJVRcOG8Pbb8M473jrAm29Cp04s+s9/SEpKIi4ujqSkJE3psj9//smSpCTm5ElA04HjgLsyM/2LS0REJCScntBfgFvN7CPnXG62EHr28tbQcYBDgKJWnf0FuLaIbZcVdsA5t9nMpgDXm1m0cy6I10sKe3pE82qEl4Bu3s97jgbey7evHVU8EQXo06cP/fv35/rrrycjI4P777+fzMxMfvjhB2rU8L6D+N///se8efO47777aNOmDXXq1GH16tV07dqVatWqMWTIENq1a0daWhojRoxgyZIljBkzBvB6TU877TRWrlzJyJEjOeKII5g6dSoXX3xxkeIbMmQIDz74IH379uWOO+6gfv36pKens3TpUgBGjx7Nddddx6JFi/jggw/2Ojc7O5vzzz+fr7/+mjvvvJPu3buzdOlShg4dSo8ePZg5c2Zuj+61117LG2+8weDBg+nVqxfp6en07duXv/76q7T+qUUqt/794cQT4eqr4eOPYcUK2g0aRDe8X7Rz585l0qRJmj6kILt2wUsvwQMPcH6eL8hexhu6FARqKAkVEZFyIJwkdAgwHlhoZhPxngNtClwAHApcGGrXCyjSA3rOuVV4fy9LQ043Vk7v5iK8v8GdCmjbCVjonNu+n/jWAmv3epNwCjrcdhvMnl3y80tT584QxvOQffv25dFHvY7n008/naZNm3LppZfy7rvvcumllwKwdu1aMjMzOeKII3LPu/7669m0aRMZGRm0bNkSgFNPPZXo6GgGDx7Mv//9b2JiYnj99deZN28ekyZN4rzzzst9n2AwyEsv7Xu09+LFi3n44Ye59NJLeeutt3L39+q1p15WTEwMDRo0oFatWnTrtvf0su+++y4ff/wx48ePp2/fvrn74+PjOe6443jttde44YYbmD9/Pq+//jq333577r9Fr169cv8tRKSImjeHadPgxRfZ/s9/Ujsri1uB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aQm0nDsXe+cdr58zr2rVoFcvuOQSfmnXjit79drrmXVNtyIiIhWZklAREalUOnTsyJvp6byJl4SeFVp6VKtGjexs71nLL77wln//G1q0YMNxx5EydSrTdu7kT2Du3LlMmjSJtLS0fSaiRUpct26FhQth4UIyHnyQp4JBOgHdco7nTUC7dYNLLoH+/SE0LVUn2Ks4k6ZbERGRik7DccNU1YfjSunRvSJSOvL2NuaIjo7mhy++oNP69fDxx/DRRxD6fy6vXcAvwAa8+b4atGlDz379vKlPGjWCxo1z1zNXr+YfF1zAxu3bqQu0B2Jq1mTUoEEcsnUrLFjgJZ+rVu0z3kzg86ZNufm770D//4uISAWk4bgiIlKl5Z/WJafnsFNOz2Hv3l7v48KFXjL60Uds/+QTajtHDaBj3ostXgyPPVbg+8TgJas7gNwJYXbuhGee2Wd864CFwNfA23iTXSf27MnNSkBFRKSKUBIaAeptlqJwzmFmfochUikUOK1LXmZw+OHecsstXHfRRax9/31OB1oDjYFGwKHR0TTKzoYdOwq9VIEzkh58sHft9u33vLZvz9xgkOPPOEPPd4qISJWmJLSMVatWjZ07dyrBkH1yzpGVlUXNmjX9DkWkSrrjvvtImDqVT/Ilh2lpaTSKi4NgEDZuhA0bvNeNG3npkUdY9NNPNAL+BBaEls59+/Lq+PEFvo+e7xQREVESWuZq1apFMBhk7dq1NGnSRImo/I1zjrVr15KVlUWtWgX2qYhIGStsCG9ucnjAAd7SokXuOV3bt+fWAp49HTNkyH7fS1OriIhIVaYktIw1bdqUHTt2sHHjRv744w+ioqKUiEqunB7QrKwsoqOjaRqqhikikVfc5HC/iauIiIgUSEloGatWrRotW7ZkzZo17Nixg+zsbL9DknLEzKhZsya1atWiadOmVKtWze+QRKQY1KspIiJSfEpCI6BatWoccsghfochIiIiIiLiO3W7iIiIiIiISMQoCRUREREREZGIURIqIiIiIiIiEaMkVERERERERCJGSaiIiIiIiIhEjJJQERERERERiRhN0RK+mgALFy70Ow4REREREZGIy5ML1SxKe3POlV00VYCZnQdM8jsOERERERERn53vnJu8v0ZKQsNkZvWBk4HlwE6fwymP2uEl6ecDi3yORco33StSFLpPpCh0n0hR6V6RotB9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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plt.figure(figsize=(9, 3))\n", "plt.plot(x / 1e3, data, \".k\", label=\"observed\")\n", "plt.plot(x / 1e3, predicted, \"-r\", label='predicted')\n", "plt.legend()\n", "plt.xlabel(\"x [km]\")\n", "plt.ylabel(\"gravity disturbance [mGal]\")\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Look at the convergence of the method." ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plt.figure()\n", "plt.plot(goal_function)\n", "plt.yscale(\"log\")\n", "plt.xlabel(\"iteration\")\n", "plt.ylabel(\"goal function (mGal²)\")\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "And finally see if our estimate is close to the true model." ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "ax = cc.plot_prisms(depths, basin_boundaries)\n", "cc.plot_prisms(estimated, basin_boundaries, edgecolor=\"blue\", ax=ax)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Perfect! It seems that our inversion works well under these conditions (this initial estimate and no noise in the data). **Now let's break it!**" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## **Flex your coding muscles**\n", "\n", "**Add pseudo-random noise to the data using `np.random.normal` function and investigate the effect this has on the inversion results.** A typical gravity survey has accuracy in between 0.5-1 mGal. " ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [], "source": [ "noise = np.random.normal(loc=0, scale=1, size=data.size)\n", "noisy_data = data + noise" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [], "source": [ "estimated, goal_function = basin2d_inversion(\n", " x, noisy_data, basin_boundaries, density, initial=np.full(30, 1000),\n", ")\n", "predicted = cc.forward_model(estimated, basin_boundaries, density, x)" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [ { "data": { "image/png": "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xo4dy0477USrVq047rjj+O6770q1+eqrrzj22GPp0qULzZs3p3v37hxzzDH8/PPPxW2cc0ybNo1+/foRFxdHhw4dOPnkk7e71pAhQ+jTpw8fffQRAwcOpGXLlpx99tmccMIJ9OzZs9xKtAcffDD9+/ev9ms557jtttvo2bMnLVq0oH///rzxxhs1+nmK1Dl77umfEe3a1W9PnAh3373jc6RRSGrfnilLlviNFi1o89RTqqQsIiKVqnES6pwb6Zx71TlXEM6ApGrKnZstCmbPns1hhx3G2rVrefjhh5k+fTpt2rThuOOO49lnny3V9pxzziEmJoZnnnmGu+66i88//5whQ4awZs0aADZu3Mjw4cNZsWIF9913H++88w533XUXu+22G+vXry++zvnnn89ll13GsGHDePnll5k2bRo5OTkMHDiQFStWlHrNZcuWMWbMGEaPHs2sWbMYP348Z599Nj/++CPvv/9+qbbffPMNn3/+OWPHjq32a1133XVcccUVDB8+nJdffpkLL7yQc889l2+//TZcP2qR6NpnH181t2NHv33ZZb76qTRe330HgwbBDz/47euu21bMSkREZEeccyEvQGdgt7JLOK5d1xcgAXDZ2dmuPEuWLHFLliwp91hNLViwwMXFxTmgeImLi3MLFiwI6+tUxYABA1yXLl3c+vXri/fl5+e7Pn36uF133dUVFha6Rx991AFu5MiRpc795JNPHOBuvPFG55xz8+bNc4B7+eWXK3y9jIwMB7jbb7+91P6ffvrJxcXFuYkTJxbvGzx4sAPce++9V6rt1q1bXdeuXd3o0aNL7Z84caJr1qyZW7lyZbVe648//nAtWrSo8PsbPHhwhd9PSbVxr4iE3VdfOdehg3O+Vq5zDz8c7YgkGr791rlddtl2H/zzn84VFkY7KhERiZLs7OyivCTBVSGHCrUw0dVm9hu+MNH35SxSC8qbmy0vL49AIBDRODZu3Mhnn33GySefTOvWrYv3x8bGcvrpp/Pzzz+X6gk87bTTSp0/cOBAevbsyQcffADAnnvuSYcOHbjiiit44IEHyM3N3e41X3vtNcyMMWPGkJ+fX7x069aNpKQkPvzww1LtO3TowGFlpglo0qQJY8aMYcaMGaxduxaAgoICnnzySY4//ng6Bnt6qvpaGRkZbNq0qcLvT6RB6dcP3n4b2rYFoPCcc7iy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gQuA1vhnVecApzvnvijZ0Dn3jZkNAW4FXsD32L4PTHDO1VqiXKHLLvNl8uuCfv0ghKI8J554Irfd5utAHXHEEXTt2pXTTjuN5557jtNOOw2A3377jdzcXPbee+/i8y644AL++OMPcnJy2G233QA4/PDDiYuLY8KECfzrX/8iPj6exx9/nK+//pqZM2fyt7/9rfh18vLyeOihHY/2/v7777n55ps57bTTeOqpp4r3Dx++rV5WfHw87du3p3nz5gwYMKDU+c899xxvvvkmL774IieeeGLx/qSkJA488EAee+wxLrzwQr755hsef/xx/vGPfxT/LIYPH178sxCRELVtC7NmwZgx8MILkJ0NAwfC229Did8rdV1mZiaBQICcnBwSEhIqfvZy61Z491145hl4+eXSQ26bN4fTT4dLL630eU8REZG6psZJqHNuppkdi+9J/Dv+GUyH75E83zn3VrDduHAEuoM4AkCVJ4xzzs0HhtVeRNWwYIEfVtUAlE2yRo0axZlnnskHH3xQfCwxMbFUAgrw2muvMXToULp3715q+O1RRx3FhAkTmD17NvHx8XzwwQe0adOmOAEtMnr06EqT0HfeeYeCggIuuuiiGn1vr732Gu3bt+e4444rFWO/fv3o1q0bH374IRdeeCEffPABUPHPQkTCoHlzSE+Hv/8d7r8fli6FQw6BN96AAw6IdnSVyszMJDk5mbzg3KdZWVnMnDmTjIwMn4g6BxkZPvF87jkoM+T/9yZN+GDffYm/+276DK3tGdBERERqRyg9oTjn3gTeNLOW+Dk2/3DO/RmWyBqDfv2iHcE2IcbSrVu3UttNmjShY8eOrFq1qnjfzjvvvN15K1as4NVXXy0eslvWypUrAVi1ahVdu3at9HXLU/TcZk2LFa1YsYI1a9bQrFmzSmMsL6ain4WIhElsLNx3nx+ie911sHIlDB0KL70Ew+rGZ4wVCQQCxQlokby8PJ5KSyNpv/1g+vTSFW6BwubNeSk/nycLCngjP58tWVnEHXPMtsRVRESkngkpCS0STDyVfFZXLc1JGQ3Lly9nl112Kd7Oz89n1apVpZKv8ooFderUicTERG666aZyr9s9+KxXx44dyy3wU15horI6d+4MwM8//0yPHj0qbV9ejB07duTNN98s93ibNm2KYyyKqbyfhYiEkRlMmeIT0Ysv9kNVjz4annoK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o8BNzrmtZduKklARERERERGJID0TKiIiIiIiIhGjJFREREREREQiRkmoiIiIiIiIRIySUBEREREREYkYJaEiIiIiIiISMUpCRUREREREJGKUhIqIiIiIiEjEKAkVERERERGRiFESKiIiIiIiIhGjJFRERKQOMrMpZuaCy4Yyx34ws9ciEMPLJWLIru3XExGRxkFJqIiISN2WDAyN0mtPDL7+V1F6fRERaYCaRDsAERERqZhzbm4UX/v/AMxsHdApWnGIiEjDop5QERGRWmBmLczsKzNbbGbtSuzvZmbLzexDM4sN4+uNN7N8M7suuN0rOIz2X2Z2RXAIb17wdfc2s6ZmFjCzX81srZm9ZGZdwhWPiIhIRZSEioiI1ALn3CZgFNAFeATAzGKApwEDUp1zBaG+jnlTgbuAcc65a8s0uQg4JPh1HLAP8CrwMNAZOBs/7HYY8L9Q4xEREamMhuOKiIjUEufcIjMbBzxrZpcCOwFDgBHOuWWhXt/M4oAn8QnkUc6598pptgY4wTlXGDynEz5h/cY5d3yJa+0DXGZmbZ1z60KNTUREpCJKQkVERGqRc+45MxsC/BuIBW52zr0Thkt3BN4HdgH+6pyrqHrtrKIENOjr4NfXy7Qr2r8boEq4IiJSazQcV0REpPY9AjQF8oF7wnTNvYGDgTd2kIACrC6zvaWS/S3CEJuIiEiFlISKiIjUIjNrhR8y+39AHuF77jIDGAucY2b/DT5vKiIiUudpOK6IiEjtegA/xPUgfFGgF8zsH865O0O9sHPucTPbCDwDtDKzM8NR7EhERKQ2KQkVERGpJcGiRGOAsc65HCDHzO4FbjWzT5xzn4f6Gs65F8zsT+AFIM7MUp1zWyo7T0REJFo0dEdERKQWmFlf/POfjzvnHitxaAKwEF8xt304Xss5Nws4GjgCmBmsmisiIlInmXMu2jGIiIhIGWY2BbgWX9DIRWOYbfA50xjgPaCjc65PpGMQEZGGRz2hIiIiddtWYG2UXntG8PUHRen1RUSkAVJPqIiISB1kZt2B7sHNAufcV1GIoTfQIbiZF3yuVUREJCRKQkVERERERCRiNBxXREREREREIkZJqIiIiIiIiESMklARERERERGJGCWhIiIiIiIiEjFKQkVERERERCRilISKiIiIiIhIxCgJFRERERERkYhREioiIiIiIiIRoyRUREREREREIkZJqIiIiIiIiESMklARERERERGJmP8HlQsWA89E8TMAAAAASUVORK5CYII=\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" }, { "data": { "text/plain": [ "" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plt.figure(figsize=(9, 3))\n", "plt.plot(x / 1e3, noisy_data, \".k\", label=\"observed\")\n", "plt.plot(x / 1e3, predicted, \"-r\", label='predicted')\n", "plt.legend()\n", "plt.xlabel(\"x [km]\")\n", "plt.ylabel(\"gravity disturbance [mGal]\")\n", "plt.show()\n", "\n", "ax = cc.plot_prisms(depths, basin_boundaries)\n", "cc.plot_prisms(estimated, basin_boundaries, edgecolor=\"blue\", ax=ax)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We can go one step further and run several of these inversion in a loop for different random noise realizations." ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [], "source": [ "estimates = []\n", "for i in range(5):\n", " noise = np.random.normal(loc=0, scale=1, size=data.size)\n", " noisy_data = data + noise\n", " estimated, goal_function = basin2d_inversion(\n", " x, noisy_data, basin_boundaries, density, initial=np.full(30, 1000),\n", " )\n", " estimates.append(estimated)" ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [ { "data": { "image/png": "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M422LwNEtbxalrGuWbN2yv2H4/sX4ecAnH32B447p9JCrNOxnIYkSarF+OqqWk2XaGZs7C2ceOICentLZxitNQ9FI2ZCVRkDRLW8PJex/vjHp9DXdxv9/YdIad5x7eMzjPUKEIeGsmDXAFGSJFXrzjth//7arzNdopm5c6Gzc27tHU2hszP78FytwwBRs9p4iY2LL4axMfjLvzw2FXM9MqROdNddbsSWJEm1GS89UU19wommSzSzaVNjlrKqtRggSmTFWoslqZlqD2M1s4sjI9ZblCRJtZs/v7zAbcOGDfT19RVtmy7RTDklKtR+DBAlsk/Hin1CtnbtWqD4T83u7m76+z9Lb+9tJa/b09PD+vXrj37tD1pJktRIfX199PdngeBkJppRMQaIUsHoaGUbrS+4oJfh4a0MDxdvHxgY4IYbBlm58oljO3a4EVuSJDVWV1cX27eXTjQjTWSAKJEFbePr+ctVTobUyUZHK+9HkiRpop//PHs/sW4d3H77Nu6+++6S5x448IcsXryYdesq7+fBB6svNaaZywBRIkscc/LJ9b/u5AQ3DzzwWiIO0919+XHLTyVJksoxNASPPpr9+e677+bAgQMlM5EuXryY8847r6p+TjsNLr64ykFqxjJAlMgCxHonjymW4Obxx0/khBMW0N/fT19fnwGiJEmqyrx5sHEj3Hrr+1m2DJeQqm4MECVg+fLsUc80zsUS3IyX0xgcvJLh4dqLy5ayYoW1FiVJklQ5A0SpYGgov4BtXLFSGvU2NAQ7dxogSpLUDoqVqdi9+xYAursvK5mhVKqWAaJENuO2c2f+/cydC489BiMjz+LAgQO88Y2fLHnueeedxyWXVF4Bd8eO+s+GSpKk8txxR33fU9xwwyADAxeybNmyo8dSmkPEEcBSFao/A0SJbLatETNuN96YZR47/fRVPPronqMbzCd75JERfvjDw5x6auV97NplplRJkppl587s93A9y1otW7aMjRuvO/r11VfD/PnuO1Q+DBClBnre87JkOKtWnQeUzig2nvn08sufX3Ef73pXY5aySpKk4jo7K1vJU2wZ6bj9+7MlpBOvd+21NQ5QmoIBotRA5SbD6e29jf7+fnp7byt5TqkyGf7SkCRpZunr6yu5l9AlpGo0A0SpwcpJhnPBBb0MD29leLh4+8DAADfcMMjKlce3DQ5my04kSdKx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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "ax = cc.plot_prisms(depths, basin_boundaries)\n", "for estimated in estimates:\n", " cc.plot_prisms(estimated, basin_boundaries, edgecolor=\"#0000ff66\", ax=ax)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The fact that **small changes in the data lead to large changes in the model** is the defining characteristic of an **unstable problem**." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## **Question time!**\n", "\n", "**Why does the inversion struggle to recover the deeper portions of the model in particular?**\n", "\n", "Hint: It's related to the physics of the forward modelling and the Jacobian matrix." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Regularization to the rescue\n", "\n", "To deal with the instability issues we encountered, we will apply **first-order Tikhonov regularization** (aka \"smoothness\"). \n", "\n", "First thing we need to do is create the finite difference matrix $\\bar{\\bar{R}}$." ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [], "source": [ "def finite_difference_matrix(nparams):\n", " \"\"\"\n", " Create the finite difference matrix for regularization.\n", " \"\"\"\n", " fdmatrix = np.zeros((nparams - 1, nparams))\n", " for i in range(fdmatrix.shape[0]):\n", " fdmatrix[i, i] = -1\n", " fdmatrix[i, i + 1] = 1\n", " return fdmatrix" ] }, { "cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[-1., 1., 0., 0., 0., 0., 0., 0., 0., 0.],\n", " [ 0., -1., 1., 0., 0., 0., 0., 0., 0., 0.],\n", " [ 0., 0., -1., 1., 0., 0., 0., 0., 0., 0.],\n", " [ 0., 0., 0., -1., 1., 0., 0., 0., 0., 0.],\n", " [ 0., 0., 0., 0., -1., 1., 0., 0., 0., 0.],\n", " [ 0., 0., 0., 0., 0., -1., 1., 0., 0., 0.],\n", " [ 0., 0., 0., 0., 0., 0., -1., 1., 0., 0.],\n", " [ 0., 0., 0., 0., 0., 0., 0., -1., 1., 0.],\n", " [ 0., 0., 0., 0., 0., 0., 0., 0., -1., 1.]])" ] }, "execution_count": 19, "metadata": {}, "output_type": "execute_result" } ], "source": [ "finite_difference_matrix(10)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now we can use this to make a new inversion function with smoothness." ] }, { "cell_type": "code", "execution_count": 20, "metadata": {}, "outputs": [], "source": [ "def basin2d_smooth_inversion(x, data, basin_boundaries, density, initial, smoothness, max_iterations=10):\n", " \"\"\"\n", " Solve the regularized inverse problem using the Gauss-Newton method.\n", " \"\"\"\n", " parameters = initial.astype(np.float64).copy() \n", " predicted = cc.forward_model(parameters, basin_boundaries, density, x)\n", " residuals = data - predicted\n", " goal_function = [np.linalg.norm(residuals)**2]\n", " fdmatrix = finite_difference_matrix(parameters.size)\n", " for i in range(max_iterations): \n", " jacobian = make_jacobian(parameters, basin_boundaries, density, x)\n", " hessian = jacobian.T @ jacobian + smoothness * fdmatrix.T @ fdmatrix\n", " gradient = jacobian.T @ residuals - smoothness * fdmatrix.T @ fdmatrix @ parameters\n", " deltap = np.linalg.solve(hessian, gradient)\n", " new_parameters = parameters + deltap\n", " predicted = cc.forward_model(new_parameters, basin_boundaries, density, x)\n", " residuals = data - predicted\n", " current_goal = np.linalg.norm(residuals)**2\n", " if current_goal > goal_function[-1]:\n", " break\n", " parameters = new_parameters\n", " goal_function.append(current_goal)\n", " return parameters, goal_function" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now we check if it works on our noisy data." ] }, { "cell_type": "code", "execution_count": 21, "metadata": {}, "outputs": [], "source": [ "estimates = []\n", "for i in range(5):\n", " noise = np.random.normal(loc=0, scale=1, size=data.size)\n", " noisy_data = data + noise\n", " estimated, goal_function = basin2d_smooth_inversion(\n", " x, noisy_data, basin_boundaries, density, initial=np.full(30, 1000), smoothness=1e-5\n", " )\n", " estimates.append(estimated)" ] }, { "cell_type": "code", "execution_count": 22, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "ax = cc.plot_prisms(depths, basin_boundaries)\n", "for estimated in estimates:\n", " cc.plot_prisms(estimated, basin_boundaries, edgecolor=\"#0000ff66\", ax=ax)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## **Question time!**\n", "\n", "**What happens when the regularization paramater is extremely high?** Try to predict what the answer would be and then execute the code to check your reasoning.\n", "\n", "Hint: what is the smoothest possible model?" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## **Flex your coding muscles**\n", "\n", "**Can our regularized model recover a non-smooth geometry?** For example, real sedimentary basins often have [faults](https://en.wikipedia.org/wiki/Fault_(geology)) running through them, causing sharp jumps in the sediment thickness (up or down). \n", "\n", "To answer this question:\n", "\n", "1. Modify our model depths (the `depths` array) to introduce a shift up or down by 1-2 km in a section of the model of about 5-10 km.\n", "2. Generate new noisy data with this new model\n", "3. Invert the noisy data and try to find a model that:\n", " 1. Fits the data\n", " 2. Is stable (doesn't vary much if we change the noise)\n", " 3. Recovers the sharp boundary\n", " \n", "Hint: Use `np.copy` to make a copy of the `depths` (to avoid overwriting it)." ] }, { "cell_type": "code", "execution_count": 23, "metadata": {}, "outputs": [], "source": [ "fault_model = np.copy(depths)\n", "fault_model[45:55] -= 2000" ] }, { "cell_type": "code", "execution_count": 24, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 24, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "cc.plot_prisms(fault_model, basin_boundaries)" ] }, { "cell_type": "code", "execution_count": 25, "metadata": {}, "outputs": [], "source": [ "fault_data = cc.forward_model(fault_model, basin_boundaries, density, x)" ] }, { "cell_type": "code", "execution_count": 26, "metadata": {}, "outputs": [], "source": [ "estimates = []\n", "for i in range(5):\n", " noise = np.random.normal(loc=0, scale=1, size=data.size)\n", " noisy_data = fault_data + noise\n", " estimated, goal_function = basin2d_smooth_inversion(\n", " x, noisy_data, basin_boundaries, density, initial=np.full(30, 1000), smoothness=1e-5\n", " )\n", " estimates.append(estimated)" ] }, { "cell_type": "code", "execution_count": 27, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(5.5, 0.0)" ] }, "execution_count": 27, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "ax = cc.plot_prisms(fault_model, basin_boundaries)\n", "for estimated in estimates:\n", " cc.plot_prisms(estimated, basin_boundaries, edgecolor=\"#0000ff66\", ax=ax)\n", "ax.set_ylim(5.5, 0)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## **Question time!**\n", "\n", "**What would happen if we used a \"sharpness\" regularization?** Would we be able to recover the faults? What about the smoother parts of the model? \n", "\n", "One type of sharpness regularization is called \"total-variation regularization\" and it [has been used for this problem in the past](https://doi.org/10.1190/1.3524286)." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Extra thinking points\n", "\n", "* What happens if we get the density wrong?\n", "* What are the sources of uncertainty in our final solution? Is it just the noise in the data?\n", "* How much does the solution depend on the inital estimate?" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## **Bonus:** Optimizing code\n", "\n", "The code we wrote is not the greatest and it does take a while to run even for these really small 2D problems. There are ways in which we can make the code fast. But before we do any of that, **we need to know where our code spends most of its time**. Otherwise, we could spend hours optimizing a part of the code that is already really fast.\n", "\n", "This can be done with tools called **profilers**, which measure the time spent in each function of your code. This is also why its very important to **break up your code into functions**. In a Jupyter notebook, you can run the standard Python profiler by using the `%%prun` cell magic:" ] }, { "cell_type": "code", "execution_count": 28, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " " ] }, { "data": { "text/plain": [ " 193062 function calls (189976 primitive calls) in 4.142 seconds\n", "\n", " Ordered by: internal time\n", "\n", " ncalls tottime percall cumtime percall filename:lineno(function)\n", " 146640 3.076 0.000 3.076 0.000 cheatcodes.py:132(kernel)\n", " 18330 0.957 0.000 4.033 0.000 cheatcodes.py:98(prism_gravity)\n", " 611 0.035 0.000 4.132 0.007 cheatcodes.py:84(forward_model)\n", " 611 0.017 0.000 0.048 0.000 function_base.py:23(linspace)\n", "4340/1254 0.010 0.000 0.062 0.000 {built-in method numpy.core._multiarray_umath.implement_array_function}\n", " 10 0.006 0.001 4.011 0.401 :1(make_jacobian)\n", " 611 0.005 0.000 0.005 0.000 {method 'reduce' of 'numpy.ufunc' objects}\n", " 1254 0.003 0.000 0.003 0.000 {built-in method numpy.array}\n", " 611 0.003 0.000 0.012 0.000 fromnumeric.py:70(_wrapreduction)\n", " 611 0.002 0.000 0.002 0.000 {built-in method numpy.arange}\n", " 611 0.002 0.000 0.053 0.000 cheatcodes.py:75(prism_boundaries)\n", " 621 0.002 0.000 0.009 0.000 numeric.py:75(zeros_like)\n", " 611 0.002 0.000 0.008 0.000 {method 'any' of 'numpy.generic' objects}\n", " 622 0.002 0.000 0.002 0.000 {built-in method numpy.zeros}\n", " 611 0.001 0.000 0.013 0.000 fromnumeric.py:2249(any)\n", " 10 0.001 0.000 0.002 0.000 linalg.py:314(solve)\n", " 611 0.001 0.000 0.001 0.000 {method 'reshape' of 'numpy.ndarray' objects}\n", " 621 0.001 0.000 0.003 0.000 <__array_function__ internals>:2(empty_like)\n", " 622 0.001 0.000 0.001 0.000 {method 'astype' of 'numpy.ndarray' objects}\n", " 611 0.001 0.000 0.051 0.000 <__array_function__ internals>:2(linspace)\n", " 611 0.001 0.000 0.004 0.000 <__array_function__ internals>:2(result_type)\n", " 1 0.001 0.001 4.141 4.141 :1(basin2d_smooth_inversion)\n", " 622 0.001 0.000 0.003 0.000 <__array_function__ internals>:2(copyto)\n", " 611 0.001 0.000 0.002 0.000 <__array_function__ internals>:2(ndim)\n", " 611 0.001 0.000 0.015 0.000 <__array_function__ internals>:2(any)\n", " 1222 0.001 0.000 0.004 0.000 _asarray.py:86(asanyarray)\n", " 621 0.001 0.000 0.011 0.000 <__array_function__ internals>:2(zeros_like)\n", " 611 0.001 0.000 0.001 0.000 fromnumeric.py:71()\n", " 611 0.001 0.000 0.001 0.000 fromnumeric.py:3075(ndim)\n", " 611 0.000 0.000 0.001 0.000 numeric.py:1816(isscalar)\n", " 611 0.000 0.000 0.006 0.000 _methods.py:53(_any)\n", " 631 0.000 0.000 0.000 0.000 {built-in method builtins.getattr}\n", " 611 0.000 0.000 0.000 0.000 {built-in method builtins.isinstance}\n", " 611 0.000 0.000 0.000 0.000 {method 'items' of 'dict' objects}\n", " 611 0.000 0.000 0.000 0.000 {built-in method _operator.index}\n", " 1 0.000 0.000 0.000 0.000 {method 'copy' of 'numpy.ndarray' objects}\n", " 611 0.000 0.000 0.000 0.000 function_base.py:18(_linspace_dispatcher)\n", " 622 0.000 0.000 0.000 0.000 multiarray.py:1043(copyto)\n", " 611 0.000 0.000 0.000 0.000 fromnumeric.py:3071(_ndim_dispatcher)\n", " 621 0.000 0.000 0.000 0.000 numeric.py:71(_zeros_like_dispatcher)\n", " 611 0.000 0.000 0.000 0.000 fromnumeric.py:2245(_any_dispatcher)\n", " 11 0.000 0.000 0.000 0.000 linalg.py:2363(norm)\n", " 621 0.000 0.000 0.000 0.000 multiarray.py:75(empty_like)\n", " 611 0.000 0.000 0.000 0.000 multiarray.py:634(result_type)\n", " 10 0.000 0.000 0.000 0.000 linalg.py:135(_commonType)\n", " 1 0.000 0.000 4.142 4.142 {built-in method builtins.exec}\n", " 20 0.000 0.000 0.000 0.000 linalg.py:107(_makearray)\n", " 11 0.000 0.000 0.000 0.000 <__array_function__ internals>:2(norm)\n", " 11 0.000 0.000 0.000 0.000 {built-in method numpy.empty}\n", " 10 0.000 0.000 0.002 0.000 <__array_function__ internals>:2(solve)\n", " 11 0.000 0.000 0.000 0.000 {method 'ravel' of 'numpy.ndarray' objects}\n", " 11 0.000 0.000 0.000 0.000 <__array_function__ internals>:2(dot)\n", " 31 0.000 0.000 0.000 0.000 _asarray.py:14(asarray)\n", " 41 0.000 0.000 0.000 0.000 linalg.py:112(isComplexType)\n", " 72 0.000 0.000 0.000 0.000 {built-in method builtins.issubclass}\n", " 20 0.000 0.000 0.000 0.000 linalg.py:125(_realType)\n", " 10 0.000 0.000 0.000 0.000 linalg.py:102(get_linalg_error_extobj)\n", " 10 0.000 0.000 0.000 0.000 linalg.py:200(_assert_stacked_square)\n", " 10 0.000 0.000 0.000 0.000 linalg.py:194(_assert_stacked_2d)\n", " 1 0.000 0.000 0.000 0.000 :1(finite_difference_matrix)\n", " 1 0.000 0.000 4.141 4.141 :1()\n", " 1 0.000 0.000 0.000 0.000 numeric.py:268(full)\n", " 20 0.000 0.000 0.000 0.000 {method 'get' of 'dict' objects}\n", " 10 0.000 0.000 0.000 0.000 {method '__array_prepare__' of 'numpy.ndarray' objects}\n", " 11 0.000 0.000 0.000 0.000 linalg.py:2359(_norm_dispatcher)\n", " 11 0.000 0.000 0.000 0.000 multiarray.py:706(dot)\n", " 10 0.000 0.000 0.000 0.000 linalg.py:310(_solve_dispatcher)\n", " 10 0.000 0.000 0.000 0.000 {method 'append' of 'list' objects}\n", " 1 0.000 0.000 0.000 0.000 {method 'disable' of '_lsprof.Profiler' objects}" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "%%prun \n", "basin2d_smooth_inversion(\n", " x, noisy_data, basin_boundaries, density, initial=np.full(30, 1000), smoothness=1e-5\n", ")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The `tottime` column is the amount of time spent on the function itself (not counting functions called inside it) and `cumtime` is the total time spent in the function, including function calls inside it. \n", "\n", "We can see from the profiling that the majority of the computation is spend in forward modelling, in particular for building the Jacobian. So if we can optimize `make_jacobian` that will have the biggest impact on performance of all.\n", "\n", "To start let's measure the computation time of `make_jacobian` with the `%%timeit` magic:" ] }, { "cell_type": "code", "execution_count": 29, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "319 ms ± 69.2 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)\n" ] } ], "source": [ "%%timeit\n", "make_jacobian(np.full(30, 1000), basin_boundaries, density, x)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Alright, now we can try to do better.\n", "\n", "For many of these problems, the biggest return on investment is **not** parallelization or going to C/Fortran. **The largest improvements come from better maths/physics**. Here, we can take advantage of potential-field theory to cut down on the computation time of the Jacobian. \n", "\n", "We'll use the fact that the difference in gravity values produced by two models is the same as the gravity value produced by the difference in the models. Meaning that $\\delta g = g(m_1) - g(m_2) = g(m_1 - m_2)$. This way, we can reduce by more than half the number of forward modelling operations we do in the finite-difference computations.\n", "\n", "So instead of calculating the entire basin model with and without a small step in a single parameter, we can only calculate the effect of that small step." ] }, { "cell_type": "code", "execution_count": 30, "metadata": {}, "outputs": [], "source": [ "def make_jacobian_fast(parameters, basin_boundaries, density, x):\n", " \"\"\"\n", " Calculate the Jacobian matrix by finite differences.\n", " \"\"\"\n", " jacobian = np.empty((x.size, parameters.size))\n", " delta = 10\n", " boundaries = cc.prism_boundaries(parameters, basin_boundaries)\n", " for j in range(jacobian.shape[1]):\n", " jacobian[:, j] = (\n", " (\n", " # Replace with a single forward modelling of a single prism\n", " cc.prism_gravity(x, boundaries[j], boundaries[j + 1], parameters[j], parameters[j] + delta, density)\n", " ) \n", " / delta\n", " )\n", " return jacobian" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "First, we check if the results are still correct." ] }, { "cell_type": "code", "execution_count": 31, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "True" ] }, "execution_count": 31, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.allclose(\n", " make_jacobian(np.full(30, 1000), basin_boundaries, density, x),\n", " make_jacobian_fast(np.full(30, 1000), basin_boundaries, density, x)\n", ")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now we can measure the time again:" ] }, { "cell_type": "code", "execution_count": 32, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "5.07 ms ± 739 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)\n" ] } ], "source": [ "%%timeit\n", "make_jacobian_fast(np.full(30, 1000), basin_boundaries, density, x)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This one change gave use 2 orders of magnitude improvement in the function that makes up most of the computation time. **Now that is time well spent!**\n", "\n", "We can measure how much of a difference this makes for the inversion as a whole by making a new function with our fast Jacobian matrix calculation." ] }, { "cell_type": "code", "execution_count": 33, "metadata": {}, "outputs": [], "source": [ "def fast_basin2d_smooth_inversion(x, data, basin_boundaries, density, initial, smoothness, max_iterations=10):\n", " \"\"\"\n", " Solve the regularized inverse problem using the Gauss-Newton method.\n", " \"\"\"\n", " parameters = initial.astype(np.float64).copy() \n", " predicted = cc.forward_model(parameters, basin_boundaries, density, x)\n", " residuals = data - predicted\n", " goal_function = [np.linalg.norm(residuals)**2]\n", " fdmatrix = finite_difference_matrix(parameters.size)\n", " for i in range(max_iterations): \n", " # Swap out the slow jacobian for the fast one\n", " jacobian = make_jacobian_fast(parameters, basin_boundaries, density, x)\n", " hessian = jacobian.T @ jacobian + smoothness * fdmatrix.T @ fdmatrix\n", " gradient = jacobian.T @ residuals - smoothness * fdmatrix.T @ fdmatrix @ parameters\n", " deltap = np.linalg.solve(hessian, gradient)\n", " new_parameters = parameters + deltap\n", " predicted = cc.forward_model(new_parameters, basin_boundaries, density, x)\n", " residuals = data - predicted\n", " current_goal = np.linalg.norm(residuals)**2\n", " if current_goal > goal_function[-1]:\n", " break\n", " parameters = new_parameters\n", " goal_function.append(current_goal)\n", " return parameters, goal_function" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "And now we can measure the computation time for both." ] }, { "cell_type": "code", "execution_count": 34, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "3.73 s ± 55.9 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)\n" ] } ], "source": [ "%%timeit \n", "basin2d_smooth_inversion(\n", " x, noisy_data, basin_boundaries, density, initial=np.full(30, 1000), smoothness=1e-5\n", ")" ] }, { "cell_type": "code", "execution_count": 35, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "302 ms ± 4.95 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)\n" ] } ], "source": [ "%%timeit \n", "fast_basin2d_smooth_inversion(\n", " x, noisy_data, basin_boundaries, density, initial=np.full(30, 1000), smoothness=1e-5\n", ")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**We changed 3 lines of code and achived a factor of 10 speedup.** Again, this could only be done because we first profiled the code and then focused on finding a fundamentally better way of calculating. " ] } ], "metadata": { "kernelspec": { "display_name": "Python [conda env:2020-aachen-gravity-inversion]", "language": "python", "name": "conda-env-2020-aachen-gravity-inversion-py" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.9.1" } }, "nbformat": 4, "nbformat_minor": 4 }