{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "**Course website**: http://www.leouieda.com/geofisica1\n", "\n", "**Note**: This notebook is part of the course \"Geofísica 1\" of Geology program of the \n", "[Universidade do Estado do Rio de Janeiro](http://www.uerj.br/). \n", "All content can be freely used and adapted under the terms of the \n", "[Creative Commons Attribution 4.0 International License](http://creativecommons.org/licenses/by/4.0/).\n", "\n", "![Creative Commons License](https://i.creativecommons.org/l/by/4.0/88x31.png)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Esse documento que você está usando é um [Jupyter notebook](http://jupyter.org/). É um documento interativo que mistura texto (como esse), código (como abaixo), e o resultado de executar o código (números, texto, figuras, videos, etc)." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Prática 5 - Gravimetria - Modelagem direta 2D para testar hipóteses" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Objetivos\n", "\n", "* Aprender como testar uma hipótese geológica com dados geofísicos.\n", "* Entender o que é e qual é o objetivo da modelagem direta.\n", "* Ilustrar a importância de testes com dados sintéticos.\n", "* Aprender na prática o significado de falta de unicidade." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Instruções\n", "\n", "O notebook te fornecerá exemplos interativos que trabalham os temas abordados no questionário. Utilize esses exemplos para responder as perguntas.\n", "\n", "As células com números ao lado, como `In [1]:`, são código [Python](http://python.org/). Algumas dessas células não produzem resultado e servem de preparação para os exemplos interativos. Outras, produzem gráficos interativos. **Você deve executar todas as células, uma de cada vez**, mesmo as que não produzem gráficos.\n", "\n", "Para executar uma célula, clique em cima dela e aperte `Shift + Enter`. O foco (contorno verde ou cinza em torno da célula) deverá passar para a célula abaixo. Para rodá-la, aperte `Shift + Enter` novamente e assim por diante. Você pode executar células de texto que não acontecerá nada." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Preparação\n", "\n", "Exectute as células abaixo para carregar as componentes necessárias para nossa prática. Vamos utilizar várias *bibliotecas*, inclusive uma de geofísica chamada [Fatiando a Terra](http://www.fatiando.org)." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "from __future__ import division\n", "from fatiando.gravmag.interactive import Moulder\n", "import fatiando\n", "import seaborn\n", "import numpy as np" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "print('Versão do Fatiando a Terra: {}'.format(fatiando.__version__))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Simulando a Terra: dados sintéticos\n", "\n", "A primeira parte dessa prática será \"brincar de Deus\". Vamos criar uma \"Terra\" nossa e usar essa Terra para gerar dados. Esses dados fabricados são geralmente chamados de *sintéticos*. Depois de criar os dados sintéticos, os grupos vão trocar de dados para tentar descobrir o modelo que os colegas fizeram. **Não deixe os outros grupos verem o que estão desenhando (e não colem)!**\n", "\n", "1. Execute a célula abaixo para abrir uma janela para modelagem direta.\n", "2. Crie um modelo com **1 corpo** utilizando a densidade que quiser.\n", "3. Experimente diferentes configurações e veja como o dado sintético muda.\n", "4. Coloque **0.1 mGal** de erro aleatório no dado. Veja como o erro influencia o dado.\n", "5. Quando terminar, feche a janela. Não se preocupe, seu modelo estará salvo." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "area = (0, 50e3, 0, 20e3)\n", "x = np.linspace(area[0], area[1], 150)\n", "z = np.zeros_like(x)\n", "modelo1 = Moulder(area, x, z)\n", "modelo1.run()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Rode a célula abaixo para salvar o seu modelo e os dados gerados. **Mude os nomes dos arquivos abaixo** (troque o `blablabla` por outra coisa) para poder identificar seu modelo depois." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "modelo1.save('modelo1-blablabla.pkl')\n", "modelo1.save_predicted('modelo1-dados-blablabla.txt')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Para pensar\n", "\n", "* O que é dado que você gerou? É o distúrbio, Bouguer, nenhum dos dois, ambos?\n", "* O que representa o valor de densidade que vocês colocaram? É um contraste? Se for, é um contraste entre o que?" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Modelagem direta: testando uma hipótese sobre o dado dos colegas\n", "\n", "Pegue o arquivo de dados (`modelo1-blablabla.txt`) e o arquivo de modelo (`modelo1-blablabla.pkl`) de outro grupo. \n", "\n", "Dessa vez, a única informação \"geológica\" que você tem é que o dado é **produzido por 1 único corpo**.\n", "\n", "0. Copie e cole os arquivos `.txt` e `.pkl` do outro grupo para a **pasta onde está o notebook**.\n", "1. **Mude os nomes dos arquivos** na célula abaixo (coisas entre `''`) para os do outro grupo.\n", "2. Rode a célula abaixo para carregar os dados e abrir a janela de modelagem.\n", "3. Faça um modelo com **1 corpo** que ajuste o dado do colega.\n", "4. Feche a janela quando terminar (não se preocupe, tudo estará salvo). " ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "dados_colega = 'modelo1-dados-blablabla.txt'\n", "modelo_colega = 'modelo1-blablabla.pkl'\n", "x, z, dados = np.loadtxt(dados_colega, unpack=True)\n", "modelagem1 = Moulder(area, x, z, data=dados)\n", "modelagem1.run()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Rode a célula abaixo para inserir uma imagem do seu modelo aqui no notebook." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "modelagem1.plot()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Vamos comparar agora o seu modelo com \"a realidade\" criada pelo colega. Rode a célula abaixo para plotar \"a realidade\"." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "Moulder.load(modelo_colega).plot()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Para pensar\n", "\n", "* Você chegou perto do verdadeiro (sem colar)? Por que?\n", "* O seu modelo é uma solução válida do ponto de vista **geofísico**, ou seja, perante os dados e informações que você possuía?\n", "* O que seria necessário para produzir um modelo que se aproxime mais da realidade?" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Informação a priori: chegando mais próximo da realidade\n", "\n", "O problema anterior foi de sacanagem. Não há como gerar um modelo que reproduza a realidade somente com os dados geofísicos. Como você viu, **existem infinitos modelos que produzem o mesmo dado**. O que diferencia um possível modelo e outro é o conhecimento geológico e geofísico do intérprete (ou seja, **você**). Por isso que conhecimento prévio (a priori) sobre a geologia da região e possíveis soluções é crucial.\n", "\n", "\n", "