<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" xml:lang="pt_BR"><generator uri="https://jekyllrb.com/" version="3.10.0">Jekyll</generator><link href="https://thiagodsd.github.io/feed.xml" rel="self" type="application/atom+xml" /><link href="https://thiagodsd.github.io/" rel="alternate" type="text/html" hreflang="pt_BR" /><updated>2026-11-02T14:25:45+00:00</updated><id>https://thiagodsd.github.io/feed.xml</id><title type="html">zustandssumme</title><subtitle> </subtitle><entry><title type="html">despliego y me voy</title><link href="https://thiagodsd.github.io/2022/03/01/despliego-y-me-voy.html" rel="alternate" type="text/html" title="despliego y me voy" /><published>2022-03-01T08:23:00+00:00</published><updated>2022-03-01T08:23:00+00:00</updated><id>https://thiagodsd.github.io/2022/03/01/despliego-y-me-voy</id><content type="html" xml:base="https://thiagodsd.github.io/2022/03/01/despliego-y-me-voy.html"><![CDATA[<p>Inicialmente escrito como uma seção da página <em><a href="/2020/01/05/memoria-da-maquina.html">memória da máquina</a></em>, entituluda “modelo como <em>interface de programação de aplicativos</em>”, esse texto é composto por reflexões e comentários sobre a questão “o que fazer com um modelo treinado?”</p>

<h2 id="mlops">mlops</h2>

<p>Por algum motivo – ou por muitos – praticamente todos os materiais de estudo contendo aprendizagem de máquina, aprendizagem estatística, inteligência artificial, redes neurais, ciência de dados, etc, no título, que eu estudei até hoje, não tratam de assuntos relacionados ao que fazer após a execução da última célula do <em>notebook</em> de modelagem.</p>

<p>Em um contexto acadêmico, por exemplo, um projeto de aprendizagem de máquina é composto por um conjunto de experimentos guiados pelo método científico. Após as conclusões os resultados são sumarizados, publicados e eventualmente apresentados em congressos. Porém, no contexto de mercado, em que projetos de aprendizagem de máquina entregam soluções para tomada de decisões de negócios, há um universo além dos ciclos de experimentação e divulgação de resultados: é necessário homologar, documentar, versionar, empacotar, implantar e monitorar o produto do projeto.</p>

<p>Diagramas de metodologias como a <a href="https://pt.wikipedia.org/wiki/Cross_Industry_Standard_Process_for_Data_Mining">CRISP-DM</a> sugerem que todas essas etapas que sucedem a aplicação de técnicas de aprendizagem de máquina compõem um vértice isolado – ou seja, um tipo de ponto final do projeto. Contudo, nem sempre esse é o caso: projetos são versionados e monitorados inclusive na expectativa da identificação de problemas a serem corrigidos e melhorias a serem incorporadas em versões futuras. Além disso, ao sintetizar tantas etapas em “<em>deployment</em>” o <a href="https://en.wikipedia.org/wiki/Cross-industry_standard_process_for_data_mining#/media/File:CRISP-DM_Process_Diagram.png">diagrama</a> suprime o caráter interdisciplinar desse tipo de projeto – manifestado principalmente na integração entre ideias de ciência da computação, aprendizagem estatística e práticas de desenvolvimento de software.</p>

<p>Desse caráter fortemente cíclico e dessa essência <em>dev</em> de projetos de aprendizagem de máquina, <a href="https://trends.google.com/trends/explore?date=today%205-y&amp;q=%2Fg%2F11h1vbjpbg">ideias como <em>MLOps</em> vêm se popularizando</a>. Apesar do conceito não estar completamente consolidado, <em>MLOps</em> sugere a incorporação entre <em>machine learning</em> (ML) e a já estabelecida cultura <em><a href="https://pt.wikipedia.org/wiki/DevOps">DevOps</a></em>, que integra desenvolvimento de softwares (Dev) a operações em infraestrutura (Ops).</p>

<!--
<div markdown="1">
<img src="/img/despliego-y-me-voy_1.jpg" alt="gráfico do Google Trends: interesse ao longo do tempo cresce a partir de 2019" loading="lazy"/>
</div>
-->

<p>Na prática em <em>MLOps</em> todas as etapas de um projeto de aprendizagem de máquina em contexto de mercado estão integradas em um fluxo cíclico. É fácil de encontrar bons diagramas ilustrando a dinâmica da <em>MLOps</em>, mas para os propósitos desse texto vou usar a seguinte releitura pessoal:</p>

<div>
  <p><img src="/img/despliego-y-me-voy_2.jpg" alt="diagrama desenhado à mão com três ciclos encadeados: experimento, modelo e produção" loading="lazy" /></p>
</div>

<p>Alguns elementos recorrentes desse tipo de diagrama estão omitidos ou renomeados – de fato, é uma releitura. Apesar disso, os principais artefatos estão presentes. Após a formulação do problema a ser solucionado pelo produto final do projeto, seu desenvolvimento flui em torno de três eixos:</p>

<ul>
  <li><strong>experimento</strong>: O núcleo “ML” da sigla; basicamente composto do que a maioria dos livros-texto sobre ciência de dados trata: visualização de <strong>dados</strong>, extrações e engenharia de <em>features</em> – padronização, redução de dimensionalidade, inputação de valor, etc –, treino e validação de <strong>algoritmos</strong> de aprendizagem de máquina.<br />
O comum em representações de <em>MLOps</em> é que esse primeiro eixo seja “<em>design</em>” – seguido de “<em>model deployment</em>” e “<em>operations</em>” –, indicando que é onde iterações de definição de escopo do projeto ocorrem. Prefiro “experimento” porque todo processo até a validação do modelo finalista é fundamentalmente exploratório e portanto experimental.<br /><br /></li>
  <li><strong>modelo</strong>: O núcleo “Dev”, oculto na sigla; composto pelo <strong>versionamento</strong> e <strong>empacotamento</strong> do modelo, além da criação de fluxos de <a href="https://pt.wikipedia.org/wiki/CI/CD">CI/CD</a>.<br /><br /></li>
  <li><strong>produção</strong>: O núcleo “Ops” da sigla; composto principalmente pela <strong>implantação</strong> do modelo para uso e seu subsequente <strong>monitoramento</strong>.</li>
</ul>

<p>Vale comentar que há um viés “modelocêntrico” na descrição acima, de modo que os mesmos eixos poderiam ser redefinidos a partir de um ponto de vista centrado em dados.</p>

<h2 id="exemplo">exemplo</h2>

<p>Para materializar as ideias de <em>MLOps</em>, paradoxalmente vou substituir um modelo de aprendizagem de máquina por um algoritmo de busca em grafo. A grande vantagem dessa substituição é a simplificação dos testes de sanidade do resultado final. A adaptação da busca em árvore para a predição de modelos é trivial e será discutida brevemente na seção sobre a página <em>web</em>.<br />
Embora a implementação do algoritmo de busca não seja explicada em detalhes nesse texto, o código pode ser melhor compreedindo através do <em>notebook</em> Kaggle <em><a href="https://www.kaggle.com/thiagodsd/simple-tree-search">Simple Tree Search</a></em>.</p>

<p>Finalmente, o sistema considerado é o conjunto de (algumas) estações do <a href="https://pt.wikipedia.org/wiki/Metr%C3%B4_de_S%C3%A3o_Paulo">metrô da região metropolitana de São Paulo</a> e o problema resolvido é</p>

<blockquote>
  <p>dadas duas estações, qual é o caminho ótimo entre elas?</p>
</blockquote>

<p>No <em>notebook</em> a ideia é que o resultado seja uma imagem do mapa contendo as estações e uma linha representando o caminho ótimo</p>

<div>
  <p><img src="/img/despliego-y-me-voy_3.jpg" alt="mapa de São Paulo com as estações do metrô marcadas nas cores de cada linha" loading="lazy" /></p>
</div>

<p>Entretanto, para simplificar o exemplo desse texto, desconsiderei a construção desse gráfico final e usei apenas o resultado do algoritmo de busca.</p>

<h3 id="experimento">experimento</h3>

<p>Nesse problema especificamente, os experimentos associados a <strong>dados</strong> se concentraram no desenvolvimento de <em>scripts</em> para captura das informações relevantes – estações, latitude, longitude e conexões a outras estações – e transformação para estruturas que possibilitem a execução de algoritmos de busca em grafo. O produto final desse processo é a tabela <code class="language-plaintext highlighter-rouge">metrosp_stations.csv</code> do <em>dataset</em> Kaggle <a href="https://www.kaggle.com/thiagodsd/sao-paulo-metro">São Paulo Metro</a>.</p>

<div>
  <p><img src="/img/despliego-y-me-voy_4.jpg" alt="página do dataset São Paulo Metro no Kaggle, com o mapa das linhas do metrô" loading="lazy" /></p>
</div>

<p>Os experimentos relacionados a <strong>algoritmos</strong> aqui foram focados na escolha da melhor estratégia entre as <a href="https://pt.wikipedia.org/wiki/Categoria:Algoritmos_de_busca">principais técnicas de busca</a> para a representação do metrô de São Paulo em grafo. O algoritmo de busca escolhido é o <em><a href="https://pt.wikipedia.org/wiki/Busca_em_profundidade">depth-first search</a></em>.</p>

<h3 id="modelo">modelo</h3>

<p>Após a seleção de um algoritmo a partir dos resultados dos experimentos, o modelo é documentado, versionado e empacotado para uso produtivo. Uma forma de minimizar esforços nas tarefas de documentação e <strong>empacotamento</strong> é adaptar o modelo ao <em>framework</em> da biblioteca <a href="https://kedro.readthedocs.io/en/stable/">Kedro</a>.</p>
<h4 id="kedro">kedro</h4>

<p>Como a própria documentação da biblioteca sugere, Kedro pode ser entendida como um <em>framework</em> para projetos de ciência de dados. Na prática e a grosso modo, adotar esse <em>framework</em> significa obedecer algumas regras de onde tabelas, parâmetros e funções devem estar para que a biblioteca lide com documentação, empacotamento e publicação do projeto, por exemplo.</p>

<p>O custo dessas facilidades é uma curva de aprendizagem que eu considero levemente íngrime e por isso esse texto vai tratar a biblioteca como uma ferramenta, se esquivando o máximo possível da pretenção de explicar como usá-la. Apesar disso, é útil comentar desde já que a unidade básica do Kedro são os <em>nodes</em> e que <em>pipelines</em> essencialmente são <em>nodes</em> dispostos de forma sequencial.</p>

<h5 id="pipelines-e-nodes"><em>pipelines</em> e <em>nodes</em></h5>

<p>Projetos kedro podem ser iniciados com</p>

<div class="language-sh highlighter-rouge"><div class="highlight"><pre class="highlight"><code>kedro new        <span class="c"># cria o projeto</span>
kedro build-reqs <span class="c"># cria src/requirements.in</span>
kedro <span class="nb">install</span>    <span class="c"># instala as bibliotecas</span>
</code></pre></div></div>

<p>e pipelines são construídos com</p>

<div class="language-sh highlighter-rouge"><div class="highlight"><pre class="highlight"><code>kedro pipeline create nome_do_pipeline
</code></pre></div></div>

<p>O comando <code class="language-plaintext highlighter-rouge">kedro new</code> constrói a estrutura de diretórios do projeto, representada abaixo – com a supressão de alguns que não serão relevantes nesse texto</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>.
├── conf
│   ├── base
│   │   ├── catalog.yml      &lt;--- aqui os dados de entrada e saída são identificados
│   │   ...
│   │   └── parameters.yml   &lt;--- aqui ficam os parâmetros
│   ...
├── data   &lt;--- aqui ficam os dados
│   ...
├── docs   &lt;--- aqui fica a documentação
│   ...
...
└── src
    ├── nome_do_projeto
    │   ...
    │   ├── pipeline_registry.py   &lt;--- aqui os pipelines são declarados
    │   ├── pipelines
    │   │   ├── __init__.py
    │   │   └── nome_do_pipeline
    │   │       ├── __init__.py
    │   │       ├── nodes.py       &lt;--- aqui as funções são definidas
    │   │       ├── pipeline.py    &lt;--- aqui as funções são associadas
    │   │       ...
    │   ...
    ├── requirements.in   &lt;--- aqui vão as bibliotecas
    ...
</code></pre></div></div>

<p><br /></p>

<p>A adaptação de um <em>notebook</em> Kaggle  para a estrutura de projetos Kedro pode ser feita <strong>(1)</strong> transferindo os dados para algum sub-diretório de <code class="language-plaintext highlighter-rouge">data</code> <strong>(2)</strong> os registrando em <code class="language-plaintext highlighter-rouge">conf/base/catalog.yml</code> de acordo com seus tipos</p>

<div class="language-yml highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="na">tabela_1</span><span class="pi">:</span>
  <span class="na">type</span><span class="pi">:</span> <span class="s">pandas.CSVDataSet</span>
  <span class="na">filepath</span><span class="pi">:</span> <span class="s">data/01_raw/dataset_a.csv</span>

<span class="na">tabela_2</span><span class="pi">:</span>
  <span class="na">type</span><span class="pi">:</span> <span class="s">pandas.CSVDataSet</span>
  <span class="na">filepath</span><span class="pi">:</span> <span class="s">data/01_raw/dataset_b.csv</span>

<span class="na">resultado</span><span class="pi">:</span>
  <span class="na">type</span><span class="pi">:</span> <span class="s">json.JSONDataSet</span>
  <span class="na">filepath</span><span class="pi">:</span> <span class="s">data/07_model_output/resultado.json</span>
</code></pre></div></div>

<p><strong>(3)</strong> se necessário adicionando os parâmetros em <code class="language-plaintext highlighter-rouge">conf/base/parameters.yml</code></p>

<div class="language-yml highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="na">param_1</span><span class="pi">:</span> <span class="s2">"</span><span class="s">palavra"</span>

<span class="na">param_2</span><span class="pi">:</span> 
    <span class="pi">-</span> <span class="m">0.001</span>
    <span class="pi">-</span> <span class="m">0.01</span>
    <span class="pi">-</span> <span class="m">0.1</span>
    <span class="pi">-</span> <span class="m">1.0</span>
</code></pre></div></div>

<p><strong>(4)</strong> escrevendo as funções no arquivo <code class="language-plaintext highlighter-rouge">src/nome_do_projeto/pipelines/nome_do_pipeline/nodes.py</code></p>

<div class="language-py highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">def</span> <span class="nf">funcao_1</span><span class="p">(</span><span class="n">t</span><span class="p">:</span><span class="n">pd</span><span class="p">.</span><span class="n">DataFrame</span><span class="p">,</span> <span class="n">s</span><span class="p">:</span><span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">float</span><span class="p">:</span>
    <span class="p">...</span>
    <span class="k">return</span> <span class="n">val</span>


<span class="k">def</span> <span class="nf">funcao_2</span><span class="p">(</span><span class="n">t</span><span class="p">:</span><span class="n">pd</span><span class="p">.</span><span class="n">DataFrame</span><span class="p">,</span> <span class="n">l</span><span class="p">:</span><span class="n">List</span><span class="p">,</span> <span class="n">v</span><span class="p">:</span><span class="nb">float</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Dict</span><span class="p">:</span>
    <span class="p">...</span>
    <span class="k">return</span> <span class="n">dic</span>
</code></pre></div></div>

<p><strong>(5)</strong> replicando a lógica do <em>notebook</em> no arquivo <code class="language-plaintext highlighter-rouge">src/nome_do_projeto/pipelines/nome_do_pipeline/pipeline.py</code>, em forma de <em>nodes</em> agrupados em <em>pipelines</em></p>

<div class="language-py highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">def</span> <span class="nf">create_pipeline</span><span class="p">(</span><span class="o">**</span><span class="n">kwargs</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Pipeline</span><span class="p">:</span>
    <span class="n">pipeline_1</span> <span class="o">=</span> <span class="n">Pipeline</span><span class="p">(</span>
        <span class="p">[</span>
            <span class="n">node</span><span class="p">(</span>
                <span class="n">funcao_1</span><span class="p">,</span>
                <span class="n">inputs</span> <span class="o">=</span> <span class="p">[</span><span class="s">"tabela_1"</span><span class="p">,</span> <span class="s">"params:param_1"</span><span class="p">],</span>
                <span class="n">outputs</span> <span class="o">=</span> <span class="s">"valor_intermediario"</span><span class="p">,</span>
                <span class="n">name</span> <span class="o">=</span> <span class="s">"node_1"</span><span class="p">,</span>
            <span class="p">),</span>
            <span class="n">node</span><span class="p">(</span>
                <span class="n">funcao_2</span><span class="p">,</span>
                <span class="n">inputs</span> <span class="o">=</span> <span class="p">[</span><span class="s">"tabela_2"</span><span class="p">,</span> <span class="s">"params:param_2"</span><span class="p">,</span> <span class="s">"valor_intermediario"</span><span class="p">],</span>
                <span class="n">outputs</span> <span class="o">=</span> <span class="s">"resultado"</span><span class="p">,</span>
                <span class="n">name</span> <span class="o">=</span> <span class="s">"node_2"</span><span class="p">,</span>
            <span class="p">)</span>
        <span class="p">]</span>
    <span class="p">)</span>

    <span class="k">return</span> <span class="n">pipeline_1</span>

</code></pre></div></div>

<p>e <strong>(6)</strong> declarando os <em>pipelines</em> no arquivo <code class="language-plaintext highlighter-rouge">src/nome_do_projeto/pipeline_registry.py</code></p>

<div class="language-py highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kn">from</span> <span class="nn">nome_do_projeto.pipelines</span> <span class="kn">import</span> <span class="n">nome_do_pipeline</span>

<span class="k">def</span> <span class="nf">register_pipelines</span><span class="p">()</span> <span class="o">-&gt;</span> <span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">Pipeline</span><span class="p">]:</span>
    <span class="n">pipeline_1</span> <span class="o">=</span> <span class="n">nome_do_pipeline</span><span class="p">.</span><span class="n">create_pipeline</span><span class="p">()</span>

    <span class="k">return</span> <span class="p">{</span>
        <span class="s">"pipeline_1"</span> <span class="p">:</span> <span class="n">pipeline_1</span><span class="p">,</span>
        <span class="s">"__default__"</span><span class="p">:</span> <span class="n">pipeline_1</span>
        <span class="p">}</span>
</code></pre></div></div>

<h4 id="git">git</h4>

<p>O raciocínio descrito nesses seis passos foi usado na adaptação do <em>notebook</em> <em><a href="https://www.kaggle.com/thiagodsd/simple-tree-search">Simple Tree Search</a></em>. O <strong>versionamento</strong> do projeto foi feito no repositório <a href="https://github.com/thiagodsd/metro-sp-mdp"><code class="language-plaintext highlighter-rouge">metro-sp-mdp</code></a> – a partir daqui é relevante saber que a versão do projeto pode ser controlada através do parâmetro <code class="language-plaintext highlighter-rouge">version</code> da função <code class="language-plaintext highlighter-rouge">setup</code> do arquivo <code class="language-plaintext highlighter-rouge">src/setup.py</code>; o valor desse parâmetro é incorporado no <em>layout</em> da documentação e no nome do arquivo do pacote.</p>

<p>A estrutura do projeto pode ser visualizada com</p>

<div class="language-sh highlighter-rouge"><div class="highlight"><pre class="highlight"><code>kedro viz
</code></pre></div></div>

<div>
  <p><img src="/img/despliego-y-me-voy_5.jpg" alt="pipeline do projeto no Kedro-Viz: nós de carga, tratamento e busca ligados em sequência" loading="lazy" /></p>
</div>

<p>A <strong>documentação</strong> pode ser construída em <code class="language-plaintext highlighter-rouge">docs/build/</code> com</p>

<div class="language-sh highlighter-rouge"><div class="highlight"><pre class="highlight"><code>kedro build-docs
</code></pre></div></div>

<div>
  <p><img src="/img/despliego-y-me-voy_6.jpg" alt="página inicial da documentação Sphinx do pacote metro_sp_mdp" loading="lazy" /></p>
</div>

<div class="language-sh highlighter-rouge"><div class="highlight"><pre class="highlight"><code>kedro package
</code></pre></div></div>

<p><code class="language-plaintext highlighter-rouge">src/dist/</code></p>

<h4 id="pypi">pypi</h4>

<p><code class="language-plaintext highlighter-rouge">~/.pypirc</code></p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>[pypi]
  username = __token__
  password = API_TOKEN   # criada em https://pypi.org/manage/account/
</code></pre></div></div>

<p><code class="language-plaintext highlighter-rouge">src</code></p>

<div class="language-sh highlighter-rouge"><div class="highlight"><pre class="highlight"><code>python3 <span class="nt">-m</span> twine upload dist/<span class="k">*</span> <span class="nt">--verbose</span>
</code></pre></div></div>

<h3 id="produção">produção</h3>

<h4 id="flask">flask</h4>

<div class="language-py highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kn">import</span> <span class="nn">metro_sp_mdp.pipelines.mdp</span> <span class="k">as</span> <span class="n">sp_mdp</span>
<span class="p">...</span>

<span class="n">app</span> <span class="o">=</span> <span class="n">Flask</span><span class="p">(</span><span class="n">__name__</span><span class="p">,</span> <span class="n">template_folder</span><span class="o">=</span><span class="s">'templates'</span><span class="p">)</span>

<span class="o">@</span><span class="n">app</span><span class="p">.</span><span class="n">route</span><span class="p">(</span><span class="s">'/'</span><span class="p">,</span> <span class="n">methods</span><span class="o">=</span><span class="p">[</span><span class="s">'GET'</span><span class="p">,</span> <span class="s">'POST'</span><span class="p">])</span>
<span class="k">def</span> <span class="nf">form_input</span><span class="p">():</span>
    <span class="k">if</span> <span class="n">request</span><span class="p">.</span><span class="n">method</span> <span class="o">==</span> <span class="s">'GET'</span><span class="p">:</span>
        <span class="k">return</span> <span class="n">render_template</span><span class="p">(</span><span class="s">'index.html'</span><span class="p">)</span>
    
    <span class="k">if</span> <span class="n">request</span><span class="p">.</span><span class="n">method</span> <span class="o">==</span> <span class="s">'POST'</span><span class="p">:</span>
        <span class="n">metro_from</span> <span class="o">=</span> <span class="n">request</span><span class="p">.</span><span class="n">form</span><span class="p">[</span><span class="s">'metro_from'</span><span class="p">].</span><span class="n">lower</span><span class="p">()</span>
        <span class="n">metro_to</span> <span class="o">=</span> <span class="n">request</span><span class="p">.</span><span class="n">form</span><span class="p">[</span><span class="s">'metro_to'</span><span class="p">].</span><span class="n">lower</span><span class="p">()</span>
        <span class="p">...</span>
        <span class="k">return</span> <span class="n">render_template</span><span class="p">(</span><span class="s">'index.html'</span><span class="p">,</span> <span class="n">result</span><span class="o">=</span><span class="n">solucao</span><span class="p">[</span><span class="s">'estacoes'</span><span class="p">])</span>

<span class="k">if</span> <span class="n">__name__</span> <span class="o">==</span> <span class="s">'__main__'</span><span class="p">:</span>
    <span class="n">app</span><span class="p">.</span><span class="n">run</span><span class="p">(</span><span class="n">host</span><span class="o">=</span><span class="s">'0.0.0.0'</span><span class="p">,</span> <span class="n">port</span><span class="o">=</span><span class="mi">80</span><span class="p">)</span>
</code></pre></div></div>

<p><br /></p>

<div class="language-html highlighter-rouge"><div class="highlight"><pre class="highlight"><code>
<span class="nt">&lt;form</span> <span class="na">class=</span><span class="s">""</span> <span class="na">action=</span><span class="s">"{{ url_for('form_input') }}"</span> <span class="na">method=</span><span class="s">"POST"</span><span class="nt">&gt;</span>
    <span class="nt">&lt;label</span> <span class="na">for=</span><span class="s">"metro_from"</span><span class="nt">&gt;</span>da estação <span class="nt">&lt;/label&gt;</span> <span class="nt">&lt;input</span> <span class="na">type=</span><span class="s">"text"</span> <span class="na">name=</span><span class="s">"metro_from"</span> <span class="na">id=</span><span class="s">'metro_from'</span><span class="nt">&gt;</span> 
    <span class="nt">&lt;label</span> <span class="na">for=</span><span class="s">"metro_to"</span><span class="nt">&gt;</span>para a estação <span class="nt">&lt;/label&gt;</span> <span class="nt">&lt;input</span> <span class="na">type=</span><span class="s">"text"</span> <span class="na">name=</span><span class="s">"metro_to"</span> <span class="na">id=</span><span class="s">'metro_to'</span><span class="nt">&gt;</span> 
    <span class="nt">&lt;button</span> <span class="na">type=</span><span class="s">"submit"</span> <span class="na">name=</span><span class="s">"button"</span><span class="nt">&gt;</span>resolver<span class="nt">&lt;/button&gt;</span>
<span class="nt">&lt;/form&gt;</span>
<span class="nt">&lt;br/&gt;</span>
<span class="nt">&lt;div</span> <span class="na">class=</span><span class="s">"resultado"</span><span class="nt">&gt;</span>
    {% if result %}
        {% for value in result %}
            {{ value }} - 
        {% endfor %}
    {% endif %}
<span class="nt">&lt;/div&gt;</span>

</code></pre></div></div>

<h4 id="ec2">ec2</h4>

<div class="language-sh highlighter-rouge"><div class="highlight"><pre class="highlight"><code> <span class="nb">chmod </span>400 security_key.pem 
 ssh <span class="nt">-i</span> security_key.pem ec2-user@public_ipv4_address
</code></pre></div></div>

<h4 id="docker">docker</h4>

<div class="language-sh highlighter-rouge"><div class="highlight"><pre class="highlight"><code>kedro docker init
kedro docker build
</code></pre></div></div>

<p><br /></p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>!data/01_raw/metrosp_stations.csv
</code></pre></div></div>

<p><br /></p>

<div class="language-dockerfile highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">ARG</span><span class="s"> BASE_IMAGE=python:3.8-slim</span>
<span class="k">FROM</span><span class="s"> $BASE_IMAGE</span>

<span class="k">RUN </span>pip <span class="nb">install</span> <span class="nt">--upgrade</span> pip
<span class="k">RUN </span>pip <span class="nb">install </span>metro-sp-mdp <span class="nt">--upgrade</span>

<span class="k">WORKDIR</span><span class="s"> /app</span>
<span class="k">ADD</span><span class="s"> . /app</span>

<span class="k">EXPOSE</span><span class="s"> 80</span>
<span class="k">ENTRYPOINT</span><span class="s"> ["python3", "app.py"]</span>
</code></pre></div></div>

<p><br /></p>

<div class="language-sh highlighter-rouge"><div class="highlight"><pre class="highlight"><code>clone <span class="nt">-b</span> release/2.0.0 https://github.com/thiagodsd/metro-sp-mdp.git
<span class="nb">cd </span>metro-sp-mdp/
<span class="nb">sudo </span>service docker start
<span class="nb">sudo </span>docker build <span class="nt">-t</span> metrosp <span class="nb">.</span>
<span class="nb">sudo </span>docker run <span class="nt">-p</span> 80:80 metrosp <span class="nb">.</span>
</code></pre></div></div>]]></content><author><name></name></author><category term="aprendizagem-estatistica" /><category term="notas" /><summary type="html"><![CDATA[anotações desordenadas sobre o que fazer com um modelo treinado]]></summary></entry><entry><title type="html">memória da máquina</title><link href="https://thiagodsd.github.io/2020/01/05/memoria-da-maquina.html" rel="alternate" type="text/html" title="memória da máquina" /><published>2020-01-05T11:43:00+00:00</published><updated>2020-01-05T11:43:00+00:00</updated><id>https://thiagodsd.github.io/2020/01/05/memoria-da-maquina</id><content type="html" xml:base="https://thiagodsd.github.io/2020/01/05/memoria-da-maquina.html"><![CDATA[<p>Anotações desordenadas sobre as periferias da aprendizagem estatística.</p>

<h2 id="o-hello-world-do-raciocínio-probabilístico">o hello world do raciocínio probabilístico</h2>

<p class="topico">estatística</p>

<p>Do ponto de vista estatístico ambas, regressão e classificação, podem ser pensadas como a busca pela aproximação de uma certa $f(y | x, w)$ que relaciona o conjunto de propriedades $x$ de uma observação à chance $p$ de certa informação de interesse $y$ dessa observação possuir determinado valor.</p>

<p>Em uma regressão $y$ é uma variável contínua. No problema de classificação $y$ é discreta. Em particular $y \in \{0, 1\}$ dá origem a problemas de classificação binária.<br />
Fundamentalmente essa função $f$ tal que $f(y | x,w) \mapsto p$ nunca é completamente conhecida então há alguma liberdade na sua escolha. Desde um ponto de vista probabilístico as funções que compõem a chamada <em>família exponencial</em> recebem atenção especial na tarefa de estimar $p$. Duas escolhas clássicas são</p>

\[\begin{cases}
p \sim \mathcal{N}(y|w^T \phi(x), \sigma^2) \qquad \text{(regressão)} \\
p \sim Bern\left( y | \frac{1}{1+e^{-w^T x}} \right) \quad \text{(classificação)} 
\end{cases}\]

<h2 id="a-regressão-logística">a regressão logística</h2>

<p class="topico">classificação</p>

<p>Nos primórdios nada havia. Então surgiu a regressão linear. Muita gente boa debruçou sobre esse problema, dando origem a métodos como o dos mínimos quadrados. A princípio os métodos de regressão só funcionam quando a variável de interesse $y$ – ou <em>“target”</em>, ou <em>“variável resposta”</em>, ou <em>“variável dependente”</em> – é contínua.</p>

<p>A ideia na regressão logística é usar técnicas/algoritmos de regressão para resolver problemas de classificação. Daí a esquizofrenia da regressão logística – um método de classificação com “regressão” no nome.</p>

<p>O truque é limitar o resultado da regressão no intervalo $\left[0, 1\right]$, para ter cara de probabilidade, e eventualmente definir um valor de probabilidade que separa as classes $0$ e $1$.</p>

<p>Há algumas funções que satisfazem essa necessidade, mas no lugar de sacar uma delas é interessante pensar no problema inverso: como levar algo de $[0,1]$ em $\mathbb{R}$?</p>

<p>Algo com a cara $\mathcal{F}(x) = \frac{1}{x}$ serve para levar para o infinito. Nesse caso:</p>

\[\begin{cases}
\mathcal{F}(p=0) = \infty \\
\mathcal{F}(p=1) = 1
\end{cases}\]

<p>Um detalhe da $\mathcal{F}$ é que probabilidades altas levam a valores pequenos e vice-versa. Uma forma de acalmar os corações mais desesperados dos apostadores do mundo é construí-la como $\mathcal{F}(x) = \frac{1}{\frac{1}{x}-1}$, assim:</p>

\[\begin{cases}
\mathcal{F}(p=0) = 0  \\
\mathcal{F}(p=1) = +\infty
\end{cases}\]

<p>Para atingir o outro infinito a $\mathcal{G}(x) = log(x)$ resolve:</p>

\[\begin{cases}
\mathcal{G}(\mathcal{F}(p=0)) = -\infty  \\
\mathcal{G}(\mathcal{F}(p=1)) = +\infty
\end{cases}\]

<p>Essas duas funções $\mathcal{F}(p)$ e $\mathcal{G}(\mathcal{F}(p))$ são chamadas por aí respectivamente de <em><strong>odds</strong></em>, ou “chance”, e <em><strong>logit</strong></em>, que já vi chamarem de “logíto” também.<br />
$\mathcal{G}(\mathcal{F}(p))$ leva <em>pseudo-probabilidades</em> nos reais, então para para resolver um problema de classificação usando os métodos de regressão, basta aplicar $\mathcal{F}^{-1}(\mathcal{G}^{-1}(\cdot)) \equiv \sigma(\cdot)$ no resultado.<br />
Essa inversa também tem nome: <em><strong>função sigmoide</strong></em></p>

\[\sigma(x) = \frac{1}{1+e^{-x}}\]

<p><br /></p>

<p>Com respeito ao modelo é interessante observar que os parâmetros de ajuste $w$ não são as probabilidades, senão os logitos. Como $p \sim \sigma(w^T x)$, então</p>

<p>\begin{equation} 
\boxed{ w^Tx = log \left( \frac{p}{1-p} \right) } \label{reglog} 
\end{equation}</p>

<p><br /></p>

<p>Uma das hipóteses da regressão logística é que as observações são distribuídas de forma que $p(y=c) \sim Bern$, com $c \in \{0, 1\}$, ou seja</p>

\[\begin{cases}
 Bern(y=1) = p    \\
 Bern(y=0) = 1-p 
\end{cases}\]

<p>À luz disso é interessante olhar pra $\mathcal{F}$ uma última vez:</p>

\[\text{odds} = \frac{p}{1-p} = \frac{Bern(y=1)}{Bern(y=0)} = \frac{\text{evento}}{\neg\text{evento}} = \frac{p_+}{p_-} =  \frac{\sigma(w^T x)}{1-\sigma(w^T x)} = \frac{\sigma(w^T x)}{\sigma(-w^T x)}\]

<h2 id="reforço">reforço</h2>

<p class="topico">aprendizagem estatística</p>

<p>De forma completamente rasteira e sem compromisso com qualquer espécie de rigor:</p>

<h3 id="do-mdp-à-equação-de-bellman">do mdp à equação de bellman</h3>

<p>Alguns sistemas – sobretudo os de tomadas de decisões sequenciais – podem ser estruturados de acordo com o framework <em><a href="https://en.wikipedia.org/wiki/Markov_decision_process">Markov Decision Process</a></em> (MDP). Nele é suposta que a <em><a href="https://pt.wikipedia.org/wiki/Propriedade_de_Markov">propriedade de Markov</a></em> é satisfeita para o sistema, ou seja, que as probabilidades de transição entre estados não depende de toda a história dos eventos e ações nesse sistema, senão apenas do estado anterior – ou seja, nesses sistemas o que impera é a memória curta; nesse sentido, nosso sistema eleitoral pode ser estruturado de acordo com um MDP. Essa propriedade pode ser resumida por</p>

\[P(S_{t+1} \mid S_t, A_t) = P(S_{t+1} \mid S_t, A_t, S_{t-1}, A_{t-1}, \dots)\]

<p>em que $S_{i}$ é o estado do sistema no i-ésimo instante – esse estado é elemento do conjunto $\mathcal{S} = \left[ s_1, s_2, \dots, s_n \right]$ de todos estados possíveis de serem acessados no sistema. Analogamente, $A_i$ é a ação executada no i-ésimo instante, podendo assumir os valores contidos no conjunto $\mathcal{A} = \left[ a_1, a_2, \dots, a_n \right]$ que contém todas as ações possíveis.</p>

<p>Além disso, é suposto que há uma recompensa final $G$ que é resultado de retornos parciais $R$ devidas à sequência de ações</p>

\[G_t = R_{t+1} + R_{t+2} \dots R_{T}\]

<p>Em que $R_T$ é a recompensa do estado terminal. Então, em um MDP, a probabilidade $p$ de receber a recompensa $r$ transitando do estado $s$ para o estado $s’$ após a ação $a$ satisfaz</p>

\[\begin{cases}
p(s', r \mid s, a) = P(S_t=s', R_t=r \mid S_{t-1}=s, A_{t-1}=a) \\
\sum_{s' \in \mathcal{S}} \sum_{r \in \mathcal{R}}p(s', r \mid s, a) = 1
\end{cases}\]

<p>Contudo, no contexto de tomada de decisão sequencial o tempo tem papel central, de modo que é natural interpretar que a melhor sequência de tomada de decisão é a que chega a bons estados terminais mais rapidamente – ou seja, quanto maior o tempo gasto para ganho de recompensas futuras, menos elas valem. Essa urgência pode ser expressada através do decremento temporal proporcional a um fator de desconto $\gamma \in \left[0, 1\right]$ tal que</p>

\[\begin{aligned}
G_t =&amp; \gamma^{0}R_{t+1} + \gamma^{1}R_{t+2} \dots \gamma^{T-1}R_{T}  \\
=&amp; \sum_{k=0}^{T-1} \gamma^{k}R_{t+k+1} \\
lim_{T\to\infty}G_t =&amp; R_{t+1} + \gamma G_{t+1}
\end{aligned}\]

<p>Disso, surgem provavelmente as duas funções em torno das quais orbitam todos os métodos de aprendizagem por reforço: $v_{\pi}(s)$ e $q_{\pi}(s,a)$.</p>

<p>É interessante sintetizar que, <strong>conceitualmente, o objetivo da aprendizagem por reforço é aprender políticas $\pi$</strong> que otimizem a função objetivo</p>

\[J(\pi) = E_{\pi}\left[ \sum_{t} \gamma^{t}r(s_t, a_t) \right]\]

<h4 id="função-v_pis">função $v_{\pi}(s)$</h4>

<p>A (mal traduzindo) função estado-valor $v_{\pi}(s)$ é definida como uma medida da recompensa esperada por seguir a política $\pi$ partindo do estado $s$ – também pode ser interpretada como uma função que atribui um valor a um estado $s$ quando a política $\pi$ é usada na tomada de decisão. Ou seja</p>

\[v_{\pi}(s) \equiv E_{\pi}\left[ G_t \mid S_t = s\right]\]

<p>Desenvolvendo:</p>

\[\begin{aligned}
v_{\pi}(s) =&amp; E_{\pi}\left[ G_t \mid S_t = s\right] \\
  =&amp; E_{\pi}\left[ R_{t+1} + \gamma G_{t+1} \mid S_t = s\right] \\
\text{linearidade da média}  =&amp; E_{\pi}\left[ R_{t+1} \mid S_t = s\right] + \gamma E_{\pi}\left[G_{t+1} \mid S_t = s\right] \\
\end{aligned}\]

<p>O primeiro termo é a recompensa esperada dado um estado $s$. Por definição de média para variáveis discretas combinada às propriedades das funções densidade probabilidade</p>

\[\begin{aligned}
E_{\pi}\left[ R_{t+1} \mid S_t = s\right] =&amp; \sum_{r \in \mathcal{R}} r \, p(r \mid s) \\
=&amp; \sum_{r \in \mathcal{R}} \sum_{s' \in \mathcal{S}} \sum_{a \in \mathcal{A}} r \, p(s', a, r \mid s) \\
=&amp; \sum_{r \in \mathcal{R}} \sum_{s' \in \mathcal{S}} \sum_{a \in \mathcal{A}} r \, p(s', r \mid s, a)p(a \mid s) 
\end{aligned}\]

<p>O segundo tem desenvolvimento análogo</p>

\[\begin{aligned}
\gamma E_{\pi}\left[G_{t+1} \mid S_t = s\right] =&amp; \gamma \sum_{g \in \mathcal{G}} g \, p(g \mid s) \\
=&amp; \gamma \sum_{g \in \mathcal{G}} \sum_{r \in \mathcal{R}} \sum_{s' \in \mathcal{S}} \sum_{a \in \mathcal{A}} g \, p(g, s', a, r \mid s) \\
=&amp; \gamma \sum_{g \in \mathcal{G}} \sum_{r \in \mathcal{R}} \sum_{s' \in \mathcal{S}} \sum_{a \in \mathcal{A}} g \, p(g\mid s', a, r, s) p(s', a, r \mid s) \\
=&amp; \gamma \sum_{g \in \mathcal{G}} \sum_{r \in \mathcal{R}} \sum_{s' \in \mathcal{S}} \sum_{a \in \mathcal{A}} g \, p(g\mid s', a, r, s) p(s', r \mid s, a)p(a \mid s) \\
\text{propriedade de markov}=&amp; \gamma \sum_{g \in \mathcal{G}} \sum_{r \in \mathcal{R}} \sum_{s' \in \mathcal{S}} \sum_{a \in \mathcal{A}} g \, p(g\mid s') p(s', r \mid s, a)p(a \mid s) \\
=&amp; \gamma  \sum_{r \in \mathcal{R}} \sum_{s' \in \mathcal{S}} \sum_{a \in \mathcal{A}} \left( \sum_{g \in \mathcal{G}} g \, p(g\mid s') \right)p(s', r \mid s, a)p(a \mid s) \\
=&amp; \gamma  \sum_{r \in \mathcal{R}} \sum_{s' \in \mathcal{S}} \sum_{a \in \mathcal{A}} v_{\pi}(s') p(s', r \mid s, a)p(a \mid s) \\
\end{aligned}\]

<p>Então</p>

\[\begin{aligned}
v_{\pi}(s) =&amp; E_{\pi}\left[ G_t \mid S_t = s\right] \\
=&amp; \sum_{r \in \mathcal{R}} \sum_{s' \in \mathcal{S}} \sum_{a \in \mathcal{A}} p(a \mid s) p(s', r \mid s, a) \left[ r + \gamma v_{\pi}(s') \right] \\
=&amp; \sum_{a \in \mathcal{A}} p(a \mid s) \sum_{r \in \mathcal{R}} \sum_{s' \in \mathcal{S}}  p(s', r \mid s, a) \left[ r + \gamma v_{\pi}(s') \right] \\
\end{aligned}\]

\[\boxed{v_{\pi}(s) = \sum_{a \in \mathcal{A}} \pi(a \mid s) \sum_{r \in \mathcal{R}} \sum_{s' \in \mathcal{S}}  p(s', r \mid s, a) \left[ r + \gamma v_{\pi}(s') \right]}\]

<p>Eu tenho sérias dúvidas se essa já é a <a href="https://es.wikipedia.org/wiki/Ecuaci%C3%B3n_de_Bellman">equação de Bellman</a> para sistemas descritos como MDP, ou se as equações de Bellman são as que definem as condições de otimalidade para a solução da equação acima.</p>

<h4 id="função-q_pisa">função $q_{\pi}(s,a)$</h4>

<p>A (mal traduzindo) função estado-ação-valor $q_{\pi}(s,a)$ é definida como uma medida da recompensa esperada por seguir a política $\pi$ partindo do estado $s$ executando a ação $a$ – ou seja, é uma função que atribui um valor à ação $a$ executada no estado $s$. Ou seja</p>

\[q_{\pi}(s,a) \equiv E_{\pi}\left[ G_t \mid S_t = s, A_t = a\right]\]

<p>É possível desenvolver essa equação usando as mesmas ideias da seção anterior. Nesse caso a conclusão seria que</p>

\[\boxed{q_{\pi}(s,a) = \sum_{r \in \mathcal{R}} \sum_{s' \in \mathcal{S}}  p(s', r \mid s, a) \left[ r + \gamma v_{\pi}(s') \right]}\]

<p>É curioso notar que</p>

\[v_{\pi}(s) = \sum_{a \in \mathcal{A}} \pi(a \mid s) q_{\pi}(s,a).\]

<h4 id="comentários">comentários</h4>

<h5 id="operador-de-bellman">operador de bellman</h5>

<p>No caso de políticas determinísticas $a = \pi(s)$, então</p>

\[\begin{aligned}
v_{\pi}(s) &amp;= r(s,\pi(s)) + \gamma \sum_{s' \in \mathcal{S}}  p(s' \mid s, a)  v_{\pi}(s') \\
q_{\pi}(s,a) &amp;= r(s,a)  + \gamma \sum_{s' \in \mathcal{S}}  p(s' \mid s, a) q_{\pi}(s', \pi(s'))
\end{aligned}\]

<p>Nesse cenário determinístico é possível construir operadores com propriedades muito importantes – exploradas nesse texto. Os operadores são</p>

\[\begin{aligned}
(T_{1}^{\pi} V)(s) &amp;= r(s,\pi(s)) + \gamma \sum_{s' \in \mathcal{S}}  p(s' \mid s, a)  V(s') \\
(T_{2}^{\pi} Q)(s,a) &amp;= r(s,a) + \gamma \sum_{s' \in \mathcal{S}}  p(s' \mid s, a)  Q(s', \pi(s')) 
\end{aligned}\]

<p>Com $T_{1}^{\pi} : (S \rightarrow \mathbb{R}) \rightarrow (S \rightarrow \mathbb{R})$ e $T_{2}^{\pi} : (S \times A \rightarrow \mathbb{R}) \rightarrow (S \times A \rightarrow \mathbb{R})$. Então as equações de Bellman assumem a forma</p>

\[\begin{aligned}
T_{1}^{\pi} V^{\pi} &amp;= V^{\pi} \\
T_{2}^{\pi} Q^{\pi} &amp;= Q^{\pi} 
\end{aligned}\]

<h5 id="otimalidade">otimalidade</h5>

<p>Uma política ótima é alguma que, dentre todas as políticas possíveis, dá os maiores retornos esperados possíveis para todos os estados. Como</p>

\[v_{\pi}(s) \equiv E_{\pi}\left[ G_t \mid S_t = s\right]\]

<p>então</p>

\[v_{\pi}(s) \geq v_{\pi^{\prime}}(s) \longrightarrow \pi \geq \pi^{\prime}, \,\, \forall s \in S\]

<p>É possível existir mais de uma política ótima, porém todas compartilham as mesmas funções estado-valor e ação-estado-valor</p>

\[\begin{aligned}
v^{*}(s) &amp;\equiv \underset{\pi}{max}\, v_{\pi}(s), &amp; \forall s \in S \\
q^{*}(s,a) &amp;\equiv \underset{\pi}{max}\, q_{\pi}(s,a), &amp; \forall s \in S, \, \forall a \in A
\end{aligned}\]

<p>Conceitualmente – e por construção – o valor de um estado de acordo com a política ótima deve coincidir com o retorno esperado associado a esse estado ao se executar a melhor ação do estado – certo? Então</p>

\[v^{*}(s) = \underset{a}{max} E_{\pi^{*}}\left[ G_t \mid S_t = s, A_t = a\right] \equiv \underset{a}{max}\, q^{*}(s,a)\]

<p>de onde é possível escrever</p>

\[\begin{aligned}
v^{*}(s) &amp;\equiv \underset{a}{max}\, q^{*}(s,a) \\
&amp;= \underset{a}{max}\, \sum_{r \in \mathcal{R}} \sum_{s' \in \mathcal{S}}  p(s', r \mid s, a) \left[ r + \gamma v^{*}(s') \right]
\end{aligned}\]

<p>e</p>

\[\begin{aligned}
q^{*}(s,a) &amp;= \sum_{r \in \mathcal{R}} \sum_{s' \in \mathcal{S}}  p(s', r \mid s, a) \left[ r + \gamma v^{*}(s') \right] \\
&amp;= \sum_{r \in \mathcal{R}} \sum_{s' \in \mathcal{S}}  p(s', r \mid s, a) \left[ r + \gamma \underset{a^{\prime}}{max}\, q^{*}(s',a') \right] 
\end{aligned}\]

<h3 id="temporal-difference-learning"><em>temporal-difference learning</em></h3>

<p style="color: red; font-weight: light;"> <i>a partir daqui os parágrafos são rascunhos e esboços</i> </p>

<ul>
  <li>$\text{policy evaluation} \quad (v^{*}:v\mid\pi) \rightarrow \text{prediction problem}$</li>
  <li>$\text{optimal policy search} \quad (\pi^{*}) \rightarrow \text{control problem}$</li>
</ul>

<p>Em contraste aos métodos <em>Monte Carlo</em>, em que o problema da predição é resolvido levando-se em conta a recompensa $G_t$</p>

\[\text{MC: } \, V(S_t) \leftarrow V(S_t) + \alpha\left[ G_t - V(S_t)\right] \quad (\text{target: }G_t)\]

<p>nos métodos <em>Temporal-Difference</em> o problema é resolvido levando em conta os retornos parciais $R_t$, de acordo com</p>

\[\text{TD: } \, V(S_t) \leftarrow V(S_t) + \alpha\left[ R_{t+1} - \gamma V(S_{t+1}) -V(S_t))\right] \quad (\text{target: }R_{t+1} - \gamma V(S_{t+1}))\]

<p>de onde surge a forma mais primitiva do algoritmo TD para estimativa de $v_{\pi}$</p>

<pre id="tdzero" class="pseudocode" style="display:none;">
\begin{algorithm}
\caption{TD}
\begin{algorithmic}
\Procedure{TD}{$\pi,\alpha \in [0,1)$} 
    \State inicializa $V(s)$ aleatoriamente
    \State define $V(terminal)=0$
    \For{episódio}
    \State inicializa $S$
    \Repeat
        \State $A \leftarrow a$ de acordo com $\pi(a \mid s)$
        \State observa $R$ e $S'$
        \State $V(S) \leftarrow V(S) + \alpha\left[ R - \gamma V(S') - V(S))\right]$
        \State $S \leftarrow S'$
    \Until{$S$ é estado terminal}
    \EndFor
\EndProcedure
\end{algorithmic}
\end{algorithm}
</pre>

<p>Dessa estrutura derivam dois importantes métodos</p>

<h4 id="sarsa-on-policy">sarsa (<em>on-policy</em>)</h4>

<p>Nessa abordagem a função aprendida é a $q_{\pi}(s,a)$, com passo de atualização</p>

\[Q(S_t, A_t) \leftarrow Q(S_t, A_t) + \alpha\left[ R_{t+1} - \gamma Q(S_{t+1}, A_{t+1}) - Q(S_t, A_t))\right]\]

<div class="two-column-section">
  <div class="two-column-row">
    <div class="two-column-column">
      <div class="left-column">

        <pre id="sarsa" class="pseudocode" style="display:none;">
\begin{algorithm}
\caption{SARSA}
\begin{algorithmic}
\Procedure{SARSA}{$\pi,\alpha \in [0,1), \epsilon \to 0^{+}$} 
    \State inicializa $Q(s,a)$ aleatoriamente
    \State define $Q(terminal, \cdot)=0$
    \For{episódio}
    \State inicializa $S$
    \State escolhe $A$ em $S$ de acordo com $\pi(a \mid s)$ de $Q$
    \Repeat
        \State observa $R$ e $S'$
        \State escolhe $A'$ em $S'$ de acordo com $\pi(a \mid s)$ de $Q$
        \State $Q(S,A) \leftarrow Q(S,A) + \alpha\left[R - \gamma Q(S',A') - Q(S,S))\right]$
        \State $S \leftarrow S'$
        \State $A \leftarrow A'$
    \Until{$S$ é estado terminal}
    \EndFor
\EndProcedure
\end{algorithmic}
\end{algorithm}
</pre>

      </div>
    </div>
    <div class="two-column-column">
      <div class="right-column-grey">

        <div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1"># ...
</span></code></pre></div>        </div>

      </div>
    </div>
  </div>
</div>

<h4 id="q-learning-off-policy">q-learning (<em>off-policy</em>)</h4>

<p>Nessa abordagem há uma mudança sutil: a função aprendida é a ação-valor ótima $q_{*}(s,a)$, com passo de atualização</p>

\[Q(S_t, A_t) \leftarrow Q(S_t, A_t) + \alpha\left[ R_{t+1} - \gamma \underset{a}{max} Q(S_{t+1}, a) - Q(S_t, A_t))\right]\]

<div class="two-column-section">
  <div class="two-column-row">
    <div class="two-column-column">
      <div class="left-column">

        <pre id="qlearning" class="pseudocode" style="display:none;">
\begin{algorithm}
\caption{Q-Learning}
\begin{algorithmic}
\Procedure{QL}{$\alpha \in [0,1), \epsilon \to 0^{+}$} 
    \State inicializa $Q(s,a)$ aleatoriamente
    \State define $Q(terminal, \cdot)=0$
    \For{episódio}
    \State inicializa $S$
    \Repeat
        \State escolhe $A$ em $S$ de acordo com $Q$
        \State observa $R$ e $S'$
        \State $Q(S,A) \leftarrow Q(S,A) + \alpha\left[R - \gamma \underset{a}{max} Q(S',a) - Q(S,A))\right]$
        \State $S \leftarrow S'$
    \Until{$S$ é estado terminal}
    \EndFor
\EndProcedure
\end{algorithmic}
\end{algorithm}
</pre>

      </div>
    </div>
    <div class="two-column-column">
      <div class="right-column-grey">

        <div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1"># ...
</span></code></pre></div>        </div>

      </div>
    </div>
  </div>
</div>

<h4 id="double-q-learning">double q-learning</h4>

<p>Para evitar o “viés da maximização” no Q-Learning, causado pelo uso dos mesmos valores usados para ambos, obter a ação que maximiza a função ação-valor e estimar seu valor, é introduzida uma segunda função ação-valor, de modo a desacoplar esses dois passos, fazendo o passo de atualização passar a ser</p>

\[Q_{1}(S_t, A_t) \leftarrow Q_{1}(S_t, A_t) + \alpha\left[ R_{t+1} - \gamma Q_{2}\left(S_{t+1}, \underset{a}{max} Q_{1}(S_{t+1}, a)\right) - Q_{1}(S_t, A_t))\right]\]

<div class="two-column-section">
  <div class="two-column-row">
    <div class="two-column-column">
      <div class="left-column">

        <pre id="doubleqlearning" class="pseudocode" style="display:none;">
\begin{algorithm}
\caption{Double Q-Learning}
\begin{algorithmic}
\Procedure{DQL}{$\alpha \in [0,1), \epsilon \to 0^{+}$} 
    \State inicializa $Q_{1}(s,a)$ aleatoriamente
    \State inicializa $Q_{2}(s,a)$ aleatoriamente
    \State define $Q_{1}(terminal, \cdot)=0$
    \State define $Q_{2}(terminal, \cdot)=0$
    \For{episódio}
    \State inicializa $S$
    \Repeat
        \State escolhe $A$ em $S$ de acordo com $Q_{1}+Q_{2}$
        \State observa $R$ e $S'$
        \State $p \leftarrow \mathcal{U}_{[0,1]}$
        \If{$p &gt; 0.5$}
            \State $Q_{1}(S,A) \leftarrow Q_{1}(S,A) + \alpha\left[R - \gamma Q_{2}\left(S', \underset{a}{max} Q_{1}(S',a)\right) - Q_{1}(S, A))\right]$
        \Else
            \State $Q_{2}(S,A) \leftarrow Q_{2}(S,A) + \alpha\left[R - \gamma Q_{1}\left(S', \underset{a}{max} Q_{2}(S',a)\right) - Q_{2}(S, A))\right]$
        \EndIf
        \State $S \leftarrow S'$
    \Until{$S$ é estado terminal}
    \EndFor
\EndProcedure
\end{algorithmic}
\end{algorithm}
</pre>

      </div>
    </div>
    <div class="two-column-column">
      <div class="right-column-grey">

        <div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1"># ...
</span></code></pre></div>        </div>

      </div>
    </div>
  </div>
</div>

<p><br />
<br />
<br />
<br /></p>
<p style="color: red; font-weight: light;"> <i>a partir daqui os parágrafos são rascunhos e esboços</i> </p>
<p><br />
<br />
<br />
<br /></p>

<h2 id="rascunhos">rascunhos</h2>

<h3 id="construção-axiomática-de-kolmogorov">construção axiomática de kolmogorov</h3>

<p class="topico">probabilidade</p>

<p>Dados eventos $A_1, A_2, \dots ,A_n \in \mathcal{A}$, disjuntos, em que $\mathcal{A}$ é uma $\sigma$-álgebra do conjunto $\Omega$, denotando $P(A_i)$ a probabilidade de $A_i$, segue uma função $P$ definida em $\mathcal{A}$ satisfazendo</p>

<p>A1. $P(A) \geq 0$</p>

<p>A2. $P(\Omega) = 1$</p>

<p>A3. $P \left( \bigcup_{n=1}^{\infty} A_n \right) = \sum_{n=1}^{\infty} P(A_n)$</p>

<p>é chamada <strong>medida de probabilidade</strong> em $\mathcal{A}$ e satisfaz as seguintes propriedades</p>

<p>P1. $P(A^c) = 1 - P(A)$</p>

<p>P2. $0 \leq P(a) \leq 1$</p>

<p>P3. $A_1 \subset A_2 \Rightarrow P(A_1) \leq P(A_2)$</p>

<p>P4. $P \left( \bigcup_{i=1}^{\infty} A_i \right) \leq \sum_{i=1}^{\infty} P(A_i)$</p>

<p>P5. $A_n \uparrow A \Rightarrow P(A_n) \uparrow P(A) \qquad e \qquad A_n \downarrow A \Rightarrow P(A_n) \downarrow P(A)$</p>

<p><br /></p>

<h4 id="probabilidade-condicional">probabilidade condicional</h4>

<p>A probabilidade condicional do evento $A$ dada observação de $B$ pode ser definida como</p>

\[P(A  \mid  B) = \frac{P(A \cap B)}{P(B)}\]

<p>expresando um resultado intuitivo: dados $n$ ensaios independentes de $A$ e $B$, no limite de $n \to \infty$ é razoável que</p>

\[P(A \mid B) \sim \frac{1}{n} \left( \frac{\text{ocorrências de A e B}}{\text{ocorrências de B}} \right)\]

<p>Disso segue que</p>

<ul>
  <li>$P(A \cap B) = P(B)P(A \mid B)$</li>
  <li>$P(A \cap B \cap C) = P(A)P(B \mid A)P(C \mid A \cap B)$</li>
</ul>

<p>esse segundo resultando podendo ser generalizado para o <strong>teorema da probabilidade composta</strong>, onde vale que</p>

\[P(A_1 \cap \dots \cap A_n) = P(A_1)P(A_2  \mid  A_1)P(A_3 \mid A_1 \cap A_2) \dots P(A_n  \mid  A_1 \cap \dots \cap A_{n-1})\]

<p>Dada a disjuntividade dos $A_i$, um evento $B \in \mathcal{A}$ pode ser representado como</p>

\[B = \bigcup_i (A_i \cap B)\]

<p>consequentemente</p>

\[P(B) = \sum_i P(A_i \cap B) = \sum_i P(A_i)P(B \mid A_i)\]

<p><br /></p>

<h4 id="fórmula-de-bayes">fórmula de bayes</h4>

<p>Combinando os resultados anteriores segue a fórmula de Bayes</p>

\[\boxed{ P(A_i  \mid  B) = \frac{P(A_i \cap B)}{P(B)} = \frac{P(A_i)P(B \mid A_i)}{\sum_j P(A_j)P(B \mid A_j)} }\]

<div class="example">

  <h5 id="exemplo-1">exemplo 1</h5>

  <p>Uma caixa contém duas moedas honestas e uma com duas caras. Lançando uma delas ao acaso e verificando que o resultado foi cara, qual é a probabilidade da moeda lançada ter sido a de duas caras?</p>

  <p>Definindo</p>

  <ul>
    <li>$A_1$ como moeda honesta</li>
    <li>$A_2$ como moeda de duas caras</li>
    <li>$B$ como resultado igual a cara</li>
  </ul>

  <p>a probabilidade deseja é definida por $P(A_2  \mid  B)$. Pela fórmula de Bayes</p>

\[P(A_2  \mid  B) = \frac{P(A_2)P(B \mid A_2)}{P(A_1)P(B \mid A_1) + P(A_2)P(B \mid A_2)} = \frac{\frac{1}{3}1}{\frac{2}{3}\frac{1}{2} + \frac{1}{3}1} = \frac{1}{2}\]

</div>

<p><br /><br /></p>

<div class="example">

  <h5 id="exemplo-2">exemplo 2</h5>

  <p>Definindo o estado de saúde de uma pessoa como</p>

  <ul>
    <li>$d=1$ a pessoa tem a doença $D$</li>
    <li>$d=0$ a pessoa não tem a doença $D$</li>
  </ul>

  <p>sabendo que um teste $T$ possui 95% de acurácia para detectar a doença em pacientes que de fato possuem a doença $D$, e que esse mesmo teste possui 95% de acurácia para detectar que pacientes saudáveis não possuem a doença $D$.</p>

  <p>Se apenas 1% da população mundial possui a doença $D$, qual a chance de alguém obter positivo no teste $T$ e realmente ter a doença $D$?</p>

  <p>Denotando por</p>

  <ul>
    <li>$t=1$ o resultado do teste sendo positivo</li>
    <li>$t=0$ o resultado do teste sendo negativo</li>
  </ul>

  <p>seguem das informações de acurácia do teste que</p>

  <ul>
    <li>$P(t=1  \mid  d=1) = 0.95$</li>
    <li>$P(t=0  \mid  d=1) = 0.05$</li>
    <li>$P(t=1  \mid  d=0) = 0.05$</li>
    <li>$P(t=0  \mid  d=0) = 0.95$</li>
  </ul>

  <p>e das informações da população mundial segue que</p>

  <ul>
    <li>$P(d=1) = 0.01$</li>
    <li>$P(d=0) = 0.99$</li>
  </ul>

  <p>então a fórmula de Bayes mostra que</p>

\[P(d=1  \mid  t=1) = \frac{P(t=1 \mid d=1)P(d=1)}{P(t=1 \mid d=1)P(d=1)+P(t=1 \mid d=0)P(d=0)} = 0.16\]

</div>

<p><br /><br /></p>

<div class="example">

  <h5 id="exemplo-3">exemplo 3</h5>

  <div>
    <p><img src="/img/memoria-da-maquina_1.png" alt="11 urnas de u=0 a u=10 com bolas pretas e brancas; uma urna desconhecida e N retiradas com reposição" loading="lazy" /></p>
  </div>

  <p>Dadas $11$ urnas $u=0, u=1, \dots, u={10}$, todas com $10$ bolas, sendo $u$ delas bolas pretas. Alguém escolhe uma das urnas ao acaso e realiza $N$ sorteios com reposição. Se após $N$ sorteios, $n_B$ bolas pretas foram obtidas, qual a probabilidade da urna $u$ ter sido a escolhida?</p>

  <p>A probabilidade buscada é \(P(u  \mid  n_B, N)\) ou seja, a probabilidade da urna $u$ ter sido escolhida, dado que das $N$ bolas, $n_B$ são pretas.</p>

  <p>Pela fórmula de Bayes</p>

\[P(u  \mid  n_B, N) = \frac{P(n_B  \mid  u, N)P(u  \mid  N)}{P(n_B  \mid  N)}.\]

  <p>$P(n_B  \mid  u, N)$ é a probabilidade de se obter $n_B$ bolas pretas dado que $N$ sorteios foram realizados na urna $u$. 
A probabilidade de sortear uma bola preta, na urna $u$, em um sorteio único é \(\frac{u}{10}\) enquanto a probabilidade da bola sorteada não ser preta é \(\left(1 - \frac{u}{10} \right).\)</p>

  <p>Em $N$ sorteios, a probabilidade de sortear $n_B$ bolas pretas é dada pelo produto</p>

\[\left[ \left( \frac{u}{10} \right)\left( \frac{u}{10} \right) \dots \left(1 - \frac{u}{10} \right)\left(1 - \frac{u}{10} \right) \right]= \left( \frac{u}{10} \right)^{n_B}\left(1 - \frac{u}{10} \right)^{N-n_B}.\]

  <p>Como a ordem não importa, segue que</p>

\[P(n_B  \mid  u, N) = \frac{N!}{n_B!(N-n_B)!}\left( \frac{u}{10} \right)^{n_B}\left(1 - \frac{u}{10} \right)^{N-n_B}.\]

  <p>$P(u  \mid  N)$ é a probabilidade de escolher a urna $u$ - que essencialmente não depende de N, portanto \(P(u  \mid  N)=P(u)=\frac{1}{11}.\)</p>

  <p>$P(n_B  \mid  N)$ é a probabilidade marginal de $n_B$ - eventualmente chamada de <em>evidência</em>, uma vez que depende das informações dadas. Reescrevendo a evidência usando as <em>regra do produto</em> e <em>regra da soma</em>:</p>

\[P(n_B  \mid  N) = \sum_{u} P(n_B, u  \mid  N) = \sum_{u} P(n_B  \mid  u, N)P(u  \mid  N).\]

  <p>Então, finalmente</p>

\[\boxed{ P(u  \mid  n_B, N) = \frac{1}{11}\frac{1}{P(n_B  \mid  N)} \frac{N!}{n_B!(N-n_B)!}\left( \frac{u}{10} \right)^{n_B}\left(1 - \frac{u}{10} \right)^{N-n_B}}\]

  <p>Visualizando a distribuição dados $N$ e $n_B$</p>

  <div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kn">from</span> <span class="nn">math</span> <span class="kn">import</span> <span class="n">factorial</span> <span class="k">as</span> <span class="n">fac</span>
<span class="kn">import</span> <span class="nn">matplotlib.pyplot</span> <span class="k">as</span> <span class="n">plt</span>
<span class="o">%</span><span class="n">matplotlib</span> <span class="n">inline</span>

<span class="k">def</span> <span class="nf">comb</span><span class="p">(</span><span class="n">a</span><span class="p">,</span><span class="n">b</span><span class="p">):</span>
    <span class="k">return</span>  <span class="n">fac</span><span class="p">(</span><span class="n">a</span><span class="p">)</span> <span class="o">/</span> <span class="p">(</span><span class="n">fac</span><span class="p">(</span><span class="n">b</span><span class="p">)</span><span class="o">*</span><span class="n">fac</span><span class="p">(</span><span class="n">a</span><span class="o">-</span><span class="n">b</span><span class="p">))</span>

<span class="k">def</span> <span class="nf">P</span><span class="p">(</span><span class="n">u</span><span class="p">,</span> <span class="n">nb</span><span class="p">,</span> <span class="n">N</span><span class="p">):</span>
    <span class="n">marg</span> <span class="o">=</span> <span class="p">(</span><span class="mi">1</span><span class="o">/</span><span class="mi">11</span><span class="p">)</span> <span class="o">*</span> <span class="nb">sum</span><span class="p">(</span> <span class="p">[</span> <span class="n">comb</span><span class="p">(</span><span class="n">N</span><span class="p">,</span> <span class="n">nb</span><span class="p">)</span><span class="o">*</span><span class="p">((</span><span class="n">U</span><span class="o">/</span><span class="mi">10</span><span class="p">)</span><span class="o">**</span><span class="n">nb</span><span class="p">)</span><span class="o">*</span><span class="p">(</span><span class="mi">1</span><span class="o">-</span><span class="p">(</span><span class="n">U</span><span class="o">/</span><span class="mi">10</span><span class="p">))</span><span class="o">**</span><span class="p">(</span><span class="n">N</span><span class="o">-</span><span class="n">nb</span><span class="p">)</span> <span class="k">for</span> <span class="n">U</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">11</span><span class="p">)</span> <span class="p">]</span> <span class="p">)</span>
    <span class="k">return</span> <span class="p">(</span><span class="mi">1</span><span class="o">/</span><span class="mi">11</span><span class="p">)</span><span class="o">*</span><span class="p">(</span><span class="mi">1</span><span class="o">/</span><span class="n">marg</span><span class="p">)</span><span class="o">*</span><span class="n">comb</span><span class="p">(</span><span class="n">N</span><span class="p">,</span> <span class="n">nb</span><span class="p">)</span><span class="o">*</span><span class="p">((</span><span class="n">u</span><span class="o">/</span><span class="mi">10</span><span class="p">)</span><span class="o">**</span><span class="n">nb</span><span class="p">)</span><span class="o">*</span><span class="p">(</span><span class="mi">1</span><span class="o">-</span><span class="p">(</span><span class="n">u</span><span class="o">/</span><span class="mi">10</span><span class="p">))</span><span class="o">**</span><span class="p">(</span><span class="n">N</span><span class="o">-</span><span class="n">nb</span><span class="p">)</span>

<span class="k">def</span> <span class="nf">g</span><span class="p">(</span><span class="n">sorteios</span><span class="p">,</span> <span class="n">bolas_p</span><span class="p">):</span>
    <span class="n">plt</span><span class="p">.</span><span class="n">bar</span><span class="p">(</span> <span class="p">[</span><span class="n">i</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">11</span><span class="p">)],</span> <span class="p">[</span><span class="n">P</span><span class="p">(</span><span class="n">j</span><span class="p">,</span> <span class="n">bolas_p</span><span class="p">,</span> <span class="n">sorteios</span><span class="p">)</span> <span class="k">for</span> <span class="n">j</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">11</span><span class="p">)],</span> <span class="n">width</span><span class="o">=</span><span class="mf">0.0005</span><span class="p">)</span>
    <span class="n">plt</span><span class="p">.</span><span class="n">xlim</span><span class="p">([</span><span class="o">-</span><span class="mf">0.5</span><span class="p">,</span> <span class="mf">10.5</span><span class="p">])</span>
    <span class="n">plt</span><span class="p">.</span><span class="n">title</span><span class="p">(</span><span class="s">'Probabilidade de ser a urna u'</span><span class="p">)</span>
    <span class="n">plt</span><span class="p">.</span><span class="n">xticks</span><span class="p">([</span><span class="n">i</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">11</span><span class="p">)]);</span>
    
<span class="k">def</span> <span class="nf">l</span><span class="p">(</span><span class="n">sorteios</span><span class="p">,</span> <span class="n">bolas_p</span><span class="p">):</span>
    <span class="n">L</span> <span class="o">=</span> <span class="p">[]</span>
    <span class="k">for</span> <span class="n">i</span><span class="p">,</span><span class="n">v</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">([</span><span class="n">j</span> <span class="k">for</span> <span class="n">j</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">11</span><span class="p">)]):</span>
        <span class="n">L</span><span class="p">.</span><span class="n">append</span><span class="p">(</span><span class="nb">float</span><span class="p">(</span><span class="s">'{:.7f}'</span><span class="p">.</span><span class="nb">format</span><span class="p">(</span><span class="n">P</span><span class="p">(</span><span class="n">v</span><span class="p">,</span> <span class="n">bolas_p</span><span class="p">,</span> <span class="n">sorteios</span><span class="p">))))</span>
    <span class="k">return</span> <span class="n">L</span>
</code></pre></div>  </div>

  <p>Por exemplo $N=10, n_B=6$:</p>

  <div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="n">g</span><span class="p">(</span><span class="mi">10</span><span class="p">,</span><span class="mi">6</span><span class="p">)</span>
</code></pre></div>  </div>

  <div>
    <p><img src="/img/memoria-da-maquina_2.png" alt="gráfico de barras da probabilidade de ser cada urna u, com pico em u=6" loading="lazy" /></p>
  </div>

  <p>Visualizando a distribuição em toda sua extensão</p>

  <div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="n">plt</span><span class="p">.</span><span class="n">figure</span><span class="p">(</span><span class="n">figsize</span><span class="o">=</span><span class="p">(</span><span class="mi">12</span><span class="p">,</span><span class="mi">9</span><span class="p">))</span>
<span class="n">plt</span><span class="p">.</span><span class="n">imshow</span><span class="p">([</span><span class="n">l</span><span class="p">(</span><span class="mi">10</span><span class="p">,</span> <span class="n">i</span><span class="p">)</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">11</span><span class="p">)],</span> <span class="n">interpolation</span><span class="o">=</span><span class="s">'nearest'</span><span class="p">)</span>
<span class="n">plt</span><span class="p">.</span><span class="n">colorbar</span><span class="p">()</span>
<span class="n">plt</span><span class="p">.</span><span class="n">title</span><span class="p">(</span><span class="s">'Probabilidade'</span><span class="p">)</span>
<span class="n">plt</span><span class="p">.</span><span class="n">ylabel</span><span class="p">(</span><span class="s">'u'</span><span class="p">)</span>
<span class="n">plt</span><span class="p">.</span><span class="n">xlabel</span><span class="p">(</span><span class="s">'nb'</span><span class="p">)</span>
<span class="n">plt</span><span class="p">.</span><span class="n">yticks</span><span class="p">([</span><span class="n">i</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">11</span><span class="p">)]);</span>
<span class="n">plt</span><span class="p">.</span><span class="n">xticks</span><span class="p">([</span><span class="n">i</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">11</span><span class="p">)]);</span>
</code></pre></div>  </div>

  <div>
    <p><img src="/img/memoria-da-maquina_3.png" alt="mapa de calor da probabilidade de cada urna u em função do número de bolas pretas n_B" loading="lazy" /></p>
  </div>

</div>]]></content><author><name></name></author><category term="aprendizagem-estatistica" /><category term="notas" /><summary type="html"><![CDATA[anotações desordenadas sobre as periferias da inteligência artificial]]></summary></entry><entry><title type="html">fronteiras invisíveis das américas</title><link href="https://thiagodsd.github.io/2020/01/01/fronteiras-invisiveis-das-americas.html" rel="alternate" type="text/html" title="fronteiras invisíveis das américas" /><published>2020-01-01T12:25:40+00:00</published><updated>2020-01-01T12:25:40+00:00</updated><id>https://thiagodsd.github.io/2020/01/01/fronteiras-invisiveis-das-americas</id><content type="html" xml:base="https://thiagodsd.github.io/2020/01/01/fronteiras-invisiveis-das-americas.html"><![CDATA[<p>Episódios do <a href="https://xadrezverbal.com/category/audio/podcast-fronteiras-invisiveis-do-futebol/"><em>Fronteiras Invisíveis do Futebol</em></a> sobre nações americanas e antigos colonizadores, mais ou menos ordenados por <a href="https://en.wikipedia.org/wiki/Decolonization_of_the_Americas#Timeline">datas de independência</a>, acompanhados de links para vídeos de resumo histórico produzidos pelo canal <a href="https://www.youtube.com/channel/UCVbOEcs6RMxXXX3WWNtl_Fw"><em>El Mapa de Sebas</em></a>, para os livros da série Histórias Mínimas publicados por <a href="https://libros.colmex.mx/buscador/"><em>El Colegio de México</em></a> e para os episódios da série <a href="https://creators.spotify.com/pod/profile/pulsolatinopodcast/">Pulso Latino</a> do podcast Pulso Latino.</p>

<p><br /></p>

<p style="text-align: center;">
<a href="https://central3.com.br/fronteiras-invisiveis-do-futebol-13-copa-america/">#13 Copa América</a><br />
<small><em><a href="https://libros.colmex.mx/ficha/?b=1382">HISTORIA MÍNIMA DE CENTROAMÉRICA</a> de Rodolfo Pastor, 2011</em></small><br />



</p>

<ul>
  <li><strong>1783-09-03</strong> <a href="https://www.youtube.com/watch?v=qaQIO-rWrGs">#24 EUA</a> 🇺🇸
    <ul>
      <li><a href="https://central3.com.br/fronteiras-invisiveis-do-futebol-americano-91/">#91 Fronteiras Invisíveis do Futebol Americano</a></li>
      <li><small><em><a href="https://libros.colmex.mx/ficha/?b=1471">HISTORIA MÍNIMA DE ESTADOS UNIDOS DE AMÉRICA</a> de Erika Pani, 2016</em></small></li>
      <li><small><em><a href="https://www.youtube.com/watch?v=bDj1q4uUwmo">HISTORIA de ESTADOS UNIDOS de AMÉRICA en 20 MINUTOS</a></em></small><br /><br /></li>
    </ul>
  </li>
  <li><strong>1804-01-01</strong> <a href="https://open.spotify.com/episode/127OfVzBusgaHYpaxoZ4M5?si=TUIRLf3STym96u00d7dl4A">#86 Haiti</a> 🇭🇹
    <ul>
      <li><small><a href="https://anchor.fm/pulsolatinopodcast/episodes/12-I-Caminhos-Latinos-I-Haiti-enamp8">#12 Caminhos Latinos - Haiti</a></small></li>
      <li><small><em><a href="https://www.youtube.com/watch?v=JTPXHUtk_BE">HISTORIA de HAITÍ en 14 MINUTOS</a></em></small><br /><br /></li>
    </ul>
  </li>
  <li><strong>1811-05-14</strong> <a href="https://open.spotify.com/episode/0PJQ0JjJkiJ9RdVo660Uuj?si=2iAtPnYdQkqpEn3UeRGbKQ">#78 Paraguai</a> 🇵🇾
    <ul>
      <li><small><a href="https://anchor.fm/pulsolatinopodcast/episodes/2-I-Caminhos-Latinos-I-Paraguai-ek41sf">#2 Caminhos Latinos - Paraguai</a></small></li>
      <li><small><em><a href="https://www.youtube.com/watch?v=FybWKYZYhy8">HISTORIA de PARAGUAY en 15 MINUTOS</a></em></small><br /><br /></li>
    </ul>
  </li>
  <li><strong>1816-07-09</strong> <a href="https://www.youtube.com/watch?v=JLCLqPZjaCs">#16 Argentina</a> 🇦🇷
    <ul>
      <li><small><a href="https://anchor.fm/pulsolatinopodcast/episodes/1-I-Caminhos-Latinos-I-Argentina-ejoir4">#1 Caminhos Latinos - Argentina</a></small></li>
      <li><small><em><a href="https://libros.colmex.mx/ficha/?b=1425">HISTORIA MÍNIMA DE ARGENTINA</a> de Raúl Mandrini et al., 2014</em></small></li>
      <li><small><em><a href="https://www.youtube.com/watch?v=dBPwi80mOJA">HISTORIA de ARGENTINA en 16 MINUTOS, parte 1</a></em></small></li>
      <li><small><em><a href="https://www.youtube.com/watch?v=4pG-Iry_wUc">HISTORIA de ARGENTINA en 16 MINUTOS, parte 2</a></em></small><br /><br /></li>
    </ul>
  </li>
  <li><strong>1818-02-12</strong> <a href="https://open.spotify.com/episode/2AFnQ5UQHIL9Zurre8aGV2?si=ePHRyaJpTl6VeFhM6uC3pA">#66 Chile</a> 🇨🇱
    <ul>
      <li><small><a href="https://anchor.fm/pulsolatinopodcast/episodes/4-I-Caminhos-Latinos-I-Chile-ekpifj">#4 Caminhos Latinos - Chile</a></small></li>
      <li><small><em><a href="https://libros.colmex.mx/ficha/?b=1438">HISTORIA MÍNIMA DE CHILE</a> de Rafael Sagredo Baeza, 2014</em></small></li>
      <li><small><em><a href="https://www.youtube.com/watch?v=Mr_qfopvQF8">HISTORIA de CHILE en 15 MINUTOS</a></em></small><br /><br /></li>
    </ul>
  </li>
  <li><strong>1819-08-07</strong> <a href="https://www.youtube.com/watch?v=PPrZSuHwHj8">#06 Colômbia</a> 🇨🇴
    <ul>
      <li><small><a href="https://anchor.fm/pulsolatinopodcast/episodes/8-I-Caminhos-Latinos-I-Colmbia-em2k97">#8 Caminhos Latinos - Colômbia</a></small></li>
      <li><small><em><a href="https://libros.colmex.mx/ficha/?b=2760">HISTORIA MÍNIMA DE COLOMBIA</a> de Jorge Orlando Melo, 2017</em></small></li>
      <li><small><em><a href="https://www.youtube.com/watch?v=F3y2BvToTtU">HISTORIA de la GRAN COLOMBIA en 12 MINUTOS</a></em></small></li>
      <li><small><em><a href="https://www.youtube.com/watch?v=iL1BA8LiMZU">HISTORIA de COLOMBIA en 16 MINUTOS, parte 1</a></em></small></li>
      <li><small><em><a href="https://www.youtube.com/watch?v=1iYxwp0J4vM">HISTORIA de COLOMBIA en 16 MINUTOS, parte 2</a></em></small><br /><br /></li>
    </ul>
  </li>
  <li><strong>1821-06-24</strong> <a href="https://open.spotify.com/episode/2mdSZNkklY5QlxMF8LEkBX?si=Xl6fKQT3RN2_usZbHTJxGA">#80 Venezuela</a> 🇻🇪
    <ul>
      <li><small><a href="https://anchor.fm/pulsolatinopodcast/episodes/9-I-Caminhos-Latinos-I-Venezuela-emd4ag">#9 Caminhos Latinos - Venezuela</a></small></li>
      <li><small><em><a href="https://libros.colmex.mx/ficha/?b=2815">HISTORIA MÍNIMA DE VENEZUELA</a> de Elías Pino Iturrieta et al., 2018</em></small></li>
      <li><small><em><a href="https://www.youtube.com/watch?v=s-uSY-sZA5M">HISTORIA de VENEZUELA en 18 MINUTOS</a></em></small><br /><br /></li>
    </ul>
  </li>
  <li><strong>1821-09-15</strong> <a href="https://open.spotify.com/episode/19A6o8NmO96zVzyfMMBmw2?si=t4ZkUG1ORF2mmGxusolA5A">#53 Costa Rica</a> 🇨🇷
    <ul>
      <li><small><em><a href="https://www.youtube.com/watch?v=UVQiWHKlOK0">HISTORIA de COSTA RICA en 16 MINUTOS</a></em></small><br /><br /></li>
    </ul>
  </li>
  <li><strong>1821-09-27</strong> <a href="https://open.spotify.com/episode/0v7hnNi5t7vuvvcAs0MmTt?si=g1uwdEl1RCGcdt2_u6-r9A">#69 México Pt.1</a>, <a href="https://open.spotify.com/episode/5YJKpv2u8BkP6pKGT9DXNR?si=Qe4jqtwfT6Sal8fRoHNZvg">#70 México Pt.2</a> 🇲🇽
    <ul>
      <li><small><a href="https://anchor.fm/pulsolatinopodcast/episodes/11-I-Caminhos-Latinos-I-Mxico-en0oic">#11 Caminhos Latinos - México</a></small></li>
      <li><small><em><a href="https://libros.colmex.mx/ficha/?b=1298">NUEVA HISTORIA MÍNIMA DE MÉXICO</a> de Pablo Escalante Gonzalbo et al., 2018</em></small></li>
      <li><small><em><a href="https://www.youtube.com/watch?v=pdDnQsLOskg">HISTORIA de MÉXICO en 17 MINUTOS</a></em></small><br /><br /></li>
    </ul>
  </li>
  <li><strong>1821-11-28</strong> <a href="https://open.spotify.com/episode/4ToUmwyL5sVUnh0sncJrl5?si=ydxcgehKT-6uMhYtBANtzA">#48 Panamá</a> 🇵🇦
    <ul>
      <li><small><em><a href="https://www.youtube.com/watch?v=XMIaxDKupkM">HISTORIA de PANAMÁ en 13 MINUTOS</a></em></small><br /><br /></li>
    </ul>
  </li>
  <li><strong>1822-05-24</strong> <a href="https://open.spotify.com/episode/1Vb0olThrvkZCJ6K4yspgL?si=mMMKPp6KRbKq1gLI3fviBA">#36 Equador</a> 🇪🇨
    <ul>
      <li><small><a href="https://anchor.fm/pulsolatinopodcast/episodes/7-I-Caminhos-Latinos-I-Equador-eloo3u">#7 Caminhos Latinos - Equador</a></small></li>
      <li><small><em><a href="https://www.youtube.com/watch?v=MkadaSZJ8uw">HISTORIA de ECUADOR en 14 MINUTOS</a></em></small><br /><br /></li>
    </ul>
  </li>
  <li><strong>1824-12-09</strong> <a href="https://open.spotify.com/episode/0cR2dm2OMpom9grmZBY0ud?si=ziKcWAafQ2CMfkcBQv0Aog">#81 Peru</a> 🇵🇪
    <ul>
      <li><small><a href="https://anchor.fm/pulsolatinopodcast/episodes/6-I-Caminhos-Latinos-I-Peru-ele6dl">#6 Caminhos Latinos - Peru</a></small></li>
      <li><small><em><a href="https://libros.colmex.mx/ficha/?b=1437">HISTORIA MÍNIMA DE PERÚ</a> de Carlos Contreras, 2014</em></small></li>
      <li><small><em><a href="https://www.youtube.com/watch?v=qGJGqtGWiNs">HISTORIA del PERÚ ️en 12 MINUTOS</a></em></small><br /><br /></li>
    </ul>
  </li>
  <li><strong>1825-08-06</strong> <a href="https://open.spotify.com/episode/67QNBnLfuMYsSRUUITbCe5?si=QS1EZZfLQ1C1BrJdf3_slw">#79 Bolívia</a> 🇧🇴
    <ul>
      <li><small><a href="https://anchor.fm/pulsolatinopodcast/episodes/5-I-Caminhos-Latinos-I-Bolvia-el4666">#5 Caminhos Latinos - Bolívia</a></small></li>
      <li><small><em><a href="https://libros.colmex.mx/ficha/?b=1469">HISTORIA MÍNIMA DE BOLIVIA</a> de Hebert S. Klein, 2015</em></small></li>
      <li><small><em><a href="https://www.youtube.com/watch?v=riYvWQJXdlk">HISTORIA de BOLIVIA en 17 MINUTOS</a></em></small><br /><br /></li>
    </ul>
  </li>
  <li><strong>1825-08-29</strong> <a href="https://open.spotify.com/episode/5AfuXqm1GGnqIT2y1VfCA3?si=GGh8ZjCoTjuChFg5QQ8IxQ">#90 Seleção Brasileira</a> 🇧🇷
    <ul>
      <li><small><a href="https://anchor.fm/pulsolatinopodcast/episodes/13-I-Caminhos-Latinos-I-Brasil-enkmgs">#13 Caminhos Latinos - Brasil</a></small></li>
      <li><small><em><a href="https://www.youtube.com/watch?v=noJksXthGHM">HISTORIA de BRASIL en 18 MINUTOS</a></em></small></li>
      <li><a href="https://central3.com.br/fronteiras-invisiveis-do-futebol-26-chapeco/">#26 Chapecó</a></li>
      <li><a href="https://open.spotify.com/episode/7H8nbkLaMIGGrA9UwOxatP?si=CzAfR3ZGTR-vSazwJeOIMQ">#31 Pernambuco</a></li>
      <li><a href="https://open.spotify.com/episode/5EUYZmsd6HU4doASulBHmo?si=_B9DdW9UTL2P3r2VAuH39A">#34 Minas Gerais</a></li>
      <li><a href="https://open.spotify.com/episode/5gG1xrTQYL3Z2Iw9xiNGHn?si=Z1b6XPwaQSeMtjil85TwpQ">#38 São Paulo</a></li>
      <li><a href="https://open.spotify.com/episode/7fxc4uHItxWhut8eBlvF4i?si=-udWThHrTLWEAuDgjTxlkw">#51 Bahia</a></li>
      <li><a href="https://open.spotify.com/episode/0BypTWFIMPindsZrTjykJa?si=dEPsTt8HQbqu8-kApv1U6Q">#56 13 de Maio</a></li>
      <li><a href="https://open.spotify.com/episode/3AgF53LHD4lwKCqs0GF5cr?si=cLhOoMERSsivrEq6ObJr-w">#68 Goiás</a></li>
      <li><a href="https://open.spotify.com/episode/3g5KibSAaE7qCmfXT3IFlr?si=W8UMVETPTcy6dZ0aRq7ywg">#83 Ceará</a><br /><br /></li>
    </ul>
  </li>
  <li><strong>1828-08-27</strong> <a href="https://open.spotify.com/episode/2DN0kWVV9BFOLJJQlgzIyp?si=ao92SZenQBqm_ws3FrhFHw">#62 Uruguai</a> 🇺🇾
    <ul>
      <li><small><a href="https://anchor.fm/pulsolatinopodcast/episodes/3-I-Caminhos-Latinos-I-Uruguai-ekene6">#3 Caminhos Latinos - Uruguai</a></small></li>
      <li><small><em><a href="https://libros.colmex.mx/ficha/?b=2877">HISTORIA MÍNIMA DE URUGUAY</a> de Gerardo Caetano, 2019</em></small></li>
      <li><small><em><a href="https://www.youtube.com/watch?v=4iS1XVS_KAE">HISTORIA de URUGUAY en 14 MINUTOS</a></em></small><br /><br /></li>
    </ul>
  </li>
  <li><strong>1898-12-10</strong> <a href="https://www.youtube.com/watch?v=q_EGAsVERjU">#12 Cuba</a> 🇨🇺
    <ul>
      <li><small><a href="https://anchor.fm/pulsolatinopodcast/episodes/10-I-Caminhos-Latinos-I-Cuba-emndtb">#10 Caminhos Latinos - Cuba</a></small></li>
      <li><small><em><a href="https://libros.colmex.mx/ficha/?b=1409">HISTORIA MÍNIMA DE CUBA</a> de Oscar Zanetti, 2013</em></small></li>
      <li><small><em><a href="https://www.youtube.com/watch?v=Ss1pfMzJY_E">HISTORIA de CUBA en 15 MINUTOS</a></em></small><br /><br /></li>
    </ul>
  </li>
  <li>
    <p><strong>1962-08-06</strong> <a href="https://open.spotify.com/episode/17J6bFoFns5e91qMEGFHfk?si=Ldfky91uSG6htH57JkGPVQ">#75 Jamaica</a> 🇯🇲 <br /><br /></p>
  </li>
  <li><strong>1962-08-31</strong> <a href="https://open.spotify.com/episode/6RE2qrsPxJ1RgeIFW8GuMe?si=DEl_85KCTS2dvpFe4w4BIw">#43 Trinidad &amp; Tobago</a> 🇹🇹
    <ul>
      <li><small><em><a href="https://www.youtube.com/watch?v=OwwzuzzBk88">HISTORIA de TRINIDAD y TOBAGO en 12 MINUTOS</a></em></small></li>
    </ul>
  </li>
</ul>

<p><br /></p>

<ul>
  <li><small><small><a href="https://www.youtube.com/watch?v=V9McdRLbAy0">#01 Galícia</a></small></small>
    <ul>
      <li><small><small><a href="https://libros.colmex.mx/ficha/?b=1486">HISTORIA MÍNIMA DE GALICIA</a> de Justo Beramendi, 2016</small></small></li>
    </ul>
  </li>
  <li><small><small><a href="https://open.spotify.com/episode/5v56bbikzeTHXXjifYaVMe?si=gLFsfbR0Rg6vljKDHayaLg">#42 Catalunha</a></small></small>
    <ul>
      <li><small><small><a href="https://libros.colmex.mx/ficha/?b=1465">HISTORIA MÍNIMA DE CATALUÑA</a> de Jordi Canal, 2015</small></small></li>
    </ul>
  </li>
  <li><small><small><a href="https://open.spotify.com/episode/5ko4MSDYG68ryeKzHrzpiW?si=FJfAG_fORla9vPOLyoOiMA">#33 País Basco</a></small></small>
    <ul>
      <li><small><small><a href="https://libros.colmex.mx/ficha/?b=1455">HISTORIA MÍNIMA DEL PAÍS VASCO</a> de Jon Juaristi, 2014</small></small></li>
    </ul>
  </li>
  <li><small><small><a href="https://www.youtube.com/watch?v=-xgyTunaSKo">#02 Irlanda</a></small></small></li>
</ul>

<p><small><small><em><a href="https://libros.colmex.mx/ficha/?b=1412">HISTORIA MÍNIMA DE ESPAÑA</a> de Juan Pablo Fusi, 2013</em></small></small><br />
<small><small><em><a href="https://libros.colmex.mx/ficha/?b=1426">HISTORIA MÍNIMA DE LA LENGUA ESPAÑOLA</a> de Luis Fernando Lara, 2013</em></small></small><br /></p>

<hr />

<p>Eduardo Galeano:</p>

<ul>
  <li>
    <p><a href="https://lahistoriadeldiablog.wordpress.com/2009/05/24/eduardo-galeano-memorias-del-fuego-el-nacimiento-descargar-libro/">Memoria del Fuego I - Los Nacimientos</a>, <small>audiolibro: <em><a href="https://www.youtube.com/playlist?list=OLAK5uy_mTEFw6DoUV1JNPCfMyCnvtn6Zgv5c7tvk">Memoria del Fuego: Los Nacimientos</a></em> por Eduardo Galeano</small><br /></p>
  </li>
  <li>
    <p><a href="https://lahistoriadeldiablog.wordpress.com/2009/09/28/eduardo-galeano-memoria-del-fuego-ii-las-caras-y-las-mascaras-descargar-libro/">Memoria del Fuego II - Las Caras y las Máscaras</a>, <small>audiolibro: <em><a href="https://www.youtube.com/playlist?list=OLAK5uy_lhpfU0QngK61EP7CG22QgjbS4iB4Cw8DE">Memoria del Fuego: Las Caras y las Máscaras</a></em> por Eduardo Galeano</small><br /></p>
  </li>
  <li>
    <p><a href="https://lahistoriadeldiablog.wordpress.com/2009/05/24/eduardo-galeano-memoria-del-fuego-iii-el-siglo-del-viento-descargar-libro/">Memoria del Fuego III - El Siglo del Viento</a>, <small>audiolibro: <em><a href="https://www.youtube.com/playlist?list=OLAK5uy_nlQy3CzT-I7TCOX6tZN9w1Av_dqR9j9Uw">Memoria del Fuego: El Siglo del Viento</a></em> por Eduardo Galeano</small><br /></p>
  </li>
  <li>
    <p><a href="https://lahistoriadeldiablog.wordpress.com/2009/07/09/eduardo-galeano-el-futbol-a-sol-y-sombra-descargar-libro/">El fútbol a Sol y Sombra</a>, <small>audiolibro: <em><a href="https://www.youtube.com/playlist?list=PL-PGoAn351lrlaxBIoSXvav_LeZ1lxD4E">El Fútbol a Sol y Sombra</a></em> por Eduardo Galeano</small><br /></p>
  </li>
  <li>
    <p><a href="https://lahistoriadeldiablog.wordpress.com/2009/04/20/eduardo-galeano-las-venas-abiertas-de-america-latina-descargar-libro/">Las Venas Abiertas de América Latina</a>, <small>audiolibro: <em><a href="https://www.youtube.com/watch?v=KLi4nKHltog">Las Venas Abiertas de America Latina</a></em> por  ronin zen</small></p>
  </li>
</ul>

<hr />

<p><a href="https://www.rtve.es/alacarta/videos/historia-de-america-latina/historia-america-latina-imaginarios-latinoamericanos/1776147/">Historia de América Latina</a>, 2013</p>

<ol>
  <li><a href="https://www.rtve.es/alacarta/videos/historia-de-america-latina/historia-america-latina-imaginarios-latinoamericanos/1776147/">Imaginarios latinoamericanos</a></li>
  <li><a href="https://www.rtve.es/alacarta/videos/historia-de-america-latina/historia-america-latina-poblamiento-america-latina/1780890/">Poblamiento de América latina</a></li>
  <li><a href="https://www.rtve.es/alacarta/videos/historia-de-america-latina/historia-america-latina-culturas-del-mexico-antiguo/1783269/">Culturas del México Antiguo</a></li>
  <li><a href="https://www.rtve.es/alacarta/videos/historia-de-america-latina/historia-america-latina-pueblos-andinos/1785708/">Pueblos andinos</a></li>
  <li><a href="https://www.rtve.es/alacarta/videos/historia-de-america-latina/historia-america-latina-incas/1788347/">Los incas</a></li>
  <li><a href="https://www.rtve.es/alacarta/videos/historia-de-america-latina/historia-america-latina-mayas/1790928/">Los mayas</a></li>
  <li><a href="https://www.rtve.es/alacarta/videos/historia-de-america-latina/historia-america-latina-pueblos-ancestrales/1794773/">Pueblos ancestrales</a></li>
  <li><a href="https://www.rtve.es/alacarta/videos/historia-de-america-latina/historia-america-latina-sociedades-fluviales-selvicolas/1796887/">Sociedades fluviales y selvícolas</a></li>
  <li><a href="https://www.rtve.es/alacarta/videos/historia-de-america-latina/historia-america-latina-hora-dioses/1797995/">La hora de los dioses</a></li>
  <li><a href="https://www.rtve.es/alacarta/videos/historia-de-america-latina/historia-america-latina-hora-heroes-1/1799242/">La hora de los héroes I</a></li>
  <li><a href="https://www.rtve.es/alacarta/videos/historia-de-america-latina/historia-america-latina-hora-heroes-ii/1801054/">La hora de los Héroes II</a></li>
  <li><a href="https://www.rtve.es/alacarta/videos/historia-de-america-latina/historia-america-latina-colonizacion-nueva-sociedad/1804551/">Colonización y “nueva sociedad”</a></li>
  <li><a href="https://www.rtve.es/alacarta/videos/historia-de-america-latina/historia-america-latina-crisis-del-orden-colonial/1806781/">Crisis del orden colonial</a></li>
</ol>

<hr />

<p><strong>personajes del fuego</strong></p>

<p>personajes históricos citados en <em><a href="https://es.wikipedia.org/wiki/Memoria_del_fuego">Memória del Fuego de Eduardo Galeano</a></em></p>

<!--
<img src="/img/fronteiras-invisiveis-das-americas_1.jpg" alt="escultura pré-colombiana em cerâmica com três rostos lado a lado" loading="lazy"/>
-->

<p><br /></p>

<p><strong>1492</strong>, <em><a href="https://es.wikipedia.org/wiki/Cristóbal_Colón">Cristóbal Colón</a></em>, <a href="https://es.wikipedia.org/wiki/Guanahani">Guanahaní</a> 🇧🇸</p>

<p><strong>1493</strong>, <em><a href="https://es.wikipedia.org/wiki/Alejandro_VI">Rodrigo Borgia</a></em>, <a href="">Roma</a></p>

<p><strong>1493</strong>, <em><a href="https://es.wikipedia.org/wiki/Tecayehuatzin_de_Huexotzinco">Tecayehuatzin</a></em>, <a href="https://es.wikipedia.org/wiki/Huejotzingo">Huejotzingo</a> 🇲🇽</p>

<p><strong>1493</strong>, <em><a href="https://www.elperiodico.com/es/cuaderno/20181110/america-violada-violencias-contra-mujeres-conquista-colonizacion-7137661">Michele Cuneo</a></em>, <a href="https://es.wikipedia.org/wiki/Saint_Croix">Isla de Santa Cruz</a> 🇺🇸</p>

<p><strong>1495</strong>, <em><a href="https://es.wikipedia.org/wiki/Antonio_de_Nebrija">Antonio de Nebrija</a></em>, <a href="https://es.wikipedia.org/wiki/Salamanca">Salamanca</a></p>

<p><strong>1495</strong>, <em><a href="https://es.wikipedia.org/wiki/Caonabo">Caonabó</a></em>, <a href="https://es.wikipedia.org/wiki/La_Isabela">La Isabela</a> 🇩🇴</p>

<p><strong>1495</strong>, <em><a href="https://es.wikipedia.org/wiki/Alonso_de_Ojeda">Alonso de Ojeda</a></em>, <a href="https://es.wikipedia.org/wiki/La_Isabela">La Isabela</a> 🇩🇴</p>

<p><strong>1496</strong>, <em><a href="https://es.wikipedia.org/wiki/Bartolom%C3%A9_Col%C3%B3n">Bartolomé Colón</a></em>, <a href="https://es.wikipedia.org/wiki/La_Isabela">La Concepción</a></p>

<p><strong>1496</strong>, <em><a href="https://es.wikipedia.org/wiki/Ram%C3%B3n_Pan%C3%A9">Ramón Pané</a></em>, <a href="https://es.wikipedia.org/wiki/La_Isabela">La Concepción</a></p>

<p><strong>1499</strong>, <em><a href="https://es.wikipedia.org/wiki/Francisco_Jim%C3%A9nez_de_Cisneros">Arzobispo Cisneros</a></em>, <a href="https://es.wikipedia.org/wiki/Granada">Granada</a></p>]]></content><author><name></name></author><category term="história" /><summary type="html"><![CDATA[Episódios do Fronteiras Invisíveis do Futebol sobre nações americanas e antigos colonizadores, mais ou menos ordenados por datas de independência, acompanhados de links para vídeos de resumo histórico produzidos pelo canal El Mapa de Sebas, para os livros da série Histórias Mínimas publicados por El Colegio de México e para os episódios da série Pulso Latino do podcast Pulso Latino.]]></summary></entry><entry><title type="html">lagrangiana em movimento</title><link href="https://thiagodsd.github.io/2019/10/10/lagrangiana-em-movimento.html" rel="alternate" type="text/html" title="lagrangiana em movimento" /><published>2019-10-10T21:02:51+00:00</published><updated>2019-10-10T21:02:51+00:00</updated><id>https://thiagodsd.github.io/2019/10/10/lagrangiana-em-movimento</id><content type="html" xml:base="https://thiagodsd.github.io/2019/10/10/lagrangiana-em-movimento.html"><![CDATA[<p>Aqui há algumas anotações das minhas tentativas de enxergar o espaço de configurações evoluindo no tempo. Por serem anotações, em contraste com as páginas de “notas”, abaixo não há muitos comentários sobre teoria ou programação, apenas pontos importantes, referências e códigos.</p>

<h2 id="o-sistema">o sistema</h2>

<p>Abaixo o diagrama de um sistema que gosto muito: uma espécie de pêndulo vertical com base móvel obedecendo a um movimento periódico.</p>

<p><img src="/img/lagrangiana-em-movimento_diagrama-mec1-barra.png" alt="pêndulo de massa m e haste R preso a uma base que sobe e desce na barra vertical, z(t)" /></p>

<p>Na primeira vez que vi esse sistema o ângulo $\theta$ que a haste faz com a horizontal estava restrito ao intervalo de $-\frac{\pi}{2}$ a $\frac{\pi}{2}$, mas eu gosto da alternativa em que não existe essa barra vertical e o movimento é livre. Nesse caso o movimento do sistema seria mais ou menos assim:</p>

<p><img src="/img/lagrangiana-em-movimento_diagrama-mec1-barra_opt.gif" alt="animação do pêndulo girando livre sobre a base móvel" /></p>

<h2 id="espaço-de-coordenadas-no-tempo">espaço de coordenadas no tempo</h2>

\[\begin{cases} x = R cos \theta \\ z = a sin (\omega t) = a sin (\omega t) + R sin \theta \end{cases}\]

<div style="height: 13em; overflow: scroll;">
  <div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kn">import</span> <span class="nn">matplotlib</span>
<span class="kn">import</span> <span class="nn">matplotlib.pyplot</span>    <span class="k">as</span> <span class="n">plt</span>
<span class="kn">import</span> <span class="nn">numpy</span>                <span class="k">as</span> <span class="n">np</span>
<span class="kn">import</span> <span class="nn">matplotlib.animation</span> <span class="k">as</span> <span class="n">animation</span>

<span class="kn">from</span> <span class="nn">mpl_toolkits.mplot3d</span> <span class="kn">import</span> <span class="n">axes3d</span>

<span class="c1">#
</span>
<span class="n">Nfrm</span> <span class="o">=</span> <span class="mi">100</span>
<span class="n">fps</span>  <span class="o">=</span> <span class="mi">10</span>
<span class="n">fig</span>  <span class="o">=</span> <span class="n">plt</span><span class="p">.</span><span class="n">figure</span><span class="p">(</span><span class="n">figsize</span><span class="o">=</span><span class="p">(</span><span class="mi">8</span><span class="p">,</span><span class="mi">8</span><span class="p">))</span>
<span class="n">ax</span>   <span class="o">=</span> <span class="n">fig</span><span class="p">.</span><span class="n">add_subplot</span><span class="p">(</span><span class="mi">111</span><span class="p">,</span> <span class="n">projection</span><span class="o">=</span><span class="s">'3d'</span><span class="p">)</span>

<span class="n">R</span> <span class="o">=</span> <span class="mi">5</span>
<span class="n">a</span> <span class="o">=</span> <span class="mi">3</span>
<span class="n">w</span> <span class="o">=</span> <span class="mi">2</span>

<span class="c1"># meshgrid
</span><span class="n">theta</span>   <span class="o">=</span> <span class="n">np</span><span class="p">.</span><span class="n">linspace</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="mi">2</span><span class="o">*</span><span class="n">np</span><span class="p">.</span><span class="n">pi</span><span class="p">,</span> <span class="mi">50</span><span class="p">)</span>
<span class="n">xs</span>      <span class="o">=</span> <span class="n">R</span><span class="o">*</span><span class="n">np</span><span class="p">.</span><span class="n">cos</span><span class="p">(</span><span class="n">theta</span><span class="p">)</span>
<span class="n">ys</span>      <span class="o">=</span> <span class="n">R</span><span class="o">*</span><span class="n">np</span><span class="p">.</span><span class="n">sin</span><span class="p">(</span><span class="n">theta</span><span class="p">)</span>

<span class="c1"># eixo z
</span><span class="n">ax</span><span class="p">.</span><span class="n">set_zlim</span><span class="p">(</span><span class="o">-</span><span class="mi">1</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span>
<span class="n">ax</span><span class="p">.</span><span class="n">set_xlim</span><span class="p">(</span><span class="n">xs</span><span class="p">.</span><span class="nb">min</span><span class="p">(),</span> <span class="n">xs</span><span class="p">.</span><span class="nb">max</span><span class="p">())</span>
<span class="n">ax</span><span class="p">.</span><span class="n">set_ylim</span><span class="p">(</span><span class="n">ys</span><span class="p">.</span><span class="nb">min</span><span class="p">(),</span> <span class="n">ys</span><span class="p">.</span><span class="nb">max</span><span class="p">())</span>

<span class="c1"># limpeza da figura
</span><span class="n">ax</span><span class="p">.</span><span class="n">w_xaxis</span><span class="p">.</span><span class="n">set_pane_color</span><span class="p">((</span><span class="mf">1.0</span><span class="p">,</span> <span class="mf">1.0</span><span class="p">,</span> <span class="mf">1.0</span><span class="p">,</span> <span class="mf">0.0</span><span class="p">))</span>
<span class="n">ax</span><span class="p">.</span><span class="n">w_yaxis</span><span class="p">.</span><span class="n">set_pane_color</span><span class="p">((</span><span class="mf">1.0</span><span class="p">,</span> <span class="mf">1.0</span><span class="p">,</span> <span class="mf">1.0</span><span class="p">,</span> <span class="mf">0.0</span><span class="p">))</span>
<span class="n">ax</span><span class="p">.</span><span class="n">w_zaxis</span><span class="p">.</span><span class="n">set_pane_color</span><span class="p">((</span><span class="mf">1.0</span><span class="p">,</span> <span class="mf">1.0</span><span class="p">,</span> <span class="mf">1.0</span><span class="p">,</span> <span class="mf">0.0</span><span class="p">))</span>
<span class="n">ax</span><span class="p">.</span><span class="n">w_xaxis</span><span class="p">.</span><span class="n">line</span><span class="p">.</span><span class="n">set_color</span><span class="p">((</span><span class="mf">1.0</span><span class="p">,</span> <span class="mf">1.0</span><span class="p">,</span> <span class="mf">1.0</span><span class="p">,</span> <span class="mf">0.0</span><span class="p">))</span>
<span class="n">ax</span><span class="p">.</span><span class="n">w_yaxis</span><span class="p">.</span><span class="n">line</span><span class="p">.</span><span class="n">set_color</span><span class="p">((</span><span class="mf">1.0</span><span class="p">,</span> <span class="mf">1.0</span><span class="p">,</span> <span class="mf">1.0</span><span class="p">,</span> <span class="mf">0.0</span><span class="p">))</span>
<span class="n">ax</span><span class="p">.</span><span class="n">w_zaxis</span><span class="p">.</span><span class="n">line</span><span class="p">.</span><span class="n">set_color</span><span class="p">((</span><span class="mf">1.0</span><span class="p">,</span> <span class="mf">1.0</span><span class="p">,</span> <span class="mf">1.0</span><span class="p">,</span> <span class="mf">0.0</span><span class="p">))</span>
<span class="n">ax</span><span class="p">.</span><span class="n">set_xticks</span><span class="p">([])</span> 
<span class="n">ax</span><span class="p">.</span><span class="n">set_yticks</span><span class="p">([])</span> 
<span class="n">ax</span><span class="p">.</span><span class="n">set_zticks</span><span class="p">([])</span>

<span class="c1"># labels
</span><span class="n">ax</span><span class="p">.</span><span class="n">set_xlabel</span><span class="p">(</span><span class="sa">r</span><span class="s">'$x$'</span><span class="p">)</span>
<span class="n">ax</span><span class="p">.</span><span class="n">set_ylabel</span><span class="p">(</span><span class="sa">r</span><span class="s">'$z$'</span><span class="p">)</span>

<span class="c1"># grafico e animacao
</span><span class="n">p</span> <span class="o">=</span> <span class="bp">None</span>
<span class="k">def</span> <span class="nf">update</span><span class="p">(</span><span class="n">idx</span><span class="p">):</span>
    <span class="n">t</span> <span class="o">=</span> <span class="n">ts</span><span class="p">[</span><span class="n">idx</span><span class="p">]</span>
    <span class="k">global</span> <span class="n">p</span>
    <span class="k">if</span> <span class="n">p</span><span class="p">:</span>
        <span class="n">p</span><span class="p">.</span><span class="n">remove</span><span class="p">()</span>
    <span class="n">zs</span> <span class="o">=</span> <span class="n">a</span><span class="o">*</span><span class="n">np</span><span class="p">.</span><span class="n">sin</span><span class="p">(</span><span class="n">w</span><span class="o">*</span><span class="n">t</span><span class="p">)</span> <span class="o">+</span> <span class="n">ys</span>
    <span class="n">p</span><span class="p">,</span> <span class="o">=</span> <span class="n">ax</span><span class="p">.</span><span class="n">plot</span><span class="p">(</span><span class="n">xs</span><span class="p">,</span> <span class="n">zs</span><span class="p">,</span> <span class="n">color</span><span class="o">=</span><span class="s">'k'</span><span class="p">)</span>

<span class="n">ts</span>  <span class="o">=</span> <span class="n">np</span><span class="p">.</span><span class="n">linspace</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="mi">10</span><span class="p">,</span> <span class="n">Nfrm</span><span class="p">)</span>
<span class="n">ani</span> <span class="o">=</span> <span class="n">animation</span><span class="p">.</span><span class="n">FuncAnimation</span><span class="p">(</span><span class="n">fig</span><span class="p">,</span> <span class="n">update</span><span class="p">,</span> <span class="n">Nfrm</span><span class="p">,</span> <span class="n">interval</span><span class="o">=</span><span class="mi">1000</span><span class="o">/</span><span class="n">fps</span><span class="p">)</span>

<span class="n">fn</span>  <span class="o">=</span> <span class="s">'plot_configuration_space'</span>
<span class="n">ani</span><span class="p">.</span><span class="n">save</span><span class="p">(</span><span class="n">fn</span><span class="o">+</span><span class="s">'.mp4'</span><span class="p">,</span><span class="n">writer</span><span class="o">=</span><span class="s">'ffmpeg'</span><span class="p">,</span><span class="n">fps</span><span class="o">=</span><span class="n">fps</span><span class="p">)</span>
<span class="n">ani</span><span class="p">.</span><span class="n">save</span><span class="p">(</span><span class="n">fn</span><span class="o">+</span><span class="s">'.gif'</span><span class="p">,</span><span class="n">writer</span><span class="o">=</span><span class="s">'imagemagick'</span><span class="p">,</span><span class="n">fps</span><span class="o">=</span><span class="n">fps</span><span class="p">)</span>
</code></pre></div>  </div>
</div>

<p><img src="/img/lagrangiana-em-movimento_plot_configuration_space_opt.gif" alt="animação da trajetória do sistema no espaço de configuração" /></p>

<h2 id="lagrangiana-no-tempo">lagrangiana no tempo</h2>

\[\mathcal{L} = \frac{1}{2} m \left( R^2 \dot{\theta}^2 + a^2 \omega^2 cos^2 (\omega t) + 2 R a \omega cos (\omega t)cos \theta \dot{\theta} \right) - m g ( a sin (\omega t) + R sin \theta )\]

<div style="height: 13em; overflow: scroll;">
  <div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kn">import</span> <span class="nn">matplotlib</span>
<span class="kn">import</span> <span class="nn">matplotlib.pyplot</span>    <span class="k">as</span> <span class="n">plt</span>
<span class="kn">import</span> <span class="nn">numpy</span>                <span class="k">as</span> <span class="n">np</span>
<span class="kn">import</span> <span class="nn">matplotlib.animation</span> <span class="k">as</span> <span class="n">animation</span>

<span class="kn">from</span> <span class="nn">mpl_toolkits.mplot3d</span> <span class="kn">import</span> <span class="n">axes3d</span>

<span class="c1">#
</span>
<span class="n">Nfrm</span> <span class="o">=</span> <span class="mi">100</span>
<span class="n">fps</span>  <span class="o">=</span> <span class="mi">10</span>

<span class="k">def</span> <span class="nf">L</span><span class="p">(</span><span class="n">q</span><span class="p">,</span> <span class="n">qdot</span><span class="p">,</span> <span class="n">t</span><span class="p">):</span>
    <span class="n">m</span> <span class="o">=</span> <span class="mi">2</span>
    <span class="n">R</span> <span class="o">=</span> <span class="mi">6</span>
    <span class="n">w</span> <span class="o">=</span> <span class="mi">2</span>
    <span class="n">a</span> <span class="o">=</span> <span class="mi">3</span>
    <span class="n">g</span> <span class="o">=</span> <span class="mf">9.8</span>
    
    <span class="n">T</span> <span class="o">=</span> <span class="mf">0.5</span><span class="o">*</span><span class="n">m</span><span class="o">*</span><span class="p">(</span> <span class="n">qdot</span><span class="o">**</span><span class="mi">2</span> <span class="o">*</span> <span class="n">R</span><span class="o">**</span><span class="mi">2</span> <span class="o">+</span>\
                <span class="n">a</span><span class="o">**</span><span class="mi">2</span> <span class="o">*</span> <span class="n">w</span><span class="o">**</span><span class="mi">2</span> <span class="o">*</span> <span class="n">np</span><span class="p">.</span><span class="n">cos</span><span class="p">(</span><span class="n">w</span><span class="o">*</span><span class="n">t</span><span class="p">)</span><span class="o">**</span><span class="mi">2</span> <span class="o">+</span>\
                <span class="mi">2</span><span class="o">*</span><span class="n">R</span><span class="o">*</span><span class="n">a</span><span class="o">*</span><span class="n">w</span><span class="o">*</span><span class="n">np</span><span class="p">.</span><span class="n">cos</span><span class="p">(</span><span class="n">w</span><span class="o">*</span><span class="n">t</span><span class="p">)</span><span class="o">*</span><span class="n">np</span><span class="p">.</span><span class="n">cos</span><span class="p">(</span><span class="n">q</span><span class="p">)</span><span class="o">*</span><span class="n">qdot</span> <span class="p">)</span>
    <span class="n">V</span> <span class="o">=</span> <span class="n">m</span><span class="o">*</span><span class="n">g</span><span class="o">*</span><span class="p">(</span> <span class="n">a</span><span class="o">*</span><span class="n">np</span><span class="p">.</span><span class="n">sin</span><span class="p">(</span><span class="n">w</span><span class="o">*</span><span class="n">t</span><span class="p">)</span> <span class="o">+</span> <span class="n">R</span><span class="o">*</span><span class="n">np</span><span class="p">.</span><span class="n">sin</span><span class="p">(</span><span class="n">q</span><span class="p">)</span> <span class="p">)</span>
    
    <span class="k">return</span> <span class="n">T</span> <span class="o">-</span> <span class="n">V</span>

<span class="n">fig</span> <span class="o">=</span> <span class="n">plt</span><span class="p">.</span><span class="n">figure</span><span class="p">(</span><span class="n">figsize</span><span class="o">=</span><span class="p">(</span><span class="mi">8</span><span class="p">,</span><span class="mi">8</span><span class="p">))</span>
<span class="n">ax</span>  <span class="o">=</span> <span class="n">fig</span><span class="p">.</span><span class="n">add_subplot</span><span class="p">(</span><span class="mi">111</span><span class="p">,</span> <span class="n">projection</span><span class="o">=</span><span class="s">'3d'</span><span class="p">)</span>

<span class="c1"># meshgrid
</span><span class="n">xs</span> <span class="o">=</span> <span class="n">np</span><span class="p">.</span><span class="n">linspace</span><span class="p">(</span><span class="o">-</span><span class="mi">5</span><span class="p">,</span> <span class="mi">5</span><span class="p">,</span> <span class="mi">50</span><span class="p">)</span>
<span class="n">ys</span> <span class="o">=</span> <span class="n">np</span><span class="p">.</span><span class="n">linspace</span><span class="p">(</span><span class="o">-</span><span class="mi">5</span><span class="p">,</span> <span class="mi">5</span><span class="p">,</span> <span class="mi">50</span><span class="p">)</span>
<span class="n">X</span><span class="p">,</span> <span class="n">Y</span> <span class="o">=</span> <span class="n">np</span><span class="p">.</span><span class="n">meshgrid</span><span class="p">(</span><span class="n">xs</span><span class="p">,</span> <span class="n">ys</span><span class="p">)</span>

<span class="c1"># eixo z
</span><span class="n">ax</span><span class="p">.</span><span class="n">set_zlim</span><span class="p">(</span><span class="o">-</span><span class="mi">1</span><span class="p">,</span> <span class="mi">1200</span><span class="p">)</span>

<span class="c1"># limpeza da figura
</span><span class="n">ax</span><span class="p">.</span><span class="n">w_xaxis</span><span class="p">.</span><span class="n">set_pane_color</span><span class="p">((</span><span class="mf">1.0</span><span class="p">,</span> <span class="mf">1.0</span><span class="p">,</span> <span class="mf">1.0</span><span class="p">,</span> <span class="mf">0.0</span><span class="p">))</span>
<span class="n">ax</span><span class="p">.</span><span class="n">w_yaxis</span><span class="p">.</span><span class="n">set_pane_color</span><span class="p">((</span><span class="mf">1.0</span><span class="p">,</span> <span class="mf">1.0</span><span class="p">,</span> <span class="mf">1.0</span><span class="p">,</span> <span class="mf">0.0</span><span class="p">))</span>
<span class="n">ax</span><span class="p">.</span><span class="n">w_zaxis</span><span class="p">.</span><span class="n">set_pane_color</span><span class="p">((</span><span class="mf">1.0</span><span class="p">,</span> <span class="mf">1.0</span><span class="p">,</span> <span class="mf">1.0</span><span class="p">,</span> <span class="mf">0.0</span><span class="p">))</span>
<span class="n">ax</span><span class="p">.</span><span class="n">w_xaxis</span><span class="p">.</span><span class="n">line</span><span class="p">.</span><span class="n">set_color</span><span class="p">((</span><span class="mf">1.0</span><span class="p">,</span> <span class="mf">1.0</span><span class="p">,</span> <span class="mf">1.0</span><span class="p">,</span> <span class="mf">0.0</span><span class="p">))</span>
<span class="n">ax</span><span class="p">.</span><span class="n">w_yaxis</span><span class="p">.</span><span class="n">line</span><span class="p">.</span><span class="n">set_color</span><span class="p">((</span><span class="mf">1.0</span><span class="p">,</span> <span class="mf">1.0</span><span class="p">,</span> <span class="mf">1.0</span><span class="p">,</span> <span class="mf">0.0</span><span class="p">))</span>
<span class="n">ax</span><span class="p">.</span><span class="n">w_zaxis</span><span class="p">.</span><span class="n">line</span><span class="p">.</span><span class="n">set_color</span><span class="p">((</span><span class="mf">1.0</span><span class="p">,</span> <span class="mf">1.0</span><span class="p">,</span> <span class="mf">1.0</span><span class="p">,</span> <span class="mf">0.0</span><span class="p">))</span>
<span class="n">ax</span><span class="p">.</span><span class="n">set_xticks</span><span class="p">([])</span> 
<span class="n">ax</span><span class="p">.</span><span class="n">set_yticks</span><span class="p">([])</span> 
<span class="n">ax</span><span class="p">.</span><span class="n">set_zticks</span><span class="p">([])</span>

<span class="c1"># labels
</span><span class="n">ax</span><span class="p">.</span><span class="n">set_xlabel</span><span class="p">(</span><span class="sa">r</span><span class="s">'$\theta$'</span><span class="p">)</span>
<span class="n">ax</span><span class="p">.</span><span class="n">set_ylabel</span><span class="p">(</span><span class="sa">r</span><span class="s">'$\dot{\theta}$'</span><span class="p">)</span>
<span class="n">ax</span><span class="p">.</span><span class="n">set_zlabel</span><span class="p">(</span><span class="sa">r</span><span class="s">'$\mathcal{L}$'</span><span class="p">)</span>

<span class="c1"># grafico e animacao
</span><span class="n">wframe</span> <span class="o">=</span> <span class="bp">None</span>
<span class="n">Z</span>      <span class="o">=</span> <span class="n">L</span><span class="p">(</span><span class="n">X</span><span class="p">,</span> <span class="n">Y</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">update</span><span class="p">(</span><span class="n">idx</span><span class="p">):</span>
    <span class="n">t</span> <span class="o">=</span> <span class="n">ts</span><span class="p">[</span><span class="n">idx</span><span class="p">]</span>
    <span class="k">global</span> <span class="n">wframe</span>
    <span class="k">if</span> <span class="n">wframe</span><span class="p">:</span>
        <span class="n">ax</span><span class="p">.</span><span class="n">collections</span><span class="p">.</span><span class="n">remove</span><span class="p">(</span><span class="n">wframe</span><span class="p">)</span>
    <span class="n">Z</span>      <span class="o">=</span> <span class="n">L</span><span class="p">(</span><span class="n">X</span><span class="p">,</span> <span class="n">Y</span><span class="p">,</span> <span class="n">t</span><span class="p">)</span>
    <span class="n">wframe</span> <span class="o">=</span> <span class="n">ax</span><span class="p">.</span><span class="n">plot_wireframe</span><span class="p">(</span><span class="n">X</span><span class="p">,</span> <span class="n">Y</span><span class="p">,</span> <span class="n">Z</span><span class="p">,</span> <span class="n">rstride</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span> <span class="n">cstride</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span> <span class="n">color</span><span class="o">=</span><span class="s">'k'</span><span class="p">,</span> <span class="n">linewidth</span><span class="o">=</span><span class="mf">0.5</span><span class="p">)</span>

<span class="n">ts</span>  <span class="o">=</span> <span class="n">np</span><span class="p">.</span><span class="n">linspace</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="mi">50</span><span class="p">,</span> <span class="mi">100</span><span class="p">)</span>
<span class="n">ani</span> <span class="o">=</span> <span class="n">animation</span><span class="p">.</span><span class="n">FuncAnimation</span><span class="p">(</span><span class="n">fig</span><span class="p">,</span> <span class="n">update</span><span class="p">,</span> <span class="n">Nfrm</span><span class="p">,</span> <span class="n">interval</span><span class="o">=</span><span class="mi">1000</span><span class="o">/</span><span class="n">fps</span><span class="p">)</span>
<span class="n">fn</span>  <span class="o">=</span> <span class="s">'plot_lagrangian'</span>
<span class="n">ani</span><span class="p">.</span><span class="n">save</span><span class="p">(</span><span class="n">fn</span><span class="o">+</span><span class="s">'.mp4'</span><span class="p">,</span><span class="n">writer</span><span class="o">=</span><span class="s">'ffmpeg'</span><span class="p">,</span><span class="n">fps</span><span class="o">=</span><span class="n">fps</span><span class="p">)</span>
<span class="n">ani</span><span class="p">.</span><span class="n">save</span><span class="p">(</span><span class="n">fn</span><span class="o">+</span><span class="s">'.gif'</span><span class="p">,</span><span class="n">writer</span><span class="o">=</span><span class="s">'imagemagick'</span><span class="p">,</span><span class="n">fps</span><span class="o">=</span><span class="n">fps</span><span class="p">)</span>
</code></pre></div>  </div>
</div>

<p><img src="/img/lagrangiana-em-movimento_plot_lagrangian_opt.gif" alt="animação da superfície da lagrangiana em 3D" /></p>]]></content><author><name></name></author><category term="física" /><category term="visualizacao" /><category term="anotacoes" /><summary type="html"><![CDATA[estudo do espaço de configurações evoluindo no tempo]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://thiagodsd.github.io/img/t_lagrangiana-em-movimento.png" /><media:content medium="image" url="https://thiagodsd.github.io/img/t_lagrangiana-em-movimento.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">tensor de faraday</title><link href="https://thiagodsd.github.io/2017/07/21/tensor-de-faraday.html" rel="alternate" type="text/html" title="tensor de faraday" /><published>2017-07-21T02:02:41+00:00</published><updated>2017-07-21T02:02:41+00:00</updated><id>https://thiagodsd.github.io/2017/07/21/tensor-de-faraday</id><content type="html" xml:base="https://thiagodsd.github.io/2017/07/21/tensor-de-faraday.html"><![CDATA[<p>No limite clássico a relação entre presença de campos elétricos e magnéticos e a força por eles exercida sobre um corpo eletricamente carregado é descrita pela equação de <a href="https://en.wikipedia.org/wiki/Lorentz_force">força de Lorentz</a></p>

\[F=q(E+v \times B)\]

<p>Então é possível encontrar uma “versão relativística” da força de Lorentz. Em geral uma forma análoga seria</p>

\[\frac{dp^\mu}{d\tau}=\frac{q}{c}F_\beta^\mu \eta^\beta\]

<p>onde</p>

<ul>
  <li>$ x^\mu \equiv (x^0, x^1, x^2, x^3) = (ct, x, y, z) = (ct, x^i) $</li>
  <li>$ u^i = v_{AS}^{i} $, a velocidade de um sistema A em relação a um referencial S</li>
  <li>$\gamma = \gamma_u \equiv \frac{1}{\sqrt{1 - \frac{u^2}{c^2}}}$</li>
  <li>$d\tau = \sqrt{ 1 - \frac{u^2}{c^2} } dt = \frac{dt}{\gamma}$</li>
  <li>$\eta^\mu \equiv (\gamma c, \gamma u^i)$</li>
  <li>$p^\mu = (\frac{E}{c}, m \eta^i) = (m \gamma c, m\gamma, u^i)$</li>
  <li>$\frac{1}{c}$ é uma constante</li>
</ul>

<p>Pode-se escrever o primeiro termo de forma mais conveniente, primeiro aplicando a regra do produto</p>

\[\frac{dp^\alpha}{d\tau}=\frac{d}{d\tau}m\eta^\alpha=\frac{dm}{d\tau}\eta^\alpha + m\frac{d\eta^\alpha}{d\tau}\]

<p>e daí multiplicando tudo por $\eta_\alpha$</p>

\[\frac{dp^\alpha}{d\tau}\eta_\alpha=\frac{dm}{d\tau}\eta^\alpha\eta_\alpha + m\frac{d\eta^\alpha}{d\tau}\eta_\alpha.\]

<p>Se a massa é invariante por transformações de Lorentz, então</p>

\[\frac{dp^\alpha}{d\tau}\eta_\alpha=m\frac{d\eta^\alpha}{d\tau}\eta_\alpha.\]

<p>Por outro lado:</p>

\[\frac{d}{d\tau}\left( \eta^\alpha \eta_\alpha \right)=\frac{d\eta^\alpha}{d\tau}\eta_\alpha + \eta^\alpha\frac{d\eta_\alpha}{d\tau}=2\frac{d\eta^\alpha}{d\tau}\eta_\alpha,\]

<p>Mas como os objetos estudados são campos eletromagnéticos no vácuo; em todo referencial a velocidade de propagação é igual a $c$, então</p>

\[\eta^2=-c^2 \Rightarrow \frac{d}{d\tau}\eta^2=\frac{d}{d\tau}\left( \eta^\alpha \eta_\alpha \right)=0.\]

<p>Juntando tudo:</p>

\[\frac{dp^\mu}{d\tau}\eta_\mu=m\frac{d\eta^\mu}{d\tau}\eta_\mu=\frac{1}{2}\frac{d}{d\tau}\left( \eta^\mu \eta_\mu \right)=0.\]

<p>Então, da equação inicial, segue que</p>

\[\frac{dp^\mu}{d\tau}\eta_\mu = \frac{q}{c} \boxed{F_\beta^\mu \eta^\beta \eta_\mu = 0}.\]

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>.
.
.
(a ser desenvolvido)
.
.
.
</code></pre></div></div>

<p>É possível usar o tensor métrico</p>

\[g_{\mu\nu}
\equiv
\begin{pmatrix}
-1 &amp; 0 &amp; 0 &amp; 0\\
0 &amp; 1 &amp; 0 &amp; 0\\
0 &amp; 0 &amp; 1 &amp; 0\\
0 &amp; 0 &amp; 0 &amp; 1
\end{pmatrix} = g^{\mu\nu}\]

<p>reescrever a equação destacada da seguinte forma</p>

\[F^{\beta \mu} \eta_\beta \eta_\mu=0.\]

<p>Das propriedades dos tensores, algo na forma</p>

\[a_\alpha a_\nu\]

<p>é um tensor chamado simétrico. Então, para essa última igualdade valer sempre é preciso que</p>

\[F^{\beta\mu}\]

<p>seja um tensor antissimetrico. A propriedade especial de um tensor antissimétrico é</p>

\[\chi^{ij}=-\chi^{ji}.\]

<p>Comparando as forças de Lorentz clássica e tensorial</p>

\[F=q(E+v \times B)\]

<p>e</p>

\[\frac{dp^\mu}{d\tau}=\frac{q}{c}F_\beta^\mu \eta^\beta,\]

<p>resta buscar as condições para que as duas sejam iguais. Para isso é conveniente identificar o produto vetorial como</p>

\[(\nabla \times B)_i = \epsilon_{ijk}\partial_j B_k\]

<p>onde $\epsilon^{ijk}$ é o “símbolo de Levi-Civita”.</p>

<p>Começando pelos termos da esquerda:</p>

\[\frac{dp^{i}}{d\tau}=\frac{dp^{i}}{\frac{dt}{\gamma} }=\gamma \frac{dp^{i}}{dt}.\]

<p>Então</p>

\[\frac{dp^i}{dt} = q(E^i + \epsilon_{ijk}v^j B^k) \qquad \text{(classico)}\]

\[\frac{dp^i}{d\tau} = \gamma \frac{dp^{i}}{dt} = \frac{q}{c} \left( F^{i}_{\alpha}\eta^{\alpha} \right) = \frac{q}{c} \left( F^{i}_{0}\eta^{0} + F^{i}_{j}\eta^{j} \right), \qquad \text{(relativistico)}\]

<p>daí</p>

\[\not{\gamma} \frac{dp^{i}}{dt} = \frac{q}{\not{c}} F^{i}_{0}\not{\gamma}\not{c} + \frac{q}{c} F^{i}_{j}\not{\gamma}v^{j}.\]

<p>Então comparando as formas clássica e relativística:</p>

\[\boxed{F^{i}_0=E^i}\]

<p>e</p>

\[\boxed{F^{i}_j=c\epsilon^{ijk}B^{k}}.\]

<p>A última equação não está tensorialmente correta. É preciso que os índices “combinem” e nela nota-se que o índice $j$ de $F$ não está na mesma posição que o de $\epsilon$. Novamente usa-se o tensor métrico para “subir os índices”:</p>

\[F^{i0}=F^{i}_{0}g^{00}=-E^i\]

<p>e</p>

\[F^{ij}=F^{i}_{\rho}g^{\rho j}=c\epsilon^{ijk}B^{k} \qquad (j \neq 0)\]

<p>um exemplo para perceber melhor o que ocorre na última igualdade é o seguinte:</p>

\[\begin{aligned}
F^{12} &amp;= F^{1}_{2} g^{12}\\
&amp;= c\epsilon^{12k}B^{k} g^{12}\\
&amp;=c \not{\epsilon^{121}} B^{1} g^{12} + c \not{\epsilon^{122}} B^{2} g^{12} + c\epsilon^{123}B^{3} g^{12}\\
&amp;= c\epsilon^{123}B^{3}.
\end{aligned}\]

<p>Então, pela antissimetria de $F^{\alpha \beta}$</p>

\[F^{\mu\nu}=\begin{pmatrix}
0 &amp; \mp F^{10} &amp; \mp F^{20} &amp; \mp F^{30}\\
\pm F^{10} &amp; 0 &amp; \mp F^{21} &amp; \mp F^{31}\\
\pm F^{20} &amp; \pm F^{21} &amp; 0 &amp; \mp F^{32}\\
\pm F^{30} &amp; \pm F^{31} &amp; \pm F^{32} &amp; 0
\end{pmatrix}\]

<p>Como $F^{i0}=-E^i$, então</p>

\[F^{\mu\nu}=\begin{pmatrix}
0 &amp; E_x &amp; E_y &amp; E_z\\
-E_x &amp; 0 &amp; \mp F^{21} &amp; \mp F^{31}\\
-E_y &amp; \pm F^{21} &amp; 0 &amp; \mp F^{32}\\
-E_z &amp; \pm F^{31} &amp; \pm F^{32} &amp; 0
\end{pmatrix}\]

<p>Por $F^{ij}=c\epsilon^{ijk}B^{k}$, tendo em mente as propriedades do símbolo de levi-civita</p>

\[\boxed{F^{\mu\nu}=\begin{pmatrix}
0 &amp; E_x &amp; E_y &amp; E_z\\
-E_x &amp; 0 &amp; cB_z &amp; -cB_y\\
-E_y &amp; -cB_z &amp; 0 &amp; cB_x\\
-E_z &amp; cB_y &amp; -cB_x &amp; 0
\end{pmatrix} }.\]

<p>Então se o tensor de campo $F^{\mu\nu}$ tiver a forma da equação anterior, a forma relativística da força de Lorentz é análoga à forma clássica. É possível partir desse ponto e desenvolver alguns outros resultados a fim de reescrever as equações de Maxwell em forma tensorial.</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>(. . .)
</code></pre></div></div>]]></content><author><name></name></author><category term="física" /><category term="notas" /><summary type="html"><![CDATA[construção do tensor de faraday a partir de analogias com a forma clássica da força de lorentz]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://thiagodsd.github.io/img/t_faraday.png" /><media:content medium="image" url="https://thiagodsd.github.io/img/t_faraday.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">mecânica 1</title><link href="https://thiagodsd.github.io/2017/07/16/mecanica-1.html" rel="alternate" type="text/html" title="mecânica 1" /><published>2017-07-16T21:02:51+00:00</published><updated>2017-07-16T21:02:51+00:00</updated><id>https://thiagodsd.github.io/2017/07/16/mecanica-1</id><content type="html" xml:base="https://thiagodsd.github.io/2017/07/16/mecanica-1.html"><![CDATA[<h2 id="histórico">histórico</h2>

<p>Em meados de 1687 Isaac Newton apresentou ao mundo uma espécie de tratado sobre o movimento – <a href="https://en.wikipedia.org/wiki/Philosophiæ_Naturalis_Principia_Mathematica">“Philosophiæ Naturalis Principia Mathematica”</a>. No núcleo de tudo se encontravam as três leis que não podem ser derivadas de princípios mais fundamentais e tudo que se move o faz de acordo com elas. É dispensável comentar a importância dos trabalhos de Newton para a compreensão da natureza. Ocorreu que esses trabalhos foram estudados e explorados até que surgiu uma nova maneira de enxergar o movimento.</p>

<p>Por volta de 1788 uma reformulação da mecânica foi organizada e apresentada por Joseph-Louis Lagrange no <a href="https://en.wikipedia.org/wiki/M%C3%A9canique_analytique">“Mécanique Analytique”</a>, dando origem ao chamado <strong>formalismo lagrangiano</strong>. Vale adiantar que apesar do nome, Jean-Baptiste D’Alembert e Leonhard Euler foram tão importantes quanto Lagrange no desenvolvimento da nova interpretação da mecânica.</p>

<h2 id="do-princípio-de-dalembert-ao-formalismo-lagrangiano">do princípio de d’alembert ao formalismo lagrangiano</h2>

<p>Imagine que há caixa com $N$ partículas idênticas e que o movimento de uma delas está sendo analisado.<br />
Como todas são idênticas, não faz diferença se a análise é feita sobre a partícula $1$ ou sobre a partícula $2$. Então pode-se falar que a análise do movimento é feita sobre a $i$-ésima partícula.<br /></p>

<p><img src="/img/mecanica1_diag-box.png" alt="caixa com partículas numeradas e o vetor posição r_i da i-ésima partícula" /></p>

<p>A segunda lei de Newton, quando reescrita na forma</p>

\[\textbf{F}_i = \frac{d \textbf{p}_i}{dt} = m\frac{d \textbf{v}_i}{dt} = m \textbf{a}_i \label{eqa}\]

<p>sintetiza a ideia de que <strong>a variação na velocidade de uma partícula $ i$ é proporcional a uma força externa aplicada a ela</strong>.</p>

<p>A ideia de trabalho relaciona essa força externa $F_i$ à distância $dr$ percorrida pela partícula enquanto estiver sob efeito da força, através de</p>

\[W = \int F_i \cdot \textbf{dr}\]

<p>Historicamente a noção de <strong>trabalho realizado por uma força</strong> esteve presente no estudo da estática, através do princípio do <strong>trabalho virtual</strong>. A ideia é que um sistema composto por $N$ partículas em equilíbrio estático, sujeito a forças externas $\textbf{F}_{i}^{e}$, poderia se mover para diferentes direções $\delta \textbf{r}_i$ – respeitando as restrições impostas pelos “<strong>vínculos de movimento</strong>”, que são os elementos que não fazem parte do sistema, mas que de alguma forma interferem em seu movimento. Por exemplo: uma corrente deslizando pela borda de uma mesa; ao adotar a corrente como sistema, há um vínculo com a mesa que limita seu movimento.</p>

<p>Pelo <strong>Princípio do Trabalho Virtual</strong> a condição de equilíbrio é aquela em que o trabalho das forças externas em todas as direções possíveis soma zero, ou seja</p>

\[\delta W = \sum_{i} \textbf{F}_{i}^{e} \cdot \delta \textbf{r}_i = 0\]

<p>Antes de prosseguir, para aliviar a notação, vou abandonar a representação de vetores como caracteres em negrito, adicionalmente passo a adotar a seguinte convenção para escrever derivadas no tempo:</p>

\[\frac{df}{dt} \equiv \dot{f} \nonumber\]

<p>Finalmente, o que D’Alembert fez em <a href="https://books.google.com.br/books?id=5R4OAAAAQAAJ">“Traite de Dynamique”</a> foi usar a ideia do trabalho virtual, típica de problemas de estática, para tentar resolver problemas de dinâmica. Ele fez isso da seguinte forma:</p>

<p>De $\ref{eqa}$</p>

\[F_i = \dot{p}_i \\ \Rightarrow F_i - \dot{p}_i = 0 \nonumber\]

<p>Então</p>

\[\sum_{i} (F_i - \dot{p}_i) \cdot \delta r_i = 0\]

<p>uma vez que o termo dentro dos parênteses é zero.</p>

<p>Segundo as leis de Newton a variação de momento é devido a forças resultantes, portanto $F_i$ pode ser decomposta em forças externas $ F_{i}^{e}$ e forças de vínculo $f_{i}$. Então</p>

\[\begin{aligned}
\sum_{i} [(F_{i}^{e} + f_{i}) - \dot{p}_i] \cdot \delta r_i = 0 \\ 
\sum_{i} (F_{i}^{e} - \dot{p}_i) \cdot \delta r_i + \sum_{i} (f_i - \dot{p}_i) \cdot \delta r_i = 0
\end{aligned}\]

<p>Ao restringir o interesse a sistemas onde as forças de vínculo são nulas – por exemplo: sistema Terra-Sol –, chega-se ao <strong>Princípio de D’Alembert</strong></p>

\[\boxed{ \sum_{i} (F_{i}^{e} - \dot{p}_i) \cdot \delta r_i = 0 } \label{eqb}\]

<div class="example">

  <h3 id="exemplo">exemplo</h3>

  <p>Não raro os livros-textos usam a $\ref{eqb}$ para a obtenção de resultados mais interessantes do ponto de vista operacional. Contudo, é interessante ver como Princípio de D’Alembert pode ser usado em um problema de estática.</p>

  <p>Como exemplo, considere um sistema de duas massas, conectadas por um fio inextensível e de massa desprezível, ambas sobre meio-cilindro, conforme ilustrado no diagrama a seguir</p>

  <p><img src="/img/mecanica1_cilindro.png" alt="massas m1 e m2 sobre um meio-cilindro de raio R, ligadas por um fio, nos ângulos θ1 e θ2" /></p>

  <p>Surge uma boa oportunidade de retomar a ideia de vínculo: considerando que as massas compõem o sistema, há um vínculo entre o sistema e o meio-cilindro.<br />
Imagine que a figura é uma fotografia do sistema no instante $t=t_0$. Se o meio-cilindro não existisse, o movimento do sistema nos $t&gt;t_0$ seguintes seria vertical – ele cairia, certo? Mas como há a metade de cilindro lá, nos próximos $t&gt;t_0$ o sistema é obrigado a descrever uma espécie de movimento circular, em torno do centro do meio-cilindro de raio $R$. Na prática <strong>o vínculo impõe restrições ao movimento do sistema</strong>.</p>

  <p>Alguém poderia questionar a palavra “restrição”, já que no exemplo o sistema se moveria apenas na vertical sem o vínculo, e com ele o movimento se dá em ambas as direções, vertical e horizontal – ou seja, pensando no sentido usual da palavra “restrição”, o movimento sem o vínculo parece ser mais restrito, por ser limitado a uma direção apenas.<br />
Nesse sentido, vale a pena entender a ideia de restrição apenas como uma imposição a qual o movimento do sistema está sujeito. É instrutivo, portanto, pensar que <strong>quando há um vínculo, há uma dependência</strong> – no caso do exemplo, entre os deslocamentos horizontal e vertical. Em outras palavras: o deslocamento horizontal do sistema em torno da superfície do meio-cilindro é uma função do quanto o sistema se deslocou na vertical – e vice-versa.</p>

  <p>Tudo isso observado, resta tentar descobrir qual é a condição de equilíbrio. Segue de $\ref{eqb}$ que</p>

\[\begin{aligned}
\delta W &amp;= \sum_{i} \left[ F_i - m_i \ddot{r_i}\right] \cdot \delta r_i &amp; = 0 \\
&amp;= \left[ F_1 - m_1 \ddot{r_1}]\cdot \delta r_1 + [F_2 - m_2 \ddot{r_2}\right] \cdot \delta r_2 &amp;= 0
\end{aligned}\]

  <p>como, em coordenadas esféricas, a posição $s$ de um ponto na superfície do cilindro é função de um ângulo $\theta$, de modo que</p>

\[s=R\theta \\ \Rightarrow \ddot{s}=R\ddot{\theta} \nonumber\]

  <p>e, em particular para as posições das massas $m_1$ e $m_2$, o deslocamento angular de uma implica no deslocamento angular de outra, ou seja</p>

\[\ddot{\theta}_1=\ddot{\theta}_2 \nonumber\]

  <p>segue que</p>

\[\begin{aligned}
&amp;= \left[ -m_1 g - m_1 R\ddot{\theta}]\cdot \delta r_1 + [-m_2 g - m_2 R\ddot{\theta}\right] \cdot \delta r_2 = 0
\end{aligned}\]

  <p>Esses $ \delta r_i$ são <strong>deslocamentos virtuais</strong> e por definição podem apontar para qualquer direção. Nesse exemplo o sistema pode se mover em duas direções, vertical e horizontal, que vou chamar de $y$ e $x$, respectivamente. Conforme comentado anteriormente, os deslocamentos nessas direções dependem um do outro, então para a analisar o equilíbrio basta ver o que acontece com uma delas. Escolhendo $y$</p>

\[\begin{aligned}
y_i &amp;= Rsin\theta_i \\ 
\Rightarrow \delta y_i &amp;= R cos\theta_i \delta \theta_i \nonumber 
\end{aligned}\]

  <p>não perdendo de vista que, devido ao vínculo entre as duas massas, $ \delta \theta_1 = \delta \theta_2$, segue que</p>

\[\begin{aligned}
&amp;= -m_1 g \cdot \delta y_1 + m_2 g \cdot \delta y_2 - (m_1 cos\theta_1 + m_2 cos\theta_2) R\ddot{\theta} R \cdot \delta \theta = 0\\
&amp;= -m_1 g R cos\theta_1 \cdot \delta \theta - m_2 g R cos\theta_2 \cdot \delta \theta - (m_1 cos\theta_1 + m_2 cos\theta_2) R\ddot{\theta} R \cdot \delta\theta = 0
\end{aligned}\]

  <p>como no equilíbrio a aceleração é nula</p>

\[\ddot{\theta}=0 \nonumber\]

  <p>chega-se em</p>

\[\begin{aligned}
\delta W = [ -m_1 g R cos\theta_1 - m_2 g R cos\theta_2 ] \cdot \delta \theta = 0
\end{aligned}\]

  <p>que tem a mesma forma da $\ref{eqb}$. Para que a igualdade seja válida sempre é necessário que</p>

\[\boxed{\frac{P_1}{P_2} = -\frac{cos\theta_2}{cos\theta_1}} \nonumber\]

  <p>que é a condição de equilíbrio do sistema.</p>

  <p>Vale a seguinte observação: embora $\delta\theta=0$ também satisfaça a condição de equilíbrio, deslocamentos nulos impossibilitam o uso da definição de trabalho virtual.</p>

</div>

<h2 id="referências">referências</h2>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>@book{9780201657029,
  Author    = {Herbert Goldstein and Charles P. Poole Jr. and John L. Safko},
  Title     = {Classical Mechanics (3rd Edition)},
  Publisher = {Pearson},
  Year      = {2001},
  ISBN      = {9780201657029},
  URL       = {https://www.amazon.com/Classical-Mechanics-3rd-Herbert-Goldstein/dp/0201657023}
}
</code></pre></div></div>]]></content><author><name></name></author><category term="física" /><category term="notas" /><summary type="html"><![CDATA[construção da equação de euler-lagrange a partir do princípio de d'alambert]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://thiagodsd.github.io/img/t_mecanica-classica.png" /><media:content medium="image" url="https://thiagodsd.github.io/img/t_mecanica-classica.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">equações diferenciais</title><link href="https://thiagodsd.github.io/2016/07/17/equacoes-diferenciais.html" rel="alternate" type="text/html" title="equações diferenciais" /><published>2016-07-17T21:12:42+00:00</published><updated>2016-07-17T21:12:42+00:00</updated><id>https://thiagodsd.github.io/2016/07/17/equacoes-diferenciais</id><content type="html" xml:base="https://thiagodsd.github.io/2016/07/17/equacoes-diferenciais.html"><![CDATA[<p><strong>Disclaimer</strong><br />Essas anotações são excertos de um texto sobre equações diferenciais escrito em 2016 e publicado para fins de divulgação científica. Agora, 6 anos depois eu não tenho ideia do que eu queria desenvolver ou concluir com ele. Vão-se os conhecimentos, ficam os registros.</p>

<p><br /><br /></p>

<h2 id="equação-diferencial-exata">equação diferencial exata</h2>

<p><em>Uma equação diferencial da forma</em></p>

\[I(x,y)dx + J(x,y)dy=0\]

<p><em>é exata se existe uma função $\phi(x,y)$ – chamada função “potencial” – tal que</em></p>

\[\begin{aligned}
\frac{\partial \phi}{\partial x}&amp;=I(x,y)\\
\frac{\partial \phi}{\partial y}&amp;=J(x,y).
\end{aligned}\]

<p><em>Lembrando que, dada uma função $z(x,y)$, o <a href="https://pt.wikipedia.org/wiki/Teorema_de_Clairaut-Schwarz#:~:text=Na%20an%C3%A1lise%20matem%C3%A1tica%2C%20o%20teorema,s%C3%A3o%20cont%C3%ADnuas%2C%20ent%C3%A3o%20s%C3%A3o%20iguais.">Teorema de Schwarz</a> garante que</em></p>

\[\frac{\partial^2 z}{\partial x \partial y}=\frac{\partial^2 z}{\partial y \partial x},\]

<p><em>segue que, se a equação diferencial inicial é exata, então</em></p>

\[\frac{\partial I}{\partial y}=\frac{\partial J}{\partial x}.\]

<div class="example">

  <p><em>Para ilustrar, considere</em></p>

\[\left(\frac{x+y}{1+y^2}\right)y'=-(x+arctan(y)),\]

  <p><em>e observe que</em></p>

\[\begin{aligned}
\left(\frac{x+y}{1+y^2}\right)y'&amp;=-(x+arctan(y))\\
\left(\frac{x+y}{1+y^2}\right)\frac{dy}{dx}&amp;=-(x+arctan(y))\\
\left(\frac{x+y}{1+y^2}\right)dy\, &amp;+\, (x+arctan(y))dx =0.\\
\end{aligned}\]

  <p><em>Lembrando que qualquer equação diferencial linear de primeira ordem pode ser escrita assim, o que não implica que ela é exata. Nesse caso é preciso verificar. Veja que</em></p>

\[\begin{aligned}
I(x,y)&amp;=(x+arctan(y))\\
J(x,y)&amp;=\left(\frac{x+y}{1+y^2}\right).
\end{aligned}\]

  <p><em>Então</em></p>

\[\frac{\partial I}{\partial y}=\frac{1}{1+y^2}=\frac{\partial J}{\partial x}\]

  <p><em>e a função</em></p>

\[\phi(x,y)=\frac{x^2}{2}+x\,arctan(y)+\frac{1}{2}ln(1+y^2)\]

  <p><em>satisfaz a condição necessária para ser função potencial da equação desse exemplo.</em></p>

</div>

<h2 id="equação-diferencial-linear-de-primeira-ordem">equação diferencial linear de primeira ordem</h2>

<p><em>Além do fato da equação diferencial linear</em></p>

\[y' + p(x)\, y=q(x)\]

<p><em>possuir solução geral, ela aparece em dois métodos de resolução, então seria legal saber como encontrar soluções pra ela. Pra isso é conveniente escrevê-la da seguinte forma</em></p>

\[dy + \left[ p(x)y-q(x) \right]dx=0.\]

<p><em>Apesar de ser tentador classificar a equação acima como exata, não é possível saber, a princípio, se é ou não.
A ideia por trás da obtenção da solução geral é “forçá-la” a ser exata. Para isso multiplica-se uma função $v(x)$ em ambos os lados da igualdade</em></p>

\[v(x)\left[ p(x)y - q(x) \right]dx + v(x)dy=0\]

<p><em>e procura-se as condições que tornam a equação exata. Dessa equação se obtém que</em></p>

\[\int v(x)p(x)ydx - \int v(x)q(x)dx + \int v(x)dy=C_1,\]

<p><em>Mas se a equação anterior for exata, vai ser verdade que</em></p>

\[\frac{\partial}{\partial y}\left[ v(x)p(x)y - v(x)q(x) \right]=\frac{\partial}{\partial x}v(x)\]

<p><em>Ou seja</em></p>

\[\begin{aligned}
v(x)p(x) &amp;=\frac{dv}{dx}\\
p\,dx &amp;= \frac{dv}{v}
\end{aligned}\]

<p><em>Que leva à</em></p>

\[v(x)=e^{( \int p(x)\,dx )}.\]

<p><em>Assim</em></p>

\[\begin{aligned}
\int v(x)p(x)ydx - \int v(x)q(x)dx + \int v(x)dy&amp;=C\\
\int v'(x)ydx - \int v(x)q(x)dx + \int v(x)dy&amp;=C\\
v(x)y - \int v(x)q(x)dx + v(x)y&amp;=C\\
v(x)y - \int v(x)q(x)dx&amp;=K\\
y\,e^{( \int p(x)\,dx )} - \int e^{( \int p(x)\,dx )}q(x)dx&amp;=K
\end{aligned}\]

<p><em>Então</em></p>

\[\boxed{ y(x) = K\,e^{ -\int p(x)\,dx} + e^{ -\int p(x)\,dx}\int e^{ \int p(x)\,dx }q(x)dx }\]

<p><em>é solução da equação diferencial linear.</em></p>

<div class="example">

  <p><em>Para ilustrar, considere</em></p>

\[y'-y=e^{2x}.\]

  <p><em>Nesse caso</em></p>

\[\begin{aligned}
p(x) &amp;=-1\\
q(x) &amp;= e^{2x},
\end{aligned}\]

  <p><em>Então</em></p>

\[\begin{aligned}
y(x) &amp;= K\,e^{ -\int p(x)\,dx} + e^{ -\int p(x)\,dx}\int e^{ \int p(x)\,dx }q(x)dx\\
y(x) &amp;= K\,e^{ \int dx} + e^{ \int dx}\int e^{ -\int dx }e^{2x}dx\\
y(x) &amp;= K\,e^{x} + e^{x}\int e^{x}dx\\
y(x) &amp;= K\,e^{x} + e^{2x}\\
\end{aligned}\]

  <p><em>é solução da equação diferencial inicial.</em></p>

</div>

<p><em>Nesse ponto, é interessante citar a ideia de operador diferencial.</em></p>

<h2 id="operador-diferencial">operador diferencial</h2>

<p><em>A maneira como eu entendo operadores é a seguinte: operadores são coisas que você gruda em outras coisas para aplicar alguma regra nelas. Um bom exemplo de operador é o gradiente, $\nabla$, que a grosso modo, no $R^3$, tem a seguinte cara</em></p>

\[\nabla \equiv \left( \frac{\partial}{\partial x}\hat{x} + \frac{\partial}{\partial y}\hat{y} + \frac{\partial}{\partial z}\hat{z}\right).\]

<p><em>Assim, dada a função</em></p>

\[f(x,y,z)=cos(xy) + 5z^2x\]

<p><em>pode-se aplicar esse operador através de uma espécie de multiplicação, por exemplo</em></p>

\[\begin{aligned}
\nabla f &amp;= \left( \frac{\partial}{\partial x}\hat{x} + \frac{\partial}{\partial y}\hat{y} + \frac{\partial}{\partial z}\hat{z}\right)f\\
\nabla f &amp;= \frac{\partial f}{\partial x}\hat{x} + \frac{\partial f}{\partial y}\hat{y} + \frac{\partial f}{\partial z}\hat{z}\\
\nabla f &amp;= [-sin(xy)y+5z^2]\;\hat{x} + [-sin(xy)x]\;\hat{y} + [10xz]\;\hat{z}\\
\nabla f &amp;= \left(-sin(xy)y+5z^2,\;\; -sin(xy)x,\;\; 10xz\right),
\end{aligned}\]

<p><em>obtendo-se o gradiente de $f$.</em></p>

<p><em>É interessante notar que o gradiente aplicado a uma função escalar resulta em uma função vetorial. É possível “combinar” o nabla $\nabla$ à funções escalares e vetoriais de outras formas de modo a obter outras coisas além do gradiente, como, por exemplo, o divergente, o rotacional e o laplaciano.</em></p>

<p><em>Fica claro então que basta alguma regra associada a algum tipo de objeto matemático para se criar um operador. Além disso essa regra pode ser complicada de se escrever, então do ponto de vista estético o uso de operadores tende a deixar as coisas mais claras.</em></p>

<p><em>Dito tudo isso, segue uma “definição”, digamos, do tal operador diferencial:</em></p>

\[D^n_t \equiv \frac{d^n}{dt^n}.\]

<p><em>Então a aplicação do operador diferencial $D^n_t$ em uma função escalar resulta na n-ésima derivada da função com respeito à variável $t$.</em></p>

<p><em>Como tudo até aqui tem sido dependente da variável $x$, é conveniente simplificar a coisa para</em></p>

\[D^n \equiv \frac{d^n}{dx^n}.\]

<p><em>Então na prática é o seguinte:</em></p>

\[D^ny \equiv \frac{d^ny}{dx^n},\]

<p><em>Então algo como</em></p>

\[\frac{d^6y}{dx^6}+2\frac{d^5y}{dx^5}-2\frac{d^3}{dx^3}-\frac{dy}{dx}+22y=0\]

<p><em>passa a ser escrito como</em></p>

\[(D^6+2D^5-2D^3-D+22)y=0.\]

<p><em>Eventualmente pode ser interessante definir $D^6+2D^5-D^3-D+22$ como um certo $L$ de modo que se possa escrever a equação acima como</em></p>

<p>$L(y)=0.$</p>

<p><em>Então, pra concluir essa primeira parte, seria possível definir $L$ tal que</em></p>

\[L=D-1\]

<p><em>e aí reescrever aquele exemplo da equação diferencial linear como</em></p>

\[L(y)=e^{2x}.\]

<p><br /></p>
<p style="color: red; font-weight: light;"> <i>(não tenho ideia do que esse final anticlimático deveria significar)</i></p>
<p><br /></p>

<h2 id="equação-diferencial-de-segunda-ordem">equação diferencial de segunda ordem</h2>

<p><em>A equação diferencial de segunda ordem homogênea</em></p>

\[y''+ay'+by=0\]

<p><em>também tem solução geral. Para chegar nessa solução é interessante estudar separadamente as soluções de cada forma que essa equação assume.</em></p>

<h3 id="caso-1-ab0">caso 1: $a=b=0$</h3>

<p><em>A solução geral desse caso se obtém por uma sequência de integrações:</em></p>

\[\begin{aligned}
y'' &amp;= 0\\
y' &amp;=C_1\\
y &amp;= C_1x + C_2.\\
\end{aligned}\]

<h3 id="caso-2-a0-b0">caso 2: $a=0$, $b&lt;0$</h3>

<p><em>Nesse caso um primeiro detalhe é que qualquer número ao quadrado pode ser escrito como um certo $-k^2$. Então</em></p>

\[\begin{aligned}
y'' +by&amp;= 0\\
y'' &amp;=-by\\
y'' &amp;= k^2y.\\
\end{aligned}\]

<p><em>Nesse ponto não tem jeito – entenda “método” –, tem que procurar alguma função que satisfaça a igualdade acima. Procurando, pensando e inspecionando um pouco, conclui-se que duas funções são soluções dessa equação:</em></p>

<ol>
  <li>$y=e^{kx}$</li>
  <li>$y=e^{-kx}$</li>
</ol>

<p><em>O <a href="https://pt.wikipedia.org/wiki/Princ%C3%ADpio_da_superposi%C3%A7%C3%A3o">princípio da superposição</a> garante que a combinação linear de soluções de equações diferenciais lineares também são soluções, então a solução geral desse caso é</em></p>

\[y=C_1e^{kx}+C_2e^{-kx}.\]

<h3 id="caso-3-a0-b0">caso 3: $a=0$, $b&gt;0$</h3>

<p><em>Analogamente ao caso anterior, qualquer número positivo pode ser escrito como um certo $k^2$, então</em></p>

\[\begin{aligned}
y'' +by&amp;= 0\\
y'' &amp;=-by\\
y'' &amp;= -k^2y.\\
\end{aligned}\]

<p><em>Novamente, depois de procurar, pensar e inspecionar conclui-se que</em></p>

<ol>
  <li>$y=cos(kx)$</li>
  <li>$y=sin(kx)$</li>
</ol>

<p><em>são soluções. Novamente pelo princípio da superposição se obtém a solução geral</em></p>

\[y=C_1cos(kx)+C_2sin(kx).\]

<h3 id="caso-4-aneq-0-bneq0">caso 4: $a\neq 0$, $b\neq0$</h3>

<p><em>Esse é o caso mais geral. A motivação do raciocínio que conduz à solução geral é querer reduzir essa forma em uma das três anteriores, já que suas soluções já são conhecidas. Para isso a ideia é usar uma variação de uma estratégia recorrente na tentativa de resolução de equações diferenciais, como por exemplo</em></p>

\[\frac{dy}{dx}=\frac{y-x}{y+x}\]

<p><em>que é fazer uma substituição do tipo $y=ux$. No caso a escolha será</em></p>

\[y=uv.\]

<p><em>Dessa substituição segue que</em></p>

\[\begin{aligned}
y'&amp;=u'v+uv'\\
y''&amp;=u''v+2u'v'+uv''.
\end{aligned}\]

<p><em>Então</em></p>

\[\begin{aligned}
y''+ay'+b&amp;=0\\
u''v+2u'v'+uv'' + a(u'v+uv')+buv&amp;=0\\
(v''+av'+bv)u+(2v'+av)u' + vu''&amp;=0.\\
\end{aligned}\]

<p><em>Para que a equação acima assuma alguma forma cuja solução seja conhecida é preciso que o termo com $u$ suma. Para isso</em></p>

\[\begin{aligned}
2v'&amp;=-av\\
\frac{2}{a} \left( \frac{v'}{v} \right) &amp;= -1\\
\frac{2}{a} ln(v) &amp;= -x + C\\
v &amp;= Ke^{-\frac{ax}{2}}
\end{aligned}\]

<p><em>Então qualquer $v$ com essa forma faz o trabalho de eliminar o $u’$. Agora sabe-se que</em></p>

\[v'=-\frac{a}{2}v\]

<p><em>e</em></p>

\[v''=\frac{a^2}{4}v,\]

<p><em>então</em></p>

\[\begin{aligned}
y''+ay'+b&amp;=0\\
(v''+av'+bv)u+(2v'+av)u' + vu''&amp;=0\\
\left( \frac{a^2v}{4}-\frac{a^2v}{2}+bv \right)u +v''u&amp;=0\\
\left( u''-\frac{4b-a^2}{4}u \right)v&amp;=0
\end{aligned}\]

<p><em>Não perdendo de vista que $v$ nunca vai ser igual a zero, segue que a solução da equação diferencial inicial será</em></p>

\[y=e^{-\frac{ax}{2}}u,\]

<p><em>onde $u$ satisfaz</em></p>

\[u''-\frac{4b-a^2}{4}u = 0,\]

<p><em>que é exatamente a forma estudada nos casos anteriores! Então, assim como as soluções depediam do sinal de $b$, agora a natureza da solução da equação diferencial inicial depende do sinal do numerador de</em></p>

\[d=\frac{4b-a^2}{4}.\]

<p><em>A união de tudo que foi dito até agora leva à solução da equação diferencial</em></p>

\[y''+ay'+by=0\]

<p><em>que tem a forma</em></p>

\[y=e^{-\frac{a}{2}x}\left( C_1 u_1 + C_2 u_2\right)\]

<p><em>onde $u_1$ e $u_2$ são determinadas pelo sinal de $d$ de modo que</em></p>

\[\begin{aligned}
d=0 &amp; \Rightarrow &amp; u_1&amp;=1 &amp;u_2 &amp;=x &amp;\\
d0 &amp; \Rightarrow &amp; u_1&amp;=cos(kx) &amp;u_2 &amp;=sin(kx)&amp; \;\; (d=k^2)\\
\end{aligned}\]

<p><em>Então algo com a cara</em></p>

\[y^{\prime\prime} - 13y^{\prime} + 7y = 0\]

<p><em>tem solução igual a</em></p>

\[y(x) = C_1 e^{-\frac{1}{2} \left( \sqrt{141}-13 \right) x}+C_2 e^{\frac{1}{2} \left( 13 + \sqrt{141}\right) x}.\]

<p><br /></p>
<p style="color: red; font-weight: light;"> <i>(novamente, não tenho ideia do que esse final anticlimático deveria significar)</i></p>
<p><br /></p>]]></content><author><name></name></author><category term="física" /><category term="notas" /><summary type="html"><![CDATA[anotações sobre equações diferenciais]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://thiagodsd.github.io/img/t_mecanica-classica.png" /><media:content medium="image" url="https://thiagodsd.github.io/img/t_mecanica-classica.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry></feed>