<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="pt-BR">
	<id>http://fiscomp.if.ufrgs.br/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Renanrs</id>
	<title>Física Computacional - Contribuições do usuário [pt-br]</title>
	<link rel="self" type="application/atom+xml" href="http://fiscomp.if.ufrgs.br/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Renanrs"/>
	<link rel="alternate" type="text/html" href="http://fiscomp.if.ufrgs.br/index.php?title=Especial:Contribui%C3%A7%C3%B5es/Renanrs"/>
	<updated>2026-06-13T04:33:29Z</updated>
	<subtitle>Contribuições do usuário</subtitle>
	<generator>MediaWiki 1.43.0</generator>
	<entry>
		<id>http://fiscomp.if.ufrgs.br/index.php?title=Din%C3%A2mica_Molecular_de_Part%C3%ADculas-Planares_Interagentes&amp;diff=6584</id>
		<title>Dinâmica Molecular de Partículas-Planares Interagentes</title>
		<link rel="alternate" type="text/html" href="http://fiscomp.if.ufrgs.br/index.php?title=Din%C3%A2mica_Molecular_de_Part%C3%ADculas-Planares_Interagentes&amp;diff=6584"/>
		<updated>2021-12-01T18:46:35Z</updated>

		<summary type="html">&lt;p&gt;Renanrs: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Grupo: Antônio Carlan, Gabriela Pereira, Renan Soares e Victor Gandara&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Objetivo:&#039;&#039;&#039; O trabalho tem como objetivo descrever a dinâmica molecular de um conjunto de partículas-planares infinitas paralelas. o modelo simplificado para estudar o comportamento de muitos corpos interagentes ao longo de um único eixo espacial é usado para feixes de partículas carregadas e também para sistemas autogravitantes. O estudo desse tipo de interação é importante para ter insights de sistemas de maior dimensionalidades. Entre os fatores mais interessantes de serem analisados no espaço de fase da distribuição de partículas, caracterizado com posição no eixo x e momento ou velocidade no eixo y, temos a formação de aréolas no espaço de fase. Essas aréolas ocorrem quando distribuições iniciais acabam fornecendo energia superior a presente na média inicial de partículas devido a oscilações na posição do núcleo (parte da distribuição do espaço de fase que contém a grande maioria das partículas) e, por conta dessa formação, o feixe tende a perder qualidade e até número de partículas quando há contato com as paredes do acelerador.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= O modelo =&lt;br /&gt;
&lt;br /&gt;
É possível criar um modelo simplificado de interação de partículas imaginando que todas elas são compostas por planos de mesma massa e sem espessura, paralelos entre si e com liberdade de movimento relevante no eixo perpendicular às superfícies das mesmas.&lt;br /&gt;
&lt;br /&gt;
Tal modelo pode ser utilizado para estudar a dinâmica de um número elevado de partículas e conta com algumas particularidades simplificadoras de complexidade numérica. Alguns estudos utilizam esse modelo para estudar o comportamento de feixes carregados com a menor dimensionalidade possível e também para sistemas auto-gravitantes. As duas aplicações citadas serão as demonstradas a seguir mas o modelo é versátil para diferentes condições iniciais e de contorno.&lt;br /&gt;
&lt;br /&gt;
== Descrição do Modelo ==&lt;br /&gt;
&lt;br /&gt;
=== Disposição espacial ===&lt;br /&gt;
&lt;br /&gt;
Um número &amp;quot;N&amp;quot; de partículas-plano de mesma massa é disposto ao longo do eixo x com uma função de distribuição n(x) e com todas as partículas paralelas ao plano yz. No caso do modelo auto-gravitante, movimentos ao longo do eixo z não têm relevância prática mas para o modelo de um feixe de planos é definido que todos os planos se movem na direção z com mesma velocidade.&lt;br /&gt;
&lt;br /&gt;
A consideração de movimento ao longo do eixo z para o modelo de feixe é importante para a análise do comportamento do espaço de fases ao longo do comprimento do acelerador de partículas. Aqui, podemos imaginar estudar casos em que o feixe gerado inicialmente no espaço de fase terá um comportamento constante no tempo para cada secção transversal em xy para uma coordenada em z pré-estabelecida.&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:1paralelas.gif]] &lt;br /&gt;
&lt;br /&gt;
=== Ausência de Efeitos de Colisão ===&lt;br /&gt;
&lt;br /&gt;
O modelo leva em consideração que todas os planos possuem a mesma massa e que as colisões não levam a perda de energia no sistema.&lt;br /&gt;
&lt;br /&gt;
Dessa forma podemos prever o que ocorre quando a posição de dois planos coincide pois há conservação no momento linear em x e o coeficiente de restituição (razão entre as velocidades de afastamento e aproximação dos corpos) é igual a 1.&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:2diagrama.png]] &lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{cases} mv_1 - mv_2 = -mv_1&#039; + mv_2&#039;  \\ \\   \frac{v_1&#039; + v_2&#039;}{v_1 + v_2} = 1  \end{cases}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
O sistema de equações resulta em: &amp;lt;math&amp;gt;v_1&#039; = v_2 \ \ \ ; \ \ \ v_2&#039; = v_1&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dessa forma, é irrelevante ponderar se houve de fato uma colisão com troca de velocidades ou se as partículas simplesmente cruzam sem interferir de forma relevante. A última consideração é a levada em conta no ponto de vista computacional pois exclui a necessidade de atualizar a velocidade das partículas que passaram pela mesma posição no eixo x. Devido a igualdade de massas e também ao fato de que os encontros entre duas partículas se dão de forma sempre frontal, podemos de fato desconsiderar efeitos de colisão durante a modelagem da integração temporal do feixe.&lt;br /&gt;
&lt;br /&gt;
=== Interação entre as partículas ===&lt;br /&gt;
&lt;br /&gt;
Para analisar a interação entre as partículas é preciso entender como uma única partícula afeta seu entorno.&lt;br /&gt;
&lt;br /&gt;
No caso das partículas-plano carregadas eletricamente podemos considerar os efeitos de campo elétrico de um isolante plano infinito:&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:3corpolivre.png]] &lt;br /&gt;
&lt;br /&gt;
Pela lei de Gauss, para uma dada distribuição de carga com densidade superficial &amp;lt;math&amp;gt;\sigma&amp;lt;/math&amp;gt;: &lt;br /&gt;
:&amp;lt;math&amp;gt; &lt;br /&gt;
\oint  \overrightarrow{E}. d\overrightarrow{S}  = \frac{Q_{int}}{\epsilon_0} &lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
E.A - (-E.A) = \frac{\sigma . A   }{\epsilon_0} &lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
E= \frac{\sigma }{2\epsilon_0}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
O mesmo pode ser feito para um plano com densidade de massa distribuída uniformemente, para o caso do sistema auto-gravitante, com mudança na constante física multiplicativa e no sinal.&lt;br /&gt;
&lt;br /&gt;
O fato importante a ser destacado aqui é a total independência do campo gerado pela partícula e a distância. Dessa forma, a interação entre as partículas em qualquer sistema que seguir esse modelo não terá dependência da distância entre elas e sim da posição relativa entre as partículas consideradas.&lt;br /&gt;
&lt;br /&gt;
Essa consideração é razoável visto que as interações eletrostáticas de longo alcance possuem pouca influência relativa entre as cargas e reduz bastante o esforço computacional quando simulações são realizadas. Diferentes de sistemas de partículas que possuem força resultante dependente do quadrado da distância e que devem ser calculadas para todos os pares de partículas, aqui as forças sentidas pela interação eletrostática entre as partículas-plano depende exclusivamente da diferença do número de partículas de um lado e do outro, sendo necessário para realização dos cálculos numéricos apenas a implementação de uma função de ordenamento.&lt;br /&gt;
&lt;br /&gt;
=== Interferência externa do sistema ===&lt;br /&gt;
&lt;br /&gt;
Para o caso dos planos no sistema auto-gravitante não é necessária ação externa alguma para manter o equilíbrio em um sistema dinâmico estável. Sempre é levado em conta que todas as partículas têm velocidade em x inferior a velocidade de escape do restante do sistema e, por conta disso e das forças sempre atrativas de interação, o sistema não expande indefinidamente.&lt;br /&gt;
&lt;br /&gt;
Já no caso de planos carregados eletricamente as forças de interação entre os planos serão sempre repulsivas e a energia total do sistema é positiva. Sem uma interação externa, mesmo um sistema composto por um número limitado de partículas de fraca interação expandiria indefinidamente. Por causa disso, nesse caso é considerado que há uma força colimadora no feixe de planos proporcional a distância da origem. A origem dessa força externa vem de modelos de maior dimensionalidade de aceleradores de partícula que contam com um campo magnético externo capaz de colimar um feixe de cargas radialmente, por não existir um paralelo direto para o modelo unidimensional consideramos apenas uma força restauradora que impede a expansão indefinida do sistema como um todo. Também é possível ajustar condições de contorno simulando as paredes externas do acelerador como placas condutoras infinitas e com potencial definido. Esse tipo de consideração pode ser feita para sistemas que não são simétricos e impede que as cargas se afastem demasiadamente da origem.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:4graficoforça.png]]&lt;br /&gt;
&lt;br /&gt;
= Comportamento de uma Partícula no Sistema =&lt;br /&gt;
&lt;br /&gt;
Graças a caracterização das partículas temos que o campo gerado por uma partícula-plano pode ser caracterizado (para ambos os sistemas citados) da seguinte forma:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
E_i(x) = -\lambda\Theta[-(x-x_i)]  + \lambda\Theta(x-x_i)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:5perfilcampo.png]]&lt;br /&gt;
&lt;br /&gt;
Em que a constante &amp;lt;math&amp;gt;\lambda&amp;lt;/math&amp;gt; pode ser tanto positiva (cargas positivas) quanto negativa (cargas negativas ou interação gravitacional) e a função &amp;lt;math&amp;gt;\Theta&amp;lt;/math&amp;gt; equivale a função degrau de Heaviside:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\Theta(x) = \begin{cases} 0, \ \ x&amp;lt;0 \\ 1, \ \ x&amp;gt;0 \end{cases}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dessa forma, para exemplificação, um sistema de 5 partículas-plano teria uma interação da seguinte forma:&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:6forçaresultante.png]]&lt;br /&gt;
&lt;br /&gt;
Aqui, F seria a força de interação entre duas partículas no caso de planos carregados. É possível notar que a força de interação varia de duas unidades dessa constante para cada partícula contada em uma direção e que a força máxima sentida (pelas partículas-plano localizadas nas extremidades) é proporcional a &amp;lt;math&amp;gt;(N-1)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
É possível notar que para uma distribuição de partículas-plano do tipo:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt; &lt;br /&gt;
n(x) =   \sum_{i=1}^N \delta(x_i) &lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
com o índice  &amp;lt;math&amp;gt;\ \ &#039;&#039;i&#039;&#039;\ &amp;lt;/math&amp;gt; sendo a ordem da partícula contada do sentido negativo para o positivo do eixo x, teremos uma força resultante de interação para uma partícula que pode ser definida por &lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
F_i =  [-(N-1) + 2(i-1)]F&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt; &lt;br /&gt;
F_i = (2i - N-1)F&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Essa força é suficiente para manter o sistema auto-gravitante coeso mas para as partículas carregadas devemos adicionar a força restauradora descrita anteriormente:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
F^{grav.}_{R,i} = (2i - N-1)F&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
F^{el.}_{R,i} = (2i - N-1)F - \kappa x_i&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Conservação da Energia do Sistema =&lt;br /&gt;
&lt;br /&gt;
Ao realizar uma simulação numérica com um grande número de entes que representam um sistema físico é importante que seja feita uma verificação sobre o quão apropriados os resultados da simulação de fato são. Uma das formas mais comuns de verificar se uma simulação numérica está correta na dinâmica molecular de vários corpos e efetuar periodicamente a soma da energia do sistema.&lt;br /&gt;
&lt;br /&gt;
No caso de sistemas como os descritos, não há nenhum incremento de energia proveniente de uma fonte externa. Mesmo para o sistema eletricamente carregado, a força restauradora é potencial e não muda a energia total do sistema dada uma distribuição inicial de posição e momento.&lt;br /&gt;
&lt;br /&gt;
Para todos os efeitos, a energia dos sistemas estudados pode ser dividida em três partes: &lt;br /&gt;
&lt;br /&gt;
== Energia Cinética ==&lt;br /&gt;
&lt;br /&gt;
Todas as partículas da distribuição escolhida terão massa e velocidade, de forma que a energia cinética do sistema será dada por:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
En_{cin} = \frac{m}{2}\sum_{i=1}^N \dot{x_i}^2&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Energia Potencial Restauradora ==&lt;br /&gt;
&lt;br /&gt;
Observada no sistema eletricamente carregado citado, pode ser descrita como:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
En_{pot} = \frac{\kappa}{2}\sum_{i=1}^N x_i^2&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Energia Potencial Intrínseca  ==&lt;br /&gt;
&lt;br /&gt;
Energia contida na interação entre as partículas. A energia de uma partícula depende do potencial na sua posição da sua carga (ou massa).&lt;br /&gt;
&lt;br /&gt;
Como potenciais não são absolutos, é estabelecido um Potencial nulo de referência nas condições de contorno do sistema. Como pode ser visto no gif com as partículas-plano carregadas em azul, são colocadas placas condutoras planas nas posições &amp;lt;math&amp;gt;x=L&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;x= -L&amp;lt;/math&amp;gt; (caso haja simetria no espaço de fase do sistema) e é estabelecido que os potenciais nessas posições são &amp;lt;math&amp;gt;V(-L) = V(L) = 0&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Uma maneira mais simples de determinar o potencial das N partículas é considerar que há nas posições de contorno,  &amp;lt;math&amp;gt;x_0&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;x_{N+1}&amp;lt;/math&amp;gt;, partículas não interagentes.&lt;br /&gt;
&lt;br /&gt;
A diferença de potencial entre duas posições vizinhas pode ser determinada por:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\Delta V_i = (x_{i} - x_{i - 1})E_i&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
com &amp;lt;math&amp;gt;E_i&amp;lt;/math&amp;gt; sendo o módulo do campo entre a i-ésima e a (i - 1)-ésima partícula, dado por:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
E_i = (2i - N - 1)\lambda&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:7perfilcampoN4.png]]&lt;br /&gt;
&lt;br /&gt;
O que resulta na energia de uma partícula específica (k-ésima) descrita por:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
En_k = \alpha \sum_{i = 1}^{k}(x_i - x_{i - 1})(2i - N - 1)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aqui foram aglutinadas as possíveis constantes multiplicativas em uma constante &amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt; que pode ser escolhida para se adequar ao sistema estudado e a energia intrínseca do sistema é dada pela soma da energia de interação de cada uma das partículas. Como o sistema é dividido em intervalos com variação de potencial discretos, podemos escrever a energia intrínseca da seguinte forma:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
En_{int} = \alpha \sum_{k = 1}^{N}\sum_{i = 1}^{k}(x_i - x_{i - 1})(2i - N - 1)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A soma dessas três energias deve se manter constante (ou com pouca variação relativa significativa, pelo menos) durante a simulação:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
E_{total} = En_{cin} + En_{pot} + En_{int} = cte.&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Modelagem Computacional =&lt;br /&gt;
&lt;br /&gt;
== Criando a Distribuição do Sistema ==&lt;br /&gt;
&lt;br /&gt;
O primeiro passo para criar a simulação das N partículas é definir as coordenadas fundamentais das partículas em si (posição e velocidade).&lt;br /&gt;
&lt;br /&gt;
A simulação que será utilizada de exemplo é simétrica no espaço de fase, ou seja, para cada partícula com coordenadas &amp;lt;math&amp;gt;(x_i,y_i)&amp;lt;/math&amp;gt; existirá uma partícula espelhada &lt;br /&gt;
com coordenadas &amp;lt;math&amp;gt;(-x_i,-y_i)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Esse artifício é utilizado para que o centro de massa mantenha-se na origem e que o momento linear do sistema em x seja sempre nulo. Com isso é garantido que haverá sempre, também, a simetria par entre as energias das partículas espelhadas e a simetria ímpar entre as forças resultantes.&lt;br /&gt;
&lt;br /&gt;
Com isso garantido, basta fazer o cálculo numérico de uma metade da distribuição levando em conta a presença da outra metade, porém não tornando necessário que os cálculos sejam repetidos pois o comportamento de cada partícula espelhada torna-se perfeitamente previsível.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&#039;python&#039;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Importando as bibliotecas necessárias &lt;br /&gt;
from math import *&lt;br /&gt;
import matplotlib.pyplot as plt&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
A=[]     #criamos uma lista vazia&lt;br /&gt;
&lt;br /&gt;
N =  1000       # Determinamos o número de partículas utilizado&lt;br /&gt;
&lt;br /&gt;
for i in range(int(N)):&lt;br /&gt;
&lt;br /&gt;
    A.append([np.random.rand() ,2*(np.random.rand() - 1/2)]) #valores aleatórios de x entre 0 e 1 e de v entre -1 e 1 são adicionados&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A = np.array(A)&lt;br /&gt;
X= np.array([])     #Arrays usados para exemplificar&lt;br /&gt;
V= np.array([])     #distribuição inicial&lt;br /&gt;
&lt;br /&gt;
for i in range (len(A)):    #simetrização da distribuição&lt;br /&gt;
    X=np.append(X,A[i][0])&lt;br /&gt;
    V=np.append(V,A[i][1])&lt;br /&gt;
    V=np.append(V,-A[i][1])&lt;br /&gt;
    X=np.append(X,-A[i][0])&lt;br /&gt;
    &lt;br /&gt;
plt.xlabel(&#039;posição&#039;)             #plot da distribuição inicial&lt;br /&gt;
plt.ylabel(&#039;momento linear&#039;)&lt;br /&gt;
plt.title(&#039;Espaço de fase inicial&#039;)&lt;br /&gt;
plt.grid(True)&lt;br /&gt;
&lt;br /&gt;
plt.scatter(X,V)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:8espaçofaseinicial.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Função de Indexação ==&lt;br /&gt;
&lt;br /&gt;
Em outras modelagens como a interação de cargas em sistemas bidimensionais ou de massas em tridimensionais é necessário calcular a força de interação entre partículas em função das distâncias. Na modelagem proposta não é necessário calcular distâncias mas sim saber o ordenamento das partículas ao longo do eixo &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
No entanto, é muito comum em simulações que utilizam métodos de integração utilizar vetores que possuam apenas uma coluna e &amp;lt;math&amp;gt;2N&amp;lt;/math&amp;gt; linhas, sendo a primeira metade de linhas correspondentes às posições e a outra metade correspondente às velocidades.&lt;br /&gt;
&lt;br /&gt;
Para não precisar atualizar as linhas de posição e velocidade do vetor 2N-dimensional, utiliza-se uma função de indexação que será responsável por indicar qual é a ordem da partícula correspondente a uma determinada linha em um dado estado.&lt;br /&gt;
&lt;br /&gt;
Assim, a posição da partícula é atualizada no tempo e seu índice também, porém a posição dela no vetor de fase nunca se modifica. Esse fato é importante para estudos que pretendem analisar a trajetória de um único corpo no tempo, como é feito nos diagramas de Poincaré, por exemplo.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&#039;python&#039;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
teste = np.array([2,6,3,9,0,1,4])   #criado um vetor de teste  para que seus valores sejam indexados&lt;br /&gt;
&lt;br /&gt;
def indexador(arr):                 #define-se a função&lt;br /&gt;
    &lt;br /&gt;
    ordenador = []                  #é criada uma lista vazia&lt;br /&gt;
    &lt;br /&gt;
    for i in range(len(arr)):&lt;br /&gt;
        &lt;br /&gt;
        ordenador.append([abs(arr[i]),i]) # para cada valor criamos uma lista com o valor absoluto e a ordem atual&lt;br /&gt;
        &lt;br /&gt;
    ordenador.sort()                      # é feito o ordenamento da lista &#039;ordenador&#039; de acordo com o primeiro elemento&lt;br /&gt;
    &lt;br /&gt;
    for i in range(len(arr)):             &lt;br /&gt;
&lt;br /&gt;
        ordenador[i].append(i)            # é adicionado um terceiro valor para cada elemento de ordenador com o valor da sua nova ordem na sequência&lt;br /&gt;
        &lt;br /&gt;
    for i in range(len(arr)):&lt;br /&gt;
        &lt;br /&gt;
        a = ordenador[i][0]&lt;br /&gt;
        b = ordenador[i][1]             # É feita a troca do segundo com o primeiro valor de cada elemento de ordenador para...&lt;br /&gt;
        ordenador[i][0] = b&lt;br /&gt;
        ordenador[i][1] = a&lt;br /&gt;
        &lt;br /&gt;
    ordenador.sort()                    # reordenar os elementos de acordo com a ordem antiga&lt;br /&gt;
        &lt;br /&gt;
        &lt;br /&gt;
    lista = []&lt;br /&gt;
    &lt;br /&gt;
    for i in range(len(arr)):&lt;br /&gt;
        &lt;br /&gt;
        lista.append(ordenador[i][2])   #por fim guarda-se a ordem correspondente a cada valor da lista colocada como variável &lt;br /&gt;
        &lt;br /&gt;
    indexador = np.array(lista)  &lt;br /&gt;
        &lt;br /&gt;
    return indexador                     # e essa ordem é retornada como saída da função&lt;br /&gt;
&lt;br /&gt;
print(indexador(teste))&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Função de movimento e aceleração das partículas ==&lt;br /&gt;
&lt;br /&gt;
Para simular como um estado evolui no tempo, é necessário que tenhamos as derivadas temporais de todas as coordenadas do vetor de estado (&amp;lt;math&amp;gt;y&amp;lt;/math&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Para as coordenadas espaciais x (&amp;lt;math&amp;gt;y[i], \ 0\leq i&amp;lt; N &amp;lt;/math&amp;gt;) temos que:  &lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\dot{x_i} = y_{[i + N]} &lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Para as coordenadas de velocidade v (&amp;lt;math&amp;gt;y[i], \ N\leq i&amp;lt; 2N-1 &amp;lt;/math&amp;gt;) teremos que usar a relação de forças que foi descrita no modelo. Algumas simplificações comuns serão feitas como considerar constantes físicas unitárias (&amp;lt;math&amp;gt;m = q = \kappa = 1&amp;lt;/math&amp;gt;) e relações de proporcionalidade com o número de partículas do sistema para mantê-lo com um comportamento mais suave (&amp;lt;math&amp;gt;F = 1/N&amp;lt;/math&amp;gt;). O programa será escrito levando em conta o modelo de cargas elétricas: &lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\dot{v_i} = \ddot{x_i} = \frac{1}{m} \Big[ -\kappa y_{[i - N]} + (2i - N - 1)F \Big]&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A relação acima pode ser descrita de forma diferente se levarmos em conta que a simulação é simétrica em x e que todas as posições iniciais são positivas.&lt;br /&gt;
&lt;br /&gt;
A partícula que recebe índice &amp;lt;math&amp;gt;1&amp;lt;/math&amp;gt; possui &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; partículas à esquerda (x negativo) e &amp;lt;math&amp;gt;(N-1)&amp;lt;/math&amp;gt; partículas a direita (x positivo), o que resulta uma força de interação de &amp;lt;math&amp;gt;F&amp;lt;/math&amp;gt; para a direita. A de índice 2 terá força de interação &amp;lt;math&amp;gt;3F&amp;lt;/math&amp;gt;, a de índice 3 terá &amp;lt;math&amp;gt;5F&amp;lt;/math&amp;gt; e assim por diante.&lt;br /&gt;
&lt;br /&gt;
Antes de reescrever a equação da aceleração deve-se levar em consideração de uma das partículas distribuídas no espaço de fase assumirem coordenadas negativas (caso tenham proximidade da origem e velocidade negativa). Novamente usando o argumento de simetria, sabe-se que caso uma partícula assuma uma posição negativa, a partícula espelhada assumirá a posição simétrica em relação a origem. Dessa forma basta calcular a força de interação sobre a partícula espelhada e inverter o sinal para a partícula original. Levando tudo isso em conta teremos a seguinte equação da aceleração:  &lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\ddot{x_i} = \frac{1}{m}\Big[ -\kappa y_{[i - N]} + \frac{y_{[i - N]}}{|y_{[i - N]}|}(2i- 1)F     \Big]&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&#039;python&#039;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
def deriv(t, y):&lt;br /&gt;
&lt;br /&gt;
    p = len(y)&lt;br /&gt;
    k = indexador(y[0:int(p/2)])&lt;br /&gt;
    sinal=abs(y[0:int(p/2)])/y[0:int(p/2)]&lt;br /&gt;
    &lt;br /&gt;
    dydt = np.zeros(int(p))&lt;br /&gt;
&lt;br /&gt;
    dydt[0:int(p/2)] = y[int(p/2):int(p)] #definindo as derivadas temporais de posição&lt;br /&gt;
    &lt;br /&gt;
                                                         #definindo as derivadas temporais de velocidade&lt;br /&gt;
    dydt[int(p/2):int(p)] = -y[0:int(p/2)] + ((np.ones(int(p/2)) + 2*k )/(p))*sinal&lt;br /&gt;
    &lt;br /&gt;
    deriv = dydt[0:int(p)]&lt;br /&gt;
    &lt;br /&gt;
    return deriv&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Função de Energia do estado ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&#039;python&#039;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
def Energia_total(y):     # Para calcular a energia precisamos apenas do vetor de estado y do sistema de partículas utilizado&lt;br /&gt;
&lt;br /&gt;
    l = int(len(y)/2)     # a variável l representa a quantidade de valores que teremos &lt;br /&gt;
    pot = np.zeros(l+1)   # cria-se um array com l + 1 dimensões para representar as l partículas e os respectivos potenciais &lt;br /&gt;
&lt;br /&gt;
    r = abs(np.array(y[0:l]))       # cria-se um array r com as coordenadas de posição do estado y&lt;br /&gt;
    r = np.append(r,4)   # adiciona-se uma coordenada para representar o contorno externo do experimento&lt;br /&gt;
    r.sort()              # Faz-se o ordenamento desse array por distância da origem&lt;br /&gt;
    &lt;br /&gt;
    pot_0 = 0             # O potencial do contorno deve ser nulo &lt;br /&gt;
    &lt;br /&gt;
    for i in range(l,0,-1):     # Loop decrescente que define o potencial de posição para cada partícula &lt;br /&gt;
        &lt;br /&gt;
        pot[i] = pot_0&lt;br /&gt;
        &lt;br /&gt;
        pot_0 = pot_0 + (1/2)*(i/l)*abs((r[i] - r[i-1]))&lt;br /&gt;
        &lt;br /&gt;
    pot[0] = pot_0&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    v = np.array(y[l:-1])       # Cria-se um array com os valores de velocidade&lt;br /&gt;
    &lt;br /&gt;
    E_total = 0&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    for i in range(l-1):        #Soma-se as energias de cada partícula&lt;br /&gt;
&lt;br /&gt;
      E_total = E_total + pot[i] + 0.5*v[i]**2 + 0.5*r[i]**2&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    return 2*E_total, r[0:l+1], pot[0:l+1]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Evolução da Distribuição no Tempo ==&lt;br /&gt;
&lt;br /&gt;
Para simular a evolução temporal da distribuição inicial escolhida, precisamos de um método de integração numérica no tempo. O método escolhido deverá partir do estado da distribuição e da função de derivada temporal atribuída para estimar como a evolução ocorre.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&#039;python&#039;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
from scipy.integrate import solve_ivp  #integrador numérico escolhido&lt;br /&gt;
&lt;br /&gt;
def nova_fase(y,i):      #função que define a função do espaço de fase em cada instante de tempo, adaptada para o integrador numérico escolhido&lt;br /&gt;
    &lt;br /&gt;
    fase = np.array([])&lt;br /&gt;
    &lt;br /&gt;
    for j in range(len(y)):&lt;br /&gt;
            &lt;br /&gt;
        fase = np.append(fase,y[j][i])&lt;br /&gt;
        &lt;br /&gt;
    return fase&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Fase = []   # Cria uma lista para reservar a evolução do espaço de fase no tempo&lt;br /&gt;
T = np.array([])     # Cria uma lista que registra os tempos de marcação do integrador numérico&lt;br /&gt;
E = np.array([])     # Cria uma lista que registra a energia da distribuição no tempo&lt;br /&gt;
E_pot = []           # Cria uma lista que registra o comportamento da energia potencial ao longo de x no tempo&lt;br /&gt;
X_pot = []           # O análogo ao anterior para a posição&lt;br /&gt;
tempo = 0.0  # o tempo começa em 0&lt;br /&gt;
delta_t = 1   # o intervalo de tempo é 0.1&lt;br /&gt;
&lt;br /&gt;
X = np.random.rand(4000)&lt;br /&gt;
V = np.random.rand(4000) - np.ones(4000)*0.5&lt;br /&gt;
y = np.append(X,2*V)    #define-se a fase inicial&lt;br /&gt;
&lt;br /&gt;
for j in range(50):&lt;br /&gt;
&lt;br /&gt;
    sol = solve_ivp(deriv, (tempo,tempo + delta_t), y , rtol = 0.00001)     # integrador numérico realiza a integração&lt;br /&gt;
&lt;br /&gt;
    T= np.append(T, sol.t)&lt;br /&gt;
&lt;br /&gt;
    tempo = tempo + delta_t&lt;br /&gt;
    for i in range(len(sol.t)):       #o integrador possui um número de vetores intermediários ao vetor da solução final sol.y[-1]&lt;br /&gt;
        &lt;br /&gt;
        &lt;br /&gt;
        y = nova_fase(sol.y,i)                              # aqui são registradas as funções definidas para cada estado de integração&lt;br /&gt;
        Fase.append(y)&lt;br /&gt;
&lt;br /&gt;
        Ei =  Energia_total(y)&lt;br /&gt;
&lt;br /&gt;
        E = np.append(E, Ei[0])&lt;br /&gt;
&lt;br /&gt;
        E_pot.append(Ei[2])&lt;br /&gt;
        X_pot.append(Ei[1])&lt;br /&gt;
    &lt;br /&gt;
    y = nova_fase(sol.y, -1)                     # A distribuição atual é atualizada para nova integração &lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Animações ===&lt;br /&gt;
&lt;br /&gt;
Foi utilizado o código abaixo para gerar os gifs da evolução temporal&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&#039;python&#039;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
from matplotlib.animation import FuncAnimation&lt;br /&gt;
from IPython import display&lt;br /&gt;
&lt;br /&gt;
# código base para montar gifs da evolução temporal &lt;br /&gt;
fig, (ax1, ax2, ax3) = plt.subplots(3,1 ,figsize = (6,14))    #cria uma figura de três linhas&lt;br /&gt;
&lt;br /&gt;
lines = []                                                    #objeto padrão da biblioteca FuncAnimation&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def animate(frame):&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    # As entradas são limpas para evitar superposição de imagens nos frames&lt;br /&gt;
    ax1.cla()              &lt;br /&gt;
    ax2.cla()&lt;br /&gt;
    ax3.cla()&lt;br /&gt;
&lt;br /&gt;
    # Plot do espaço de fases&lt;br /&gt;
    ax1.scatter(Fase[frame][0:4000], Fase[frame][4000:8000], color = &#039;k&#039;, s  =5)&lt;br /&gt;
    ax1.scatter(-Fase[frame][0:4000], -Fase[frame][4000:8000], color = &#039;k&#039;, s = 5)&lt;br /&gt;
    ax1.set_xlabel(&#039;$posição$&#039;)&lt;br /&gt;
    ax1.set_ylabel(&#039;$velocidade$&#039;)&lt;br /&gt;
    ax1.set_xlim(-4,4)&lt;br /&gt;
    ax1.set_ylim(-2.5,2.5)   &lt;br /&gt;
&lt;br /&gt;
    # Plot da distribuição de Potencial&lt;br /&gt;
    ax2.plot(X_pot[frame],E_pot[frame], color = &#039;grey&#039;)&lt;br /&gt;
    ax2.plot(-np.flip(X_pot[frame]),np.flip(E_pot[frame]), color = &#039;grey&#039;)&lt;br /&gt;
    ax2.scatter(X_pot[frame],E_pot[frame], color = &#039;b&#039;, s  =5)&lt;br /&gt;
    ax2.scatter(-np.flip(X_pot[frame]),np.flip(E_pot[frame]), color = &#039;b&#039;, s  =5)&lt;br /&gt;
    ax2.set_ylabel(&amp;quot;potencial&amp;quot;)&lt;br /&gt;
    ax2.set_xlabel(&amp;quot;posição&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    # Plot da energia total no tempo&lt;br /&gt;
    ax3.plot(T[0:frame],E[0:frame], color = &#039;k&#039;)&lt;br /&gt;
    ax3.set_ylabel(&amp;quot;Energia&amp;quot;)&lt;br /&gt;
    ax3.set_xlabel(&amp;quot;tempo&amp;quot;)&lt;br /&gt;
    ax3.set_xlim(0, T[-1])&lt;br /&gt;
    ax3.set_ylim(E[0]- 10, E[0] + 10)&lt;br /&gt;
    &lt;br /&gt;
    return lines&lt;br /&gt;
&lt;br /&gt;
# Execução do programa e geração do gif inline   &lt;br /&gt;
anima = FuncAnimation(fig, animate,frames=len(T), interval=20, blit=True)&lt;br /&gt;
video = anima.to_html5_video()&lt;br /&gt;
html = display.HTML(video)&lt;br /&gt;
display.display(html)&lt;br /&gt;
&lt;br /&gt;
plt.close()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:Mom-pot-e.gif]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Referências =&lt;br /&gt;
&lt;br /&gt;
CARLAN JR, Antônio H.; PAKTER, Renato. Core-halo boundary in a sheet beam model. Physics of Plasmas, v. 28, n. 11, p. 113103, 2021.&lt;br /&gt;
&lt;br /&gt;
R. L. Gluckstern, Phys. Rev. Lett. 73, 1247 (1994).&lt;br /&gt;
&lt;br /&gt;
C. Chen and R. C. Davidson, Phys. Rev. Lett. 72, 2195 (1994).&lt;/div&gt;</summary>
		<author><name>Renanrs</name></author>
	</entry>
	<entry>
		<id>http://fiscomp.if.ufrgs.br/index.php?title=Din%C3%A2mica_Molecular_de_Part%C3%ADculas-Planares_Interagentes&amp;diff=6582</id>
		<title>Dinâmica Molecular de Partículas-Planares Interagentes</title>
		<link rel="alternate" type="text/html" href="http://fiscomp.if.ufrgs.br/index.php?title=Din%C3%A2mica_Molecular_de_Part%C3%ADculas-Planares_Interagentes&amp;diff=6582"/>
		<updated>2021-12-01T18:35:08Z</updated>

		<summary type="html">&lt;p&gt;Renanrs: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Grupo: Antônio Carlan, Gabriela Pereira, Renan Soares e Victor Gandara&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Objetivo:&#039;&#039;&#039; O trabalho tem como objetivo descrever a dinâmica molecular de um conjunto de partículas-planares infinitas paralelas. o modelo simplificado para estudar o comportamento de muitos corpos interagentes ao longo de um único eixo espacial é usado para feixes de partículas carregadas e também para sistemas autogravitantes. O estudo desse tipo de interação é importante para ter insights de sistemas de maior dimensionalidades.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= O modelo =&lt;br /&gt;
&lt;br /&gt;
É possível criar um modelo simplificado de interação de partículas imaginando que todas elas são compostas por planos de mesma massa e sem espessura, paralelos entre si e com liberdade de movimento relevante no eixo perpendicular às superfícies das mesmas.&lt;br /&gt;
&lt;br /&gt;
Tal modelo pode ser utilizado para estudar a dinâmica de um número elevado de partículas e conta com algumas particularidades simplificadoras de complexidade numérica. Alguns estudos utilizam esse modelo para estudar o comportamento de feixes carregados com a menor dimensionalidade possível e também para sistemas auto-gravitantes. As duas aplicações citadas serão as demonstradas a seguir mas o modelo é versátil para diferentes condições iniciais e de contorno.&lt;br /&gt;
&lt;br /&gt;
== Descrição do Modelo ==&lt;br /&gt;
&lt;br /&gt;
=== Disposição espacial ===&lt;br /&gt;
&lt;br /&gt;
Um número &amp;quot;N&amp;quot; de partículas-plano de mesma massa é disposto ao longo do eixo x com uma função de distribuição n(x) e com todas as partículas paralelas ao plano yz. No caso do modelo auto-gravitante, movimentos ao longo do eixo z não têm relevância prática mas para o modelo de um feixe de planos é definido que todos os planos se movem na direção z com mesma velocidade.&lt;br /&gt;
&lt;br /&gt;
A consideração de movimento ao longo do eixo z para o modelo de feixe é importante para a análise do comportamento do espaço de fases ao longo do comprimento do acelerador de partículas. Aqui, podemos imaginar estudar casos em que o feixe gerado inicialmente no espaço de fase terá um comportamento constante no tempo para cada secção transversal em xy para uma coordenada em z pré-estabelecida.&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:1paralelas.gif]] &lt;br /&gt;
&lt;br /&gt;
=== Ausência de Efeitos de Colisão ===&lt;br /&gt;
&lt;br /&gt;
O modelo leva em consideração que todas os planos possuem a mesma massa e que as colisões não levam a perda de energia no sistema.&lt;br /&gt;
&lt;br /&gt;
Dessa forma podemos prever o que ocorre quando a posição de dois planos coincide pois há conservação no momento linear em x e o coeficiente de restituição (razão entre as velocidades de afastamento e aproximação dos corpos) é igual a 1.&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:2diagrama.png]] &lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{cases} mv_1 - mv_2 = -mv_1&#039; + mv_2&#039;  \\ \\   \frac{v_1&#039; + v_2&#039;}{v_1 + v_2} = 1  \end{cases}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
O sistema de equações resulta em: &amp;lt;math&amp;gt;v_1&#039; = v_2 \ \ \ ; \ \ \ v_2&#039; = v_1&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dessa forma, é irrelevante ponderar se houve de fato uma colisão com troca de velocidades ou se as partículas simplesmente cruzam sem interferir de forma relevante. A última consideração é a levada em conta no ponto de vista computacional pois exclui a necessidade de atualizar a velocidade das partículas que passaram pela mesma posição no eixo x. Devido a igualdade de massas e também ao fato de que os encontros entre duas partículas se dão de forma sempre frontal, podemos de fato desconsiderar efeitos de colisão durante a modelagem da integração temporal do feixe.&lt;br /&gt;
&lt;br /&gt;
=== Interação entre as partículas ===&lt;br /&gt;
&lt;br /&gt;
Para analisar a interação entre as partículas é preciso entender como uma única partícula afeta seu entorno.&lt;br /&gt;
&lt;br /&gt;
No caso das partículas-plano carregadas eletricamente podemos considerar os efeitos de campo elétrico de um isolante plano infinito:&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:3corpolivre.png]] &lt;br /&gt;
&lt;br /&gt;
Pela lei de Gauss, para uma dada distribuição de carga com densidade superficial &amp;lt;math&amp;gt;\sigma&amp;lt;/math&amp;gt;: &lt;br /&gt;
:&amp;lt;math&amp;gt; &lt;br /&gt;
\oint  \overrightarrow{E}. d\overrightarrow{S}  = \frac{Q_{int}}{\epsilon_0} &lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
E.A - (-E.A) = \frac{\sigma . A   }{\epsilon_0} &lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
E= \frac{\sigma }{2\epsilon_0}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
O mesmo pode ser feito para um plano com densidade de massa distribuída uniformemente, para o caso do sistema auto-gravitante, com mudança na constante física multiplicativa e no sinal.&lt;br /&gt;
&lt;br /&gt;
O fato importante a ser destacado aqui é a total independência do campo gerado pela partícula e a distância. Dessa forma, a interação entre as partículas em qualquer sistema que seguir esse modelo não terá dependência da distância entre elas e sim da posição relativa entre as partículas consideradas.&lt;br /&gt;
&lt;br /&gt;
Essa consideração é razoável visto que as interações eletrostáticas de longo alcance possuem pouca influência relativa entre as cargas e reduz bastante o esforço computacional quando simulações são realizadas. Diferentes de sistemas de partículas que possuem força resultante dependente do quadrado da distância e que devem ser calculadas para todos os pares de partículas, aqui as forças sentidas pela interação eletrostática entre as partículas-plano depende exclusivamente da diferença do número de partículas de um lado e do outro, sendo necessário para realização dos cálculos numéricos apenas a implementação de uma função de ordenamento.&lt;br /&gt;
&lt;br /&gt;
=== Interferência externa do sistema ===&lt;br /&gt;
&lt;br /&gt;
Para o caso dos planos no sistema auto-gravitante não é necessária ação externa alguma para manter o equilíbrio em um sistema dinâmico estável. Sempre é levado em conta que todas as partículas têm velocidade em x inferior a velocidade de escape do restante do sistema e, por conta disso e das forças sempre atrativas de interação, o sistema não expande indefinidamente.&lt;br /&gt;
&lt;br /&gt;
Já no caso de planos carregados eletricamente as forças de interação entre os planos serão sempre repulsivas e a energia total do sistema é positiva. Sem uma interação externa, mesmo um sistema composto por um número limitado de partículas de fraca interação expandiria indefinidamente. Por causa disso, nesse caso é considerado que há uma força colimadora no feixe de planos proporcional a distância da origem. A origem dessa força externa vem de modelos de maior dimensionalidade de aceleradores de partícula que contam com um campo magnético externo capaz de colimar um feixe de cargas radialmente, por não existir um paralelo direto para o modelo unidimensional consideramos apenas uma força restauradora que impede a expansão indefinida do sistema como um todo. Também é possível ajustar condições de contorno simulando as paredes externas do acelerador como placas condutoras infinitas e com potencial definido. Esse tipo de consideração pode ser feita para sistemas que não são simétricos e impede que as cargas se afastem demasiadamente da origem.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:4graficoforça.png]]&lt;br /&gt;
&lt;br /&gt;
= Comportamento de uma Partícula no Sistema =&lt;br /&gt;
&lt;br /&gt;
Graças a caracterização das partículas temos que o campo gerado por uma partícula-plano pode ser caracterizado (para ambos os sistemas citados) da seguinte forma:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
E_i(x) = -\lambda\Theta[-(x-x_i)]  + \lambda\Theta(x-x_i)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:5perfilcampo.png]]&lt;br /&gt;
&lt;br /&gt;
Em que a constante &amp;lt;math&amp;gt;\lambda&amp;lt;/math&amp;gt; pode ser tanto positiva (cargas positivas) quanto negativa (cargas negativas ou interação gravitacional) e a função &amp;lt;math&amp;gt;\Theta&amp;lt;/math&amp;gt; equivale a função degrau de Heaviside:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\Theta(x) = \begin{cases} 0, \ \ x&amp;lt;0 \\ 1, \ \ x&amp;gt;0 \end{cases}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dessa forma, para exemplificação, um sistema de 5 partículas-plano teria uma interação da seguinte forma:&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:6forçaresultante.png]]&lt;br /&gt;
&lt;br /&gt;
Aqui, F seria a força de interação entre duas partículas no caso de planos carregados. É possível notar que a força de interação varia de duas unidades dessa constante para cada partícula contada em uma direção e que a força máxima sentida (pelas partículas-plano localizadas nas extremidades) é proporcional a &amp;lt;math&amp;gt;(N-1)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
É possível notar que para uma distribuição de partículas-plano do tipo:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt; &lt;br /&gt;
n(x) =   \sum_{i=1}^N \delta(x_i) &lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
com o índice  &amp;lt;math&amp;gt;\ \ &#039;&#039;i&#039;&#039;\ &amp;lt;/math&amp;gt; sendo a ordem da partícula contada do sentido negativo para o positivo do eixo x, teremos uma força resultante de interação para uma partícula que pode ser definida por &lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
F_i =  [-(N-1) + 2(i-1)]F&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt; &lt;br /&gt;
F_i = (2i - N-1)F&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Essa força é suficiente para manter o sistema auto-gravitante coeso mas para as partículas carregadas devemos adicionar a força restauradora descrita anteriormente:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
F^{grav.}_{R,i} = (2i - N-1)F&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
F^{el.}_{R,i} = (2i - N-1)F - \kappa x_i&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Conservação da Energia do Sistema =&lt;br /&gt;
&lt;br /&gt;
Ao realizar uma simulação numérica com um grande número de entes que representam um sistema físico é importante que seja feita uma verificação sobre o quão apropriados os resultados da simulação de fato são. Uma das formas mais comuns de verificar se uma simulação numérica está correta na dinâmica molecular de vários corpos e efetuar periodicamente a soma da energia do sistema.&lt;br /&gt;
&lt;br /&gt;
No caso de sistemas como os descritos, não há nenhum incremento de energia proveniente de uma fonte externa. Mesmo para o sistema eletricamente carregado, a força restauradora é potencial e não muda a energia total do sistema dada uma distribuição inicial de posição e momento.&lt;br /&gt;
&lt;br /&gt;
Para todos os efeitos, a energia dos sistemas estudados pode ser dividida em três partes: &lt;br /&gt;
&lt;br /&gt;
== Energia Cinética ==&lt;br /&gt;
&lt;br /&gt;
Todas as partículas da distribuição escolhida terão massa e velocidade, de forma que a energia cinética do sistema será dada por:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
En_{cin} = \frac{m}{2}\sum_{i=1}^N \dot{x_i}^2&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Energia Potencial Restauradora ==&lt;br /&gt;
&lt;br /&gt;
Observada no sistema eletricamente carregado citado, pode ser descrita como:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
En_{pot} = \frac{\kappa}{2}\sum_{i=1}^N x_i^2&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Energia Potencial Intrínseca  ==&lt;br /&gt;
&lt;br /&gt;
Energia contida na interação entre as partículas. A energia de uma partícula depende do potencial na sua posição da sua carga (ou massa).&lt;br /&gt;
&lt;br /&gt;
Como potenciais não são absolutos, é estabelecido um Potencial nulo de referência nas condições de contorno do sistema. Como pode ser visto no gif com as partículas-plano carregadas em azul, são colocadas placas condutoras planas nas posições &amp;lt;math&amp;gt;x=L&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;x= -L&amp;lt;/math&amp;gt; (caso haja simetria no espaço de fase do sistema) e é estabelecido que os potenciais nessas posições são &amp;lt;math&amp;gt;V(-L) = V(L) = 0&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Uma maneira mais simples de determinar o potencial das N partículas é considerar que há nas posições de contorno,  &amp;lt;math&amp;gt;x_0&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;x_{N+1}&amp;lt;/math&amp;gt;, partículas não interagentes.&lt;br /&gt;
&lt;br /&gt;
A diferença de potencial entre duas posições vizinhas pode ser determinada por:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\Delta V_i = (x_{i} - x_{i - 1})E_i&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
com &amp;lt;math&amp;gt;E_i&amp;lt;/math&amp;gt; sendo o módulo do campo entre a i-ésima e a (i - 1)-ésima partícula, dado por:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
E_i = (2i - N - 1)\lambda&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:7perfilcampoN4.png]]&lt;br /&gt;
&lt;br /&gt;
O que resulta na energia de uma partícula específica (k-ésima) descrita por:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
En_k = \alpha \sum_{i = 1}^{k}(x_i - x_{i - 1})(2i - N - 1)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aqui foram aglutinadas as possíveis constantes multiplicativas em uma constante &amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt; que pode ser escolhida para se adequar ao sistema estudado e a energia intrínseca do sistema é dada pela soma da energia de interação de cada uma das partículas. Como o sistema é dividido em intervalos com variação de potencial discretos, podemos escrever a energia intrínseca da seguinte forma:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
En_{int} = \alpha \sum_{k = 1}^{N}\sum_{i = 1}^{k}(x_i - x_{i - 1})(2i - N - 1)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A soma dessas três energias deve se manter constante (ou com pouca variação relativa significativa, pelo menos) durante a simulação:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
E_{total} = En_{cin} + En_{pot} + En_{int} = cte.&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Modelagem Computacional =&lt;br /&gt;
&lt;br /&gt;
== Criando a Distribuição do Sistema ==&lt;br /&gt;
&lt;br /&gt;
O primeiro passo para criar a simulação das N partículas é definir as coordenadas fundamentais das partículas em si (posição e velocidade).&lt;br /&gt;
&lt;br /&gt;
A simulação que será utilizada de exemplo é simétrica no espaço de fase, ou seja, para cada partícula com coordenadas &amp;lt;math&amp;gt;(x_i,y_i)&amp;lt;/math&amp;gt; existirá uma partícula espelhada &lt;br /&gt;
com coordenadas &amp;lt;math&amp;gt;(-x_i,-y_i)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Esse artifício é utilizado para que o centro de massa mantenha-se na origem e que o momento linear do sistema em x seja sempre nulo. Com isso é garantido que haverá sempre, também, a simetria par entre as energias das partículas espelhadas e a simetria ímpar entre as forças resultantes.&lt;br /&gt;
&lt;br /&gt;
Com isso garantido, basta fazer o cálculo numérico de uma metade da distribuição levando em conta a presença da outra metade, porém não tornando necessário que os cálculos sejam repetidos pois o comportamento de cada partícula espelhada torna-se perfeitamente previsível.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&#039;python&#039;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Importando as bibliotecas necessárias &lt;br /&gt;
from math import *&lt;br /&gt;
import matplotlib.pyplot as plt&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
A=[]     #criamos uma lista vazia&lt;br /&gt;
&lt;br /&gt;
N =  1000       # Determinamos o número de partículas utilizado&lt;br /&gt;
&lt;br /&gt;
for i in range(int(N)):&lt;br /&gt;
&lt;br /&gt;
    A.append([np.random.rand() ,2*(np.random.rand() - 1/2)]) #valores aleatórios de x entre 0 e 1 e de v entre -1 e 1 são adicionados&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A = np.array(A)&lt;br /&gt;
X= np.array([])     #Arrays usados para exemplificar&lt;br /&gt;
V= np.array([])     #distribuição inicial&lt;br /&gt;
&lt;br /&gt;
for i in range (len(A)):    #simetrização da distribuição&lt;br /&gt;
    X=np.append(X,A[i][0])&lt;br /&gt;
    V=np.append(V,A[i][1])&lt;br /&gt;
    V=np.append(V,-A[i][1])&lt;br /&gt;
    X=np.append(X,-A[i][0])&lt;br /&gt;
    &lt;br /&gt;
plt.xlabel(&#039;posição&#039;)             #plot da distribuição inicial&lt;br /&gt;
plt.ylabel(&#039;momento linear&#039;)&lt;br /&gt;
plt.title(&#039;Espaço de fase inicial&#039;)&lt;br /&gt;
plt.grid(True)&lt;br /&gt;
&lt;br /&gt;
plt.scatter(X,V)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:8espaçofaseinicial.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Função de Indexação ==&lt;br /&gt;
&lt;br /&gt;
Em outras modelagens como a interação de cargas em sistemas bidimensionais ou de massas em tridimensionais é necessário calcular a força de interação entre partículas em função das distâncias. Na modelagem proposta não é necessário calcular distâncias mas sim saber o ordenamento das partículas ao longo do eixo &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
No entanto, é muito comum em simulações que utilizam métodos de integração utilizar vetores que possuam apenas uma coluna e &amp;lt;math&amp;gt;2N&amp;lt;/math&amp;gt; linhas, sendo a primeira metade de linhas correspondentes às posições e a outra metade correspondente às velocidades.&lt;br /&gt;
&lt;br /&gt;
Para não precisar atualizar as linhas de posição e velocidade do vetor 2N-dimensional, utiliza-se uma função de indexação que será responsável por indicar qual é a ordem da partícula correspondente a uma determinada linha em um dado estado.&lt;br /&gt;
&lt;br /&gt;
Assim, a posição da partícula é atualizada no tempo e seu índice também, porém a posição dela no vetor de fase nunca se modifica. Esse fato é importante para estudos que pretendem analisar a trajetória de um único corpo no tempo, como é feito nos diagramas de Poincaré, por exemplo.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&#039;python&#039;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
teste = np.array([2,6,3,9,0,1,4])   #criado um vetor de teste  para que seus valores sejam indexados&lt;br /&gt;
&lt;br /&gt;
def indexador(arr):                 #define-se a função&lt;br /&gt;
    &lt;br /&gt;
    ordenador = []                  #é criada uma lista vazia&lt;br /&gt;
    &lt;br /&gt;
    for i in range(len(arr)):&lt;br /&gt;
        &lt;br /&gt;
        ordenador.append([abs(arr[i]),i]) # para cada valor criamos uma lista com o valor absoluto e a ordem atual&lt;br /&gt;
        &lt;br /&gt;
    ordenador.sort()                      # é feito o ordenamento da lista &#039;ordenador&#039; de acordo com o primeiro elemento&lt;br /&gt;
    &lt;br /&gt;
    for i in range(len(arr)):             &lt;br /&gt;
&lt;br /&gt;
        ordenador[i].append(i)            # é adicionado um terceiro valor para cada elemento de ordenador com o valor da sua nova ordem na sequência&lt;br /&gt;
        &lt;br /&gt;
    for i in range(len(arr)):&lt;br /&gt;
        &lt;br /&gt;
        a = ordenador[i][0]&lt;br /&gt;
        b = ordenador[i][1]             # É feita a troca do segundo com o primeiro valor de cada elemento de ordenador para...&lt;br /&gt;
        ordenador[i][0] = b&lt;br /&gt;
        ordenador[i][1] = a&lt;br /&gt;
        &lt;br /&gt;
    ordenador.sort()                    # reordenar os elementos de acordo com a ordem antiga&lt;br /&gt;
        &lt;br /&gt;
        &lt;br /&gt;
    lista = []&lt;br /&gt;
    &lt;br /&gt;
    for i in range(len(arr)):&lt;br /&gt;
        &lt;br /&gt;
        lista.append(ordenador[i][2])   #por fim guarda-se a ordem correspondente a cada valor da lista colocada como variável &lt;br /&gt;
        &lt;br /&gt;
    indexador = np.array(lista)  &lt;br /&gt;
        &lt;br /&gt;
    return indexador                     # e essa ordem é retornada como saída da função&lt;br /&gt;
&lt;br /&gt;
print(indexador(teste))&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Função de movimento e aceleração das partículas ==&lt;br /&gt;
&lt;br /&gt;
Para simular como um estado evolui no tempo, é necessário que tenhamos as derivadas temporais de todas as coordenadas do vetor de estado (&amp;lt;math&amp;gt;y&amp;lt;/math&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Para as coordenadas espaciais x (&amp;lt;math&amp;gt;y[i], \ 0\leq i&amp;lt; N &amp;lt;/math&amp;gt;) temos que:  &lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\dot{x_i} = y_{[i + N]} &lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Para as coordenadas de velocidade v (&amp;lt;math&amp;gt;y[i], \ N\leq i&amp;lt; 2N-1 &amp;lt;/math&amp;gt;) teremos que usar a relação de forças que foi descrita no modelo. Algumas simplificações comuns serão feitas como considerar constantes físicas unitárias (&amp;lt;math&amp;gt;m = q = \kappa = 1&amp;lt;/math&amp;gt;) e relações de proporcionalidade com o número de partículas do sistema para mantê-lo com um comportamento mais suave (&amp;lt;math&amp;gt;F = 1/N&amp;lt;/math&amp;gt;). O programa será escrito levando em conta o modelo de cargas elétricas: &lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\dot{v_i} = \ddot{x_i} = \frac{1}{m} \Big[ -\kappa y_{[i - N]} + (2i - N - 1)F \Big]&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A relação acima pode ser descrita de forma diferente se levarmos em conta que a simulação é simétrica em x e que todas as posições iniciais são positivas.&lt;br /&gt;
&lt;br /&gt;
A partícula que recebe índice &amp;lt;math&amp;gt;1&amp;lt;/math&amp;gt; possui &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; partículas à esquerda (x negativo) e &amp;lt;math&amp;gt;(N-1)&amp;lt;/math&amp;gt; partículas a direita (x positivo), o que resulta uma força de interação de &amp;lt;math&amp;gt;F&amp;lt;/math&amp;gt; para a direita. A de índice 2 terá força de interação &amp;lt;math&amp;gt;3F&amp;lt;/math&amp;gt;, a de índice 3 terá &amp;lt;math&amp;gt;5F&amp;lt;/math&amp;gt; e assim por diante.&lt;br /&gt;
&lt;br /&gt;
Antes de reescrever a equação da aceleração deve-se levar em consideração de uma das partículas distribuídas no espaço de fase assumirem coordenadas negativas (caso tenham proximidade da origem e velocidade negativa). Novamente usando o argumento de simetria, sabe-se que caso uma partícula assuma uma posição negativa, a partícula espelhada assumirá a posição simétrica em relação a origem. Dessa forma basta calcular a força de interação sobre a partícula espelhada e inverter o sinal para a partícula original. Levando tudo isso em conta teremos a seguinte equação da aceleração:  &lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\ddot{x_i} = \frac{1}{m}\Big[ -\kappa y_{[i - N]} + \frac{y_{[i - N]}}{|y_{[i - N]}|}(2i- 1)F     \Big]&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&#039;python&#039;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
def deriv(t, y):&lt;br /&gt;
&lt;br /&gt;
    p = len(y)&lt;br /&gt;
    k = indexador(y[0:int(p/2)])&lt;br /&gt;
    sinal=abs(y[0:int(p/2)])/y[0:int(p/2)]&lt;br /&gt;
    &lt;br /&gt;
    dydt = np.zeros(int(p))&lt;br /&gt;
&lt;br /&gt;
    dydt[0:int(p/2)] = y[int(p/2):int(p)] #definindo as derivadas temporais de posição&lt;br /&gt;
    &lt;br /&gt;
                                                         #definindo as derivadas temporais de velocidade&lt;br /&gt;
    dydt[int(p/2):int(p)] = -y[0:int(p/2)] + ((np.ones(int(p/2)) + 2*k )/(p))*sinal&lt;br /&gt;
    &lt;br /&gt;
    deriv = dydt[0:int(p)]&lt;br /&gt;
    &lt;br /&gt;
    return deriv&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Função de Energia do estado ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&#039;python&#039;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
def Energia_total(y):     # Para calcular a energia precisamos apenas do vetor de estado y do sistema de partículas utilizado&lt;br /&gt;
&lt;br /&gt;
    l = int(len(y)/2)     # a variável l representa a quantidade de valores que teremos &lt;br /&gt;
    pot = np.zeros(l+1)   # cria-se um array com l + 1 dimensões para representar as l partículas e os respectivos potenciais &lt;br /&gt;
&lt;br /&gt;
    r = abs(np.array(y[0:l]))       # cria-se um array r com as coordenadas de posição do estado y&lt;br /&gt;
    r = np.append(r,4)   # adiciona-se uma coordenada para representar o contorno externo do experimento&lt;br /&gt;
    r.sort()              # Faz-se o ordenamento desse array por distância da origem&lt;br /&gt;
    &lt;br /&gt;
    pot_0 = 0             # O potencial do contorno deve ser nulo &lt;br /&gt;
    &lt;br /&gt;
    for i in range(l,0,-1):     # Loop decrescente que define o potencial de posição para cada partícula &lt;br /&gt;
        &lt;br /&gt;
        pot[i] = pot_0&lt;br /&gt;
        &lt;br /&gt;
        pot_0 = pot_0 + (1/2)*(i/l)*abs((r[i] - r[i-1]))&lt;br /&gt;
        &lt;br /&gt;
    pot[0] = pot_0&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    v = np.array(y[l:-1])       # Cria-se um array com os valores de velocidade&lt;br /&gt;
    &lt;br /&gt;
    E_total = 0&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    for i in range(l-1):        #Soma-se as energias de cada partícula&lt;br /&gt;
&lt;br /&gt;
      E_total = E_total + pot[i] + 0.5*v[i]**2 + 0.5*r[i]**2&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    return 2*E_total, r[0:l+1], pot[0:l+1]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Evolução da Distribuição no Tempo ==&lt;br /&gt;
&lt;br /&gt;
Para simular a evolução temporal da distribuição inicial escolhida, precisamos de um método de integração numérica no tempo. O método escolhido deverá partir do estado da distribuição e da função de derivada temporal atribuída para estimar como a evolução ocorre.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&#039;python&#039;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
from scipy.integrate import solve_ivp  #integrador numérico escolhido&lt;br /&gt;
&lt;br /&gt;
def nova_fase(y,i):      #função que define a função do espaço de fase em cada instante de tempo, adaptada para o integrador numérico escolhido&lt;br /&gt;
    &lt;br /&gt;
    fase = np.array([])&lt;br /&gt;
    &lt;br /&gt;
    for j in range(len(y)):&lt;br /&gt;
            &lt;br /&gt;
        fase = np.append(fase,y[j][i])&lt;br /&gt;
        &lt;br /&gt;
    return fase&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Fase = []   # Cria uma lista para reservar a evolução do espaço de fase no tempo&lt;br /&gt;
T = np.array([])     # Cria uma lista que registra os tempos de marcação do integrador numérico&lt;br /&gt;
E = np.array([])     # Cria uma lista que registra a energia da distribuição no tempo&lt;br /&gt;
E_pot = []           # Cria uma lista que registra o comportamento da energia potencial ao longo de x no tempo&lt;br /&gt;
X_pot = []           # O análogo ao anterior para a posição&lt;br /&gt;
tempo = 0.0  # o tempo começa em 0&lt;br /&gt;
delta_t = 1   # o intervalo de tempo é 0.1&lt;br /&gt;
&lt;br /&gt;
X = np.random.rand(4000)&lt;br /&gt;
V = np.random.rand(4000) - np.ones(4000)*0.5&lt;br /&gt;
y = np.append(X,2*V)    #define-se a fase inicial&lt;br /&gt;
&lt;br /&gt;
for j in range(50):&lt;br /&gt;
&lt;br /&gt;
    sol = solve_ivp(deriv, (tempo,tempo + delta_t), y , rtol = 0.00001)     # integrador numérico realiza a integração&lt;br /&gt;
&lt;br /&gt;
    T= np.append(T, sol.t)&lt;br /&gt;
&lt;br /&gt;
    tempo = tempo + delta_t&lt;br /&gt;
    for i in range(len(sol.t)):       #o integrador possui um número de vetores intermediários ao vetor da solução final sol.y[-1]&lt;br /&gt;
        &lt;br /&gt;
        &lt;br /&gt;
        y = nova_fase(sol.y,i)                              # aqui são registradas as funções definidas para cada estado de integração&lt;br /&gt;
        Fase.append(y)&lt;br /&gt;
&lt;br /&gt;
        Ei =  Energia_total(y)&lt;br /&gt;
&lt;br /&gt;
        E = np.append(E, Ei[0])&lt;br /&gt;
&lt;br /&gt;
        E_pot.append(Ei[2])&lt;br /&gt;
        X_pot.append(Ei[1])&lt;br /&gt;
    &lt;br /&gt;
    y = nova_fase(sol.y, -1)                     # A distribuição atual é atualizada para nova integração &lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Animações ===&lt;br /&gt;
&lt;br /&gt;
Foi utilizado o código abaixo para gerar os gifs da evolução temporal&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&#039;python&#039;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
from matplotlib.animation import FuncAnimation&lt;br /&gt;
from IPython import display&lt;br /&gt;
&lt;br /&gt;
# código base para montar gifs da evolução temporal &lt;br /&gt;
fig, (ax1, ax2, ax3) = plt.subplots(3,1 ,figsize = (6,14))    #cria uma figura de três linhas&lt;br /&gt;
&lt;br /&gt;
lines = []                                                    #objeto padrão da biblioteca FuncAnimation&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def animate(frame):&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    # As entradas são limpas para evitar superposição de imagens nos frames&lt;br /&gt;
    ax1.cla()              &lt;br /&gt;
    ax2.cla()&lt;br /&gt;
    ax3.cla()&lt;br /&gt;
&lt;br /&gt;
    # Plot do espaço de fases&lt;br /&gt;
    ax1.scatter(Fase[frame][0:4000], Fase[frame][4000:8000], color = &#039;k&#039;, s  =5)&lt;br /&gt;
    ax1.scatter(-Fase[frame][0:4000], -Fase[frame][4000:8000], color = &#039;k&#039;, s = 5)&lt;br /&gt;
    ax1.set_xlabel(&#039;$posição$&#039;)&lt;br /&gt;
    ax1.set_ylabel(&#039;$velocidade$&#039;)&lt;br /&gt;
    ax1.set_xlim(-4,4)&lt;br /&gt;
    ax1.set_ylim(-2.5,2.5)   &lt;br /&gt;
&lt;br /&gt;
    # Plot da distribuição de Potencial&lt;br /&gt;
    ax2.plot(X_pot[frame],E_pot[frame], color = &#039;grey&#039;)&lt;br /&gt;
    ax2.plot(-np.flip(X_pot[frame]),np.flip(E_pot[frame]), color = &#039;grey&#039;)&lt;br /&gt;
    ax2.scatter(X_pot[frame],E_pot[frame], color = &#039;b&#039;, s  =5)&lt;br /&gt;
    ax2.scatter(-np.flip(X_pot[frame]),np.flip(E_pot[frame]), color = &#039;b&#039;, s  =5)&lt;br /&gt;
    ax2.set_ylabel(&amp;quot;potencial&amp;quot;)&lt;br /&gt;
    ax2.set_xlabel(&amp;quot;posição&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    # Plot da energia total no tempo&lt;br /&gt;
    ax3.plot(T[0:frame],E[0:frame], color = &#039;k&#039;)&lt;br /&gt;
    ax3.set_ylabel(&amp;quot;Energia&amp;quot;)&lt;br /&gt;
    ax3.set_xlabel(&amp;quot;tempo&amp;quot;)&lt;br /&gt;
    ax3.set_xlim(0, T[-1])&lt;br /&gt;
    ax3.set_ylim(E[0]- 10, E[0] + 10)&lt;br /&gt;
    &lt;br /&gt;
    return lines&lt;br /&gt;
&lt;br /&gt;
# Execução do programa e geração do gif inline   &lt;br /&gt;
anima = FuncAnimation(fig, animate,frames=len(T), interval=20, blit=True)&lt;br /&gt;
video = anima.to_html5_video()&lt;br /&gt;
html = display.HTML(video)&lt;br /&gt;
display.display(html)&lt;br /&gt;
&lt;br /&gt;
plt.close()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:Mom-pot-e.gif]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Referências =&lt;br /&gt;
&lt;br /&gt;
CARLAN JR, Antônio H.; PAKTER, Renato. Core-halo boundary in a sheet beam model. Physics of Plasmas, v. 28, n. 11, p. 113103, 2021.&lt;br /&gt;
&lt;br /&gt;
R. L. Gluckstern, Phys. Rev. Lett. 73, 1247 (1994).&lt;br /&gt;
&lt;br /&gt;
C. Chen and R. C. Davidson, Phys. Rev. Lett. 72, 2195 (1994).&lt;/div&gt;</summary>
		<author><name>Renanrs</name></author>
	</entry>
	<entry>
		<id>http://fiscomp.if.ufrgs.br/index.php?title=Din%C3%A2mica_Molecular_de_Part%C3%ADculas-Planares_Interagentes&amp;diff=6549</id>
		<title>Dinâmica Molecular de Partículas-Planares Interagentes</title>
		<link rel="alternate" type="text/html" href="http://fiscomp.if.ufrgs.br/index.php?title=Din%C3%A2mica_Molecular_de_Part%C3%ADculas-Planares_Interagentes&amp;diff=6549"/>
		<updated>2021-11-30T18:20:46Z</updated>

		<summary type="html">&lt;p&gt;Renanrs: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Grupo: Antônio Carlan, Gabriela Pereira, Renan Soares e Victor Gandara&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Objetivo:&#039;&#039;&#039; O trabalho tem como objetivo descrever a dinâmica molecular de um conjunto de partículas-planares infinitas paralelas. o modelo simplificado para estudar o comportamento de muitos corpos interagentes ao longo de um único eixo espacial é usado para feixes de partículas carregadas e também para sistemas autogravitantes. O estudo desse tipo de interação é importante para ter insights de sistemas de maior dimensionalidades.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= O modelo =&lt;br /&gt;
&lt;br /&gt;
É possível criar um modelo simplificado de interação de partículas imaginando que todas elas são compostas por planos de mesma massa e sem espessura, paralelos entre si e com liberdade de movimento relevante no eixo perpendicular às superfícies das mesmas.&lt;br /&gt;
&lt;br /&gt;
Tal modelo pode ser utilizado para estudar a dinâmica de um número elevado de partículas e conta com algumas particularidades simplificadoras de complexidade numérica. Alguns estudos utilizam esse modelo para estudar o comportamento de feixes carregados com a menor dimensionalidade possível e também para sistemas auto-gravitantes. As duas aplicações citadas serão as demonstradas a seguir mas o modelo é versátil para diferentes condições iniciais e de contorno.&lt;br /&gt;
&lt;br /&gt;
== Descrição do Modelo ==&lt;br /&gt;
&lt;br /&gt;
=== Disposição espacial ===&lt;br /&gt;
&lt;br /&gt;
Um número &amp;quot;N&amp;quot; de partículas-plano de mesma massa é disposto ao longo do eixo x com uma função de distribuição n(x) e com todas as partículas paralelas ao plano yz. No caso do modelo auto-gravitante, movimentos ao longo do eixo z não têm relevância prática mas para o modelo de um feixe de planos é definido que todos os planos se movem na direção z com mesma velocidade.&lt;br /&gt;
&lt;br /&gt;
A consideração de movimento ao longo do eixo z para o modelo de feixe é importante para a análise do comportamento do espaço de fases ao longo do comprimento do acelerador de partículas. Aqui, podemos imaginar estudar casos em que o feixe gerado inicialmente no espaço de fase terá um comportamento constante no tempo para cada secção transversal em xy para uma coordenada em z pré-estabelecida.&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:1paralelas.gif]] &lt;br /&gt;
&lt;br /&gt;
=== Ausência de Efeitos de Colisão ===&lt;br /&gt;
&lt;br /&gt;
O modelo leva em consideração que todas os planos possuem a mesma massa e que as colisões não levam a perda de energia no sistema.&lt;br /&gt;
&lt;br /&gt;
Dessa forma podemos prever o que ocorre quando a posição de dois planos coincide pois há conservação no momento linear em x e o coeficiente de restituição (razão entre as velocidades de afastamento e aproximação dos corpos) é igual a 1.&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:2diagrama.png]] &lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{cases} mv_1 - mv_2 = -mv_1&#039; + mv_2&#039;  \\ \\   \frac{v_1&#039; + v_2&#039;}{v_1 + v_2} = 1  \end{cases}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
O sistema de equações resulta em: &amp;lt;math&amp;gt;v_1&#039; = v_2 \ \ \ ; \ \ \ v_2&#039; = v_1&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dessa forma, é irrelevante ponderar se houve de fato uma colisão com troca de velocidades ou se as partículas simplesmente cruzam sem interferir de forma relevante. A última consideração é a levada em conta no ponto de vista computacional pois exclui a necessidade de atualizar a velocidade das partículas que passaram pela mesma posição no eixo x.&lt;br /&gt;
&lt;br /&gt;
=== Interação entre as partículas ===&lt;br /&gt;
&lt;br /&gt;
Para analisar a interação entre as partículas é preciso entender como uma única partícula afeta seu entorno.&lt;br /&gt;
&lt;br /&gt;
No caso das partículas-plano carregadas eletricamente podemos considerar os efeitos de campo elétrico de um isolante plano infinito:&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:3corpolivre.png]] &lt;br /&gt;
&lt;br /&gt;
Pela lei de Gauss, para uma dada distribuição de carga com densidade superficial &amp;lt;math&amp;gt;\sigma&amp;lt;/math&amp;gt;: &lt;br /&gt;
:&amp;lt;math&amp;gt; &lt;br /&gt;
\oint  \overrightarrow{E}. d\overrightarrow{S}  = \frac{Q_{int}}{\epsilon_0} &lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
E.A - (-E.A) = \frac{\sigma . A   }{\epsilon_0} &lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
E= \frac{\sigma }{2\epsilon_0}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
O mesmo pode ser feito para um plano com densidade de massa distribuída uniformemente, para o caso do sistema auto-gravitante, com mudança na constante física multiplicativa e no sinal.&lt;br /&gt;
&lt;br /&gt;
O fato importante a ser destacado aqui é a total independência do campo gerado pela partícula e a distância. Dessa forma, a interação entre as partículas em qualquer sistema que seguir esse modelo não terá dependência da distância entre elas e sim da posição relativa entre as partículas consideradas.&lt;br /&gt;
&lt;br /&gt;
=== Interferência externa do sistema ===&lt;br /&gt;
&lt;br /&gt;
Para o caso dos planos no sistema auto-gravitante não é necessária ação externa alguma para manter o equilíbrio em um sistema dinâmico estável. Sempre é levado em conta que todas as partículas têm velocidade em x inferior a velocidade de escape do restante do sistema e, por conta disso e das forças sempre atrativas de interação, o sistema não expande indefinidamente.&lt;br /&gt;
&lt;br /&gt;
Já no caso de planos carregados eletricamente as forças de interação entre os planos serão sempre repulsivas e a energia total do sistema é positiva. Sem uma interação externa, mesmo um sistema composto por um número limitado de partículas de fraca interação expandiria indefinidamente. Por causa disso, nesse caso é considerado que há uma força colimadora no feixe de planos proporcional a distância da origem. A origem dessa força externa vem de modelos de maior dimensionalidade de aceleradores de partícula que contam com um campo magnético externo capaz de colimar um feixe de cargas radialmente, por não existir um paralelo direto para o modelo unidimensional consideramos apenas uma força restauradora que impede a expansão indefinida do sistema como um todo. Também é possível ajustar condições de contorno simulando as paredes externas do acelerador como placas condutoras infinitas e com potencial definido. Esse tipo de consideração pode ser feita para sistemas que não são simétricos e impede que as cargas se afastem demasiadamente da origem.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:4graficoforça.png]]&lt;br /&gt;
&lt;br /&gt;
= Comportamento de uma Partícula no Sistema =&lt;br /&gt;
&lt;br /&gt;
Graças a caracterização das partículas temos que o campo gerado por uma partícula-plano pode ser caracterizado (para ambos os sistemas citados) da seguinte forma:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
E_i(x) = -\lambda\Theta[-(x-x_i)]  + \lambda\Theta(x-x_i)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:5perfilcampo.png]]&lt;br /&gt;
&lt;br /&gt;
Em que a constante &amp;lt;math&amp;gt;\lambda&amp;lt;/math&amp;gt; pode ser tanto positiva (cargas positivas) quanto negativa (cargas negativas ou interação gravitacional) e a função &amp;lt;math&amp;gt;\Theta&amp;lt;/math&amp;gt; equivale a função degrau de Heaviside:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\Theta(x) = \begin{cases} 0, \ \ x&amp;lt;0 \\ 1, \ \ x&amp;gt;0 \end{cases}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dessa forma, para exemplificação, um sistema de 5 partículas-plano teria uma interação da seguinte forma:&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:6forçaresultante.png]]&lt;br /&gt;
&lt;br /&gt;
Aqui, F seria a força de interação entre duas partículas no caso de planos carregados. É possível notar que a força de interação varia de duas unidades dessa constante para cada partícula contada em uma direção e que a força máxima sentida (pelas partículas-plano localizadas nas extremidades) é proporcional a &amp;lt;math&amp;gt;(N-1)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
É possível notar que para uma distribuição de partículas-plano do tipo:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt; &lt;br /&gt;
n(x) =   \sum_{i=1}^N \delta(x_i) &lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
com o índice  &amp;lt;math&amp;gt;\ \ &#039;&#039;i&#039;&#039;\ &amp;lt;/math&amp;gt; sendo a ordem da partícula contada do sentido negativo para o positivo do eixo x, teremos uma força resultante de interação para uma partícula que pode ser definida por &lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
F_i =  [-(N-1) + 2(i-1)]F&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt; &lt;br /&gt;
F_i = (2i - N-1)F&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Essa força é suficiente para manter o sistema auto-gravitante coeso mas para as partículas carregadas devemos adicionar a força restauradora descrita anteriormente:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
F^{grav.}_{R,i} = (2i - N-1)F&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
F^{el.}_{R,i} = (2i - N-1)F - \kappa x_i&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Conservação da Energia do Sistema =&lt;br /&gt;
&lt;br /&gt;
Ao realizar uma simulação numérica com um grande número de entes que representam um sistema físico é importante que seja feita uma verificação sobre o quão apropriados os resultados da simulação de fato são. Uma das formas mais comuns de verificar se uma simulação numérica está correta na dinâmica molecular de vários corpos e efetuar periodicamente a soma da energia do sistema.&lt;br /&gt;
&lt;br /&gt;
No caso de sistemas como os descritos, não há nenhum incremento de energia proveniente de uma fonte externa. Mesmo para o sistema eletricamente carregado, a força restauradora é potencial e não muda a energia total do sistema dada uma distribuição inicial de posição e momento.&lt;br /&gt;
&lt;br /&gt;
Para todos os efeitos, a energia dos sistemas estudados pode ser dividida em três partes: &lt;br /&gt;
&lt;br /&gt;
== Energia Cinética ==&lt;br /&gt;
&lt;br /&gt;
Todas as partículas da distribuição escolhida terão massa e velocidade, de forma que a energia cinética do sistema será dada por:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
En_{cin} = \frac{m}{2}\sum_{i=1}^N \dot{x_i}^2&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Energia Potencial Restauradora ==&lt;br /&gt;
&lt;br /&gt;
Observada no sistema eletricamente carregado citado, pode ser descrita como:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
En_{pot} = \frac{\kappa}{2}\sum_{i=1}^N x_i^2&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Energia Potencial Intrínseca  ==&lt;br /&gt;
&lt;br /&gt;
Energia contida na interação entre as partículas. A energia de uma partícula depende do potencial na sua posição da sua carga (ou massa).&lt;br /&gt;
&lt;br /&gt;
Como potenciais não são absolutos, é estabelecido um Potencial nulo de referência nas condições de contorno do sistema. Como pode ser visto no gif com as partículas-plano carregadas em azul, são colocadas placas condutoras planas nas posições &amp;lt;math&amp;gt;x=L&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;x= -L&amp;lt;/math&amp;gt; (caso haja simetria no espaço de fase do sistema) e é estabelecido que os potenciais nessas posições são &amp;lt;math&amp;gt;V(-L) = V(L) = 0&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Uma maneira mais simples de determinar o potencial das N partículas é considerar que há nas posições de contorno,  &amp;lt;math&amp;gt;x_0&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;x_{N+1}&amp;lt;/math&amp;gt;, partículas não interagentes.&lt;br /&gt;
&lt;br /&gt;
A diferença de potencial entre duas posições vizinhas pode ser determinada por:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\Delta V_i = (x_{i} - x_{i - 1})E_i&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
com &amp;lt;math&amp;gt;E_i&amp;lt;/math&amp;gt; sendo o módulo do campo entre a i-ésima e a (i - 1)-ésima partícula, dado por:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
E_i = (2i - N - 1)\lambda&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:7perfilcampoN4.png]]&lt;br /&gt;
&lt;br /&gt;
O que resulta na energia de uma partícula específica (k-ésima) descrita por:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
En_k = \alpha \sum_{i = 1}^{k}(x_i - x_{i - 1})(2i - N - 1)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aqui foram aglutinadas as possíveis constantes multiplicativas em uma constante &amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt; que pode ser escolhida para se adequar ao sistema estudado e a energia intrínseca do sistema é dada pela soma da energia de interação de cada uma das partículas. Como o sistema é dividido em intervalos com variação de potencial discretos, podemos escrever a energia intrínseca da seguinte forma:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
En_{int} = \alpha \sum_{k = 1}^{N}\sum_{i = 1}^{k}(x_i - x_{i - 1})(2i - N - 1)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A soma dessas três energias deve se manter constante (ou com pouca variação relativa significativa, pelo menos) durante a simulação:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
E_{total} = En_{cin} + En_{pot} + En_{int} = cte.&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Modelagem Computacional =&lt;br /&gt;
&lt;br /&gt;
== Criando a Distribuição do Sistema ==&lt;br /&gt;
&lt;br /&gt;
O primeiro passo para criar a simulação das N partículas é definir as coordenadas fundamentais das partículas em si (posição e velocidade).&lt;br /&gt;
&lt;br /&gt;
A simulação que será utilizada de exemplo é simétrica no espaço de fase, ou seja, para cada partícula com coordenadas &amp;lt;math&amp;gt;(x_i,y_i)&amp;lt;/math&amp;gt; existirá uma partícula espelhada &lt;br /&gt;
com coordenadas &amp;lt;math&amp;gt;(-x_i,-y_i)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Esse artifício é utilizado para que o centro de massa mantenha-se na origem e que o momento linear do sistema em x seja sempre nulo. Com isso é garantido que haverá sempre, também, a simetria par entre as energias das partículas espelhadas e a simetria ímpar entre as forças resultantes.&lt;br /&gt;
&lt;br /&gt;
Com isso garantido, basta fazer o cálculo numérico de uma metade da distribuição levando em conta a presença da outra metade, porém não tornando necessário que os cálculos sejam repetidos pois o comportamento de cada partícula espelhada torna-se perfeitamente previsível.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&#039;python&#039;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Importando as bibliotecas necessárias &lt;br /&gt;
from math import *&lt;br /&gt;
import matplotlib.pyplot as plt&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
A=[]     #criamos uma lista vazia&lt;br /&gt;
&lt;br /&gt;
N =  1000       # Determinamos o número de partículas utilizado&lt;br /&gt;
&lt;br /&gt;
for i in range(int(N)):&lt;br /&gt;
&lt;br /&gt;
    A.append([np.random.rand() ,2*(np.random.rand() - 1/2)]) #valores aleatórios de x entre 0 e 1 e de v entre -1 e 1 são adicionados&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A = np.array(A)&lt;br /&gt;
X= np.array([])     #Arrays usados para exemplificar&lt;br /&gt;
V= np.array([])     #distribuição inicial&lt;br /&gt;
&lt;br /&gt;
for i in range (len(A)):    #simetrização da distribuição&lt;br /&gt;
    X=np.append(X,A[i][0])&lt;br /&gt;
    V=np.append(V,A[i][1])&lt;br /&gt;
    V=np.append(V,-A[i][1])&lt;br /&gt;
    X=np.append(X,-A[i][0])&lt;br /&gt;
    &lt;br /&gt;
plt.xlabel(&#039;posição&#039;)             #plot da distribuição inicial&lt;br /&gt;
plt.ylabel(&#039;momento linear&#039;)&lt;br /&gt;
plt.title(&#039;Espaço de fase inicial&#039;)&lt;br /&gt;
plt.grid(True)&lt;br /&gt;
&lt;br /&gt;
plt.scatter(X,V)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:8espaçofaseinicial.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Função de Indexação ==&lt;br /&gt;
&lt;br /&gt;
Em outras modelagens como a interação de cargas em sistemas bidimensionais ou de massas em tridimensionais é necessário calcular a força de interação entre partículas em função das distâncias. Na modelagem proposta não é necessário calcular distâncias mas sim saber o ordenamento das partículas ao longo do eixo &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
No entanto, é muito comum em simulações que utilizam métodos de integração utilizar vetores que possuam apenas uma coluna e &amp;lt;math&amp;gt;2N&amp;lt;/math&amp;gt; linhas, sendo a primeira metade de linhas correspondentes às posições e a outra metade correspondente às velocidades.&lt;br /&gt;
&lt;br /&gt;
Para não precisar atualizar as linhas de posição e velocidade do vetor 2N-dimensional, utiliza-se uma função de indexação que será responsável por indicar qual é a ordem da partícula correspondente a uma determinada linha em um dado estado.&lt;br /&gt;
&lt;br /&gt;
Assim, a posição da partícula é atualizada no tempo e seu índice também, porém a posição dela no vetor de fase nunca se modifica. Esse fato é importante para estudos que pretendem analisar a trajetória de um único corpo no tempo, como é feito nos diagramas de Poincaré, por exemplo.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&#039;python&#039;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
teste = np.array([2,6,3,9,0,1,4])   #criado um vetor de teste  para que seus valores sejam indexados&lt;br /&gt;
&lt;br /&gt;
def indexador(arr):                 #define-se a função&lt;br /&gt;
    &lt;br /&gt;
    ordenador = []                  #é criada uma lista vazia&lt;br /&gt;
    &lt;br /&gt;
    for i in range(len(arr)):&lt;br /&gt;
        &lt;br /&gt;
        ordenador.append([abs(arr[i]),i]) # para cada valor criamos uma lista com o valor absoluto e a ordem atual&lt;br /&gt;
        &lt;br /&gt;
    ordenador.sort()                      # é feito o ordenamento da lista &#039;ordenador&#039; de acordo com o primeiro elemento&lt;br /&gt;
    &lt;br /&gt;
    for i in range(len(arr)):             &lt;br /&gt;
&lt;br /&gt;
        ordenador[i].append(i)            # é adicionado um terceiro valor para cada elemento de ordenador com o valor da sua nova ordem na sequência&lt;br /&gt;
        &lt;br /&gt;
    for i in range(len(arr)):&lt;br /&gt;
        &lt;br /&gt;
        a = ordenador[i][0]&lt;br /&gt;
        b = ordenador[i][1]             # É feita a troca do segundo com o primeiro valor de cada elemento de ordenador para...&lt;br /&gt;
        ordenador[i][0] = b&lt;br /&gt;
        ordenador[i][1] = a&lt;br /&gt;
        &lt;br /&gt;
    ordenador.sort()                    # reordenar os elementos de acordo com a ordem antiga&lt;br /&gt;
        &lt;br /&gt;
        &lt;br /&gt;
    lista = []&lt;br /&gt;
    &lt;br /&gt;
    for i in range(len(arr)):&lt;br /&gt;
        &lt;br /&gt;
        lista.append(ordenador[i][2])   #por fim guarda-se a ordem correspondente a cada valor da lista colocada como variável &lt;br /&gt;
        &lt;br /&gt;
    indexador = np.array(lista)  &lt;br /&gt;
        &lt;br /&gt;
    return indexador                     # e essa ordem é retornada como saída da função&lt;br /&gt;
&lt;br /&gt;
print(indexador(teste))&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Função de movimento e aceleração das partículas ==&lt;br /&gt;
&lt;br /&gt;
Para simular como um estado evolui no tempo, é necessário que tenhamos as derivadas temporais de todas as coordenadas do vetor de estado (&amp;lt;math&amp;gt;y&amp;lt;/math&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Para as coordenadas espaciais x (&amp;lt;math&amp;gt;y[i], \ 0\leq i&amp;lt; N &amp;lt;/math&amp;gt;) temos que:  &lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\dot{x_i} = y_{[i + N]} &lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Para as coordenadas de velocidade v (&amp;lt;math&amp;gt;y[i], \ N\leq i&amp;lt; 2N-1 &amp;lt;/math&amp;gt;) teremos que usar a relação de forças que foi descrita no modelo. Algumas simplificações comuns serão feitas como considerar constantes físicas unitárias (&amp;lt;math&amp;gt;m = q = \kappa = 1&amp;lt;/math&amp;gt;) e relações de proporcionalidade com o número de partículas do sistema para mantê-lo com um comportamento mais suave (&amp;lt;math&amp;gt;F = 1/N&amp;lt;/math&amp;gt;). O programa será escrito levando em conta o modelo de cargas elétricas: &lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\dot{v_i} = \ddot{x_i} = \frac{1}{m} \Big[ -\kappa y_{[i - N]} + (2i - N - 1)F \Big]&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A relação acima pode ser descrita de forma diferente se levarmos em conta que a simulação é simétrica em x e que todas as posições iniciais são positivas.&lt;br /&gt;
&lt;br /&gt;
A partícula que recebe índice &amp;lt;math&amp;gt;1&amp;lt;/math&amp;gt; possui &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; partículas à esquerda (x negativo) e &amp;lt;math&amp;gt;(N-1)&amp;lt;/math&amp;gt; partículas a direita (x positivo), o que resulta uma força de interação de &amp;lt;math&amp;gt;F&amp;lt;/math&amp;gt; para a direita. A de índice 2 terá força de interação &amp;lt;math&amp;gt;3F&amp;lt;/math&amp;gt;, a de índice 3 terá &amp;lt;math&amp;gt;5F&amp;lt;/math&amp;gt; e assim por diante.&lt;br /&gt;
&lt;br /&gt;
Antes de reescrever a equação da aceleração deve-se levar em consideração de uma das partículas distribuídas no espaço de fase assumirem coordenadas negativas (caso tenham proximidade da origem e velocidade negativa). Novamente usando o argumento de simetria, sabe-se que caso uma partícula assuma uma posição negativa, a partícula espelhada assumirá a posição simétrica em relação a origem. Dessa forma basta calcular a força de interação sobre a partícula espelhada e inverter o sinal para a partícula original. Levando tudo isso em conta teremos a seguinte equação da aceleração:  &lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\ddot{x_i} = \frac{1}{m}\Big[ -\kappa y_{[i - N]} + \frac{y_{[i - N]}}{|y_{[i - N]}|}(2i- 1)F     \Big]&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&#039;python&#039;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
def deriv(t, y):&lt;br /&gt;
&lt;br /&gt;
    p = len(y)&lt;br /&gt;
    k = indexador(y[0:int(p/2)])&lt;br /&gt;
    sinal=abs(y[0:int(p/2)])/y[0:int(p/2)]&lt;br /&gt;
    &lt;br /&gt;
    dydt = np.zeros(int(p))&lt;br /&gt;
&lt;br /&gt;
    dydt[0:int(p/2)] = y[int(p/2):int(p)] #definindo as derivadas temporais de posição&lt;br /&gt;
    &lt;br /&gt;
                                                         #definindo as derivadas temporais de velocidade&lt;br /&gt;
    dydt[int(p/2):int(p)] = -y[0:int(p/2)] + ((np.ones(int(p/2)) + 2*k )/(p))*sinal&lt;br /&gt;
    &lt;br /&gt;
    deriv = dydt[0:int(p)]&lt;br /&gt;
    &lt;br /&gt;
    return deriv&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Função de Energia do estado ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&#039;python&#039;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
def Energia_total(y):     # Para calcular a energia precisamos apenas do vetor de estado y do sistema de partículas utilizado&lt;br /&gt;
&lt;br /&gt;
    l = int(len(y)/2)     # a variável l representa a quantidade de valores que teremos &lt;br /&gt;
    pot = np.zeros(l+1)   # cria-se um array com l + 1 dimensões para representar as l partículas e os respectivos potenciais &lt;br /&gt;
&lt;br /&gt;
    r = abs(np.array(y[0:l]))       # cria-se um array r com as coordenadas de posição do estado y&lt;br /&gt;
    r = np.append(r,4)   # adiciona-se uma coordenada para representar o contorno externo do experimento&lt;br /&gt;
    r.sort()              # Faz-se o ordenamento desse array por distância da origem&lt;br /&gt;
    &lt;br /&gt;
    pot_0 = 0             # O potencial do contorno deve ser nulo &lt;br /&gt;
    &lt;br /&gt;
    for i in range(l,0,-1):     # Loop decrescente que define o potencial de posição para cada partícula &lt;br /&gt;
        &lt;br /&gt;
        pot[i] = pot_0&lt;br /&gt;
        &lt;br /&gt;
        pot_0 = pot_0 + (1/2)*(i/l)*abs((r[i] - r[i-1]))&lt;br /&gt;
        &lt;br /&gt;
    pot[0] = pot_0&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    v = np.array(y[l:-1])       # Cria-se um array com os valores de velocidade&lt;br /&gt;
    &lt;br /&gt;
    E_total = 0&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    for i in range(l-1):        #Soma-se as energias de cada partícula&lt;br /&gt;
&lt;br /&gt;
      E_total = E_total + pot[i] + 0.5*v[i]**2 + 0.5*r[i]**2&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    return 2*E_total, r[0:l+1], pot[0:l+1]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Evolução da Distribuição no Tempo ==&lt;br /&gt;
&lt;br /&gt;
Para simular a evolução temporal da distribuição inicial escolhida, precisamos de um método de integração numérica no tempo. O método escolhido deverá partir do estado da distribuição e da função de derivada temporal atribuída para estimar como a evolução ocorre.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&#039;python&#039;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
from scipy.integrate import solve_ivp  #integrador numérico escolhido&lt;br /&gt;
&lt;br /&gt;
def nova_fase(y,i):      #função que define a função do espaço de fase em cada instante de tempo, adaptada para o integrador numérico escolhido&lt;br /&gt;
    &lt;br /&gt;
    fase = np.array([])&lt;br /&gt;
    &lt;br /&gt;
    for j in range(len(y)):&lt;br /&gt;
            &lt;br /&gt;
        fase = np.append(fase,y[j][i])&lt;br /&gt;
        &lt;br /&gt;
    return fase&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Fase = []   # Cria uma lista para reservar a evolução do espaço de fase no tempo&lt;br /&gt;
T = np.array([])     # Cria uma lista que registra os tempos de marcação do integrador numérico&lt;br /&gt;
E = np.array([])     # Cria uma lista que registra a energia da distribuição no tempo&lt;br /&gt;
E_pot = []           # Cria uma lista que registra o comportamento da energia potencial ao longo de x no tempo&lt;br /&gt;
X_pot = []           # O análogo ao anterior para a posição&lt;br /&gt;
tempo = 0.0  # o tempo começa em 0&lt;br /&gt;
delta_t = 1   # o intervalo de tempo é 0.1&lt;br /&gt;
&lt;br /&gt;
X = np.random.rand(4000)&lt;br /&gt;
V = np.random.rand(4000) - np.ones(4000)*0.5&lt;br /&gt;
y = np.append(X,2*V)    #define-se a fase inicial&lt;br /&gt;
&lt;br /&gt;
for j in range(50):&lt;br /&gt;
&lt;br /&gt;
    sol = solve_ivp(deriv, (tempo,tempo + delta_t), y , rtol = 0.00001)     # integrador numérico realiza a integração&lt;br /&gt;
&lt;br /&gt;
    T= np.append(T, sol.t)&lt;br /&gt;
&lt;br /&gt;
    tempo = tempo + delta_t&lt;br /&gt;
    for i in range(len(sol.t)):       #o integrador possui um número de vetores intermediários ao vetor da solução final sol.y[-1]&lt;br /&gt;
        &lt;br /&gt;
        &lt;br /&gt;
        y = nova_fase(sol.y,i)                              # aqui são registradas as funções definidas para cada estado de integração&lt;br /&gt;
        Fase.append(y)&lt;br /&gt;
&lt;br /&gt;
        Ei =  Energia_total(y)&lt;br /&gt;
&lt;br /&gt;
        E = np.append(E, Ei[0])&lt;br /&gt;
&lt;br /&gt;
        E_pot.append(Ei[2])&lt;br /&gt;
        X_pot.append(Ei[1])&lt;br /&gt;
    &lt;br /&gt;
    y = nova_fase(sol.y, -1)                     # A distribuição atual é atualizada para nova integração &lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Animações ===&lt;br /&gt;
&lt;br /&gt;
Foi utilizado o código abaixo para gerar os gifs da evolução temporal&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&#039;python&#039;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
from matplotlib.animation import FuncAnimation&lt;br /&gt;
from IPython import display&lt;br /&gt;
&lt;br /&gt;
# código base para montar gifs da evolução temporal &lt;br /&gt;
fig, (ax1, ax2, ax3) = plt.subplots(3,1 ,figsize = (6,14))    #cria uma figura de três linhas&lt;br /&gt;
&lt;br /&gt;
lines = []                                                    #objeto padrão da biblioteca FuncAnimation&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def animate(frame):&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    # As entradas são limpas para evitar superposição de imagens nos frames&lt;br /&gt;
    ax1.cla()              &lt;br /&gt;
    ax2.cla()&lt;br /&gt;
    ax3.cla()&lt;br /&gt;
&lt;br /&gt;
    # Plot do espaço de fases&lt;br /&gt;
    ax1.scatter(Fase[frame][0:4000], Fase[frame][4000:8000], color = &#039;k&#039;, s  =5)&lt;br /&gt;
    ax1.scatter(-Fase[frame][0:4000], -Fase[frame][4000:8000], color = &#039;k&#039;, s = 5)&lt;br /&gt;
    ax1.set_xlabel(&#039;$posição$&#039;)&lt;br /&gt;
    ax1.set_ylabel(&#039;$velocidade$&#039;)&lt;br /&gt;
    ax1.set_xlim(-4,4)&lt;br /&gt;
    ax1.set_ylim(-2.5,2.5)   &lt;br /&gt;
&lt;br /&gt;
    # Plot da distribuição de Potencial&lt;br /&gt;
    ax2.plot(X_pot[frame],E_pot[frame], color = &#039;grey&#039;)&lt;br /&gt;
    ax2.plot(-np.flip(X_pot[frame]),np.flip(E_pot[frame]), color = &#039;grey&#039;)&lt;br /&gt;
    ax2.scatter(X_pot[frame],E_pot[frame], color = &#039;b&#039;, s  =5)&lt;br /&gt;
    ax2.scatter(-np.flip(X_pot[frame]),np.flip(E_pot[frame]), color = &#039;b&#039;, s  =5)&lt;br /&gt;
    ax2.set_ylabel(&amp;quot;potencial&amp;quot;)&lt;br /&gt;
    ax2.set_xlabel(&amp;quot;posição&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    # Plot da energia total no tempo&lt;br /&gt;
    ax3.plot(T[0:frame],E[0:frame], color = &#039;k&#039;)&lt;br /&gt;
    ax3.set_ylabel(&amp;quot;Energia&amp;quot;)&lt;br /&gt;
    ax3.set_xlabel(&amp;quot;tempo&amp;quot;)&lt;br /&gt;
    ax3.set_xlim(0, T[-1])&lt;br /&gt;
    ax3.set_ylim(E[0]- 10, E[0] + 10)&lt;br /&gt;
    &lt;br /&gt;
    return lines&lt;br /&gt;
&lt;br /&gt;
# Execução do programa e geração do gif inline   &lt;br /&gt;
anima = FuncAnimation(fig, animate,frames=len(T), interval=20, blit=True)&lt;br /&gt;
video = anima.to_html5_video()&lt;br /&gt;
html = display.HTML(video)&lt;br /&gt;
display.display(html)&lt;br /&gt;
&lt;br /&gt;
plt.close()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:Mom-pot-e.gif]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Referências =&lt;br /&gt;
&lt;br /&gt;
CARLAN JR, Antônio H.; PAKTER, Renato. Core-halo boundary in a sheet beam model. Physics of Plasmas, v. 28, n. 11, p. 113103, 2021.&lt;br /&gt;
&lt;br /&gt;
R. L. Gluckstern, Phys. Rev. Lett. 73, 1247 (1994).&lt;br /&gt;
&lt;br /&gt;
C. Chen and R. C. Davidson, Phys. Rev. Lett. 72, 2195 (1994).&lt;/div&gt;</summary>
		<author><name>Renanrs</name></author>
	</entry>
	<entry>
		<id>http://fiscomp.if.ufrgs.br/index.php?title=Din%C3%A2mica_Molecular_de_Part%C3%ADculas-Planares_Interagentes&amp;diff=6548</id>
		<title>Dinâmica Molecular de Partículas-Planares Interagentes</title>
		<link rel="alternate" type="text/html" href="http://fiscomp.if.ufrgs.br/index.php?title=Din%C3%A2mica_Molecular_de_Part%C3%ADculas-Planares_Interagentes&amp;diff=6548"/>
		<updated>2021-11-30T18:20:10Z</updated>

		<summary type="html">&lt;p&gt;Renanrs: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Grupo: Antônio Carlan, Gabriela Pereira, Renan Soares e Victor Gandara&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Objetivo:&#039;&#039;&#039; O trabalho tem como objetivo descrever a dinâmica molecular de um conjunto de partículas-planares infinitas paralelas. o modelo simplificado para estudar o comportamento de muitos corpos interagentes ao longo de um único eixo espacial é usado para feixes de partículas carregadas e também para sistemas autogravitantes. O estudo desse tipo de interação é importante para ter insights de sistemas de maior dimensionalidades.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= O modelo =&lt;br /&gt;
&lt;br /&gt;
É possível criar um modelo simplificado de interação de partículas imaginando que todas elas são compostas por planos de mesma massa e sem espessura, paralelos entre si e com liberdade de movimento relevante no eixo perpendicular às superfícies das mesmas.&lt;br /&gt;
&lt;br /&gt;
Tal modelo pode ser utilizado para estudar a dinâmica de um número elevado de partículas e conta com algumas particularidades simplificadoras de complexidade numérica. Alguns estudos utilizam esse modelo para estudar o comportamento de feixes carregados com a menor dimensionalidade possível e também para sistemas auto-gravitantes. As duas aplicações citadas serão as demonstradas a seguir mas o modelo é versátil para diferentes condições iniciais e de contorno.&lt;br /&gt;
&lt;br /&gt;
== Descrição do Modelo ==&lt;br /&gt;
&lt;br /&gt;
=== Disposição espacial ===&lt;br /&gt;
&lt;br /&gt;
Um número &amp;quot;N&amp;quot; de partículas-plano de mesma massa é disposto ao longo do eixo x com uma função de distribuição n(x) e com todas as partículas paralelas ao plano yz. No caso do modelo auto-gravitante, movimentos ao longo do eixo z não têm relevância prática mas para o modelo de um feixe de planos é definido que todos os planos se movem na direção z com mesma velocidade.&lt;br /&gt;
&lt;br /&gt;
A consideração de movimento ao longo do eixo z para o modelo de feixe é importante para a análise do comportamento do espaço de fases ao longo do comprimento do acelerador de partículas. Aqui, podemos imaginar estudar casos em que o feixe gerado inicialmente no espaço de fase terá um comportamento constante no tempo para cada secção transversal em xy para uma coordenada em z pré-estabelecida.&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:1paralelas.gif]] &lt;br /&gt;
&lt;br /&gt;
=== Ausência de Efeitos de Colisão ===&lt;br /&gt;
&lt;br /&gt;
O modelo leva em consideração que todas os planos possuem a mesma massa e que as colisões não levam a perda de energia no sistema.&lt;br /&gt;
&lt;br /&gt;
Dessa forma podemos prever o que ocorre quando a posição de dois planos coincide pois há conservação no momento linear em x e o coeficiente de restituição (razão entre as velocidades de afastamento e aproximação dos corpos) é igual a 1.&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:2diagrama.png]] &lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{cases} mv_1 - mv_2 = -mv_1&#039; + mv_2&#039;  \\ \\   \frac{v_1&#039; + v_2&#039;}{v_1 + v_2} = 1  \end{cases}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
O sistema de equações resulta em: &amp;lt;math&amp;gt;v_1&#039; = v_2 \ \ \ ; \ \ \ v_2&#039; = v_1&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dessa forma, é irrelevante ponderar se houve de fato uma colisão com troca de velocidades ou se as partículas simplesmente cruzam sem interferir de forma relevante. A última consideração é a levada em conta no ponto de vista computacional pois exclui a necessidade de atualizar a velocidade das partículas que passaram pela mesma posição no eixo x.&lt;br /&gt;
&lt;br /&gt;
=== Interação entre as partículas ===&lt;br /&gt;
&lt;br /&gt;
Para analisar a interação entre as partículas é preciso entender como uma única partícula afeta seu entorno.&lt;br /&gt;
&lt;br /&gt;
No caso das partículas-plano carregadas eletricamente podemos considerar os efeitos de campo elétrico de um isolante plano infinito:&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:3corpolivre.png]] &lt;br /&gt;
&lt;br /&gt;
Pela lei de Gauss, para uma dada distribuição de carga com densidade superficial &amp;lt;math&amp;gt;\sigma&amp;lt;/math&amp;gt;: &lt;br /&gt;
:&amp;lt;math&amp;gt; &lt;br /&gt;
\oint  \overrightarrow{E}. d\overrightarrow{S}  = \frac{Q_{int}}{\epsilon_0} &lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
E.A - (-E.A) = \frac{\sigma . A   }{\epsilon_0} &lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
E= \frac{\sigma }{2\epsilon_0}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
O mesmo pode ser feito para um plano com densidade de massa distribuída uniformemente, para o caso do sistema auto-gravitante, com mudança na constante física multiplicativa e no sinal.&lt;br /&gt;
&lt;br /&gt;
O fato importante a ser destacado aqui é a total independência do campo gerado pela partícula e a distância. Dessa forma, a interação entre as partículas em qualquer sistema que seguir esse modelo não terá dependência da distância entre elas e sim da posição relativa entre as partículas consideradas.&lt;br /&gt;
&lt;br /&gt;
=== Interferência externa do sistema ===&lt;br /&gt;
&lt;br /&gt;
Para o caso dos planos no sistema auto-gravitante não é necessária ação externa alguma para manter o equilíbrio em um sistema dinâmico estável. Sempre é levado em conta que todas as partículas têm velocidade em x inferior a velocidade de escape do restante do sistema e, por conta disso e das forças sempre atrativas de interação, o sistema não expande indefinidamente.&lt;br /&gt;
&lt;br /&gt;
Já no caso de planos carregados eletricamente as forças de interação entre os planos serão sempre repulsivas e a energia total do sistema é positiva. Sem uma interação externa, mesmo um sistema composto por um número limitado de partículas de fraca interação expandiria indefinidamente. Por causa disso, nesse caso é considerado que há uma força colimadora no feixe de planos proporcional a distância da origem. A origem dessa força externa vem de modelos de maior dimensionalidade de aceleradores de partícula que contam com um campo magnético externo capaz de colimar um feixe de cargas radialmente, por não existir um paralelo direto para o modelo unidimensional consideramos apenas uma força restauradora que impede a expansão indefinida do sistema como um todo. Também é possível ajustar condições de contorno simulando as paredes externas do acelerador como placas condutoras infinitas e com potencial definido. Esse tipo de consideração pode ser feita para sistemas que não são simétricos e impede que as cargas se afastem demasiadamente da origem.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:4graficoforça.png]]&lt;br /&gt;
&lt;br /&gt;
= Comportamento de uma Partícula no Sistema =&lt;br /&gt;
&lt;br /&gt;
Graças a caracterização das partículas temos que o campo gerado por uma partícula-plano pode ser caracterizado (para ambos os sistemas citados) da seguinte forma:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
E_i(x) = -\lambda\Theta[-(x-x_i)]  + \lambda\Theta(x-x_i)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:5perfilcampo.png]]&lt;br /&gt;
&lt;br /&gt;
Em que a constante &amp;lt;math&amp;gt;\lambda&amp;lt;/math&amp;gt; pode ser tanto positiva (cargas positivas) quanto negativa (cargas negativas ou interação gravitacional) e a função &amp;lt;math&amp;gt;\Theta&amp;lt;/math&amp;gt; equivale a função degrau de Heaviside:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\Theta(x) = \begin{cases} 0, \ \ x&amp;lt;0 \\ 1, \ \ x&amp;gt;0 \end{cases}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dessa forma, para exemplificação, um sistema de 5 partículas-plano teria uma interação da seguinte forma:&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:6forçaresultante.png]]&lt;br /&gt;
&lt;br /&gt;
Aqui, F seria a força de interação entre duas partículas no caso de planos carregados. É possível notar que a força de interação varia de duas unidades dessa constante para cada partícula contada em uma direção e que a força máxima sentida (pelas partículas-plano localizadas nas extremidades) é proporcional a &amp;lt;math&amp;gt;(N-1)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
É possível notar que para uma distribuição de partículas-plano do tipo:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt; &lt;br /&gt;
n(x) =   \sum_{i=1}^N \delta(x_i) &lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
com o índice  &amp;lt;math&amp;gt;\ \ &#039;&#039;i&#039;&#039;\ &amp;lt;/math&amp;gt; sendo a ordem da partícula contada do sentido negativo para o positivo do eixo x, teremos uma força resultante de interação para uma partícula que pode ser definida por &lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
F_i =  [-(N-1) + 2(i-1)]F&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt; &lt;br /&gt;
F_i = (2i - N-1)F&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Essa força é suficiente para manter o sistema auto-gravitante coeso mas para as partículas carregadas devemos adicionar a força restauradora descrita anteriormente:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
F^{grav.}_{R,i} = (2i - N-1)F&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
F^{el.}_{R,i} = (2i - N-1)F - \kappa x_i&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Conservação da Energia do Sistema =&lt;br /&gt;
&lt;br /&gt;
Ao realizar uma simulação numérica com um grande número de entes que representam um sistema físico é importante que seja feita uma verificação sobre o quão apropriados os resultados da simulação de fato são. Uma das formas mais comuns de verificar se uma simulação numérica está correta na dinâmica molecular de vários corpos e efetuar periodicamente a soma da energia do sistema.&lt;br /&gt;
&lt;br /&gt;
No caso de sistemas como os descritos, não há nenhum incremento de energia proveniente de uma fonte externa. Mesmo para o sistema eletricamente carregado, a força restauradora é potencial e não muda a energia total do sistema dada uma distribuição inicial de posição e momento.&lt;br /&gt;
&lt;br /&gt;
Para todos os efeitos, a energia dos sistemas estudados pode ser dividida em três partes: &lt;br /&gt;
&lt;br /&gt;
== Energia Cinética ==&lt;br /&gt;
&lt;br /&gt;
Todas as partículas da distribuição escolhida terão massa e velocidade, de forma que a energia cinética do sistema será dada por:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
En_{cin} = \frac{m}{2}\sum_{i=1}^N \dot{x_i}^2&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Energia Potencial Restauradora ==&lt;br /&gt;
&lt;br /&gt;
Observada no sistema eletricamente carregado citado, pode ser descrita como:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
En_{pot} = \frac{\kappa}{2}\sum_{i=1}^N x_i^2&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Energia Potencial Intrínseca  ==&lt;br /&gt;
&lt;br /&gt;
Energia contida na interação entre as partículas. A energia de uma partícula depende do potencial na sua posição da sua carga (ou massa).&lt;br /&gt;
&lt;br /&gt;
Como potenciais não são absolutos, é estabelecido um Potencial nulo de referência nas condições de contorno do sistema. Como pode ser visto no gif com as partículas-plano carregadas em azul, são colocadas placas condutoras planas nas posições &amp;lt;math&amp;gt;x=L&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;x= -L&amp;lt;/math&amp;gt; (caso haja simetria no espaço de fase do sistema) e é estabelecido que os potenciais nessas posições são &amp;lt;math&amp;gt;V(-L) = V(L) = 0&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Uma maneira mais simples de determinar o potencial das N partículas é considerar que há nas posições de contorno,  &amp;lt;math&amp;gt;x_0&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;x_{N+1}&amp;lt;/math&amp;gt;, partículas não interagentes.&lt;br /&gt;
&lt;br /&gt;
A diferença de potencial entre duas posições vizinhas pode ser determinada por:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\Delta V_i = (x_{i} - x_{i - 1})E_i&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
com &amp;lt;math&amp;gt;E_i&amp;lt;/math&amp;gt; sendo o módulo do campo entre a i-ésima e a (i - 1)-ésima partícula, dado por:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
E_i = (2i - N - 1)\lambda&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:7perfilcampoN4.png]]&lt;br /&gt;
&lt;br /&gt;
O que resulta na energia de uma partícula específica (k-ésima) descrita por:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
En_k = \alpha \sum_{i = 1}^{k}(x_i - x_{i - 1})(2i - N - 1)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aqui foram aglutinadas as possíveis constantes multiplicativas em uma constante &amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt; que pode ser escolhida para se adequar ao sistema estudado e a energia intrínseca do sistema é dada pela soma da energia de interação de cada uma das partículas. Como o sistema é dividido em intervalos com variação de potencial discretos, podemos escrever a energia intrínseca da seguinte forma:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
En_{int} = \alpha \sum_{k = 1}^{N}\sum_{i = 1}^{k}(x_i - x_{i - 1})(2i - N - 1)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A soma dessas três energias deve se manter constante (ou com pouca variação relativa significativa, pelo menos) durante a simulação:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
E_{total} = En_{cin} + En_{pot} + En_{int} = cte.&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Modelagem Computacional =&lt;br /&gt;
&lt;br /&gt;
== Criando a Distribuição do Sistema ==&lt;br /&gt;
&lt;br /&gt;
O primeiro passo para criar a simulação das N partículas é definir as coordenadas fundamentais das partículas em si (posição e velocidade).&lt;br /&gt;
&lt;br /&gt;
A simulação que será utilizada de exemplo é simétrica no espaço de fase, ou seja, para cada partícula com coordenadas &amp;lt;math&amp;gt;(x_i,y_i)&amp;lt;/math&amp;gt; existirá uma partícula espelhada &lt;br /&gt;
com coordenadas &amp;lt;math&amp;gt;(-x_i,-y_i)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Esse artifício é utilizado para que o centro de massa mantenha-se na origem e que o momento linear do sistema em x seja sempre nulo. Com isso é garantido que haverá sempre, também, a simetria par entre as energias das partículas espelhadas e a simetria ímpar entre as forças resultantes.&lt;br /&gt;
&lt;br /&gt;
Com isso garantido, basta fazer o cálculo numérico de uma metade da distribuição levando em conta a presença da outra metade, porém não tornando necessário que os cálculos sejam repetidos pois o comportamento de cada partícula espelhada torna-se perfeitamente previsível.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&#039;python&#039;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Importando as bibliotecas necessárias &lt;br /&gt;
from math import *&lt;br /&gt;
import matplotlib.pyplot as plt&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
A=[]     #criamos uma lista vazia&lt;br /&gt;
&lt;br /&gt;
N =  1000       # Determinamos o número de partículas utilizado&lt;br /&gt;
&lt;br /&gt;
for i in range(int(N)):&lt;br /&gt;
&lt;br /&gt;
    A.append([np.random.rand() ,2*(np.random.rand() - 1/2)]) #valores aleatórios de x entre 0 e 1 e de v entre -1 e 1 são adicionados&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A = np.array(A)&lt;br /&gt;
X= np.array([])     #Arrays usados para exemplificar&lt;br /&gt;
V= np.array([])     #distribuição inicial&lt;br /&gt;
&lt;br /&gt;
for i in range (len(A)):    #simetrização da distribuição&lt;br /&gt;
    X=np.append(X,A[i][0])&lt;br /&gt;
    V=np.append(V,A[i][1])&lt;br /&gt;
    V=np.append(V,-A[i][1])&lt;br /&gt;
    X=np.append(X,-A[i][0])&lt;br /&gt;
    &lt;br /&gt;
plt.xlabel(&#039;posição&#039;)             #plot da distribuição inicial&lt;br /&gt;
plt.ylabel(&#039;momento linear&#039;)&lt;br /&gt;
plt.title(&#039;Espaço de fase inicial&#039;)&lt;br /&gt;
plt.grid(True)&lt;br /&gt;
&lt;br /&gt;
plt.scatter(X,V)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:8espaçofaseinicial.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Função de Indexação ==&lt;br /&gt;
&lt;br /&gt;
Em outras modelagens como a interação de cargas em sistemas bidimensionais ou de massas em tridimensionais é necessário calcular a força de interação entre partículas em função das distâncias. Na modelagem proposta não é necessário calcular distâncias mas sim saber o ordenamento das partículas ao longo do eixo &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
No entanto, é muito comum em simulações que utilizam métodos de integração utilizar vetores que possuam apenas uma coluna e &amp;lt;math&amp;gt;2N&amp;lt;/math&amp;gt; linhas, sendo a primeira metade de linhas correspondentes às posições e a outra metade correspondente às velocidades.&lt;br /&gt;
&lt;br /&gt;
Para não precisar atualizar as linhas de posição e velocidade do vetor 2N-dimensional, utiliza-se uma função de indexação que será responsável por indicar qual é a ordem da partícula correspondente a uma determinada linha em um dado estado.&lt;br /&gt;
&lt;br /&gt;
Assim, a posição da partícula é atualizada no tempo e seu índice também, porém a posição dela no vetor de fase nunca se modifica. Esse fato é importante para estudos que pretendem analisar a trajetória de um único corpo no tempo, como é feito nos diagramas de Poincaré, por exemplo.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&#039;python&#039;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
teste = np.array([2,6,3,9,0,1,4])   #criado um vetor de teste  para que seus valores sejam indexados&lt;br /&gt;
&lt;br /&gt;
def indexador(arr):                 #define-se a função&lt;br /&gt;
    &lt;br /&gt;
    ordenador = []                  #é criada uma lista vazia&lt;br /&gt;
    &lt;br /&gt;
    for i in range(len(arr)):&lt;br /&gt;
        &lt;br /&gt;
        ordenador.append([abs(arr[i]),i]) # para cada valor criamos uma lista com o valor absoluto e a ordem atual&lt;br /&gt;
        &lt;br /&gt;
    ordenador.sort()                      # é feito o ordenamento da lista &#039;ordenador&#039; de acordo com o primeiro elemento&lt;br /&gt;
    &lt;br /&gt;
    for i in range(len(arr)):             &lt;br /&gt;
&lt;br /&gt;
        ordenador[i].append(i)            # é adicionado um terceiro valor para cada elemento de ordenador com o valor da sua nova ordem na sequência&lt;br /&gt;
        &lt;br /&gt;
    for i in range(len(arr)):&lt;br /&gt;
        &lt;br /&gt;
        a = ordenador[i][0]&lt;br /&gt;
        b = ordenador[i][1]             # É feita a troca do segundo com o primeiro valor de cada elemento de ordenador para...&lt;br /&gt;
        ordenador[i][0] = b&lt;br /&gt;
        ordenador[i][1] = a&lt;br /&gt;
        &lt;br /&gt;
    ordenador.sort()                    # reordenar os elementos de acordo com a ordem antiga&lt;br /&gt;
        &lt;br /&gt;
        &lt;br /&gt;
    lista = []&lt;br /&gt;
    &lt;br /&gt;
    for i in range(len(arr)):&lt;br /&gt;
        &lt;br /&gt;
        lista.append(ordenador[i][2])   #por fim guarda-se a ordem correspondente a cada valor da lista colocada como variável &lt;br /&gt;
        &lt;br /&gt;
    indexador = np.array(lista)  &lt;br /&gt;
        &lt;br /&gt;
    return indexador                     # e essa ordem é retornada como saída da função&lt;br /&gt;
&lt;br /&gt;
print(indexador(teste))&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Função de movimento e aceleração das partículas ==&lt;br /&gt;
&lt;br /&gt;
Para simular como um estado evolui no tempo, é necessário que tenhamos as derivadas temporais de todas as coordenadas do vetor de estado (&amp;lt;math&amp;gt;y&amp;lt;/math&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Para as coordenadas espaciais x (&amp;lt;math&amp;gt;y[i], \ 0\leq i&amp;lt; N &amp;lt;/math&amp;gt;) temos que:  &lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\dot{x_i} = y_{[i + N]} &lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Para as coordenadas de velocidade v (&amp;lt;math&amp;gt;y[i], \ N\leq i&amp;lt; 2N-1 &amp;lt;/math&amp;gt;) teremos que usar a relação de forças que foi descrita no modelo. Algumas simplificações comuns serão feitas como considerar constantes físicas unitárias (&amp;lt;math&amp;gt;m = q = \kappa = 1&amp;lt;/math&amp;gt;) e relações de proporcionalidade com o número de partículas do sistema para mantê-lo com um comportamento mais suave (&amp;lt;math&amp;gt;F = 1/N&amp;lt;/math&amp;gt;). O programa será escrito levando em conta o modelo de cargas elétricas: &lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\dot{v_i} = \ddot{x_i} = \frac{1}{m} \Big[ -\kappa y_{[i - N]} + (2i - N - 1)F \Big]&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A relação acima pode ser descrita de forma diferente se levarmos em conta que a simulação é simétrica em x e que todas as posições iniciais são positivas.&lt;br /&gt;
&lt;br /&gt;
A partícula que recebe índice &amp;lt;math&amp;gt;1&amp;lt;/math&amp;gt; possui &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; partículas à esquerda (x negativo) e &amp;lt;math&amp;gt;(N-1)&amp;lt;/math&amp;gt; partículas a direita (x positivo), o que resulta uma força de interação de &amp;lt;math&amp;gt;F&amp;lt;/math&amp;gt; para a direita. A de índice 2 terá força de interação &amp;lt;math&amp;gt;3F&amp;lt;/math&amp;gt;, a de índice 3 terá &amp;lt;math&amp;gt;5F&amp;lt;/math&amp;gt; e assim por diante.&lt;br /&gt;
&lt;br /&gt;
Antes de reescrever a equação da aceleração deve-se levar em consideração de uma das partículas distribuídas no espaço de fase assumirem coordenadas negativas (caso tenham proximidade da origem e velocidade negativa). Novamente usando o argumento de simetria, sabe-se que caso uma partícula assuma uma posição negativa, a partícula espelhada assumirá a posição simétrica em relação a origem. Dessa forma basta calcular a força de interação sobre a partícula espelhada e inverter o sinal para a partícula original. Levando tudo isso em conta teremos a seguinte equação da aceleração:  &lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\ddot{x_i} = \frac{1}{m}\Big[ -\kappa y_{[i - N]} + \frac{y_{[i - N]}}{|y_{[i - N]}|}(2i- 1)F     \Big]&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&#039;python&#039;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
def deriv(t, y):&lt;br /&gt;
&lt;br /&gt;
    p = len(y)&lt;br /&gt;
    k = indexador(y[0:int(p/2)])&lt;br /&gt;
    sinal=abs(y[0:int(p/2)])/y[0:int(p/2)]&lt;br /&gt;
    &lt;br /&gt;
    dydt = np.zeros(int(p))&lt;br /&gt;
&lt;br /&gt;
    dydt[0:int(p/2)] = y[int(p/2):int(p)] #definindo as derivadas temporais de posição&lt;br /&gt;
    &lt;br /&gt;
                                                         #definindo as derivadas temporais de velocidade&lt;br /&gt;
    dydt[int(p/2):int(p)] = -y[0:int(p/2)] + ((np.ones(int(p/2)) + 2*k )/(p))*sinal&lt;br /&gt;
    &lt;br /&gt;
    deriv = dydt[0:int(p)]&lt;br /&gt;
    &lt;br /&gt;
    return deriv&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Função de Energia do estado ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&#039;python&#039;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
def Energia_total(y):     # Para calcular a energia precisamos apenas do vetor de estado y do sistema de partículas utilizado&lt;br /&gt;
&lt;br /&gt;
    l = int(len(y)/2)     # a variável l representa a quantidade de valores que teremos &lt;br /&gt;
    pot = np.zeros(l+1)   # cria-se um array com l + 1 dimensões para representar as l partículas e os respectivos potenciais &lt;br /&gt;
&lt;br /&gt;
    r = abs(np.array(y[0:l]))       # cria-se um array r com as coordenadas de posição do estado y&lt;br /&gt;
    r = np.append(r,4)   # adiciona-se uma coordenada para representar o contorno externo do experimento&lt;br /&gt;
    r.sort()              # Faz-se o ordenamento desse array por distância da origem&lt;br /&gt;
    &lt;br /&gt;
    pot_0 = 0             # O potencial do contorno deve ser nulo &lt;br /&gt;
    &lt;br /&gt;
    for i in range(l,0,-1):     # Loop decrescente que define o potencial de posição para cada partícula &lt;br /&gt;
        &lt;br /&gt;
        pot[i] = pot_0&lt;br /&gt;
        &lt;br /&gt;
        pot_0 = pot_0 + (1/2)*(i/l)*abs((r[i] - r[i-1]))&lt;br /&gt;
        &lt;br /&gt;
    pot[0] = pot_0&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    v = np.array(y[l:-1])       # Cria-se um array com os valores de velocidade&lt;br /&gt;
    &lt;br /&gt;
    E_total = 0&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    for i in range(l-1):        #Soma-se as energias de cada partícula&lt;br /&gt;
&lt;br /&gt;
      E_total = E_total + pot[i] + 0.5*v[i]**2 + 0.5*r[i]**2&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    return 2*E_total, r[0:l+1], pot[0:l+1]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Evolução da Distribuição no Tempo ==&lt;br /&gt;
&lt;br /&gt;
Para simular a evolução temporal da distribuição inicial escolhida, precisamos de um método de integração numérica no tempo. O método escolhido deverá partir do estado da distribuição e da função de derivada temporal atribuída para estimar como a evolução ocorre.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&#039;python&#039;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
from scipy.integrate import solve_ivp  #integrador numérico escolhido&lt;br /&gt;
&lt;br /&gt;
def nova_fase(y,i):      #função que define a função do espaço de fase em cada instante de tempo, adaptada para o integrador numérico escolhido&lt;br /&gt;
    &lt;br /&gt;
    fase = np.array([])&lt;br /&gt;
    &lt;br /&gt;
    for j in range(len(y)):&lt;br /&gt;
            &lt;br /&gt;
        fase = np.append(fase,y[j][i])&lt;br /&gt;
        &lt;br /&gt;
    return fase&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Fase = []   # Cria uma lista para reservar a evolução do espaço de fase no tempo&lt;br /&gt;
T = np.array([])     # Cria uma lista que registra os tempos de marcação do integrador numérico&lt;br /&gt;
E = np.array([])     # Cria uma lista que registra a energia da distribuição no tempo&lt;br /&gt;
E_pot = []           # Cria uma lista que registra o comportamento da energia potencial ao longo de x no tempo&lt;br /&gt;
X_pot = []           # O análogo ao anterior para a posição&lt;br /&gt;
tempo = 0.0  # o tempo começa em 0&lt;br /&gt;
delta_t = 1   # o intervalo de tempo é 0.1&lt;br /&gt;
&lt;br /&gt;
X = np.random.rand(4000)&lt;br /&gt;
V = np.random.rand(4000) - np.ones(4000)*0.5&lt;br /&gt;
y = np.append(X,2*V)    #define-se a fase inicial&lt;br /&gt;
&lt;br /&gt;
for j in range(50):&lt;br /&gt;
&lt;br /&gt;
    sol = solve_ivp(deriv, (tempo,tempo + delta_t), y , rtol = 0.00001)     # integrador numérico realiza a integração&lt;br /&gt;
&lt;br /&gt;
    T= np.append(T, sol.t)&lt;br /&gt;
&lt;br /&gt;
    tempo = tempo + delta_t&lt;br /&gt;
    for i in range(len(sol.t)):       #o integrador possui um número de vetores intermediários ao vetor da solução final sol.y[-1]&lt;br /&gt;
        &lt;br /&gt;
        &lt;br /&gt;
        y = nova_fase(sol.y,i)                              # aqui são registradas as funções definidas para cada estado de integração&lt;br /&gt;
        Fase.append(y)&lt;br /&gt;
&lt;br /&gt;
        Ei =  Energia_total(y)&lt;br /&gt;
&lt;br /&gt;
        E = np.append(E, Ei[0])&lt;br /&gt;
&lt;br /&gt;
        E_pot.append(Ei[2])&lt;br /&gt;
        X_pot.append(Ei[1])&lt;br /&gt;
    &lt;br /&gt;
    y = nova_fase(sol.y, -1)                     # A distribuição atual é atualizada para nova integração &lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Animações ===&lt;br /&gt;
&lt;br /&gt;
Foi utilizado o código abaixo para gerar os gifs da evolução temporal&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&#039;python&#039;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
from matplotlib.animation import FuncAnimation&lt;br /&gt;
from IPython import display&lt;br /&gt;
&lt;br /&gt;
# código base para montar gifs da evolução temporal &lt;br /&gt;
fig, (ax1, ax2, ax3) = plt.subplots(3,1 ,figsize = (6,14))    #cria uma figura de três linhas&lt;br /&gt;
&lt;br /&gt;
lines = []                                                    #objeto padrão da biblioteca FuncAnimation&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def animate(frame):&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    # As entradas são limpas para evitar superposição de imagens nos frames&lt;br /&gt;
    ax1.cla()              &lt;br /&gt;
    ax2.cla()&lt;br /&gt;
    ax3.cla()&lt;br /&gt;
&lt;br /&gt;
    # Plot do espaço de fases&lt;br /&gt;
    ax1.scatter(Fase[frame][0:4000], Fase[frame][4000:8000], color = &#039;k&#039;, s  =5)&lt;br /&gt;
    ax1.scatter(-Fase[frame][0:4000], -Fase[frame][4000:8000], color = &#039;k&#039;, s = 5)&lt;br /&gt;
    ax1.set_xlabel(&#039;$posição$&#039;)&lt;br /&gt;
    ax1.set_ylabel(&#039;$velocidade$&#039;)&lt;br /&gt;
    ax1.set_xlim(-4,4)&lt;br /&gt;
    ax1.set_ylim(-2.5,2.5)   &lt;br /&gt;
&lt;br /&gt;
    # Plot da distribuição de Potencial&lt;br /&gt;
    ax2.plot(X_pot[frame],E_pot[frame], color = &#039;grey&#039;)&lt;br /&gt;
    ax2.plot(-np.flip(X_pot[frame]),np.flip(E_pot[frame]), color = &#039;grey&#039;)&lt;br /&gt;
    ax2.scatter(X_pot[frame],E_pot[frame], color = &#039;b&#039;, s  =5)&lt;br /&gt;
    ax2.scatter(-np.flip(X_pot[frame]),np.flip(E_pot[frame]), color = &#039;b&#039;, s  =5)&lt;br /&gt;
    ax2.set_ylabel(&amp;quot;potencial&amp;quot;)&lt;br /&gt;
    ax2.set_xlabel(&amp;quot;posição&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    # Plot da energia total no tempo&lt;br /&gt;
    ax3.plot(T[0:frame],E[0:frame], color = &#039;k&#039;)&lt;br /&gt;
    ax3.set_ylabel(&amp;quot;Energia&amp;quot;)&lt;br /&gt;
    ax3.set_xlabel(&amp;quot;tempo&amp;quot;)&lt;br /&gt;
    ax3.set_xlim(0, T[-1])&lt;br /&gt;
    ax3.set_ylim(E[0]- 10, E[0] + 10)&lt;br /&gt;
    &lt;br /&gt;
    return lines&lt;br /&gt;
&lt;br /&gt;
# Execução do programa e geração do gif inline   &lt;br /&gt;
anima = FuncAnimation(fig, animate,frames=len(T), interval=20, blit=True)&lt;br /&gt;
video = anima.to_html5_video()&lt;br /&gt;
html = display.HTML(video)&lt;br /&gt;
display.display(html)&lt;br /&gt;
&lt;br /&gt;
plt.close()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:Mom-pot-e.gif]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Referências ===&lt;br /&gt;
&lt;br /&gt;
CARLAN JR, Antônio H.; PAKTER, Renato. Core-halo boundary in a sheet beam model. Physics of Plasmas, v. 28, n. 11, p. 113103, 2021.&lt;br /&gt;
R. L. Gluckstern, Phys. Rev. Lett. 73, 1247 (1994).&lt;br /&gt;
C. Chen and R. C. Davidson, Phys. Rev. Lett. 72, 2195 (1994).&lt;/div&gt;</summary>
		<author><name>Renanrs</name></author>
	</entry>
	<entry>
		<id>http://fiscomp.if.ufrgs.br/index.php?title=Din%C3%A2mica_Molecular_de_Part%C3%ADculas-Planares_Interagentes&amp;diff=6547</id>
		<title>Dinâmica Molecular de Partículas-Planares Interagentes</title>
		<link rel="alternate" type="text/html" href="http://fiscomp.if.ufrgs.br/index.php?title=Din%C3%A2mica_Molecular_de_Part%C3%ADculas-Planares_Interagentes&amp;diff=6547"/>
		<updated>2021-11-30T17:17:47Z</updated>

		<summary type="html">&lt;p&gt;Renanrs: /* O modelo */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Grupo: Antônio Carlan, Gabriela Pereira, Renan Soares e Victor Gandara&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Objetivo:&#039;&#039;&#039; O trabalho tem como objetivo descrever a dinâmica molecular de um conjunto de partículas-planares infinitas paralelas. o modelo simplificado para estudar o comportamento de muitos corpos interagentes ao longo de um único eixo espacial é usado para feixes de partículas carregadas e também para sistemas autogravitantes. O estudo desse tipo de interação é importante para ter insights de sistemas de maior dimensionalidades.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= O modelo =&lt;br /&gt;
&lt;br /&gt;
É possível criar um modelo simplificado de interação de partículas imaginando que todas elas são compostas por planos de mesma massa e sem espessura, paralelos entre si e com liberdade de movimento relevante no eixo perpendicular às superfícies das mesmas.&lt;br /&gt;
&lt;br /&gt;
Tal modelo pode ser utilizado para estudar a dinâmica de um número elevado de partículas e conta com algumas particularidades simplificadoras de complexidade numérica. Alguns estudos utilizam esse modelo para estudar o comportamento de feixes carregados com a menor dimensionalidade possível e também para sistemas auto-gravitantes. As duas aplicações citadas serão as demonstradas a seguir mas o modelo é versátil para diferentes condições iniciais e de contorno.&lt;br /&gt;
&lt;br /&gt;
== Descrição do Modelo ==&lt;br /&gt;
&lt;br /&gt;
=== Disposição espacial ===&lt;br /&gt;
&lt;br /&gt;
Um número &amp;quot;N&amp;quot; de partículas-plano de mesma massa é disposto ao longo do eixo x com uma função de distribuição n(x) e com todas as partículas paralelas ao plano yz. No caso do modelo auto-gravitante, movimentos ao longo do eixo z não têm relevância prática mas para o modelo de um feixe de planos é definido que todos os planos se movem na direção z com mesma velocidade.&lt;br /&gt;
&lt;br /&gt;
A consideração de movimento ao longo do eixo z para o modelo de feixe é importante para a análise do comportamento do espaço de fases ao longo do comprimento do acelerador de partículas. Aqui, podemos imaginar estudar casos em que o feixe gerado inicialmente no espaço de fase terá um comportamento constante no tempo para cada secção transversal em xy para uma coordenada em z pré-estabelecida.&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:1paralelas.gif]] &lt;br /&gt;
&lt;br /&gt;
=== Ausência de Efeitos de Colisão ===&lt;br /&gt;
&lt;br /&gt;
O modelo leva em consideração que todas os planos possuem a mesma massa e que as colisões não levam a perda de energia no sistema.&lt;br /&gt;
&lt;br /&gt;
Dessa forma podemos prever o que ocorre quando a posição de dois planos coincide pois há conservação no momento linear em x e o coeficiente de restituição (razão entre as velocidades de afastamento e aproximação dos corpos) é igual a 1.&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:2diagrama.png]] &lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{cases} mv_1 - mv_2 = -mv_1&#039; + mv_2&#039;  \\ \\   \frac{v_1&#039; + v_2&#039;}{v_1 + v_2} = 1  \end{cases}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
O sistema de equações resulta em: &amp;lt;math&amp;gt;v_1&#039; = v_2 \ \ \ ; \ \ \ v_2&#039; = v_1&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dessa forma, é irrelevante ponderar se houve de fato uma colisão com troca de velocidades ou se as partículas simplesmente cruzam sem interferir de forma relevante. A última consideração é a levada em conta no ponto de vista computacional pois exclui a necessidade de atualizar a velocidade das partículas que passaram pela mesma posição no eixo x.&lt;br /&gt;
&lt;br /&gt;
=== Interação entre as partículas ===&lt;br /&gt;
&lt;br /&gt;
Para analisar a interação entre as partículas é preciso entender como uma única partícula afeta seu entorno.&lt;br /&gt;
&lt;br /&gt;
No caso das partículas-plano carregadas eletricamente podemos considerar os efeitos de campo elétrico de um isolante plano infinito:&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:3corpolivre.png]] &lt;br /&gt;
&lt;br /&gt;
Pela lei de Gauss, para uma dada distribuição de carga com densidade superficial &amp;lt;math&amp;gt;\sigma&amp;lt;/math&amp;gt;: &lt;br /&gt;
:&amp;lt;math&amp;gt; &lt;br /&gt;
\oint  \overrightarrow{E}. d\overrightarrow{S}  = \frac{Q_{int}}{\epsilon_0} &lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
E.A - (-E.A) = \frac{\sigma . A   }{\epsilon_0} &lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
E= \frac{\sigma }{2\epsilon_0}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
O mesmo pode ser feito para um plano com densidade de massa distribuída uniformemente, para o caso do sistema auto-gravitante, com mudança na constante física multiplicativa e no sinal.&lt;br /&gt;
&lt;br /&gt;
O fato importante a ser destacado aqui é a total independência do campo gerado pela partícula e a distância. Dessa forma, a interação entre as partículas em qualquer sistema que seguir esse modelo não terá dependência da distância entre elas e sim da posição relativa entre as partículas consideradas.&lt;br /&gt;
&lt;br /&gt;
=== Interferência externa do sistema ===&lt;br /&gt;
&lt;br /&gt;
Para o caso dos planos no sistema auto-gravitante não é necessária ação externa alguma para manter o equilíbrio em um sistema dinâmico estável. Sempre é levado em conta que todas as partículas têm velocidade em x inferior a velocidade de escape do restante do sistema e, por conta disso e das forças sempre atrativas de interação, o sistema não expande indefinidamente.&lt;br /&gt;
&lt;br /&gt;
Já no caso de planos carregados eletricamente as forças de interação entre os planos serão sempre repulsivas e a energia total do sistema é positiva. Sem uma interação externa, mesmo um sistema composto por um número limitado de partículas de fraca interação expandiria indefinidamente. Por causa disso, nesse caso é considerado que há uma força colimadora no feixe de planos proporcional a distância da origem. A origem dessa força externa vem de modelos de maior dimensionalidade de aceleradores de partícula que contam com um campo magnético externo capaz de colimar um feixe de cargas radialmente, por não existir um paralelo direto para o modelo unidimensional consideramos apenas uma força restauradora que impede a expansão indefinida do sistema como um todo. Também é possível ajustar condições de contorno simulando as paredes externas do acelerador como placas condutoras infinitas e com potencial definido. Esse tipo de consideração pode ser feita para sistemas que não são simétricos e impede que as cargas se afastem demasiadamente da origem.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:4graficoforça.png]]&lt;br /&gt;
&lt;br /&gt;
= Comportamento de uma Partícula no Sistema =&lt;br /&gt;
&lt;br /&gt;
Graças a caracterização das partículas temos que o campo gerado por uma partícula-plano pode ser caracterizado (para ambos os sistemas citados) da seguinte forma:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
E_i(x) = -\lambda\Theta[-(x-x_i)]  + \lambda\Theta(x-x_i)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:5perfilcampo.png]]&lt;br /&gt;
&lt;br /&gt;
Em que a constante &amp;lt;math&amp;gt;\lambda&amp;lt;/math&amp;gt; pode ser tanto positiva (cargas positivas) quanto negativa (cargas negativas ou interação gravitacional) e a função &amp;lt;math&amp;gt;\Theta&amp;lt;/math&amp;gt; equivale a função degrau de Heaviside:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\Theta(x) = \begin{cases} 0, \ \ x&amp;lt;0 \\ 1, \ \ x&amp;gt;0 \end{cases}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dessa forma, para exemplificação, um sistema de 5 partículas-plano teria uma interação da seguinte forma:&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:6forçaresultante.png]]&lt;br /&gt;
&lt;br /&gt;
Aqui, F seria a força de interação entre duas partículas no caso de planos carregados. É possível notar que a força de interação varia de duas unidades dessa constante para cada partícula contada em uma direção e que a força máxima sentida (pelas partículas-plano localizadas nas extremidades) é proporcional a &amp;lt;math&amp;gt;(N-1)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
É possível notar que para uma distribuição de partículas-plano do tipo:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt; &lt;br /&gt;
n(x) =   \sum_{i=1}^N \delta(x_i) &lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
com o índice  &amp;lt;math&amp;gt;\ \ &#039;&#039;i&#039;&#039;\ &amp;lt;/math&amp;gt; sendo a ordem da partícula contada do sentido negativo para o positivo do eixo x, teremos uma força resultante de interação para uma partícula que pode ser definida por &lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
F_i =  [-(N-1) + 2(i-1)]F&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt; &lt;br /&gt;
F_i = (2i - N-1)F&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Essa força é suficiente para manter o sistema auto-gravitante coeso mas para as partículas carregadas devemos adicionar a força restauradora descrita anteriormente:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
F^{grav.}_{R,i} = (2i - N-1)F&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
F^{el.}_{R,i} = (2i - N-1)F - \kappa x_i&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Conservação da Energia do Sistema =&lt;br /&gt;
&lt;br /&gt;
Ao realizar uma simulação numérica com um grande número de entes que representam um sistema físico é importante que seja feita uma verificação sobre o quão apropriados os resultados da simulação de fato são. Uma das formas mais comuns de verificar se uma simulação numérica está correta na dinâmica molecular de vários corpos e efetuar periodicamente a soma da energia do sistema.&lt;br /&gt;
&lt;br /&gt;
No caso de sistemas como os descritos, não há nenhum incremento de energia proveniente de uma fonte externa. Mesmo para o sistema eletricamente carregado, a força restauradora é potencial e não muda a energia total do sistema dada uma distribuição inicial de posição e momento.&lt;br /&gt;
&lt;br /&gt;
Para todos os efeitos, a energia dos sistemas estudados pode ser dividida em três partes: &lt;br /&gt;
&lt;br /&gt;
== Energia Cinética ==&lt;br /&gt;
&lt;br /&gt;
Todas as partículas da distribuição escolhida terão massa e velocidade, de forma que a energia cinética do sistema será dada por:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
En_{cin} = \frac{m}{2}\sum_{i=1}^N \dot{x_i}^2&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Energia Potencial Restauradora ==&lt;br /&gt;
&lt;br /&gt;
Observada no sistema eletricamente carregado citado, pode ser descrita como:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
En_{pot} = \frac{\kappa}{2}\sum_{i=1}^N x_i^2&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Energia Potencial Intrínseca  ==&lt;br /&gt;
&lt;br /&gt;
Energia contida na interação entre as partículas. A energia de uma partícula depende do potencial na sua posição da sua carga (ou massa).&lt;br /&gt;
&lt;br /&gt;
Como potenciais não são absolutos, é estabelecido um Potencial nulo de referência nas condições de contorno do sistema. Como pode ser visto no gif com as partículas-plano carregadas em azul, são colocadas placas condutoras planas nas posições &amp;lt;math&amp;gt;x=L&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;x= -L&amp;lt;/math&amp;gt; (caso haja simetria no espaço de fase do sistema) e é estabelecido que os potenciais nessas posições são &amp;lt;math&amp;gt;V(-L) = V(L) = 0&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Uma maneira mais simples de determinar o potencial das N partículas é considerar que há nas posições de contorno,  &amp;lt;math&amp;gt;x_0&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;x_{N+1}&amp;lt;/math&amp;gt;, partículas não interagentes.&lt;br /&gt;
&lt;br /&gt;
A diferença de potencial entre duas posições vizinhas pode ser determinada por:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\Delta V_i = (x_{i} - x_{i - 1})E_i&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
com &amp;lt;math&amp;gt;E_i&amp;lt;/math&amp;gt; sendo o módulo do campo entre a i-ésima e a (i - 1)-ésima partícula, dado por:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
E_i = (2i - N - 1)\lambda&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:7perfilcampoN4.png]]&lt;br /&gt;
&lt;br /&gt;
O que resulta na energia de uma partícula específica (k-ésima) descrita por:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
En_k = \alpha \sum_{i = 1}^{k}(x_i - x_{i - 1})(2i - N - 1)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aqui foram aglutinadas as possíveis constantes multiplicativas em uma constante &amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt; que pode ser escolhida para se adequar ao sistema estudado e a energia intrínseca do sistema é dada pela soma da energia de interação de cada uma das partículas. Como o sistema é dividido em intervalos com variação de potencial discretos, podemos escrever a energia intrínseca da seguinte forma:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
En_{int} = \alpha \sum_{k = 1}^{N}\sum_{i = 1}^{k}(x_i - x_{i - 1})(2i - N - 1)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A soma dessas três energias deve se manter constante (ou com pouca variação relativa significativa, pelo menos) durante a simulação:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
E_{total} = En_{cin} + En_{pot} + En_{int} = cte.&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Modelagem Computacional =&lt;br /&gt;
&lt;br /&gt;
== Criando a Distribuição do Sistema ==&lt;br /&gt;
&lt;br /&gt;
O primeiro passo para criar a simulação das N partículas é definir as coordenadas fundamentais das partículas em si (posição e velocidade).&lt;br /&gt;
&lt;br /&gt;
A simulação que será utilizada de exemplo é simétrica no espaço de fase, ou seja, para cada partícula com coordenadas &amp;lt;math&amp;gt;(x_i,y_i)&amp;lt;/math&amp;gt; existirá uma partícula espelhada &lt;br /&gt;
com coordenadas &amp;lt;math&amp;gt;(-x_i,-y_i)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Esse artifício é utilizado para que o centro de massa mantenha-se na origem e que o momento linear do sistema em x seja sempre nulo. Com isso é garantido que haverá sempre, também, a simetria par entre as energias das partículas espelhadas e a simetria ímpar entre as forças resultantes.&lt;br /&gt;
&lt;br /&gt;
Com isso garantido, basta fazer o cálculo numérico de uma metade da distribuição levando em conta a presença da outra metade, porém não tornando necessário que os cálculos sejam repetidos pois o comportamento de cada partícula espelhada torna-se perfeitamente previsível.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&#039;python&#039;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Importando as bibliotecas necessárias &lt;br /&gt;
from math import *&lt;br /&gt;
import matplotlib.pyplot as plt&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
A=[]     #criamos uma lista vazia&lt;br /&gt;
&lt;br /&gt;
N =  1000       # Determinamos o número de partículas utilizado&lt;br /&gt;
&lt;br /&gt;
for i in range(int(N)):&lt;br /&gt;
&lt;br /&gt;
    A.append([np.random.rand() ,2*(np.random.rand() - 1/2)]) #valores aleatórios de x entre 0 e 1 e de v entre -1 e 1 são adicionados&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A = np.array(A)&lt;br /&gt;
X= np.array([])     #Arrays usados para exemplificar&lt;br /&gt;
V= np.array([])     #distribuição inicial&lt;br /&gt;
&lt;br /&gt;
for i in range (len(A)):    #simetrização da distribuição&lt;br /&gt;
    X=np.append(X,A[i][0])&lt;br /&gt;
    V=np.append(V,A[i][1])&lt;br /&gt;
    V=np.append(V,-A[i][1])&lt;br /&gt;
    X=np.append(X,-A[i][0])&lt;br /&gt;
    &lt;br /&gt;
plt.xlabel(&#039;posição&#039;)             #plot da distribuição inicial&lt;br /&gt;
plt.ylabel(&#039;momento linear&#039;)&lt;br /&gt;
plt.title(&#039;Espaço de fase inicial&#039;)&lt;br /&gt;
plt.grid(True)&lt;br /&gt;
&lt;br /&gt;
plt.scatter(X,V)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:8espaçofaseinicial.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Função de Indexação ==&lt;br /&gt;
&lt;br /&gt;
Em outras modelagens como a interação de cargas em sistemas bidimensionais ou de massas em tridimensionais é necessário calcular a força de interação entre partículas em função das distâncias. Na modelagem proposta não é necessário calcular distâncias mas sim saber o ordenamento das partículas ao longo do eixo &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
No entanto, é muito comum em simulações que utilizam métodos de integração utilizar vetores que possuam apenas uma coluna e &amp;lt;math&amp;gt;2N&amp;lt;/math&amp;gt; linhas, sendo a primeira metade de linhas correspondentes às posições e a outra metade correspondente às velocidades.&lt;br /&gt;
&lt;br /&gt;
Para não precisar atualizar as linhas de posição e velocidade do vetor 2N-dimensional, utiliza-se uma função de indexação que será responsável por indicar qual é a ordem da partícula correspondente a uma determinada linha em um dado estado.&lt;br /&gt;
&lt;br /&gt;
Assim, a posição da partícula é atualizada no tempo e seu índice também, porém a posição dela no vetor de fase nunca se modifica. Esse fato é importante para estudos que pretendem analisar a trajetória de um único corpo no tempo, como é feito nos diagramas de Poincaré, por exemplo.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&#039;python&#039;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
teste = np.array([2,6,3,9,0,1,4])   #criado um vetor de teste  para que seus valores sejam indexados&lt;br /&gt;
&lt;br /&gt;
def indexador(arr):                 #define-se a função&lt;br /&gt;
    &lt;br /&gt;
    ordenador = []                  #é criada uma lista vazia&lt;br /&gt;
    &lt;br /&gt;
    for i in range(len(arr)):&lt;br /&gt;
        &lt;br /&gt;
        ordenador.append([abs(arr[i]),i]) # para cada valor criamos uma lista com o valor absoluto e a ordem atual&lt;br /&gt;
        &lt;br /&gt;
    ordenador.sort()                      # é feito o ordenamento da lista &#039;ordenador&#039; de acordo com o primeiro elemento&lt;br /&gt;
    &lt;br /&gt;
    for i in range(len(arr)):             &lt;br /&gt;
&lt;br /&gt;
        ordenador[i].append(i)            # é adicionado um terceiro valor para cada elemento de ordenador com o valor da sua nova ordem na sequência&lt;br /&gt;
        &lt;br /&gt;
    for i in range(len(arr)):&lt;br /&gt;
        &lt;br /&gt;
        a = ordenador[i][0]&lt;br /&gt;
        b = ordenador[i][1]             # É feita a troca do segundo com o primeiro valor de cada elemento de ordenador para...&lt;br /&gt;
        ordenador[i][0] = b&lt;br /&gt;
        ordenador[i][1] = a&lt;br /&gt;
        &lt;br /&gt;
    ordenador.sort()                    # reordenar os elementos de acordo com a ordem antiga&lt;br /&gt;
        &lt;br /&gt;
        &lt;br /&gt;
    lista = []&lt;br /&gt;
    &lt;br /&gt;
    for i in range(len(arr)):&lt;br /&gt;
        &lt;br /&gt;
        lista.append(ordenador[i][2])   #por fim guarda-se a ordem correspondente a cada valor da lista colocada como variável &lt;br /&gt;
        &lt;br /&gt;
    indexador = np.array(lista)  &lt;br /&gt;
        &lt;br /&gt;
    return indexador                     # e essa ordem é retornada como saída da função&lt;br /&gt;
&lt;br /&gt;
print(indexador(teste))&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Função de movimento e aceleração das partículas ==&lt;br /&gt;
&lt;br /&gt;
Para simular como um estado evolui no tempo, é necessário que tenhamos as derivadas temporais de todas as coordenadas do vetor de estado (&amp;lt;math&amp;gt;y&amp;lt;/math&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Para as coordenadas espaciais x (&amp;lt;math&amp;gt;y[i], \ 0\leq i&amp;lt; N &amp;lt;/math&amp;gt;) temos que:  &lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\dot{x_i} = y_{[i + N]} &lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Para as coordenadas de velocidade v (&amp;lt;math&amp;gt;y[i], \ N\leq i&amp;lt; 2N-1 &amp;lt;/math&amp;gt;) teremos que usar a relação de forças que foi descrita no modelo. Algumas simplificações comuns serão feitas como considerar constantes físicas unitárias (&amp;lt;math&amp;gt;m = q = \kappa = 1&amp;lt;/math&amp;gt;) e relações de proporcionalidade com o número de partículas do sistema para mantê-lo com um comportamento mais suave (&amp;lt;math&amp;gt;F = 1/N&amp;lt;/math&amp;gt;). O programa será escrito levando em conta o modelo de cargas elétricas: &lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\dot{v_i} = \ddot{x_i} = \frac{1}{m} \Big[ -\kappa y_{[i - N]} + (2i - N - 1)F \Big]&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A relação acima pode ser descrita de forma diferente se levarmos em conta que a simulação é simétrica em x e que todas as posições iniciais são positivas.&lt;br /&gt;
&lt;br /&gt;
A partícula que recebe índice &amp;lt;math&amp;gt;1&amp;lt;/math&amp;gt; possui &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; partículas à esquerda (x negativo) e &amp;lt;math&amp;gt;(N-1)&amp;lt;/math&amp;gt; partículas a direita (x positivo), o que resulta uma força de interação de &amp;lt;math&amp;gt;F&amp;lt;/math&amp;gt; para a direita. A de índice 2 terá força de interação &amp;lt;math&amp;gt;3F&amp;lt;/math&amp;gt;, a de índice 3 terá &amp;lt;math&amp;gt;5F&amp;lt;/math&amp;gt; e assim por diante.&lt;br /&gt;
&lt;br /&gt;
Antes de reescrever a equação da aceleração deve-se levar em consideração de uma das partículas distribuídas no espaço de fase assumirem coordenadas negativas (caso tenham proximidade da origem e velocidade negativa). Novamente usando o argumento de simetria, sabe-se que caso uma partícula assuma uma posição negativa, a partícula espelhada assumirá a posição simétrica em relação a origem. Dessa forma basta calcular a força de interação sobre a partícula espelhada e inverter o sinal para a partícula original. Levando tudo isso em conta teremos a seguinte equação da aceleração:  &lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\ddot{x_i} = \frac{1}{m}\Big[ -\kappa y_{[i - N]} + \frac{y_{[i - N]}}{|y_{[i - N]}|}(2i- 1)F     \Big]&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&#039;python&#039;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
def deriv(t, y):&lt;br /&gt;
&lt;br /&gt;
    p = len(y)&lt;br /&gt;
    k = indexador(y[0:int(p/2)])&lt;br /&gt;
    sinal=abs(y[0:int(p/2)])/y[0:int(p/2)]&lt;br /&gt;
    &lt;br /&gt;
    dydt = np.zeros(int(p))&lt;br /&gt;
&lt;br /&gt;
    dydt[0:int(p/2)] = y[int(p/2):int(p)] #definindo as derivadas temporais de posição&lt;br /&gt;
    &lt;br /&gt;
                                                         #definindo as derivadas temporais de velocidade&lt;br /&gt;
    dydt[int(p/2):int(p)] = -y[0:int(p/2)] + ((np.ones(int(p/2)) + 2*k )/(p))*sinal&lt;br /&gt;
    &lt;br /&gt;
    deriv = dydt[0:int(p)]&lt;br /&gt;
    &lt;br /&gt;
    return deriv&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Função de Energia do estado ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&#039;python&#039;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
def Energia_total(y):     # Para calcular a energia precisamos apenas do vetor de estado y do sistema de partículas utilizado&lt;br /&gt;
&lt;br /&gt;
    l = int(len(y)/2)     # a variável l representa a quantidade de valores que teremos &lt;br /&gt;
    pot = np.zeros(l+1)   # cria-se um array com l + 1 dimensões para representar as l partículas e os respectivos potenciais &lt;br /&gt;
&lt;br /&gt;
    r = abs(np.array(y[0:l]))       # cria-se um array r com as coordenadas de posição do estado y&lt;br /&gt;
    r = np.append(r,4)   # adiciona-se uma coordenada para representar o contorno externo do experimento&lt;br /&gt;
    r.sort()              # Faz-se o ordenamento desse array por distância da origem&lt;br /&gt;
    &lt;br /&gt;
    pot_0 = 0             # O potencial do contorno deve ser nulo &lt;br /&gt;
    &lt;br /&gt;
    for i in range(l,0,-1):     # Loop decrescente que define o potencial de posição para cada partícula &lt;br /&gt;
        &lt;br /&gt;
        pot[i] = pot_0&lt;br /&gt;
        &lt;br /&gt;
        pot_0 = pot_0 + (1/2)*(i/l)*abs((r[i] - r[i-1]))&lt;br /&gt;
        &lt;br /&gt;
    pot[0] = pot_0&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    v = np.array(y[l:-1])       # Cria-se um array com os valores de velocidade&lt;br /&gt;
    &lt;br /&gt;
    E_total = 0&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    for i in range(l-1):        #Soma-se as energias de cada partícula&lt;br /&gt;
&lt;br /&gt;
      E_total = E_total + pot[i] + 0.5*v[i]**2 + 0.5*r[i]**2&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    return 2*E_total, r[0:l+1], pot[0:l+1]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Evolução da Distribuição no Tempo ==&lt;br /&gt;
&lt;br /&gt;
Para simular a evolução temporal da distribuição inicial escolhida, precisamos de um método de integração numérica no tempo. O método escolhido deverá partir do estado da distribuição e da função de derivada temporal atribuída para estimar como a evolução ocorre.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&#039;python&#039;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
from scipy.integrate import solve_ivp  #integrador numérico escolhido&lt;br /&gt;
&lt;br /&gt;
def nova_fase(y,i):      #função que define a função do espaço de fase em cada instante de tempo, adaptada para o integrador numérico escolhido&lt;br /&gt;
    &lt;br /&gt;
    fase = np.array([])&lt;br /&gt;
    &lt;br /&gt;
    for j in range(len(y)):&lt;br /&gt;
            &lt;br /&gt;
        fase = np.append(fase,y[j][i])&lt;br /&gt;
        &lt;br /&gt;
    return fase&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Fase = []   # Cria uma lista para reservar a evolução do espaço de fase no tempo&lt;br /&gt;
T = np.array([])     # Cria uma lista que registra os tempos de marcação do integrador numérico&lt;br /&gt;
E = np.array([])     # Cria uma lista que registra a energia da distribuição no tempo&lt;br /&gt;
E_pot = []           # Cria uma lista que registra o comportamento da energia potencial ao longo de x no tempo&lt;br /&gt;
X_pot = []           # O análogo ao anterior para a posição&lt;br /&gt;
tempo = 0.0  # o tempo começa em 0&lt;br /&gt;
delta_t = 1   # o intervalo de tempo é 0.1&lt;br /&gt;
&lt;br /&gt;
X = np.random.rand(4000)&lt;br /&gt;
V = np.random.rand(4000) - np.ones(4000)*0.5&lt;br /&gt;
y = np.append(X,2*V)    #define-se a fase inicial&lt;br /&gt;
&lt;br /&gt;
for j in range(50):&lt;br /&gt;
&lt;br /&gt;
    sol = solve_ivp(deriv, (tempo,tempo + delta_t), y , rtol = 0.00001)     # integrador numérico realiza a integração&lt;br /&gt;
&lt;br /&gt;
    T= np.append(T, sol.t)&lt;br /&gt;
&lt;br /&gt;
    tempo = tempo + delta_t&lt;br /&gt;
    for i in range(len(sol.t)):       #o integrador possui um número de vetores intermediários ao vetor da solução final sol.y[-1]&lt;br /&gt;
        &lt;br /&gt;
        &lt;br /&gt;
        y = nova_fase(sol.y,i)                              # aqui são registradas as funções definidas para cada estado de integração&lt;br /&gt;
        Fase.append(y)&lt;br /&gt;
&lt;br /&gt;
        Ei =  Energia_total(y)&lt;br /&gt;
&lt;br /&gt;
        E = np.append(E, Ei[0])&lt;br /&gt;
&lt;br /&gt;
        E_pot.append(Ei[2])&lt;br /&gt;
        X_pot.append(Ei[1])&lt;br /&gt;
    &lt;br /&gt;
    y = nova_fase(sol.y, -1)                     # A distribuição atual é atualizada para nova integração &lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Animações ===&lt;br /&gt;
&lt;br /&gt;
Foi utilizado o código abaixo para gerar os gifs da evolução temporal&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&#039;python&#039;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
from matplotlib.animation import FuncAnimation&lt;br /&gt;
from IPython import display&lt;br /&gt;
&lt;br /&gt;
# código base para montar gifs da evolução temporal &lt;br /&gt;
fig, (ax1, ax2, ax3) = plt.subplots(3,1 ,figsize = (6,14))    #cria uma figura de três linhas&lt;br /&gt;
&lt;br /&gt;
lines = []                                                    #objeto padrão da biblioteca FuncAnimation&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def animate(frame):&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    # As entradas são limpas para evitar superposição de imagens nos frames&lt;br /&gt;
    ax1.cla()              &lt;br /&gt;
    ax2.cla()&lt;br /&gt;
    ax3.cla()&lt;br /&gt;
&lt;br /&gt;
    # Plot do espaço de fases&lt;br /&gt;
    ax1.scatter(Fase[frame][0:4000], Fase[frame][4000:8000], color = &#039;k&#039;, s  =5)&lt;br /&gt;
    ax1.scatter(-Fase[frame][0:4000], -Fase[frame][4000:8000], color = &#039;k&#039;, s = 5)&lt;br /&gt;
    ax1.set_xlabel(&#039;$posição$&#039;)&lt;br /&gt;
    ax1.set_ylabel(&#039;$velocidade$&#039;)&lt;br /&gt;
    ax1.set_xlim(-4,4)&lt;br /&gt;
    ax1.set_ylim(-2.5,2.5)   &lt;br /&gt;
&lt;br /&gt;
    # Plot da distribuição de Potencial&lt;br /&gt;
    ax2.plot(X_pot[frame],E_pot[frame], color = &#039;grey&#039;)&lt;br /&gt;
    ax2.plot(-np.flip(X_pot[frame]),np.flip(E_pot[frame]), color = &#039;grey&#039;)&lt;br /&gt;
    ax2.scatter(X_pot[frame],E_pot[frame], color = &#039;b&#039;, s  =5)&lt;br /&gt;
    ax2.scatter(-np.flip(X_pot[frame]),np.flip(E_pot[frame]), color = &#039;b&#039;, s  =5)&lt;br /&gt;
    ax2.set_ylabel(&amp;quot;potencial&amp;quot;)&lt;br /&gt;
    ax2.set_xlabel(&amp;quot;posição&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    # Plot da energia total no tempo&lt;br /&gt;
    ax3.plot(T[0:frame],E[0:frame], color = &#039;k&#039;)&lt;br /&gt;
    ax3.set_ylabel(&amp;quot;Energia&amp;quot;)&lt;br /&gt;
    ax3.set_xlabel(&amp;quot;tempo&amp;quot;)&lt;br /&gt;
    ax3.set_xlim(0, T[-1])&lt;br /&gt;
    ax3.set_ylim(E[0]- 10, E[0] + 10)&lt;br /&gt;
    &lt;br /&gt;
    return lines&lt;br /&gt;
&lt;br /&gt;
# Execução do programa e geração do gif inline   &lt;br /&gt;
anima = FuncAnimation(fig, animate,frames=len(T), interval=20, blit=True)&lt;br /&gt;
video = anima.to_html5_video()&lt;br /&gt;
html = display.HTML(video)&lt;br /&gt;
display.display(html)&lt;br /&gt;
&lt;br /&gt;
plt.close()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:Mom-pot-e.gif]]&lt;/div&gt;</summary>
		<author><name>Renanrs</name></author>
	</entry>
	<entry>
		<id>http://fiscomp.if.ufrgs.br/index.php?title=Din%C3%A2mica_Molecular_de_Part%C3%ADculas-Planares_Interagentes&amp;diff=6546</id>
		<title>Dinâmica Molecular de Partículas-Planares Interagentes</title>
		<link rel="alternate" type="text/html" href="http://fiscomp.if.ufrgs.br/index.php?title=Din%C3%A2mica_Molecular_de_Part%C3%ADculas-Planares_Interagentes&amp;diff=6546"/>
		<updated>2021-11-30T17:17:01Z</updated>

		<summary type="html">&lt;p&gt;Renanrs: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Grupo: Antônio Carlan, Gabriela Pereira, Renan Soares e Victor Gandara&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Objetivo:&#039;&#039;&#039; O trabalho tem como objetivo descrever a dinâmica molecular de um conjunto de partículas-planares infinitas paralelas. o modelo simplificado para estudar o comportamento de muitos corpos interagentes ao longo de um único eixo espacial é usado para feixes de partículas carregadas e também para sistemas autogravitantes. O estudo desse tipo de interação é importante para ter insights de sistemas de maior dimensionalidades.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= O modelo =&lt;br /&gt;
&lt;br /&gt;
É possível criar um modelo simplificado de interação de partículas imaginando que todas elas são compostas por planos de mesma massa e sem espessura, paralelos entre si e com liberdade de movimento relevante no eixo perpendicular às superfícies das mesmas.&lt;br /&gt;
&lt;br /&gt;
Tal modelo pode ser utilizado para estudar a dinâmica de um número elevado de partículas e conta com algumas particularidades simplificadoras de complexidade numérica. Alguns estudos utilizam esse modelo para estudar o comportamento de feixes carregados com a menor dimensionalidade possível [1] e também para sistemas auto-gravitantes [2]. As duas aplicações citadas serão as demonstradas a seguir mas o modelo é versátil para diferentes condições iniciais e de contorno.&lt;br /&gt;
&lt;br /&gt;
== Descrição do Modelo ==&lt;br /&gt;
&lt;br /&gt;
=== Disposição espacial ===&lt;br /&gt;
&lt;br /&gt;
Um número &amp;quot;N&amp;quot; de partículas-plano de mesma massa é disposto ao longo do eixo x com uma função de distribuição n(x) e com todas as partículas paralelas ao plano yz. No caso do modelo auto-gravitante, movimentos ao longo do eixo z não têm relevância prática mas para o modelo de um feixe de planos é definido que todos os planos se movem na direção z com mesma velocidade.&lt;br /&gt;
&lt;br /&gt;
A consideração de movimento ao longo do eixo z para o modelo de feixe é importante para a análise do comportamento do espaço de fases ao longo do comprimento do acelerador de partículas. Aqui, podemos imaginar estudar casos em que o feixe gerado inicialmente no espaço de fase terá um comportamento constante no tempo para cada secção transversal em xy para uma coordenada em z pré-estabelecida.&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:1paralelas.gif]] &lt;br /&gt;
&lt;br /&gt;
=== Ausência de Efeitos de Colisão ===&lt;br /&gt;
&lt;br /&gt;
O modelo leva em consideração que todas os planos possuem a mesma massa e que as colisões não levam a perda de energia no sistema.&lt;br /&gt;
&lt;br /&gt;
Dessa forma podemos prever o que ocorre quando a posição de dois planos coincide pois há conservação no momento linear em x e o coeficiente de restituição (razão entre as velocidades de afastamento e aproximação dos corpos) é igual a 1.&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:2diagrama.png]] &lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{cases} mv_1 - mv_2 = -mv_1&#039; + mv_2&#039;  \\ \\   \frac{v_1&#039; + v_2&#039;}{v_1 + v_2} = 1  \end{cases}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
O sistema de equações resulta em: &amp;lt;math&amp;gt;v_1&#039; = v_2 \ \ \ ; \ \ \ v_2&#039; = v_1&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dessa forma, é irrelevante ponderar se houve de fato uma colisão com troca de velocidades ou se as partículas simplesmente cruzam sem interferir de forma relevante. A última consideração é a levada em conta no ponto de vista computacional pois exclui a necessidade de atualizar a velocidade das partículas que passaram pela mesma posição no eixo x.&lt;br /&gt;
&lt;br /&gt;
=== Interação entre as partículas ===&lt;br /&gt;
&lt;br /&gt;
Para analisar a interação entre as partículas é preciso entender como uma única partícula afeta seu entorno.&lt;br /&gt;
&lt;br /&gt;
No caso das partículas-plano carregadas eletricamente podemos considerar os efeitos de campo elétrico de um isolante plano infinito:&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:3corpolivre.png]] &lt;br /&gt;
&lt;br /&gt;
Pela lei de Gauss, para uma dada distribuição de carga com densidade superficial &amp;lt;math&amp;gt;\sigma&amp;lt;/math&amp;gt;: &lt;br /&gt;
:&amp;lt;math&amp;gt; &lt;br /&gt;
\oint  \overrightarrow{E}. d\overrightarrow{S}  = \frac{Q_{int}}{\epsilon_0} &lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
E.A - (-E.A) = \frac{\sigma . A   }{\epsilon_0} &lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
E= \frac{\sigma }{2\epsilon_0}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
O mesmo pode ser feito para um plano com densidade de massa distribuída uniformemente, para o caso do sistema auto-gravitante, com mudança na constante física multiplicativa e no sinal.&lt;br /&gt;
&lt;br /&gt;
O fato importante a ser destacado aqui é a total independência do campo gerado pela partícula e a distância. Dessa forma, a interação entre as partículas em qualquer sistema que seguir esse modelo não terá dependência da distância entre elas e sim da posição relativa entre as partículas consideradas.&lt;br /&gt;
&lt;br /&gt;
=== Interferência externa do sistema ===&lt;br /&gt;
&lt;br /&gt;
Para o caso dos planos no sistema auto-gravitante não é necessária ação externa alguma para manter o equilíbrio em um sistema dinâmico estável. Sempre é levado em conta que todas as partículas têm velocidade em x inferior a velocidade de escape do restante do sistema e, por conta disso e das forças sempre atrativas de interação, o sistema não expande indefinidamente.&lt;br /&gt;
&lt;br /&gt;
Já no caso de planos carregados eletricamente as forças de interação entre os planos serão sempre repulsivas e a energia total do sistema é positiva. Sem uma interação externa, mesmo um sistema composto por um número limitado de partículas de fraca interação expandiria indefinidamente. Por causa disso, nesse caso é considerado que há uma força colimadora no feixe de planos proporcional a distância da origem. A origem dessa força externa vem de modelos de maior dimensionalidade de aceleradores de partícula que contam com um campo magnético externo capaz de colimar um feixe de cargas radialmente, por não existir um paralelo direto para o modelo unidimensional consideramos apenas uma força restauradora que impede a expansão indefinida do sistema como um todo. Também é possível ajustar condições de contorno simulando as paredes externas do acelerador como placas condutoras infinitas e com potencial definido. Esse tipo de consideração pode ser feita para sistemas que não são simétricos e impede que as cargas se afastem demasiadamente da origem.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:4graficoforça.png]]&lt;br /&gt;
&lt;br /&gt;
= Comportamento de uma Partícula no Sistema =&lt;br /&gt;
&lt;br /&gt;
Graças a caracterização das partículas temos que o campo gerado por uma partícula-plano pode ser caracterizado (para ambos os sistemas citados) da seguinte forma:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
E_i(x) = -\lambda\Theta[-(x-x_i)]  + \lambda\Theta(x-x_i)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:5perfilcampo.png]]&lt;br /&gt;
&lt;br /&gt;
Em que a constante &amp;lt;math&amp;gt;\lambda&amp;lt;/math&amp;gt; pode ser tanto positiva (cargas positivas) quanto negativa (cargas negativas ou interação gravitacional) e a função &amp;lt;math&amp;gt;\Theta&amp;lt;/math&amp;gt; equivale a função degrau de Heaviside:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\Theta(x) = \begin{cases} 0, \ \ x&amp;lt;0 \\ 1, \ \ x&amp;gt;0 \end{cases}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dessa forma, para exemplificação, um sistema de 5 partículas-plano teria uma interação da seguinte forma:&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:6forçaresultante.png]]&lt;br /&gt;
&lt;br /&gt;
Aqui, F seria a força de interação entre duas partículas no caso de planos carregados. É possível notar que a força de interação varia de duas unidades dessa constante para cada partícula contada em uma direção e que a força máxima sentida (pelas partículas-plano localizadas nas extremidades) é proporcional a &amp;lt;math&amp;gt;(N-1)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
É possível notar que para uma distribuição de partículas-plano do tipo:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt; &lt;br /&gt;
n(x) =   \sum_{i=1}^N \delta(x_i) &lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
com o índice  &amp;lt;math&amp;gt;\ \ &#039;&#039;i&#039;&#039;\ &amp;lt;/math&amp;gt; sendo a ordem da partícula contada do sentido negativo para o positivo do eixo x, teremos uma força resultante de interação para uma partícula que pode ser definida por &lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
F_i =  [-(N-1) + 2(i-1)]F&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt; &lt;br /&gt;
F_i = (2i - N-1)F&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Essa força é suficiente para manter o sistema auto-gravitante coeso mas para as partículas carregadas devemos adicionar a força restauradora descrita anteriormente:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
F^{grav.}_{R,i} = (2i - N-1)F&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
F^{el.}_{R,i} = (2i - N-1)F - \kappa x_i&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Conservação da Energia do Sistema =&lt;br /&gt;
&lt;br /&gt;
Ao realizar uma simulação numérica com um grande número de entes que representam um sistema físico é importante que seja feita uma verificação sobre o quão apropriados os resultados da simulação de fato são. Uma das formas mais comuns de verificar se uma simulação numérica está correta na dinâmica molecular de vários corpos e efetuar periodicamente a soma da energia do sistema.&lt;br /&gt;
&lt;br /&gt;
No caso de sistemas como os descritos, não há nenhum incremento de energia proveniente de uma fonte externa. Mesmo para o sistema eletricamente carregado, a força restauradora é potencial e não muda a energia total do sistema dada uma distribuição inicial de posição e momento.&lt;br /&gt;
&lt;br /&gt;
Para todos os efeitos, a energia dos sistemas estudados pode ser dividida em três partes: &lt;br /&gt;
&lt;br /&gt;
== Energia Cinética ==&lt;br /&gt;
&lt;br /&gt;
Todas as partículas da distribuição escolhida terão massa e velocidade, de forma que a energia cinética do sistema será dada por:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
En_{cin} = \frac{m}{2}\sum_{i=1}^N \dot{x_i}^2&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Energia Potencial Restauradora ==&lt;br /&gt;
&lt;br /&gt;
Observada no sistema eletricamente carregado citado, pode ser descrita como:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
En_{pot} = \frac{\kappa}{2}\sum_{i=1}^N x_i^2&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Energia Potencial Intrínseca  ==&lt;br /&gt;
&lt;br /&gt;
Energia contida na interação entre as partículas. A energia de uma partícula depende do potencial na sua posição da sua carga (ou massa).&lt;br /&gt;
&lt;br /&gt;
Como potenciais não são absolutos, é estabelecido um Potencial nulo de referência nas condições de contorno do sistema. Como pode ser visto no gif com as partículas-plano carregadas em azul, são colocadas placas condutoras planas nas posições &amp;lt;math&amp;gt;x=L&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;x= -L&amp;lt;/math&amp;gt; (caso haja simetria no espaço de fase do sistema) e é estabelecido que os potenciais nessas posições são &amp;lt;math&amp;gt;V(-L) = V(L) = 0&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Uma maneira mais simples de determinar o potencial das N partículas é considerar que há nas posições de contorno,  &amp;lt;math&amp;gt;x_0&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;x_{N+1}&amp;lt;/math&amp;gt;, partículas não interagentes.&lt;br /&gt;
&lt;br /&gt;
A diferença de potencial entre duas posições vizinhas pode ser determinada por:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\Delta V_i = (x_{i} - x_{i - 1})E_i&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
com &amp;lt;math&amp;gt;E_i&amp;lt;/math&amp;gt; sendo o módulo do campo entre a i-ésima e a (i - 1)-ésima partícula, dado por:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
E_i = (2i - N - 1)\lambda&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:7perfilcampoN4.png]]&lt;br /&gt;
&lt;br /&gt;
O que resulta na energia de uma partícula específica (k-ésima) descrita por:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
En_k = \alpha \sum_{i = 1}^{k}(x_i - x_{i - 1})(2i - N - 1)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aqui foram aglutinadas as possíveis constantes multiplicativas em uma constante &amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt; que pode ser escolhida para se adequar ao sistema estudado e a energia intrínseca do sistema é dada pela soma da energia de interação de cada uma das partículas. Como o sistema é dividido em intervalos com variação de potencial discretos, podemos escrever a energia intrínseca da seguinte forma:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
En_{int} = \alpha \sum_{k = 1}^{N}\sum_{i = 1}^{k}(x_i - x_{i - 1})(2i - N - 1)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A soma dessas três energias deve se manter constante (ou com pouca variação relativa significativa, pelo menos) durante a simulação:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
E_{total} = En_{cin} + En_{pot} + En_{int} = cte.&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Modelagem Computacional =&lt;br /&gt;
&lt;br /&gt;
== Criando a Distribuição do Sistema ==&lt;br /&gt;
&lt;br /&gt;
O primeiro passo para criar a simulação das N partículas é definir as coordenadas fundamentais das partículas em si (posição e velocidade).&lt;br /&gt;
&lt;br /&gt;
A simulação que será utilizada de exemplo é simétrica no espaço de fase, ou seja, para cada partícula com coordenadas &amp;lt;math&amp;gt;(x_i,y_i)&amp;lt;/math&amp;gt; existirá uma partícula espelhada &lt;br /&gt;
com coordenadas &amp;lt;math&amp;gt;(-x_i,-y_i)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Esse artifício é utilizado para que o centro de massa mantenha-se na origem e que o momento linear do sistema em x seja sempre nulo. Com isso é garantido que haverá sempre, também, a simetria par entre as energias das partículas espelhadas e a simetria ímpar entre as forças resultantes.&lt;br /&gt;
&lt;br /&gt;
Com isso garantido, basta fazer o cálculo numérico de uma metade da distribuição levando em conta a presença da outra metade, porém não tornando necessário que os cálculos sejam repetidos pois o comportamento de cada partícula espelhada torna-se perfeitamente previsível.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&#039;python&#039;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Importando as bibliotecas necessárias &lt;br /&gt;
from math import *&lt;br /&gt;
import matplotlib.pyplot as plt&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
A=[]     #criamos uma lista vazia&lt;br /&gt;
&lt;br /&gt;
N =  1000       # Determinamos o número de partículas utilizado&lt;br /&gt;
&lt;br /&gt;
for i in range(int(N)):&lt;br /&gt;
&lt;br /&gt;
    A.append([np.random.rand() ,2*(np.random.rand() - 1/2)]) #valores aleatórios de x entre 0 e 1 e de v entre -1 e 1 são adicionados&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A = np.array(A)&lt;br /&gt;
X= np.array([])     #Arrays usados para exemplificar&lt;br /&gt;
V= np.array([])     #distribuição inicial&lt;br /&gt;
&lt;br /&gt;
for i in range (len(A)):    #simetrização da distribuição&lt;br /&gt;
    X=np.append(X,A[i][0])&lt;br /&gt;
    V=np.append(V,A[i][1])&lt;br /&gt;
    V=np.append(V,-A[i][1])&lt;br /&gt;
    X=np.append(X,-A[i][0])&lt;br /&gt;
    &lt;br /&gt;
plt.xlabel(&#039;posição&#039;)             #plot da distribuição inicial&lt;br /&gt;
plt.ylabel(&#039;momento linear&#039;)&lt;br /&gt;
plt.title(&#039;Espaço de fase inicial&#039;)&lt;br /&gt;
plt.grid(True)&lt;br /&gt;
&lt;br /&gt;
plt.scatter(X,V)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:8espaçofaseinicial.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Função de Indexação ==&lt;br /&gt;
&lt;br /&gt;
Em outras modelagens como a interação de cargas em sistemas bidimensionais ou de massas em tridimensionais é necessário calcular a força de interação entre partículas em função das distâncias. Na modelagem proposta não é necessário calcular distâncias mas sim saber o ordenamento das partículas ao longo do eixo &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
No entanto, é muito comum em simulações que utilizam métodos de integração utilizar vetores que possuam apenas uma coluna e &amp;lt;math&amp;gt;2N&amp;lt;/math&amp;gt; linhas, sendo a primeira metade de linhas correspondentes às posições e a outra metade correspondente às velocidades.&lt;br /&gt;
&lt;br /&gt;
Para não precisar atualizar as linhas de posição e velocidade do vetor 2N-dimensional, utiliza-se uma função de indexação que será responsável por indicar qual é a ordem da partícula correspondente a uma determinada linha em um dado estado.&lt;br /&gt;
&lt;br /&gt;
Assim, a posição da partícula é atualizada no tempo e seu índice também, porém a posição dela no vetor de fase nunca se modifica. Esse fato é importante para estudos que pretendem analisar a trajetória de um único corpo no tempo, como é feito nos diagramas de Poincaré, por exemplo.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&#039;python&#039;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
teste = np.array([2,6,3,9,0,1,4])   #criado um vetor de teste  para que seus valores sejam indexados&lt;br /&gt;
&lt;br /&gt;
def indexador(arr):                 #define-se a função&lt;br /&gt;
    &lt;br /&gt;
    ordenador = []                  #é criada uma lista vazia&lt;br /&gt;
    &lt;br /&gt;
    for i in range(len(arr)):&lt;br /&gt;
        &lt;br /&gt;
        ordenador.append([abs(arr[i]),i]) # para cada valor criamos uma lista com o valor absoluto e a ordem atual&lt;br /&gt;
        &lt;br /&gt;
    ordenador.sort()                      # é feito o ordenamento da lista &#039;ordenador&#039; de acordo com o primeiro elemento&lt;br /&gt;
    &lt;br /&gt;
    for i in range(len(arr)):             &lt;br /&gt;
&lt;br /&gt;
        ordenador[i].append(i)            # é adicionado um terceiro valor para cada elemento de ordenador com o valor da sua nova ordem na sequência&lt;br /&gt;
        &lt;br /&gt;
    for i in range(len(arr)):&lt;br /&gt;
        &lt;br /&gt;
        a = ordenador[i][0]&lt;br /&gt;
        b = ordenador[i][1]             # É feita a troca do segundo com o primeiro valor de cada elemento de ordenador para...&lt;br /&gt;
        ordenador[i][0] = b&lt;br /&gt;
        ordenador[i][1] = a&lt;br /&gt;
        &lt;br /&gt;
    ordenador.sort()                    # reordenar os elementos de acordo com a ordem antiga&lt;br /&gt;
        &lt;br /&gt;
        &lt;br /&gt;
    lista = []&lt;br /&gt;
    &lt;br /&gt;
    for i in range(len(arr)):&lt;br /&gt;
        &lt;br /&gt;
        lista.append(ordenador[i][2])   #por fim guarda-se a ordem correspondente a cada valor da lista colocada como variável &lt;br /&gt;
        &lt;br /&gt;
    indexador = np.array(lista)  &lt;br /&gt;
        &lt;br /&gt;
    return indexador                     # e essa ordem é retornada como saída da função&lt;br /&gt;
&lt;br /&gt;
print(indexador(teste))&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Função de movimento e aceleração das partículas ==&lt;br /&gt;
&lt;br /&gt;
Para simular como um estado evolui no tempo, é necessário que tenhamos as derivadas temporais de todas as coordenadas do vetor de estado (&amp;lt;math&amp;gt;y&amp;lt;/math&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Para as coordenadas espaciais x (&amp;lt;math&amp;gt;y[i], \ 0\leq i&amp;lt; N &amp;lt;/math&amp;gt;) temos que:  &lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\dot{x_i} = y_{[i + N]} &lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Para as coordenadas de velocidade v (&amp;lt;math&amp;gt;y[i], \ N\leq i&amp;lt; 2N-1 &amp;lt;/math&amp;gt;) teremos que usar a relação de forças que foi descrita no modelo. Algumas simplificações comuns serão feitas como considerar constantes físicas unitárias (&amp;lt;math&amp;gt;m = q = \kappa = 1&amp;lt;/math&amp;gt;) e relações de proporcionalidade com o número de partículas do sistema para mantê-lo com um comportamento mais suave (&amp;lt;math&amp;gt;F = 1/N&amp;lt;/math&amp;gt;). O programa será escrito levando em conta o modelo de cargas elétricas: &lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\dot{v_i} = \ddot{x_i} = \frac{1}{m} \Big[ -\kappa y_{[i - N]} + (2i - N - 1)F \Big]&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A relação acima pode ser descrita de forma diferente se levarmos em conta que a simulação é simétrica em x e que todas as posições iniciais são positivas.&lt;br /&gt;
&lt;br /&gt;
A partícula que recebe índice &amp;lt;math&amp;gt;1&amp;lt;/math&amp;gt; possui &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; partículas à esquerda (x negativo) e &amp;lt;math&amp;gt;(N-1)&amp;lt;/math&amp;gt; partículas a direita (x positivo), o que resulta uma força de interação de &amp;lt;math&amp;gt;F&amp;lt;/math&amp;gt; para a direita. A de índice 2 terá força de interação &amp;lt;math&amp;gt;3F&amp;lt;/math&amp;gt;, a de índice 3 terá &amp;lt;math&amp;gt;5F&amp;lt;/math&amp;gt; e assim por diante.&lt;br /&gt;
&lt;br /&gt;
Antes de reescrever a equação da aceleração deve-se levar em consideração de uma das partículas distribuídas no espaço de fase assumirem coordenadas negativas (caso tenham proximidade da origem e velocidade negativa). Novamente usando o argumento de simetria, sabe-se que caso uma partícula assuma uma posição negativa, a partícula espelhada assumirá a posição simétrica em relação a origem. Dessa forma basta calcular a força de interação sobre a partícula espelhada e inverter o sinal para a partícula original. Levando tudo isso em conta teremos a seguinte equação da aceleração:  &lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\ddot{x_i} = \frac{1}{m}\Big[ -\kappa y_{[i - N]} + \frac{y_{[i - N]}}{|y_{[i - N]}|}(2i- 1)F     \Big]&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&#039;python&#039;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
def deriv(t, y):&lt;br /&gt;
&lt;br /&gt;
    p = len(y)&lt;br /&gt;
    k = indexador(y[0:int(p/2)])&lt;br /&gt;
    sinal=abs(y[0:int(p/2)])/y[0:int(p/2)]&lt;br /&gt;
    &lt;br /&gt;
    dydt = np.zeros(int(p))&lt;br /&gt;
&lt;br /&gt;
    dydt[0:int(p/2)] = y[int(p/2):int(p)] #definindo as derivadas temporais de posição&lt;br /&gt;
    &lt;br /&gt;
                                                         #definindo as derivadas temporais de velocidade&lt;br /&gt;
    dydt[int(p/2):int(p)] = -y[0:int(p/2)] + ((np.ones(int(p/2)) + 2*k )/(p))*sinal&lt;br /&gt;
    &lt;br /&gt;
    deriv = dydt[0:int(p)]&lt;br /&gt;
    &lt;br /&gt;
    return deriv&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Função de Energia do estado ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&#039;python&#039;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
def Energia_total(y):     # Para calcular a energia precisamos apenas do vetor de estado y do sistema de partículas utilizado&lt;br /&gt;
&lt;br /&gt;
    l = int(len(y)/2)     # a variável l representa a quantidade de valores que teremos &lt;br /&gt;
    pot = np.zeros(l+1)   # cria-se um array com l + 1 dimensões para representar as l partículas e os respectivos potenciais &lt;br /&gt;
&lt;br /&gt;
    r = abs(np.array(y[0:l]))       # cria-se um array r com as coordenadas de posição do estado y&lt;br /&gt;
    r = np.append(r,4)   # adiciona-se uma coordenada para representar o contorno externo do experimento&lt;br /&gt;
    r.sort()              # Faz-se o ordenamento desse array por distância da origem&lt;br /&gt;
    &lt;br /&gt;
    pot_0 = 0             # O potencial do contorno deve ser nulo &lt;br /&gt;
    &lt;br /&gt;
    for i in range(l,0,-1):     # Loop decrescente que define o potencial de posição para cada partícula &lt;br /&gt;
        &lt;br /&gt;
        pot[i] = pot_0&lt;br /&gt;
        &lt;br /&gt;
        pot_0 = pot_0 + (1/2)*(i/l)*abs((r[i] - r[i-1]))&lt;br /&gt;
        &lt;br /&gt;
    pot[0] = pot_0&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    v = np.array(y[l:-1])       # Cria-se um array com os valores de velocidade&lt;br /&gt;
    &lt;br /&gt;
    E_total = 0&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    for i in range(l-1):        #Soma-se as energias de cada partícula&lt;br /&gt;
&lt;br /&gt;
      E_total = E_total + pot[i] + 0.5*v[i]**2 + 0.5*r[i]**2&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    return 2*E_total, r[0:l+1], pot[0:l+1]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Evolução da Distribuição no Tempo ==&lt;br /&gt;
&lt;br /&gt;
Para simular a evolução temporal da distribuição inicial escolhida, precisamos de um método de integração numérica no tempo. O método escolhido deverá partir do estado da distribuição e da função de derivada temporal atribuída para estimar como a evolução ocorre.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&#039;python&#039;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
from scipy.integrate import solve_ivp  #integrador numérico escolhido&lt;br /&gt;
&lt;br /&gt;
def nova_fase(y,i):      #função que define a função do espaço de fase em cada instante de tempo, adaptada para o integrador numérico escolhido&lt;br /&gt;
    &lt;br /&gt;
    fase = np.array([])&lt;br /&gt;
    &lt;br /&gt;
    for j in range(len(y)):&lt;br /&gt;
            &lt;br /&gt;
        fase = np.append(fase,y[j][i])&lt;br /&gt;
        &lt;br /&gt;
    return fase&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Fase = []   # Cria uma lista para reservar a evolução do espaço de fase no tempo&lt;br /&gt;
T = np.array([])     # Cria uma lista que registra os tempos de marcação do integrador numérico&lt;br /&gt;
E = np.array([])     # Cria uma lista que registra a energia da distribuição no tempo&lt;br /&gt;
E_pot = []           # Cria uma lista que registra o comportamento da energia potencial ao longo de x no tempo&lt;br /&gt;
X_pot = []           # O análogo ao anterior para a posição&lt;br /&gt;
tempo = 0.0  # o tempo começa em 0&lt;br /&gt;
delta_t = 1   # o intervalo de tempo é 0.1&lt;br /&gt;
&lt;br /&gt;
X = np.random.rand(4000)&lt;br /&gt;
V = np.random.rand(4000) - np.ones(4000)*0.5&lt;br /&gt;
y = np.append(X,2*V)    #define-se a fase inicial&lt;br /&gt;
&lt;br /&gt;
for j in range(50):&lt;br /&gt;
&lt;br /&gt;
    sol = solve_ivp(deriv, (tempo,tempo + delta_t), y , rtol = 0.00001)     # integrador numérico realiza a integração&lt;br /&gt;
&lt;br /&gt;
    T= np.append(T, sol.t)&lt;br /&gt;
&lt;br /&gt;
    tempo = tempo + delta_t&lt;br /&gt;
    for i in range(len(sol.t)):       #o integrador possui um número de vetores intermediários ao vetor da solução final sol.y[-1]&lt;br /&gt;
        &lt;br /&gt;
        &lt;br /&gt;
        y = nova_fase(sol.y,i)                              # aqui são registradas as funções definidas para cada estado de integração&lt;br /&gt;
        Fase.append(y)&lt;br /&gt;
&lt;br /&gt;
        Ei =  Energia_total(y)&lt;br /&gt;
&lt;br /&gt;
        E = np.append(E, Ei[0])&lt;br /&gt;
&lt;br /&gt;
        E_pot.append(Ei[2])&lt;br /&gt;
        X_pot.append(Ei[1])&lt;br /&gt;
    &lt;br /&gt;
    y = nova_fase(sol.y, -1)                     # A distribuição atual é atualizada para nova integração &lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Animações ===&lt;br /&gt;
&lt;br /&gt;
Foi utilizado o código abaixo para gerar os gifs da evolução temporal&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&#039;python&#039;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
from matplotlib.animation import FuncAnimation&lt;br /&gt;
from IPython import display&lt;br /&gt;
&lt;br /&gt;
# código base para montar gifs da evolução temporal &lt;br /&gt;
fig, (ax1, ax2, ax3) = plt.subplots(3,1 ,figsize = (6,14))    #cria uma figura de três linhas&lt;br /&gt;
&lt;br /&gt;
lines = []                                                    #objeto padrão da biblioteca FuncAnimation&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def animate(frame):&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    # As entradas são limpas para evitar superposição de imagens nos frames&lt;br /&gt;
    ax1.cla()              &lt;br /&gt;
    ax2.cla()&lt;br /&gt;
    ax3.cla()&lt;br /&gt;
&lt;br /&gt;
    # Plot do espaço de fases&lt;br /&gt;
    ax1.scatter(Fase[frame][0:4000], Fase[frame][4000:8000], color = &#039;k&#039;, s  =5)&lt;br /&gt;
    ax1.scatter(-Fase[frame][0:4000], -Fase[frame][4000:8000], color = &#039;k&#039;, s = 5)&lt;br /&gt;
    ax1.set_xlabel(&#039;$posição$&#039;)&lt;br /&gt;
    ax1.set_ylabel(&#039;$velocidade$&#039;)&lt;br /&gt;
    ax1.set_xlim(-4,4)&lt;br /&gt;
    ax1.set_ylim(-2.5,2.5)   &lt;br /&gt;
&lt;br /&gt;
    # Plot da distribuição de Potencial&lt;br /&gt;
    ax2.plot(X_pot[frame],E_pot[frame], color = &#039;grey&#039;)&lt;br /&gt;
    ax2.plot(-np.flip(X_pot[frame]),np.flip(E_pot[frame]), color = &#039;grey&#039;)&lt;br /&gt;
    ax2.scatter(X_pot[frame],E_pot[frame], color = &#039;b&#039;, s  =5)&lt;br /&gt;
    ax2.scatter(-np.flip(X_pot[frame]),np.flip(E_pot[frame]), color = &#039;b&#039;, s  =5)&lt;br /&gt;
    ax2.set_ylabel(&amp;quot;potencial&amp;quot;)&lt;br /&gt;
    ax2.set_xlabel(&amp;quot;posição&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    # Plot da energia total no tempo&lt;br /&gt;
    ax3.plot(T[0:frame],E[0:frame], color = &#039;k&#039;)&lt;br /&gt;
    ax3.set_ylabel(&amp;quot;Energia&amp;quot;)&lt;br /&gt;
    ax3.set_xlabel(&amp;quot;tempo&amp;quot;)&lt;br /&gt;
    ax3.set_xlim(0, T[-1])&lt;br /&gt;
    ax3.set_ylim(E[0]- 10, E[0] + 10)&lt;br /&gt;
    &lt;br /&gt;
    return lines&lt;br /&gt;
&lt;br /&gt;
# Execução do programa e geração do gif inline   &lt;br /&gt;
anima = FuncAnimation(fig, animate,frames=len(T), interval=20, blit=True)&lt;br /&gt;
video = anima.to_html5_video()&lt;br /&gt;
html = display.HTML(video)&lt;br /&gt;
display.display(html)&lt;br /&gt;
&lt;br /&gt;
plt.close()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:Mom-pot-e.gif]]&lt;/div&gt;</summary>
		<author><name>Renanrs</name></author>
	</entry>
	<entry>
		<id>http://fiscomp.if.ufrgs.br/index.php?title=Arquivo:Mom-pot-e.gif&amp;diff=6531</id>
		<title>Arquivo:Mom-pot-e.gif</title>
		<link rel="alternate" type="text/html" href="http://fiscomp.if.ufrgs.br/index.php?title=Arquivo:Mom-pot-e.gif&amp;diff=6531"/>
		<updated>2021-11-29T16:11:30Z</updated>

		<summary type="html">&lt;p&gt;Renanrs: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Renanrs</name></author>
	</entry>
	<entry>
		<id>http://fiscomp.if.ufrgs.br/index.php?title=Din%C3%A2mica_Molecular_de_Part%C3%ADculas-Planares_Interagentes&amp;diff=6530</id>
		<title>Dinâmica Molecular de Partículas-Planares Interagentes</title>
		<link rel="alternate" type="text/html" href="http://fiscomp.if.ufrgs.br/index.php?title=Din%C3%A2mica_Molecular_de_Part%C3%ADculas-Planares_Interagentes&amp;diff=6530"/>
		<updated>2021-11-29T16:03:38Z</updated>

		<summary type="html">&lt;p&gt;Renanrs: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
Em construção&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Grupo: Antônio Carlan, Gabriela Pereira, Renan Soares e Victor Gandara&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Objetivo:&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= O modelo =&lt;br /&gt;
&lt;br /&gt;
É possível criar um modelo simplificado de interação de partículas imaginando que todas elas são compostas por planos de mesma massa e sem espessura, paralelos entre si e com liberdade de movimento relevante no eixo perpendicular às superfícies das mesmas.&lt;br /&gt;
&lt;br /&gt;
Tal modelo pode ser utilizado para estudar a dinâmica de um número elevado de partículas e conta com algumas particularidades simplificadoras de complexidade numérica. Alguns estudos utilizam esse modelo para estudar o comportamento de feixes carregados com a menor dimensionalidade possível [1] e também para sistemas auto-gravitantes [2]. As duas aplicações citadas serão as demonstradas a seguir mas o modelo é versátil para diferentes condições iniciais e de contorno.&lt;br /&gt;
&lt;br /&gt;
== Descrição do Modelo ==&lt;br /&gt;
&lt;br /&gt;
=== Disposição espacial ===&lt;br /&gt;
&lt;br /&gt;
Um número &amp;quot;N&amp;quot; de partículas-plano de mesma massa é disposto ao longo do eixo x com uma função de distribuição n(x) e com todas as partículas paralelas ao plano yz. No caso do modelo auto-gravitante, movimentos ao longo do eixo z não têm relevância prática mas para o modelo de um feixe de planos é definido que todos os planos se movem na direção z com mesma velocidade.&lt;br /&gt;
&lt;br /&gt;
A consideração de movimento ao longo do eixo z para o modelo de feixe é importante para a análise do comportamento do espaço de fases ao longo do comprimento do acelerador de partículas. Aqui, podemos imaginar estudar casos em que o feixe gerado inicialmente no espaço de fase terá um comportamento constante no tempo para cada secção transversal em xy para uma coordenada em z pré-estabelecida.&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:1paralelas.gif]] &lt;br /&gt;
&lt;br /&gt;
=== Ausência de Efeitos de Colisão ===&lt;br /&gt;
&lt;br /&gt;
O modelo leva em consideração que todas os planos possuem a mesma massa e que as colisões não levam a perda de energia no sistema.&lt;br /&gt;
&lt;br /&gt;
Dessa forma podemos prever o que ocorre quando a posição de dois planos coincide pois há conservação no momento linear em x e o coeficiente de restituição (razão entre as velocidades de afastamento e aproximação dos corpos) é igual a 1.&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:2diagrama.png]] &lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{cases} mv_1 - mv_2 = -mv_1&#039; + mv_2&#039;  \\ \\   \frac{v_1&#039; + v_2&#039;}{v_1 + v_2} = 1  \end{cases}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
O sistema de equações resulta em: &amp;lt;math&amp;gt;v_1&#039; = v_2 \ \ \ ; \ \ \ v_2&#039; = v_1&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dessa forma, é irrelevante ponderar se houve de fato uma colisão com troca de velocidades ou se as partículas simplesmente cruzam sem interferir de forma relevante. A última consideração é a levada em conta no ponto de vista computacional pois exclui a necessidade de atualizar a velocidade das partículas que passaram pela mesma posição no eixo x.&lt;br /&gt;
&lt;br /&gt;
=== Interação entre as partículas ===&lt;br /&gt;
&lt;br /&gt;
Para analisar a interação entre as partículas é preciso entender como uma única partícula afeta seu entorno.&lt;br /&gt;
&lt;br /&gt;
No caso das partículas-plano carregadas eletricamente podemos considerar os efeitos de campo elétrico de um isolante plano infinito:&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:3corpolivre.png]] &lt;br /&gt;
&lt;br /&gt;
Pela lei de Gauss, para uma dada distribuição de carga com densidade superficial &amp;lt;math&amp;gt;\sigma&amp;lt;/math&amp;gt;: &lt;br /&gt;
:&amp;lt;math&amp;gt; &lt;br /&gt;
\oint  \overrightarrow{E}. d\overrightarrow{S}  = \frac{Q_{int}}{\epsilon_0} &lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
E.A - (-E.A) = \frac{\sigma . A   }{\epsilon_0} &lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
E= \frac{\sigma }{2\epsilon_0}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
O mesmo pode ser feito para um plano com densidade de massa distribuída uniformemente, para o caso do sistema auto-gravitante, com mudança na constante física multiplicativa e no sinal.&lt;br /&gt;
&lt;br /&gt;
O fato importante a ser destacado aqui é a total independência do campo gerado pela partícula e a distância. Dessa forma, a interação entre as partículas em qualquer sistema que seguir esse modelo não terá dependência da distância entre elas e sim da posição relativa entre as partículas consideradas.&lt;br /&gt;
&lt;br /&gt;
=== Interferência externa do sistema ===&lt;br /&gt;
&lt;br /&gt;
Para o caso dos planos no sistema auto-gravitante não é necessária ação externa alguma para manter o equilíbrio em um sistema dinâmico estável. Sempre é levado em conta que todas as partículas têm velocidade em x inferior a velocidade de escape do restante do sistema e, por conta disso e das forças sempre atrativas de interação, o sistema não expande indefinidamente.&lt;br /&gt;
&lt;br /&gt;
Já no caso de planos carregados eletricamente as forças de interação entre os planos serão sempre repulsivas e a energia total do sistema é positiva. Sem uma interação externa, mesmo um sistema composto por um número limitado de partículas de fraca interação expandiria indefinidamente. Por causa disso, nesse caso é considerado que há uma força colimadora no feixe de planos proporcional a distância da origem. A origem dessa força externa vem de modelos de maior dimensionalidade de aceleradores de partícula que contam com um campo magnético externo capaz de colimar um feixe de cargas radialmente, por não existir um paralelo direto para o modelo unidimensional consideramos apenas uma força restauradora que impede a expansão indefinida do sistema como um todo. Também é possível ajustar condições de contorno simulando as paredes externas do acelerador como placas condutoras infinitas e com potencial definido. Esse tipo de consideração pode ser feita para sistemas que não são simétricos e impede que as cargas se afastem demasiadamente da origem.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:4graficoforça.png]]&lt;br /&gt;
&lt;br /&gt;
= Comportamento de uma Partícula no Sistema =&lt;br /&gt;
&lt;br /&gt;
Graças a caracterização das partículas temos que o campo gerado por uma partícula-plano pode ser caracterizado (para ambos os sistemas citados) da seguinte forma:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
E_i(x) = -\lambda\Theta[-(x-x_i)]  + \lambda\Theta(x-x_i)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:5perfilcampo.png]]&lt;br /&gt;
&lt;br /&gt;
Em que a constante &amp;lt;math&amp;gt;\lambda&amp;lt;/math&amp;gt; pode ser tanto positiva (cargas positivas) quanto negativa (cargas negativas ou interação gravitacional) e a função &amp;lt;math&amp;gt;\Theta&amp;lt;/math&amp;gt; equivale a função degrau de Heaviside:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\Theta(x) = \begin{cases} 0, \ \ x&amp;lt;0 \\ 1, \ \ x&amp;gt;0 \end{cases}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dessa forma, para exemplificação, um sistema de 5 partículas-plano teria uma interação da seguinte forma:&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:6forçaresultante.png]]&lt;br /&gt;
&lt;br /&gt;
Aqui, F seria a força de interação entre duas partículas no caso de planos carregados. É possível notar que a força de interação varia de duas unidades dessa constante para cada partícula contada em uma direção e que a força máxima sentida (pelas partículas-plano localizadas nas extremidades) é proporcional a &amp;lt;math&amp;gt;(N-1)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
É possível notar que para uma distribuição de partículas-plano do tipo:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt; &lt;br /&gt;
n(x) =   \sum_{i=1}^N \delta(x_i) &lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
com o índice  &amp;lt;math&amp;gt;\ \ &#039;&#039;i&#039;&#039;\ &amp;lt;/math&amp;gt; sendo a ordem da partícula contada do sentido negativo para o positivo do eixo x, teremos uma força resultante de interação para uma partícula que pode ser definida por &lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
F_i =  [-(N-1) + 2(i-1)]F&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt; &lt;br /&gt;
F_i = (2i - N-1)F&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Essa força é suficiente para manter o sistema auto-gravitante coeso mas para as partículas carregadas devemos adicionar a força restauradora descrita anteriormente:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
F^{grav.}_{R,i} = (2i - N-1)F&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
F^{el.}_{R,i} = (2i - N-1)F - \kappa x_i&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Conservação da Energia do Sistema =&lt;br /&gt;
&lt;br /&gt;
Ao realizar uma simulação numérica com um grande número de entes que representam um sistema físico é importante que seja feita uma verificação sobre o quão apropriados os resultados da simulação de fato são. Uma das formas mais comuns de verificar se uma simulação numérica está correta na dinâmica molecular de vários corpos e efetuar periodicamente a soma da energia do sistema.&lt;br /&gt;
&lt;br /&gt;
No caso de sistemas como os descritos, não há nenhum incremento de energia proveniente de uma fonte externa. Mesmo para o sistema eletricamente carregado, a força restauradora é potencial e não muda a energia total do sistema dada uma distribuição inicial de posição e momento.&lt;br /&gt;
&lt;br /&gt;
Para todos os efeitos, a energia dos sistemas estudados pode ser dividida em três partes: &lt;br /&gt;
&lt;br /&gt;
== Energia Cinética ==&lt;br /&gt;
&lt;br /&gt;
Todas as partículas da distribuição escolhida terão massa e velocidade, de forma que a energia cinética do sistema será dada por:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
En_{cin} = \frac{m}{2}\sum_{i=1}^N \dot{x_i}^2&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Energia Potencial Restauradora ==&lt;br /&gt;
&lt;br /&gt;
Observada no sistema eletricamente carregado citado, pode ser descrita como:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
En_{pot} = \frac{\kappa}{2}\sum_{i=1}^N x_i^2&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Energia Potencial Intrínseca  ==&lt;br /&gt;
&lt;br /&gt;
Energia contida na interação entre as partículas. A energia de uma partícula depende do potencial na sua posição da sua carga (ou massa).&lt;br /&gt;
&lt;br /&gt;
Como potenciais não são absolutos, é estabelecido um Potencial nulo de referência nas condições de contorno do sistema. Como pode ser visto no gif com as partículas-plano carregadas em azul, são colocadas placas condutoras planas nas posições &amp;lt;math&amp;gt;x=L&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;x= -L&amp;lt;/math&amp;gt; (caso haja simetria no espaço de fase do sistema) e é estabelecido que os potenciais nessas posições são &amp;lt;math&amp;gt;V(-L) = V(L) = 0&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Uma maneira mais simples de determinar o potencial das N partículas é considerar que há nas posições de contorno,  &amp;lt;math&amp;gt;x_0&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;x_{N+1}&amp;lt;/math&amp;gt;, partículas não interagentes.&lt;br /&gt;
&lt;br /&gt;
A diferença de potencial entre duas posições vizinhas pode ser determinada por:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\Delta V_i = (x_{i} - x_{i - 1})E_i&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
com &amp;lt;math&amp;gt;E_i&amp;lt;/math&amp;gt; sendo o módulo do campo entre a i-ésima e a (i - 1)-ésima partícula, dado por:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
E_i = (2i - N - 1)\lambda&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:7perfilcampoN4.png]]&lt;br /&gt;
&lt;br /&gt;
O que resulta na energia de uma partícula específica (k-ésima) descrita por:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
En_k = \alpha \sum_{i = 1}^{k}(x_i - x_{i - 1})(2i - N - 1)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aqui foram aglutinadas as possíveis constantes multiplicativas em uma constante &amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt; que pode ser escolhida para se adequar ao sistema estudado e a energia intrínseca do sistema é dada pela soma da energia de interação de cada uma das partículas. Como o sistema é dividido em intervalos com variação de potencial discretos, podemos escrever a energia intrínseca da seguinte forma:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
En_{int} = \alpha \sum_{k = 1}^{N}\sum_{i = 1}^{k}(x_i - x_{i - 1})(2i - N - 1)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A soma dessas três energias deve se manter constante (ou com pouca variação relativa significativa, pelo menos) durante a simulação:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
E_{total} = En_{cin} + En_{pot} + En_{int} = cte.&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Modelagem Computacional =&lt;br /&gt;
&lt;br /&gt;
== Criando a Distribuição do Sistema ==&lt;br /&gt;
&lt;br /&gt;
O primeiro passo para criar a simulação das N partículas é definir as coordenadas fundamentais das partículas em si (posição e velocidade).&lt;br /&gt;
&lt;br /&gt;
A simulação que será utilizada de exemplo é simétrica no espaço de fase, ou seja, para cada partícula com coordenadas &amp;lt;math&amp;gt;(x_i,y_i)&amp;lt;/math&amp;gt; existirá uma partícula espelhada &lt;br /&gt;
com coordenadas &amp;lt;math&amp;gt;(-x_i,-y_i)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Esse artifício é utilizado para que o centro de massa mantenha-se na origem e que o momento linear do sistema em x seja sempre nulo. Com isso é garantido que haverá sempre, também, a simetria par entre as energias das partículas espelhadas e a simetria ímpar entre as forças resultantes.&lt;br /&gt;
&lt;br /&gt;
Com isso garantido, basta fazer o cálculo numérico de uma metade da distribuição levando em conta a presença da outra metade, porém não tornando necessário que os cálculos sejam repetidos pois o comportamento de cada partícula espelhada torna-se perfeitamente previsível.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&#039;python&#039;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Importando as bibliotecas necessárias &lt;br /&gt;
from math import *&lt;br /&gt;
import matplotlib.pyplot as plt&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
A=[]     #criamos uma lista vazia&lt;br /&gt;
&lt;br /&gt;
N =  1000       # Determinamos o número de partículas utilizado&lt;br /&gt;
&lt;br /&gt;
for i in range(int(N)):&lt;br /&gt;
&lt;br /&gt;
    A.append([np.random.rand() ,2*(np.random.rand() - 1/2)]) #valores aleatórios de x entre 0 e 1 e de v entre -1 e 1 são adicionados&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A = np.array(A)&lt;br /&gt;
X= np.array([])     #Arrays usados para exemplificar&lt;br /&gt;
V= np.array([])     #distribuição inicial&lt;br /&gt;
&lt;br /&gt;
for i in range (len(A)):    #simetrização da distribuição&lt;br /&gt;
    X=np.append(X,A[i][0])&lt;br /&gt;
    V=np.append(V,A[i][1])&lt;br /&gt;
    V=np.append(V,-A[i][1])&lt;br /&gt;
    X=np.append(X,-A[i][0])&lt;br /&gt;
    &lt;br /&gt;
plt.xlabel(&#039;posição&#039;)             #plot da distribuição inicial&lt;br /&gt;
plt.ylabel(&#039;momento linear&#039;)&lt;br /&gt;
plt.title(&#039;Espaço de fase inicial&#039;)&lt;br /&gt;
plt.grid(True)&lt;br /&gt;
&lt;br /&gt;
plt.scatter(X,V)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:8espaçofaseinicial.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Função de Indexação ==&lt;br /&gt;
&lt;br /&gt;
Em outras modelagens como a interação de cargas em sistemas bidimensionais ou de massas em tridimensionais é necessário calcular a força de interação entre partículas em função das distâncias. Na modelagem proposta não é necessário calcular distâncias mas sim saber o ordenamento das partículas ao longo do eixo &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
No entanto, é muito comum em simulações que utilizam métodos de integração utilizar vetores que possuam apenas uma coluna e &amp;lt;math&amp;gt;2N&amp;lt;/math&amp;gt; linhas, sendo a primeira metade de linhas correspondentes às posições e a outra metade correspondente às velocidades.&lt;br /&gt;
&lt;br /&gt;
Para não precisar atualizar as linhas de posição e velocidade do vetor 2N-dimensional, utiliza-se uma função de indexação que será responsável por indicar qual é a ordem da partícula correspondente a uma determinada linha em um dado estado.&lt;br /&gt;
&lt;br /&gt;
Assim, a posição da partícula é atualizada no tempo e seu índice também, porém a posição dela no vetor de fase nunca se modifica. Esse fato é importante para estudos que pretendem analisar a trajetória de um único corpo no tempo, como é feito nos diagramas de Poincaré, por exemplo.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&#039;python&#039;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
teste = np.array([2,6,3,9,0,1,4])   #criado um vetor de teste  para que seus valores sejam indexados&lt;br /&gt;
&lt;br /&gt;
def indexador(arr):                 #define-se a função&lt;br /&gt;
    &lt;br /&gt;
    ordenador = []                  #é criada uma lista vazia&lt;br /&gt;
    &lt;br /&gt;
    for i in range(len(arr)):&lt;br /&gt;
        &lt;br /&gt;
        ordenador.append([abs(arr[i]),i]) # para cada valor criamos uma lista com o valor absoluto e a ordem atual&lt;br /&gt;
        &lt;br /&gt;
    ordenador.sort()                      # é feito o ordenamento da lista &#039;ordenador&#039; de acordo com o primeiro elemento&lt;br /&gt;
    &lt;br /&gt;
    for i in range(len(arr)):             &lt;br /&gt;
&lt;br /&gt;
        ordenador[i].append(i)            # é adicionado um terceiro valor para cada elemento de ordenador com o valor da sua nova ordem na sequência&lt;br /&gt;
        &lt;br /&gt;
    for i in range(len(arr)):&lt;br /&gt;
        &lt;br /&gt;
        a = ordenador[i][0]&lt;br /&gt;
        b = ordenador[i][1]             # É feita a troca do segundo com o primeiro valor de cada elemento de ordenador para...&lt;br /&gt;
        ordenador[i][0] = b&lt;br /&gt;
        ordenador[i][1] = a&lt;br /&gt;
        &lt;br /&gt;
    ordenador.sort()                    # reordenar os elementos de acordo com a ordem antiga&lt;br /&gt;
        &lt;br /&gt;
        &lt;br /&gt;
    lista = []&lt;br /&gt;
    &lt;br /&gt;
    for i in range(len(arr)):&lt;br /&gt;
        &lt;br /&gt;
        lista.append(ordenador[i][2])   #por fim guarda-se a ordem correspondente a cada valor da lista colocada como variável &lt;br /&gt;
        &lt;br /&gt;
    indexador = np.array(lista)  &lt;br /&gt;
        &lt;br /&gt;
    return indexador                     # e essa ordem é retornada como saída da função&lt;br /&gt;
&lt;br /&gt;
print(indexador(teste))&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Função de movimento e aceleração das partículas ==&lt;br /&gt;
&lt;br /&gt;
Para simular como um estado evolui no tempo, é necessário que tenhamos as derivadas temporais de todas as coordenadas do vetor de estado (&amp;lt;math&amp;gt;y&amp;lt;/math&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Para as coordenadas espaciais x (&amp;lt;math&amp;gt;y[i], \ 0\leq i&amp;lt; N &amp;lt;/math&amp;gt;) temos que:  &lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\dot{x_i} = y_{[i + N]} &lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Para as coordenadas de velocidade v (&amp;lt;math&amp;gt;y[i], \ N\leq i&amp;lt; 2N-1 &amp;lt;/math&amp;gt;) teremos que usar a relação de forças que foi descrita no modelo. Algumas simplificações comuns serão feitas como considerar constantes físicas unitárias (&amp;lt;math&amp;gt;m = q = \kappa = 1&amp;lt;/math&amp;gt;) e relações de proporcionalidade com o número de partículas do sistema para mantê-lo com um comportamento mais suave (&amp;lt;math&amp;gt;F = 1/N&amp;lt;/math&amp;gt;). O programa será escrito levando em conta o modelo de cargas elétricas: &lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\dot{v_i} = \ddot{x_i} = \frac{1}{m} \Big[ -\kappa y_{[i - N]} + (2i - N - 1)F \Big]&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A relação acima pode ser descrita de forma diferente se levarmos em conta que a simulação é simétrica em x e que todas as posições iniciais são positivas.&lt;br /&gt;
&lt;br /&gt;
A partícula que recebe índice &amp;lt;math&amp;gt;1&amp;lt;/math&amp;gt; possui &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; partículas à esquerda (x negativo) e &amp;lt;math&amp;gt;(N-1)&amp;lt;/math&amp;gt; partículas a direita (x positivo), o que resulta uma força de interação de &amp;lt;math&amp;gt;F&amp;lt;/math&amp;gt; para a direita. A de índice 2 terá força de interação &amp;lt;math&amp;gt;3F&amp;lt;/math&amp;gt;, a de índice 3 terá &amp;lt;math&amp;gt;5F&amp;lt;/math&amp;gt; e assim por diante.&lt;br /&gt;
&lt;br /&gt;
Antes de reescrever a equação da aceleração deve-se levar em consideração de uma das partículas distribuídas no espaço de fase assumirem coordenadas negativas (caso tenham proximidade da origem e velocidade negativa). Novamente usando o argumento de simetria, sabe-se que caso uma partícula assuma uma posição negativa, a partícula espelhada assumirá a posição simétrica em relação a origem. Dessa forma basta calcular a força de interação sobre a partícula espelhada e inverter o sinal para a partícula original. Levando tudo isso em conta teremos a seguinte equação da aceleração:  &lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\ddot{x_i} = \frac{1}{m}\Big[ -\kappa y_{[i - N]} + \frac{y_{[i - N]}}{|y_{[i - N]}|}(2i- 1)F     \Big]&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&#039;python&#039;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
def deriv(t, y):&lt;br /&gt;
&lt;br /&gt;
    p = len(y)&lt;br /&gt;
    k = indexador(y[0:int(p/2)])&lt;br /&gt;
    sinal=abs(y[0:int(p/2)])/y[0:int(p/2)]&lt;br /&gt;
    &lt;br /&gt;
    dydt = np.zeros(int(p))&lt;br /&gt;
&lt;br /&gt;
    dydt[0:int(p/2)] = y[int(p/2):int(p)] #definindo as derivadas temporais de posição&lt;br /&gt;
    &lt;br /&gt;
                                                         #definindo as derivadas temporais de velocidade&lt;br /&gt;
    dydt[int(p/2):int(p)] = -y[0:int(p/2)] + ((np.ones(int(p/2)) + 2*k )/(p))*sinal&lt;br /&gt;
    &lt;br /&gt;
    deriv = dydt[0:int(p)]&lt;br /&gt;
    &lt;br /&gt;
    return deriv&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Função de Energia do estado ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&#039;python&#039;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
def Energia_total(y):     # Para calcular a energia precisamos apenas do vetor de estado y do sistema de partículas utilizado&lt;br /&gt;
&lt;br /&gt;
    l = int(len(y)/2)     # a variável l representa a quantidade de valores que teremos &lt;br /&gt;
    pot = np.zeros(l+1)   # cria-se um array com l + 1 dimensões para representar as l partículas e os respectivos potenciais &lt;br /&gt;
&lt;br /&gt;
    r = abs(np.array(y[0:l]))       # cria-se um array r com as coordenadas de posição do estado y&lt;br /&gt;
    r = np.append(r,4)   # adiciona-se uma coordenada para representar o contorno externo do experimento&lt;br /&gt;
    r.sort()              # Faz-se o ordenamento desse array por distância da origem&lt;br /&gt;
    &lt;br /&gt;
    pot_0 = 0             # O potencial do contorno deve ser nulo &lt;br /&gt;
    &lt;br /&gt;
    for i in range(l,0,-1):     # Loop decrescente que define o potencial de posição para cada partícula &lt;br /&gt;
        &lt;br /&gt;
        pot[i] = pot_0&lt;br /&gt;
        &lt;br /&gt;
        pot_0 = pot_0 + (1/2)*(i/l)*abs((r[i] - r[i-1]))&lt;br /&gt;
        &lt;br /&gt;
    pot[0] = pot_0&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    v = np.array(y[l:-1])       # Cria-se um array com os valores de velocidade&lt;br /&gt;
    &lt;br /&gt;
    E_total = 0&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    for i in range(l-1):        #Soma-se as energias de cada partícula&lt;br /&gt;
&lt;br /&gt;
      E_total = E_total + pot[i] + 0.5*v[i]**2 + 0.5*r[i]**2&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    return 2*E_total, r[0:l+1], pot[0:l+1]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Evolução da Distribuição no Tempo ==&lt;br /&gt;
&lt;br /&gt;
Para simular a evolução temporal da distribuição inicial escolhida, precisamos de um método de integração numérica no tempo. O método escolhido deverá partir do estado da distribuição e da função de derivada temporal atribuída para estimar como a evolução ocorre.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&#039;python&#039;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
from scipy.integrate import solve_ivp  #integrador numérico escolhido&lt;br /&gt;
&lt;br /&gt;
def nova_fase(y,i):      #função que define a função do espaço de fase em cada instante de tempo, adaptada para o integrador numérico escolhido&lt;br /&gt;
    &lt;br /&gt;
    fase = np.array([])&lt;br /&gt;
    &lt;br /&gt;
    for j in range(len(y)):&lt;br /&gt;
            &lt;br /&gt;
        fase = np.append(fase,y[j][i])&lt;br /&gt;
        &lt;br /&gt;
    return fase&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Fase = []   # Cria uma lista para reservar a evolução do espaço de fase no tempo&lt;br /&gt;
T = np.array([])     # Cria uma lista que registra os tempos de marcação do integrador numérico&lt;br /&gt;
E = np.array([])     # Cria uma lista que registra a energia da distribuição no tempo&lt;br /&gt;
E_pot = []           # Cria uma lista que registra o comportamento da energia potencial ao longo de x no tempo&lt;br /&gt;
X_pot = []           # O análogo ao anterior para a posição&lt;br /&gt;
tempo = 0.0  # o tempo começa em 0&lt;br /&gt;
delta_t = 1   # o intervalo de tempo é 0.1&lt;br /&gt;
&lt;br /&gt;
X = np.random.rand(4000)&lt;br /&gt;
V = np.random.rand(4000) - np.ones(4000)*0.5&lt;br /&gt;
y = np.append(X,2*V)    #define-se a fase inicial&lt;br /&gt;
&lt;br /&gt;
for j in range(50):&lt;br /&gt;
&lt;br /&gt;
    sol = solve_ivp(deriv, (tempo,tempo + delta_t), y , rtol = 0.00001)     # integrador numérico realiza a integração&lt;br /&gt;
&lt;br /&gt;
    T= np.append(T, sol.t)&lt;br /&gt;
&lt;br /&gt;
    tempo = tempo + delta_t&lt;br /&gt;
    for i in range(len(sol.t)):       #o integrador possui um número de vetores intermediários ao vetor da solução final sol.y[-1]&lt;br /&gt;
        &lt;br /&gt;
        &lt;br /&gt;
        y = nova_fase(sol.y,i)                              # aqui são registradas as funções definidas para cada estado de integração&lt;br /&gt;
        Fase.append(y)&lt;br /&gt;
&lt;br /&gt;
        Ei =  Energia_total(y)&lt;br /&gt;
&lt;br /&gt;
        E = np.append(E, Ei[0])&lt;br /&gt;
&lt;br /&gt;
        E_pot.append(Ei[2])&lt;br /&gt;
        X_pot.append(Ei[1])&lt;br /&gt;
    &lt;br /&gt;
    y = nova_fase(sol.y, -1)                     # A distribuição atual é atualizada para nova integração &lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Animações ===&lt;br /&gt;
&lt;br /&gt;
Foi utilizado o código abaixo para gerar os gifs da evolução temporal&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&#039;python&#039;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
from matplotlib.animation import FuncAnimation&lt;br /&gt;
from IPython import display&lt;br /&gt;
&lt;br /&gt;
# código base para montar gifs da evolução temporal &lt;br /&gt;
fig, (ax1, ax2, ax3) = plt.subplots(3,1 ,figsize = (6,14))    #cria uma figura de três linhas&lt;br /&gt;
&lt;br /&gt;
lines = []                                                    #objeto padrão da biblioteca FuncAnimation&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def animate(frame):&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    # As entradas são limpas para evitar superposição de imagens nos frames&lt;br /&gt;
    ax1.cla()              &lt;br /&gt;
    ax2.cla()&lt;br /&gt;
    ax3.cla()&lt;br /&gt;
&lt;br /&gt;
    # Plot do espaço de fases&lt;br /&gt;
    ax1.scatter(Fase[frame][0:4000], Fase[frame][4000:8000], color = &#039;k&#039;, s  =5)&lt;br /&gt;
    ax1.scatter(-Fase[frame][0:4000], -Fase[frame][4000:8000], color = &#039;k&#039;, s = 5)&lt;br /&gt;
    ax1.set_xlabel(&#039;$posição$&#039;)&lt;br /&gt;
    ax1.set_ylabel(&#039;$velocidade$&#039;)&lt;br /&gt;
    ax1.set_xlim(-4,4)&lt;br /&gt;
    ax1.set_ylim(-2.5,2.5)   &lt;br /&gt;
&lt;br /&gt;
    # Plot da distribuição de Potencial&lt;br /&gt;
    ax2.plot(X_pot[frame],E_pot[frame], color = &#039;grey&#039;)&lt;br /&gt;
    ax2.plot(-np.flip(X_pot[frame]),np.flip(E_pot[frame]), color = &#039;grey&#039;)&lt;br /&gt;
    ax2.scatter(X_pot[frame],E_pot[frame], color = &#039;b&#039;, s  =5)&lt;br /&gt;
    ax2.scatter(-np.flip(X_pot[frame]),np.flip(E_pot[frame]), color = &#039;b&#039;, s  =5)&lt;br /&gt;
    ax2.set_ylabel(&amp;quot;potencial&amp;quot;)&lt;br /&gt;
    ax2.set_xlabel(&amp;quot;posição&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    # Plot da energia total no tempo&lt;br /&gt;
    ax3.plot(T[0:frame],E[0:frame], color = &#039;k&#039;)&lt;br /&gt;
    ax3.set_ylabel(&amp;quot;Energia&amp;quot;)&lt;br /&gt;
    ax3.set_xlabel(&amp;quot;tempo&amp;quot;)&lt;br /&gt;
    ax3.set_xlim(0, T[-1])&lt;br /&gt;
    ax3.set_ylim(E[0]- 10, E[0] + 10)&lt;br /&gt;
    &lt;br /&gt;
    return lines&lt;br /&gt;
&lt;br /&gt;
# Execução do programa e geração do gif inline   &lt;br /&gt;
anima = FuncAnimation(fig, animate,frames=len(T), interval=20, blit=True)&lt;br /&gt;
video = anima.to_html5_video()&lt;br /&gt;
html = display.HTML(video)&lt;br /&gt;
display.display(html)&lt;br /&gt;
&lt;br /&gt;
plt.close()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:Mom-pot-e.gif]]&lt;/div&gt;</summary>
		<author><name>Renanrs</name></author>
	</entry>
	<entry>
		<id>http://fiscomp.if.ufrgs.br/index.php?title=Din%C3%A2mica_Molecular_de_Part%C3%ADculas-Planares_Interagentes&amp;diff=6142</id>
		<title>Dinâmica Molecular de Partículas-Planares Interagentes</title>
		<link rel="alternate" type="text/html" href="http://fiscomp.if.ufrgs.br/index.php?title=Din%C3%A2mica_Molecular_de_Part%C3%ADculas-Planares_Interagentes&amp;diff=6142"/>
		<updated>2021-11-22T11:44:16Z</updated>

		<summary type="html">&lt;p&gt;Renanrs: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
Em construção&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Grupo: Antônio Carlan, Gabriela Pereira, Renan Soares e Victor Gandara&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Objetivo:&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= O modelo =&lt;br /&gt;
&lt;br /&gt;
É possível criar um modelo simplificado de interação de partículas imaginando que todas elas são compostas por planos de mesma massa e sem espessura, paralelos entre si e com liberdade de movimento relevante no eixo perpendicular às superfícies das mesmas.&lt;br /&gt;
&lt;br /&gt;
Tal modelo pode ser utilizado para estudar a dinâmica de um número elevado de partículas e conta com algumas particularidades simplificadoras de complexidade numérica. Alguns estudos utilizam esse modelo para estudar o comportamento de feixes carregados com a menor dimensionalidade possível [1] e também para sistemas auto-gravitantes [2]. As duas aplicações citadas serão as demonstradas a seguir mas o modelo é versátil para diferentes condições iniciais e de contorno.&lt;br /&gt;
&lt;br /&gt;
== Descrição do Modelo ==&lt;br /&gt;
&lt;br /&gt;
=== Disposição espacial ===&lt;br /&gt;
&lt;br /&gt;
Um número &amp;quot;N&amp;quot; de partículas-plano de mesma massa é disposto ao longo do eixo x com uma função de distribuição n(x) e com todas as partículas paralelas ao plano yz. No caso do modelo auto-gravitante, movimentos ao longo do eixo z não têm relevância prática mas para o modelo de um feixe de planos é definido que todos os planos se movem na direção z com mesma velocidade.&lt;br /&gt;
&lt;br /&gt;
A consideração de movimento ao longo do eixo z para o modelo de feixe é importante para a análise do comportamento do espaço de fases ao longo do comprimento do acelerador de partículas. Aqui, podemos imaginar estudar casos em que o feixe gerado inicialmente no espaço de fase terá um comportamento constante no tempo para cada secção transversal em xy para uma coordenada em z pré-estabelecida.&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:1paralelas.gif]] &lt;br /&gt;
&lt;br /&gt;
=== Ausência de Efeitos de Colisão ===&lt;br /&gt;
&lt;br /&gt;
O modelo leva em consideração que todas os planos possuem a mesma massa e que as colisões não levam a perda de energia no sistema.&lt;br /&gt;
&lt;br /&gt;
Dessa forma podemos prever o que ocorre quando a posição de dois planos coincide pois há conservação no momento linear em x e o coeficiente de restituição (razão entre as velocidades de afastamento e aproximação dos corpos) é igual a 1.&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:2diagrama.png]] &lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{cases} mv_1 - mv_2 = -mv_1&#039; + mv_2&#039;  \\ \\   \frac{v_1&#039; + v_2&#039;}{v_1 + v_2} = 1  \end{cases}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
O sistema de equações resulta em: &amp;lt;math&amp;gt;v_1&#039; = v_2 \ \ \ ; \ \ \ v_2&#039; = v_1&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dessa forma, é irrelevante ponderar se houve de fato uma colisão com troca de velocidades ou se as partículas simplesmente cruzam sem interferir de forma relevante. A última consideração é a levada em conta no ponto de vista computacional pois exclui a necessidade de atualizar a velocidade das partículas que passaram pela mesma posição no eixo x.&lt;br /&gt;
&lt;br /&gt;
=== Interação entre as partículas ===&lt;br /&gt;
&lt;br /&gt;
Para analisar a interação entre as partículas é preciso entender como uma única partícula afeta seu entorno.&lt;br /&gt;
&lt;br /&gt;
No caso das partículas-plano carregadas eletricamente podemos considerar os efeitos de campo elétrico de um isolante plano infinito:&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:3corpolivre.png]] &lt;br /&gt;
&lt;br /&gt;
Pela lei de Gauss, para uma dada distribuição de carga com densidade superficial &amp;lt;math&amp;gt;\sigma&amp;lt;/math&amp;gt;: &lt;br /&gt;
:&amp;lt;math&amp;gt; &lt;br /&gt;
\oint  \overrightarrow{E}. d\overrightarrow{S}  = \frac{Q_{int}}{\epsilon_0} &lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
E.A - (-E.A) = \frac{\sigma . A   }{\epsilon_0} &lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
E= \frac{\sigma }{2\epsilon_0}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
O mesmo pode ser feito para um plano com densidade de massa distribuída uniformemente, para o caso do sistema auto-gravitante, com mudança na constante física multiplicativa e no sinal.&lt;br /&gt;
&lt;br /&gt;
O fato importante a ser destacado aqui é a total independência do campo gerado pela partícula e a distância. Dessa forma, a interação entre as partículas em qualquer sistema que seguir esse modelo não terá dependência da distância entre elas e sim da posição relativa entre as partículas consideradas.&lt;br /&gt;
&lt;br /&gt;
=== Interferência externa do sistema ===&lt;br /&gt;
&lt;br /&gt;
Para o caso dos planos no sistema auto-gravitante não é necessária ação externa alguma para manter o equilíbrio em um sistema dinâmico estável. Sempre é levado em conta que todas as partículas têm velocidade em x inferior a velocidade de escape do restante do sistema e, por conta disso e das forças sempre atrativas de interação, o sistema não expande indefinidamente.&lt;br /&gt;
&lt;br /&gt;
Já no caso de planos carregados eletricamente as forças de interação entre os planos serão sempre repulsivas e a energia total do sistema é positiva. Sem uma interação externa, mesmo um sistema composto por um número limitado de partículas de fraca interação expandiria indefinidamente. Por causa disso, nesse caso é considerado que há uma força colimadora no feixe de planos proporcional a distância da origem. A origem dessa força externa vem de modelos de maior dimensionalidade de aceleradores de partícula que contam com um campo magnético externo capaz de colimar um feixe de cargas radialmente, por não existir um paralelo direto para o modelo unidimensional consideramos apenas uma força restauradora que impede a expansão indefinida do sistema como um todo. Também é possível ajustar condições de contorno simulando as paredes externas do acelerador como placas condutoras infinitas e com potencial definido. Esse tipo de consideração pode ser feita para sistemas que não são simétricos e impede que as cargas se afastem demasiadamente da origem.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:4graficoforça.png]]&lt;br /&gt;
&lt;br /&gt;
= Comportamento de uma Partícula no Sistema =&lt;br /&gt;
&lt;br /&gt;
Graças a caracterização das partículas temos que o campo gerado por uma partícula-plano pode ser caracterizado (para ambos os sistemas citados) da seguinte forma:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
E_i(x) = -\lambda\Theta[-(x-x_i)]  + \lambda\Theta(x-x_i)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:5perfilcampo.png]]&lt;br /&gt;
&lt;br /&gt;
Em que a constante &amp;lt;math&amp;gt;\lambda&amp;lt;/math&amp;gt; pode ser tanto positiva (cargas positivas) quanto negativa (cargas negativas ou interação gravitacional) e a função &amp;lt;math&amp;gt;\Theta&amp;lt;/math&amp;gt; equivale a função degrau de Heaviside:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\Theta(x) = \begin{cases} 0, \ \ x&amp;lt;0 \\ 1, \ \ x&amp;gt;0 \end{cases}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dessa forma, para exemplificação, um sistema de 5 partículas-plano teria uma interação da seguinte forma:&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:6forçaresultante.png]]&lt;br /&gt;
&lt;br /&gt;
Aqui, F seria a força de interação entre duas partículas no caso de planos carregados. É possível notar que a força de interação varia de duas unidades dessa constante para cada partícula contada em uma direção e que a força máxima sentida (pelas partículas-plano localizadas nas extremidades) é proporcional a &amp;lt;math&amp;gt;(N-1)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
É possível notar que para uma distribuição de partículas-plano do tipo:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt; &lt;br /&gt;
n(x) =   \sum_{i=1}^N \delta(x_i) &lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
com o índice  &amp;lt;math&amp;gt;\ \ &#039;&#039;i&#039;&#039;\ &amp;lt;/math&amp;gt; sendo a ordem da partícula contada do sentido negativo para o positivo do eixo x, teremos uma força resultante de interação para uma partícula que pode ser definida por &lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
F_i =  [-(N-1) + 2(i-1)]F&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt; &lt;br /&gt;
F_i = (2i - N-1)F&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Essa força é suficiente para manter o sistema auto-gravitante coeso mas para as partículas carregadas devemos adicionar a força restauradora descrita anteriormente:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
F^{grav.}_{R,i} = (2i - N-1)F&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
F^{el.}_{R,i} = (2i - N-1)F - \kappa x_i&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Conservação da Energia do Sistema =&lt;br /&gt;
&lt;br /&gt;
Ao realizar uma simulação numérica com um grande número de entes que representam um sistema físico é importante que seja feita uma verificação sobre o quão apropriados os resultados da simulação de fato são. Uma das formas mais comuns de verificar se uma simulação numérica está correta na dinâmica molecular de vários corpos e efetuar periodicamente a soma da energia do sistema.&lt;br /&gt;
&lt;br /&gt;
No caso de sistemas como os descritos, não há nenhum incremento de energia proveniente de uma fonte externa. Mesmo para o sistema eletricamente carregado, a força restauradora é potencial e não muda a energia total do sistema dada uma distribuição inicial de posição e momento.&lt;br /&gt;
&lt;br /&gt;
Para todos os efeitos, a energia dos sistemas estudados pode ser dividida em três partes: &lt;br /&gt;
&lt;br /&gt;
== Energia Cinética ==&lt;br /&gt;
&lt;br /&gt;
Todas as partículas da distribuição escolhida terão massa e velocidade, de forma que a energia cinética do sistema será dada por:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
En_{cin} = \frac{m}{2}\sum_{i=1}^N \dot{x_i}^2&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Energia Potencial Restauradora ==&lt;br /&gt;
&lt;br /&gt;
Observada no sistema eletricamente carregado citado, pode ser descrita como:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
En_{pot} = \frac{\kappa}{2}\sum_{i=1}^N x_i^2&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Energia Potencial Intrínseca  ==&lt;br /&gt;
&lt;br /&gt;
Energia contida na interação entre as partículas. A energia de uma partícula depende do potencial na sua posição da sua carga (ou massa).&lt;br /&gt;
&lt;br /&gt;
Como potenciais não são absolutos, é estabelecido um Potencial nulo de referência nas condições de contorno do sistema. Como pode ser visto no gif com as partículas-plano carregadas em azul, são colocadas placas condutoras planas nas posições &amp;lt;math&amp;gt;x=L&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;x= -L&amp;lt;/math&amp;gt; (caso haja simetria no espaço de fase do sistema) e é estabelecido que os potenciais nessas posições são &amp;lt;math&amp;gt;V(-L) = V(L) = 0&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Uma maneira mais simples de determinar o potencial das N partículas é considerar que há nas posições de contorno,  &amp;lt;math&amp;gt;x_0&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;x_{N+1}&amp;lt;/math&amp;gt;, partículas não interagentes.&lt;br /&gt;
&lt;br /&gt;
A diferença de potencial entre duas posições vizinhas pode ser determinada por:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\Delta V_i = (x_{i} - x_{i - 1})E_i&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
com &amp;lt;math&amp;gt;E_i&amp;lt;/math&amp;gt; sendo o módulo do campo entre a i-ésima e a (i - 1)-ésima partícula, dado por:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
E_i = (2i - N - 1)\lambda&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:7perfilcampoN4.png]]&lt;br /&gt;
&lt;br /&gt;
O que resulta na energia de uma partícula específica (k-ésima) descrita por:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
En_k = \alpha \sum_{i = 1}^{k}(x_i - x_{i - 1})(2i - N - 1)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aqui foram aglutinadas as possíveis constantes multiplicativas em uma constante &amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt; que pode ser escolhida para se adequar ao sistema estudado e a energia intrínseca do sistema é dada pela soma da energia de interação de cada uma das partículas. Como o sistema é dividido em intervalos com variação de potencial discretos, podemos escrever a energia intrínseca da seguinte forma:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
En_{int} = \alpha \sum_{k = 1}^{N}\sum_{i = 1}^{k}(x_i - x_{i - 1})(2i - N - 1)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A soma dessas três energias deve se manter constante (ou com pouca variação relativa significativa, pelo menos) durante a simulação:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
E_{total} = En_{cin} + En_{pot} + En_{int} = cte.&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Modelagem Computacional =&lt;br /&gt;
&lt;br /&gt;
== Criando a Distribuição do Sistema ==&lt;br /&gt;
&lt;br /&gt;
O primeiro passo para criar a simulação das N partículas é definir as coordenadas fundamentais das partículas em si (posição e velocidade).&lt;br /&gt;
&lt;br /&gt;
A simulação que será utilizada de exemplo é simétrica no espaço de fase, ou seja, para cada partícula com coordenadas &amp;lt;math&amp;gt;(x_i,y_i)&amp;lt;/math&amp;gt; existirá uma partícula espelhada &lt;br /&gt;
com coordenadas &amp;lt;math&amp;gt;(-x_i,-y_i)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Esse artifício é utilizado para que o centro de massa mantenha-se na origem e que o momento linear do sistema em x seja sempre nulo. Com isso é garantido que haverá sempre, também, a simetria par entre as energias das partículas espelhadas e a simetria ímpar entre as forças resultantes.&lt;br /&gt;
&lt;br /&gt;
Com isso garantido, basta fazer o cálculo numérico de uma metade da distribuição levando em conta a presença da outra metade, porém não tornando necessário que os cálculos sejam repetidos pois o comportamento de cada partícula espelhada torna-se perfeitamente previsível.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&#039;python&#039;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Importando as bibliotecas necessárias &lt;br /&gt;
from math import *&lt;br /&gt;
import matplotlib.pyplot as plt&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
A=[]     #criamos uma lista vazia&lt;br /&gt;
&lt;br /&gt;
N =  1000       # Determinamos o número de partículas utilizado&lt;br /&gt;
&lt;br /&gt;
for i in range(int(N)):&lt;br /&gt;
&lt;br /&gt;
    A.append([np.random.rand() ,2*(np.random.rand() - 1/2)]) #valores aleatórios de x entre 0 e 1 e de v entre -1 e 1 são adicionados&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A = np.array(A)&lt;br /&gt;
X= np.array([])     #Arrays usados para exemplificar&lt;br /&gt;
V= np.array([])     #distribuição inicial&lt;br /&gt;
&lt;br /&gt;
for i in range (len(A)):    #simetrização da distribuição&lt;br /&gt;
    X=np.append(X,A[i][0])&lt;br /&gt;
    V=np.append(V,A[i][1])&lt;br /&gt;
    V=np.append(V,-A[i][1])&lt;br /&gt;
    X=np.append(X,-A[i][0])&lt;br /&gt;
    &lt;br /&gt;
plt.xlabel(&#039;posição&#039;)             #plot da distribuição inicial&lt;br /&gt;
plt.ylabel(&#039;momento linear&#039;)&lt;br /&gt;
plt.title(&#039;Espaço de fase inicial&#039;)&lt;br /&gt;
plt.grid(True)&lt;br /&gt;
&lt;br /&gt;
plt.scatter(X,V)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:8espaçofaseinicial.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Função de Indexação ==&lt;br /&gt;
&lt;br /&gt;
Em outras modelagens como a interação de cargas em sistemas bidimensionais ou de massas em tridimensionais é necessário calcular a força de interação entre partículas em função das distâncias. Na modelagem proposta não é necessário calcular distâncias mas sim saber o ordenamento das partículas ao longo do eixo &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
No entanto, é muito comum em simulações que utilizam métodos de integração utilizar vetores que possuam apenas uma coluna e &amp;lt;math&amp;gt;2N&amp;lt;/math&amp;gt; linhas, sendo a primeira metade de linhas correspondentes às posições e a outra metade correspondente às velocidades.&lt;br /&gt;
&lt;br /&gt;
Para não precisar atualizar as linhas de posição e velocidade do vetor 2N-dimensional, utiliza-se uma função de indexação que será responsável por indicar qual é a ordem da partícula correspondente a uma determinada linha em um dado estado.&lt;br /&gt;
&lt;br /&gt;
Assim, a posição da partícula é atualizada no tempo e seu índice também, porém a posição dela no vetor de fase nunca se modifica. Esse fato é importante para estudos que pretendem analisar a trajetória de um único corpo no tempo, como é feito nos diagramas de Poincaré, por exemplo.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&#039;python&#039;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
teste = np.array([2,6,3,9,0,1,4])   #criado um vetor de teste  para que seus valores sejam indexados&lt;br /&gt;
&lt;br /&gt;
def indexador(arr):                 #define-se a função&lt;br /&gt;
    &lt;br /&gt;
    ordenador = []                  #é criada uma lista vazia&lt;br /&gt;
    &lt;br /&gt;
    for i in range(len(arr)):&lt;br /&gt;
        &lt;br /&gt;
        ordenador.append([abs(arr[i]),i]) # para cada valor criamos uma lista com o valor absoluto e a ordem atual&lt;br /&gt;
        &lt;br /&gt;
    ordenador.sort()                      # é feito o ordenamento da lista &#039;ordenador&#039; de acordo com o primeiro elemento&lt;br /&gt;
    &lt;br /&gt;
    for i in range(len(arr)):             &lt;br /&gt;
&lt;br /&gt;
        ordenador[i].append(i)            # é adicionado um terceiro valor para cada elemento de ordenador com o valor da sua nova ordem na sequência&lt;br /&gt;
        &lt;br /&gt;
    for i in range(len(arr)):&lt;br /&gt;
        &lt;br /&gt;
        a = ordenador[i][0]&lt;br /&gt;
        b = ordenador[i][1]             # É feita a troca do segundo com o primeiro valor de cada elemento de ordenador para...&lt;br /&gt;
        ordenador[i][0] = b&lt;br /&gt;
        ordenador[i][1] = a&lt;br /&gt;
        &lt;br /&gt;
    ordenador.sort()                    # reordenar os elementos de acordo com a ordem antiga&lt;br /&gt;
        &lt;br /&gt;
        &lt;br /&gt;
    lista = []&lt;br /&gt;
    &lt;br /&gt;
    for i in range(len(arr)):&lt;br /&gt;
        &lt;br /&gt;
        lista.append(ordenador[i][2])   #por fim guarda-se a ordem correspondente a cada valor da lista colocada como variável &lt;br /&gt;
        &lt;br /&gt;
    indexador = np.array(lista)  &lt;br /&gt;
        &lt;br /&gt;
    return indexador                     # e essa ordem é retornada como saída da função&lt;br /&gt;
&lt;br /&gt;
print(indexador(teste))&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Função de movimento e aceleração das partículas ==&lt;br /&gt;
&lt;br /&gt;
Para simular como um estado evolui no tempo, é necessário que tenhamos as derivadas temporais de todas as coordenadas do vetor de estado (&amp;lt;math&amp;gt;y&amp;lt;/math&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Para as coordenadas espaciais x (&amp;lt;math&amp;gt;y[i], \ 0\leq i&amp;lt; N &amp;lt;/math&amp;gt;) temos que:  &lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\dot{x_i} = y_{[i + N]} &lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Para as coordenadas de velocidade v (&amp;lt;math&amp;gt;y[i], \ N\leq i&amp;lt; 2N-1 &amp;lt;/math&amp;gt;) teremos que usar a relação de forças que foi descrita no modelo. Algumas simplificações comuns serão feitas como considerar constantes físicas unitárias (&amp;lt;math&amp;gt;m = q = \kappa = 1&amp;lt;/math&amp;gt;) e relações de proporcionalidade com o número de partículas do sistema para mantê-lo com um comportamento mais suave (&amp;lt;math&amp;gt;F = 1/N&amp;lt;/math&amp;gt;). O programa será escrito levando em conta o modelo de cargas elétricas: &lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\dot{v_i} = \ddot{x_i} = \frac{1}{m} \Big[ -\kappa y_{[i - N]} + (2i - N - 1)F \Big]&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A relação acima pode ser descrita de forma diferente se levarmos em conta que a simulação é simétrica em x e que todas as posições iniciais são positivas.&lt;br /&gt;
&lt;br /&gt;
A partícula que recebe índice &amp;lt;math&amp;gt;1&amp;lt;/math&amp;gt; possui &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; partículas à esquerda (x negativo) e &amp;lt;math&amp;gt;(N-1)&amp;lt;/math&amp;gt; partículas a direita (x positivo), o que resulta uma força de interação de &amp;lt;math&amp;gt;F&amp;lt;/math&amp;gt; para a direita. A de índice 2 terá força de interação &amp;lt;math&amp;gt;3F&amp;lt;/math&amp;gt;, a de índice 3 terá &amp;lt;math&amp;gt;5F&amp;lt;/math&amp;gt; e assim por diante.&lt;br /&gt;
&lt;br /&gt;
Antes de reescrever a equação da aceleração deve-se levar em consideração de uma das partículas distribuídas no espaço de fase assumirem coordenadas negativas (caso tenham proximidade da origem e velocidade negativa). Novamente usando o argumento de simetria, sabe-se que caso uma partícula assuma uma posição negativa, a partícula espelhada assumirá a posição simétrica em relação a origem. Dessa forma basta calcular a força de interação sobre a partícula espelhada e inverter o sinal para a partícula original. Levando tudo isso em conta teremos a seguinte equação da aceleração:  &lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\ddot{x_i} = \frac{1}{m}\Big[ -\kappa y_{[i - N]} + \frac{y_{[i - N]}}{|y_{[i - N]}|}(2i- 1)F     \Big]&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&#039;python&#039;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
def deriv(t, y):&lt;br /&gt;
&lt;br /&gt;
    p = len(y)&lt;br /&gt;
    k = indexador(y[0:int(p/2)])&lt;br /&gt;
    sinal=abs(y[0:int(p/2)])/y[0:int(p/2)]&lt;br /&gt;
    &lt;br /&gt;
    dydt = np.zeros(int(p))&lt;br /&gt;
&lt;br /&gt;
    dydt[0:int(p/2)] = y[int(p/2):int(p)] #definindo as derivadas temporais de posição&lt;br /&gt;
    &lt;br /&gt;
                                                         #definindo as derivadas temporais de velocidade&lt;br /&gt;
    dydt[int(p/2):int(p)] = -y[0:int(p/2)] + ((np.ones(int(p/2)) + 2*k )/(p))*sinal&lt;br /&gt;
    &lt;br /&gt;
    deriv = dydt[0:int(p)]&lt;br /&gt;
    &lt;br /&gt;
    return deriv&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Função de Energia do estado ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&#039;python&#039;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
def Energia_total(y):     # Para calcular a energia precisamos apenas do vetor de estado y do sistema de partículas utilizado&lt;br /&gt;
&lt;br /&gt;
    l = int(len(y)/2)     # a variável l representa a quantidade de valores que teremos &lt;br /&gt;
    pot = np.zeros(l+1)   # cria-se um array com l + 1 dimensões para representar as l partículas e os respectivos potenciais &lt;br /&gt;
&lt;br /&gt;
    r = abs(np.array(y[0:l]))       # cria-se um array r com as coordenadas de posição do estado y&lt;br /&gt;
    r = np.append(r,4)   # adiciona-se uma coordenada para representar o contorno externo do experimento&lt;br /&gt;
    r.sort()              # Faz-se o ordenamento desse array por distância da origem&lt;br /&gt;
    &lt;br /&gt;
    pot_0 = 0             # O potencial do contorno deve ser nulo &lt;br /&gt;
    &lt;br /&gt;
    for i in range(l,0,-1):     # Loop decrescente que define o potencial de posição para cada partícula &lt;br /&gt;
        &lt;br /&gt;
        pot[i] = pot_0&lt;br /&gt;
        &lt;br /&gt;
        pot_0 = pot_0 + (1/2)*(i/l)*abs((r[i] - r[i-1]))&lt;br /&gt;
        &lt;br /&gt;
    pot[0] = pot_0&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    v = np.array(y[l:-1])       # Cria-se um array com os valores de velocidade&lt;br /&gt;
    &lt;br /&gt;
    E_total = 0&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    for i in range(l-1):        #Soma-se as energias de cada partícula&lt;br /&gt;
&lt;br /&gt;
      E_total = E_total + pot[i] + 0.5*v[i]**2 + 0.5*r[i]**2&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    return 2*E_total, r[0:l+1], pot[0:l+1]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Evolução da Distribuição no Tempo ==&lt;br /&gt;
&lt;br /&gt;
Para simular a evolução temporal da distribuição inicial escolhida, precisamos de um método de integração numérica no tempo. O método escolhido deverá partir do estado da distribuição e da função de derivada temporal atribuída para estimar como a evolução ocorre.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&#039;python&#039;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
from scipy.integrate import solve_ivp  #integrador numérico escolhido&lt;br /&gt;
&lt;br /&gt;
def nova_fase(y,i):      #função que define a função do espaço de fase em cada instante de tempo, adaptada para o integrador numérico escolhido&lt;br /&gt;
    &lt;br /&gt;
    fase = np.array([])&lt;br /&gt;
    &lt;br /&gt;
    for j in range(len(y)):&lt;br /&gt;
            &lt;br /&gt;
        fase = np.append(fase,y[j][i])&lt;br /&gt;
        &lt;br /&gt;
    return fase&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Fase = []   # Cria uma lista para reservar a evolução do espaço de fase no tempo&lt;br /&gt;
T = np.array([])     # Cria uma lista que registra os tempos de marcação do integrador numérico&lt;br /&gt;
E = np.array([])     # Cria uma lista que registra a energia da distribuição no tempo&lt;br /&gt;
E_pot = []           # Cria uma lista que registra o comportamento da energia potencial ao longo de x no tempo&lt;br /&gt;
X_pot = []           # O análogo ao anterior para a posição&lt;br /&gt;
tempo = 0.0  # o tempo começa em 0&lt;br /&gt;
delta_t = 1   # o intervalo de tempo é 0.1&lt;br /&gt;
&lt;br /&gt;
X = np.random.rand(4000)&lt;br /&gt;
V = np.random.rand(4000) - np.ones(4000)*0.5&lt;br /&gt;
y = np.append(X,2*V)    #define-se a fase inicial&lt;br /&gt;
&lt;br /&gt;
for j in range(50):&lt;br /&gt;
&lt;br /&gt;
    sol = solve_ivp(deriv, (tempo,tempo + delta_t), y , rtol = 0.00001)     # integrador numérico realiza a integração&lt;br /&gt;
&lt;br /&gt;
    T= np.append(T, sol.t)&lt;br /&gt;
&lt;br /&gt;
    tempo = tempo + delta_t&lt;br /&gt;
    for i in range(len(sol.t)):       #o integrador possui um número de vetores intermediários ao vetor da solução final sol.y[-1]&lt;br /&gt;
        &lt;br /&gt;
        &lt;br /&gt;
        y = nova_fase(sol.y,i)                              # aqui são registradas as funções definidas para cada estado de integração&lt;br /&gt;
        Fase.append(y)&lt;br /&gt;
&lt;br /&gt;
        Ei =  Energia_total(y)&lt;br /&gt;
&lt;br /&gt;
        E = np.append(E, Ei[0])&lt;br /&gt;
&lt;br /&gt;
        E_pot.append(Ei[2])&lt;br /&gt;
        X_pot.append(Ei[1])&lt;br /&gt;
    &lt;br /&gt;
    y = nova_fase(sol.y, -1)                     # A distribuição atual é atualizada para nova integração &lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Animações ===&lt;br /&gt;
&lt;br /&gt;
Foi utilizado o código abaixo para gerar os gifs da evolução temporal&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&#039;python&#039;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
from matplotlib.animation import FuncAnimation&lt;br /&gt;
from IPython import display&lt;br /&gt;
&lt;br /&gt;
# código base para montar gifs da evolução temporal &lt;br /&gt;
fig, (ax1, ax2, ax3) = plt.subplots(3,1 ,figsize = (6,14))    #cria uma figura de três linhas&lt;br /&gt;
&lt;br /&gt;
lines = []                                                    #objeto padrão da biblioteca FuncAnimation&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def animate(frame):&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    # As entradas são limpas para evitar superposição de imagens nos frames&lt;br /&gt;
    ax1.cla()              &lt;br /&gt;
    ax2.cla()&lt;br /&gt;
    ax3.cla()&lt;br /&gt;
&lt;br /&gt;
    # Plot do espaço de fases&lt;br /&gt;
    ax1.scatter(Fase[frame][0:4000], Fase[frame][4000:8000], color = &#039;k&#039;, s  =5)&lt;br /&gt;
    ax1.scatter(-Fase[frame][0:4000], -Fase[frame][4000:8000], color = &#039;k&#039;, s = 5)&lt;br /&gt;
    ax1.set_xlabel(&#039;$posição$&#039;)&lt;br /&gt;
    ax1.set_ylabel(&#039;$velocidade$&#039;)&lt;br /&gt;
    ax1.set_xlim(-4,4)&lt;br /&gt;
    ax1.set_ylim(-2.5,2.5)   &lt;br /&gt;
&lt;br /&gt;
    # Plot da distribuição de Potencial&lt;br /&gt;
    ax2.plot(X_pot[frame],E_pot[frame], color = &#039;grey&#039;)&lt;br /&gt;
    ax2.plot(-np.flip(X_pot[frame]),np.flip(E_pot[frame]), color = &#039;grey&#039;)&lt;br /&gt;
    ax2.scatter(X_pot[frame],E_pot[frame], color = &#039;b&#039;, s  =5)&lt;br /&gt;
    ax2.scatter(-np.flip(X_pot[frame]),np.flip(E_pot[frame]), color = &#039;b&#039;, s  =5)&lt;br /&gt;
    ax2.set_ylabel(&amp;quot;potencial&amp;quot;)&lt;br /&gt;
    ax2.set_xlabel(&amp;quot;posição&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    # Plot da energia total no tempo&lt;br /&gt;
    ax3.plot(T[0:frame],E[0:frame], color = &#039;k&#039;)&lt;br /&gt;
    ax3.set_ylabel(&amp;quot;Energia&amp;quot;)&lt;br /&gt;
    ax3.set_xlabel(&amp;quot;tempo&amp;quot;)&lt;br /&gt;
    ax3.set_xlim(0, T[-1])&lt;br /&gt;
    ax3.set_ylim(E[0]- 10, E[0] + 10)&lt;br /&gt;
    &lt;br /&gt;
    return lines&lt;br /&gt;
&lt;br /&gt;
# Execução do programa e geração do gif inline   &lt;br /&gt;
anima = FuncAnimation(fig, animate,frames=len(T), interval=20, blit=True)&lt;br /&gt;
video = anima.to_html5_video()&lt;br /&gt;
html = display.HTML(video)&lt;br /&gt;
display.display(html)&lt;br /&gt;
&lt;br /&gt;
plt.close()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Renanrs</name></author>
	</entry>
	<entry>
		<id>http://fiscomp.if.ufrgs.br/index.php?title=Arquivo:8espa%C3%A7ofaseinicial.png&amp;diff=6141</id>
		<title>Arquivo:8espaçofaseinicial.png</title>
		<link rel="alternate" type="text/html" href="http://fiscomp.if.ufrgs.br/index.php?title=Arquivo:8espa%C3%A7ofaseinicial.png&amp;diff=6141"/>
		<updated>2021-11-22T11:44:00Z</updated>

		<summary type="html">&lt;p&gt;Renanrs: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Renanrs</name></author>
	</entry>
	<entry>
		<id>http://fiscomp.if.ufrgs.br/index.php?title=Arquivo:7perfilcampoN4.png&amp;diff=6140</id>
		<title>Arquivo:7perfilcampoN4.png</title>
		<link rel="alternate" type="text/html" href="http://fiscomp.if.ufrgs.br/index.php?title=Arquivo:7perfilcampoN4.png&amp;diff=6140"/>
		<updated>2021-11-22T11:43:28Z</updated>

		<summary type="html">&lt;p&gt;Renanrs: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Renanrs</name></author>
	</entry>
	<entry>
		<id>http://fiscomp.if.ufrgs.br/index.php?title=Arquivo:6for%C3%A7aresultante.png&amp;diff=6139</id>
		<title>Arquivo:6forçaresultante.png</title>
		<link rel="alternate" type="text/html" href="http://fiscomp.if.ufrgs.br/index.php?title=Arquivo:6for%C3%A7aresultante.png&amp;diff=6139"/>
		<updated>2021-11-22T11:43:02Z</updated>

		<summary type="html">&lt;p&gt;Renanrs: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Renanrs</name></author>
	</entry>
	<entry>
		<id>http://fiscomp.if.ufrgs.br/index.php?title=Arquivo:5perfilcampo.png&amp;diff=6138</id>
		<title>Arquivo:5perfilcampo.png</title>
		<link rel="alternate" type="text/html" href="http://fiscomp.if.ufrgs.br/index.php?title=Arquivo:5perfilcampo.png&amp;diff=6138"/>
		<updated>2021-11-22T11:42:43Z</updated>

		<summary type="html">&lt;p&gt;Renanrs: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Renanrs</name></author>
	</entry>
	<entry>
		<id>http://fiscomp.if.ufrgs.br/index.php?title=Arquivo:4graficofor%C3%A7a.png&amp;diff=6137</id>
		<title>Arquivo:4graficoforça.png</title>
		<link rel="alternate" type="text/html" href="http://fiscomp.if.ufrgs.br/index.php?title=Arquivo:4graficofor%C3%A7a.png&amp;diff=6137"/>
		<updated>2021-11-22T11:42:14Z</updated>

		<summary type="html">&lt;p&gt;Renanrs: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Renanrs</name></author>
	</entry>
	<entry>
		<id>http://fiscomp.if.ufrgs.br/index.php?title=Arquivo:3corpolivre.png&amp;diff=6136</id>
		<title>Arquivo:3corpolivre.png</title>
		<link rel="alternate" type="text/html" href="http://fiscomp.if.ufrgs.br/index.php?title=Arquivo:3corpolivre.png&amp;diff=6136"/>
		<updated>2021-11-22T11:41:44Z</updated>

		<summary type="html">&lt;p&gt;Renanrs: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Renanrs</name></author>
	</entry>
	<entry>
		<id>http://fiscomp.if.ufrgs.br/index.php?title=Arquivo:2diagrama.png&amp;diff=6135</id>
		<title>Arquivo:2diagrama.png</title>
		<link rel="alternate" type="text/html" href="http://fiscomp.if.ufrgs.br/index.php?title=Arquivo:2diagrama.png&amp;diff=6135"/>
		<updated>2021-11-22T11:41:33Z</updated>

		<summary type="html">&lt;p&gt;Renanrs: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Renanrs</name></author>
	</entry>
	<entry>
		<id>http://fiscomp.if.ufrgs.br/index.php?title=Arquivo:1paralelas.gif&amp;diff=6134</id>
		<title>Arquivo:1paralelas.gif</title>
		<link rel="alternate" type="text/html" href="http://fiscomp.if.ufrgs.br/index.php?title=Arquivo:1paralelas.gif&amp;diff=6134"/>
		<updated>2021-11-22T11:41:06Z</updated>

		<summary type="html">&lt;p&gt;Renanrs: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Renanrs</name></author>
	</entry>
	<entry>
		<id>http://fiscomp.if.ufrgs.br/index.php?title=Din%C3%A2mica_Molecular_de_Part%C3%ADculas-Planares_Interagentes&amp;diff=6133</id>
		<title>Dinâmica Molecular de Partículas-Planares Interagentes</title>
		<link rel="alternate" type="text/html" href="http://fiscomp.if.ufrgs.br/index.php?title=Din%C3%A2mica_Molecular_de_Part%C3%ADculas-Planares_Interagentes&amp;diff=6133"/>
		<updated>2021-11-22T11:26:31Z</updated>

		<summary type="html">&lt;p&gt;Renanrs: /* Função de movimento e aceleração das partículas */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
Em construção&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Grupo: Antônio Carlan, Gabriela Pereira, Renan Soares e Victor Gandara&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Objetivo:&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= O modelo =&lt;br /&gt;
&lt;br /&gt;
É possível criar um modelo simplificado de interação de partículas imaginando que todas elas são compostas por planos de mesma massa e sem espessura, paralelos entre si e com liberdade de movimento relevante no eixo perpendicular às superfícies das mesmas.&lt;br /&gt;
&lt;br /&gt;
Tal modelo pode ser utilizado para estudar a dinâmica de um número elevado de partículas e conta com algumas particularidades simplificadoras de complexidade numérica. Alguns estudos utilizam esse modelo para estudar o comportamento de feixes carregados com a menor dimensionalidade possível [1] e também para sistemas auto-gravitantes [2]. As duas aplicações citadas serão as demonstradas a seguir mas o modelo é versátil para diferentes condições iniciais e de contorno.&lt;br /&gt;
&lt;br /&gt;
== Descrição do Modelo ==&lt;br /&gt;
&lt;br /&gt;
=== Disposição espacial ===&lt;br /&gt;
&lt;br /&gt;
Um número &amp;quot;N&amp;quot; de partículas-plano de mesma massa é disposto ao longo do eixo x com uma função de distribuição n(x) e com todas as partículas paralelas ao plano yz. No caso do modelo auto-gravitante, movimentos ao longo do eixo z não têm relevância prática mas para o modelo de um feixe de planos é definido que todos os planos se movem na direção z com mesma velocidade.&lt;br /&gt;
&lt;br /&gt;
A consideração de movimento ao longo do eixo z para o modelo de feixe é importante para a análise do comportamento do espaço de fases ao longo do comprimento do acelerador de partículas. Aqui, podemos imaginar estudar casos em que o feixe gerado inicialmente no espaço de fase terá um comportamento constante no tempo para cada secção transversal em xy para uma coordenada em z pré-estabelecida.&lt;br /&gt;
&lt;br /&gt;
ADD IMAGEM &lt;br /&gt;
&lt;br /&gt;
=== Ausência de Efeitos de Colisão ===&lt;br /&gt;
&lt;br /&gt;
O modelo leva em consideração que todas os planos possuem a mesma massa e que as colisões não levam a perda de energia no sistema.&lt;br /&gt;
&lt;br /&gt;
Dessa forma podemos prever o que ocorre quando a posição de dois planos coincide pois há conservação no momento linear em x e o coeficiente de restituição (razão entre as velocidades de afastamento e aproximação dos corpos) é igual a 1.&lt;br /&gt;
&lt;br /&gt;
ADD IMAGEM&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{cases} mv_1 - mv_2 = -mv_1&#039; + mv_2&#039;  \\ \\   \frac{v_1&#039; + v_2&#039;}{v_1 + v_2} = 1  \end{cases}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
O sistema de equações resulta em: &amp;lt;math&amp;gt;v_1&#039; = v_2 \ \ \ ; \ \ \ v_2&#039; = v_1&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dessa forma, é irrelevante ponderar se houve de fato uma colisão com troca de velocidades ou se as partículas simplesmente cruzam sem interferir de forma relevante. A última consideração é a levada em conta no ponto de vista computacional pois exclui a necessidade de atualizar a velocidade das partículas que passaram pela mesma posição no eixo x.&lt;br /&gt;
&lt;br /&gt;
=== Interação entre as partículas ===&lt;br /&gt;
&lt;br /&gt;
Para analisar a interação entre as partículas é preciso entender como uma única partícula afeta seu entorno.&lt;br /&gt;
&lt;br /&gt;
No caso das partículas-plano carregadas eletricamente podemos considerar os efeitos de campo elétrico de um isolante plano infinito:&lt;br /&gt;
&lt;br /&gt;
ADD IMAGEM&lt;br /&gt;
&lt;br /&gt;
Pela lei de Gauss, para uma dada distribuição de carga com densidade superficial &amp;lt;math&amp;gt;\sigma&amp;lt;/math&amp;gt;: &lt;br /&gt;
:&amp;lt;math&amp;gt; &lt;br /&gt;
\oint  \overrightarrow{E}. d\overrightarrow{S}  = \frac{Q_{int}}{\epsilon_0} &lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
E.A - (-E.A) = \frac{\sigma . A   }{\epsilon_0} &lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
E= \frac{\sigma }{2\epsilon_0}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
O mesmo pode ser feito para um plano com densidade de massa distribuída uniformemente, para o caso do sistema auto-gravitante, com mudança na constante física multiplicativa e no sinal.&lt;br /&gt;
&lt;br /&gt;
O fato importante a ser destacado aqui é a total independência do campo gerado pela partícula e a distância. Dessa forma, a interação entre as partículas em qualquer sistema que seguir esse modelo não terá dependência da distância entre elas e sim da posição relativa entre as partículas consideradas.&lt;br /&gt;
&lt;br /&gt;
=== Interferência externa do sistema ===&lt;br /&gt;
&lt;br /&gt;
Para o caso dos planos no sistema auto-gravitante não é necessária ação externa alguma para manter o equilíbrio em um sistema dinâmico estável. Sempre é levado em conta que todas as partículas têm velocidade em x inferior a velocidade de escape do restante do sistema e, por conta disso e das forças sempre atrativas de interação, o sistema não expande indefinidamente.&lt;br /&gt;
&lt;br /&gt;
Já no caso de planos carregados eletricamente as forças de interação entre os planos serão sempre repulsivas e a energia total do sistema é positiva. Sem uma interação externa, mesmo um sistema composto por um número limitado de partículas de fraca interação expandiria indefinidamente. Por causa disso, nesse caso é considerado que há uma força colimadora no feixe de planos proporcional a distância da origem. A origem dessa força externa vem de modelos de maior dimensionalidade de aceleradores de partícula que contam com um campo magnético externo capaz de colimar um feixe de cargas radialmente, por não existir um paralelo direto para o modelo unidimensional consideramos apenas uma força restauradora que impede a expansão indefinida do sistema como um todo. Também é possível ajustar condições de contorno simulando as paredes externas do acelerador como placas condutoras infinitas e com potencial definido. Esse tipo de consideração pode ser feita para sistemas que não são simétricos e impede que as cargas se afastem demasiadamente da origem.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
ADD IMAGEM&lt;br /&gt;
&lt;br /&gt;
= Comportamento de uma Partícula no Sistema =&lt;br /&gt;
&lt;br /&gt;
Graças a caracterização das partículas temos que o campo gerado por uma partícula-plano pode ser caracterizado (para ambos os sistemas citados) da seguinte forma:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
E_i(x) = -\lambda\Theta[-(x-x_i)]  + \lambda\Theta(x-x_i)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ADD IMAGEM&lt;br /&gt;
&lt;br /&gt;
Em que a constante &amp;lt;math&amp;gt;\lambda&amp;lt;/math&amp;gt; pode ser tanto positiva (cargas positivas) quanto negativa (cargas negativas ou interação gravitacional) e a função &amp;lt;math&amp;gt;\Theta&amp;lt;/math&amp;gt; equivale a função degrau de Heaviside:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\Theta(x) = \begin{cases} 0, \ \ x&amp;lt;0 \\ 1, \ \ x&amp;gt;0 \end{cases}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dessa forma, para exemplificação, um sistema de 5 partículas-plano teria uma interação da seguinte forma:&lt;br /&gt;
&lt;br /&gt;
ADD IMAGEM&lt;br /&gt;
&lt;br /&gt;
Aqui, F seria a força de interação entre duas partículas no caso de planos carregados. É possível notar que a força de interação varia de duas unidades dessa constante para cada partícula contada em uma direção e que a força máxima sentida (pelas partículas-plano localizadas nas extremidades) é proporcional a &amp;lt;math&amp;gt;(N-1)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
É possível notar que para uma distribuição de partículas-plano do tipo:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt; &lt;br /&gt;
n(x) =   \sum_{i=1}^N \delta(x_i) &lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
com o índice  &amp;lt;math&amp;gt;\ \ &#039;&#039;i&#039;&#039;\ &amp;lt;/math&amp;gt; sendo a ordem da partícula contada do sentido negativo para o positivo do eixo x, teremos uma força resultante de interação para uma partícula que pode ser definida por &lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
F_i =  [-(N-1) + 2(i-1)]F&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt; &lt;br /&gt;
F_i = (2i - N-1)F&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Essa força é suficiente para manter o sistema auto-gravitante coeso mas para as partículas carregadas devemos adicionar a força restauradora descrita anteriormente:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
F^{grav.}_{R,i} = (2i - N-1)F&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
F^{el.}_{R,i} = (2i - N-1)F - \kappa x_i&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Conservação da Energia do Sistema =&lt;br /&gt;
&lt;br /&gt;
Ao realizar uma simulação numérica com um grande número de entes que representam um sistema físico é importante que seja feita uma verificação sobre o quão apropriados os resultados da simulação de fato são. Uma das formas mais comuns de verificar se uma simulação numérica está correta na dinâmica molecular de vários corpos e efetuar periodicamente a soma da energia do sistema.&lt;br /&gt;
&lt;br /&gt;
No caso de sistemas como os descritos, não há nenhum incremento de energia proveniente de uma fonte externa. Mesmo para o sistema eletricamente carregado, a força restauradora é potencial e não muda a energia total do sistema dada uma distribuição inicial de posição e momento.&lt;br /&gt;
&lt;br /&gt;
Para todos os efeitos, a energia dos sistemas estudados pode ser dividida em três partes: &lt;br /&gt;
&lt;br /&gt;
== Energia Cinética ==&lt;br /&gt;
&lt;br /&gt;
Todas as partículas da distribuição escolhida terão massa e velocidade, de forma que a energia cinética do sistema será dada por:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
En_{cin} = \frac{m}{2}\sum_{i=1}^N \dot{x_i}^2&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Energia Potencial Restauradora ==&lt;br /&gt;
&lt;br /&gt;
Observada no sistema eletricamente carregado citado, pode ser descrita como:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
En_{pot} = \frac{\kappa}{2}\sum_{i=1}^N x_i^2&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Energia Potencial Intrínseca  ==&lt;br /&gt;
&lt;br /&gt;
Energia contida na interação entre as partículas. A energia de uma partícula depende do potencial na sua posição da sua carga (ou massa).&lt;br /&gt;
&lt;br /&gt;
Como potenciais não são absolutos, é estabelecido um Potencial nulo de referência nas condições de contorno do sistema. Como pode ser visto no gif com as partículas-plano carregadas em azul, são colocadas placas condutoras planas nas posições &amp;lt;math&amp;gt;x=L&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;x= -L&amp;lt;/math&amp;gt; (caso haja simetria no espaço de fase do sistema) e é estabelecido que os potenciais nessas posições são &amp;lt;math&amp;gt;V(-L) = V(L) = 0&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Uma maneira mais simples de determinar o potencial das N partículas é considerar que há nas posições de contorno,  &amp;lt;math&amp;gt;x_0&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;x_{N+1}&amp;lt;/math&amp;gt;, partículas não interagentes.&lt;br /&gt;
&lt;br /&gt;
A diferença de potencial entre duas posições vizinhas pode ser determinada por:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\Delta V_i = (x_{i} - x_{i - 1})E_i&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
com &amp;lt;math&amp;gt;E_i&amp;lt;/math&amp;gt; sendo o módulo do campo entre a i-ésima e a (i - 1)-ésima partícula, dado por:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
E_i = (2i - N - 1)\lambda&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ADD IMAGEM&lt;br /&gt;
&lt;br /&gt;
O que resulta na energia de uma partícula específica (k-ésima) descrita por:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
En_k = \alpha \sum_{i = 1}^{k}(x_i - x_{i - 1})(2i - N - 1)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aqui foram aglutinadas as possíveis constantes multiplicativas em uma constante &amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt; que pode ser escolhida para se adequar ao sistema estudado e a energia intrínseca do sistema é dada pela soma da energia de interação de cada uma das partículas. Como o sistema é dividido em intervalos com variação de potencial discretos, podemos escrever a energia intrínseca da seguinte forma:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
En_{int} = \alpha \sum_{k = 1}^{N}\sum_{i = 1}^{k}(x_i - x_{i - 1})(2i - N - 1)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A soma dessas três energias deve se manter constante (ou com pouca variação relativa significativa, pelo menos) durante a simulação:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
E_{total} = En_{cin} + En_{pot} + En_{int} = cte.&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Modelagem Computacional =&lt;br /&gt;
&lt;br /&gt;
== Criando a Distribuição do Sistema ==&lt;br /&gt;
&lt;br /&gt;
O primeiro passo para criar a simulação das N partículas é definir as coordenadas fundamentais das partículas em si (posição e velocidade).&lt;br /&gt;
&lt;br /&gt;
A simulação que será utilizada de exemplo é simétrica no espaço de fase, ou seja, para cada partícula com coordenadas &amp;lt;math&amp;gt;(x_i,y_i)&amp;lt;/math&amp;gt; existirá uma partícula espelhada &lt;br /&gt;
com coordenadas &amp;lt;math&amp;gt;(-x_i,-y_i)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Esse artifício é utilizado para que o centro de massa mantenha-se na origem e que o momento linear do sistema em x seja sempre nulo. Com isso é garantido que haverá sempre, também, a simetria par entre as energias das partículas espelhadas e a simetria ímpar entre as forças resultantes.&lt;br /&gt;
&lt;br /&gt;
Com isso garantido, basta fazer o cálculo numérico de uma metade da distribuição levando em conta a presença da outra metade, porém não tornando necessário que os cálculos sejam repetidos pois o comportamento de cada partícula espelhada torna-se perfeitamente previsível.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&#039;python&#039;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Importando as bibliotecas necessárias &lt;br /&gt;
from math import *&lt;br /&gt;
import matplotlib.pyplot as plt&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
A=[]     #criamos uma lista vazia&lt;br /&gt;
&lt;br /&gt;
N =  1000       # Determinamos o número de partículas utilizado&lt;br /&gt;
&lt;br /&gt;
for i in range(int(N)):&lt;br /&gt;
&lt;br /&gt;
    A.append([np.random.rand() ,2*(np.random.rand() - 1/2)]) #valores aleatórios de x entre 0 e 1 e de v entre -1 e 1 são adicionados&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A = np.array(A)&lt;br /&gt;
X= np.array([])     #Arrays usados para exemplificar&lt;br /&gt;
V= np.array([])     #distribuição inicial&lt;br /&gt;
&lt;br /&gt;
for i in range (len(A)):    #simetrização da distribuição&lt;br /&gt;
    X=np.append(X,A[i][0])&lt;br /&gt;
    V=np.append(V,A[i][1])&lt;br /&gt;
    V=np.append(V,-A[i][1])&lt;br /&gt;
    X=np.append(X,-A[i][0])&lt;br /&gt;
    &lt;br /&gt;
plt.xlabel(&#039;posição&#039;)             #plot da distribuição inicial&lt;br /&gt;
plt.ylabel(&#039;momento linear&#039;)&lt;br /&gt;
plt.title(&#039;Espaço de fase inicial&#039;)&lt;br /&gt;
plt.grid(True)&lt;br /&gt;
&lt;br /&gt;
plt.scatter(X,V)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ADD IMAGEM - &amp;lt;matplotlib.collections.PathCollection at 0x7f4ab8366ad0&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Função de Indexação ==&lt;br /&gt;
&lt;br /&gt;
Em outras modelagens como a interação de cargas em sistemas bidimensionais ou de massas em tridimensionais é necessário calcular a força de interação entre partículas em função das distâncias. Na modelagem proposta não é necessário calcular distâncias mas sim saber o ordenamento das partículas ao longo do eixo &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
No entanto, é muito comum em simulações que utilizam métodos de integração utilizar vetores que possuam apenas uma coluna e &amp;lt;math&amp;gt;2N&amp;lt;/math&amp;gt; linhas, sendo a primeira metade de linhas correspondentes às posições e a outra metade correspondente às velocidades.&lt;br /&gt;
&lt;br /&gt;
Para não precisar atualizar as linhas de posição e velocidade do vetor 2N-dimensional, utiliza-se uma função de indexação que será responsável por indicar qual é a ordem da partícula correspondente a uma determinada linha em um dado estado.&lt;br /&gt;
&lt;br /&gt;
Assim, a posição da partícula é atualizada no tempo e seu índice também, porém a posição dela no vetor de fase nunca se modifica. Esse fato é importante para estudos que pretendem analisar a trajetória de um único corpo no tempo, como é feito nos diagramas de Poincaré, por exemplo.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&#039;python&#039;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
teste = np.array([2,6,3,9,0,1,4])   #criado um vetor de teste  para que seus valores sejam indexados&lt;br /&gt;
&lt;br /&gt;
def indexador(arr):                 #define-se a função&lt;br /&gt;
    &lt;br /&gt;
    ordenador = []                  #é criada uma lista vazia&lt;br /&gt;
    &lt;br /&gt;
    for i in range(len(arr)):&lt;br /&gt;
        &lt;br /&gt;
        ordenador.append([abs(arr[i]),i]) # para cada valor criamos uma lista com o valor absoluto e a ordem atual&lt;br /&gt;
        &lt;br /&gt;
    ordenador.sort()                      # é feito o ordenamento da lista &#039;ordenador&#039; de acordo com o primeiro elemento&lt;br /&gt;
    &lt;br /&gt;
    for i in range(len(arr)):             &lt;br /&gt;
&lt;br /&gt;
        ordenador[i].append(i)            # é adicionado um terceiro valor para cada elemento de ordenador com o valor da sua nova ordem na sequência&lt;br /&gt;
        &lt;br /&gt;
    for i in range(len(arr)):&lt;br /&gt;
        &lt;br /&gt;
        a = ordenador[i][0]&lt;br /&gt;
        b = ordenador[i][1]             # É feita a troca do segundo com o primeiro valor de cada elemento de ordenador para...&lt;br /&gt;
        ordenador[i][0] = b&lt;br /&gt;
        ordenador[i][1] = a&lt;br /&gt;
        &lt;br /&gt;
    ordenador.sort()                    # reordenar os elementos de acordo com a ordem antiga&lt;br /&gt;
        &lt;br /&gt;
        &lt;br /&gt;
    lista = []&lt;br /&gt;
    &lt;br /&gt;
    for i in range(len(arr)):&lt;br /&gt;
        &lt;br /&gt;
        lista.append(ordenador[i][2])   #por fim guarda-se a ordem correspondente a cada valor da lista colocada como variável &lt;br /&gt;
        &lt;br /&gt;
    indexador = np.array(lista)  &lt;br /&gt;
        &lt;br /&gt;
    return indexador                     # e essa ordem é retornada como saída da função&lt;br /&gt;
&lt;br /&gt;
print(indexador(teste))&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Função de movimento e aceleração das partículas ==&lt;br /&gt;
&lt;br /&gt;
Para simular como um estado evolui no tempo, é necessário que tenhamos as derivadas temporais de todas as coordenadas do vetor de estado (&amp;lt;math&amp;gt;y&amp;lt;/math&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Para as coordenadas espaciais x (&amp;lt;math&amp;gt;y[i], \ 0\leq i&amp;lt; N &amp;lt;/math&amp;gt;) temos que:  &lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\dot{x_i} = y_{[i + N]} &lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Para as coordenadas de velocidade v (&amp;lt;math&amp;gt;y[i], \ N\leq i&amp;lt; 2N-1 &amp;lt;/math&amp;gt;) teremos que usar a relação de forças que foi descrita no modelo. Algumas simplificações comuns serão feitas como considerar constantes físicas unitárias (&amp;lt;math&amp;gt;m = q = \kappa = 1&amp;lt;/math&amp;gt;) e relações de proporcionalidade com o número de partículas do sistema para mantê-lo com um comportamento mais suave (&amp;lt;math&amp;gt;F = 1/N&amp;lt;/math&amp;gt;). O programa será escrito levando em conta o modelo de cargas elétricas: &lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\dot{v_i} = \ddot{x_i} = \frac{1}{m} \Big[ -\kappa y_{[i - N]} + (2i - N - 1)F \Big]&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A relação acima pode ser descrita de forma diferente se levarmos em conta que a simulação é simétrica em x e que todas as posições iniciais são positivas.&lt;br /&gt;
&lt;br /&gt;
A partícula que recebe índice &amp;lt;math&amp;gt;1&amp;lt;/math&amp;gt; possui &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; partículas à esquerda (x negativo) e &amp;lt;math&amp;gt;(N-1)&amp;lt;/math&amp;gt; partículas a direita (x positivo), o que resulta uma força de interação de &amp;lt;math&amp;gt;F&amp;lt;/math&amp;gt; para a direita. A de índice 2 terá força de interação &amp;lt;math&amp;gt;3F&amp;lt;/math&amp;gt;, a de índice 3 terá &amp;lt;math&amp;gt;5F&amp;lt;/math&amp;gt; e assim por diante.&lt;br /&gt;
&lt;br /&gt;
Antes de reescrever a equação da aceleração deve-se levar em consideração de uma das partículas distribuídas no espaço de fase assumirem coordenadas negativas (caso tenham proximidade da origem e velocidade negativa). Novamente usando o argumento de simetria, sabe-se que caso uma partícula assuma uma posição negativa, a partícula espelhada assumirá a posição simétrica em relação a origem. Dessa forma basta calcular a força de interação sobre a partícula espelhada e inverter o sinal para a partícula original. Levando tudo isso em conta teremos a seguinte equação da aceleração:  &lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\ddot{x_i} = \frac{1}{m}\Big[ -\kappa y_{[i - N]} + \frac{y_{[i - N]}}{|y_{[i - N]}|}(2i- 1)F     \Big]&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&#039;python&#039;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
def deriv(t, y):&lt;br /&gt;
&lt;br /&gt;
    p = len(y)&lt;br /&gt;
    k = indexador(y[0:int(p/2)])&lt;br /&gt;
    sinal=abs(y[0:int(p/2)])/y[0:int(p/2)]&lt;br /&gt;
    &lt;br /&gt;
    dydt = np.zeros(int(p))&lt;br /&gt;
&lt;br /&gt;
    dydt[0:int(p/2)] = y[int(p/2):int(p)] #definindo as derivadas temporais de posição&lt;br /&gt;
    &lt;br /&gt;
                                                         #definindo as derivadas temporais de velocidade&lt;br /&gt;
    dydt[int(p/2):int(p)] = -y[0:int(p/2)] + ((np.ones(int(p/2)) + 2*k )/(p))*sinal&lt;br /&gt;
    &lt;br /&gt;
    deriv = dydt[0:int(p)]&lt;br /&gt;
    &lt;br /&gt;
    return deriv&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Função de Energia do estado ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&#039;python&#039;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
def Energia_total(y):     # Para calcular a energia precisamos apenas do vetor de estado y do sistema de partículas utilizado&lt;br /&gt;
&lt;br /&gt;
    l = int(len(y)/2)     # a variável l representa a quantidade de valores que teremos &lt;br /&gt;
    pot = np.zeros(l+1)   # cria-se um array com l + 1 dimensões para representar as l partículas e os respectivos potenciais &lt;br /&gt;
&lt;br /&gt;
    r = abs(np.array(y[0:l]))       # cria-se um array r com as coordenadas de posição do estado y&lt;br /&gt;
    r = np.append(r,4)   # adiciona-se uma coordenada para representar o contorno externo do experimento&lt;br /&gt;
    r.sort()              # Faz-se o ordenamento desse array por distância da origem&lt;br /&gt;
    &lt;br /&gt;
    pot_0 = 0             # O potencial do contorno deve ser nulo &lt;br /&gt;
    &lt;br /&gt;
    for i in range(l,0,-1):     # Loop decrescente que define o potencial de posição para cada partícula &lt;br /&gt;
        &lt;br /&gt;
        pot[i] = pot_0&lt;br /&gt;
        &lt;br /&gt;
        pot_0 = pot_0 + (1/2)*(i/l)*abs((r[i] - r[i-1]))&lt;br /&gt;
        &lt;br /&gt;
    pot[0] = pot_0&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    v = np.array(y[l:-1])       # Cria-se um array com os valores de velocidade&lt;br /&gt;
    &lt;br /&gt;
    E_total = 0&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    for i in range(l-1):        #Soma-se as energias de cada partícula&lt;br /&gt;
&lt;br /&gt;
      E_total = E_total + pot[i] + 0.5*v[i]**2 + 0.5*r[i]**2&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    return 2*E_total, r[0:l+1], pot[0:l+1]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Evolução da Distribuição no Tempo ==&lt;br /&gt;
&lt;br /&gt;
Para simular a evolução temporal da distribuição inicial escolhida, precisamos de um método de integração numérica no tempo. O método escolhido deverá partir do estado da distribuição e da função de derivada temporal atribuída para estimar como a evolução ocorre.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&#039;python&#039;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
from scipy.integrate import solve_ivp  #integrador numérico escolhido&lt;br /&gt;
&lt;br /&gt;
def nova_fase(y,i):      #função que define a função do espaço de fase em cada instante de tempo, adaptada para o integrador numérico escolhido&lt;br /&gt;
    &lt;br /&gt;
    fase = np.array([])&lt;br /&gt;
    &lt;br /&gt;
    for j in range(len(y)):&lt;br /&gt;
            &lt;br /&gt;
        fase = np.append(fase,y[j][i])&lt;br /&gt;
        &lt;br /&gt;
    return fase&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Fase = []   # Cria uma lista para reservar a evolução do espaço de fase no tempo&lt;br /&gt;
T = np.array([])     # Cria uma lista que registra os tempos de marcação do integrador numérico&lt;br /&gt;
E = np.array([])     # Cria uma lista que registra a energia da distribuição no tempo&lt;br /&gt;
E_pot = []           # Cria uma lista que registra o comportamento da energia potencial ao longo de x no tempo&lt;br /&gt;
X_pot = []           # O análogo ao anterior para a posição&lt;br /&gt;
tempo = 0.0  # o tempo começa em 0&lt;br /&gt;
delta_t = 1   # o intervalo de tempo é 0.1&lt;br /&gt;
&lt;br /&gt;
X = np.random.rand(4000)&lt;br /&gt;
V = np.random.rand(4000) - np.ones(4000)*0.5&lt;br /&gt;
y = np.append(X,2*V)    #define-se a fase inicial&lt;br /&gt;
&lt;br /&gt;
for j in range(50):&lt;br /&gt;
&lt;br /&gt;
    sol = solve_ivp(deriv, (tempo,tempo + delta_t), y , rtol = 0.00001)     # integrador numérico realiza a integração&lt;br /&gt;
&lt;br /&gt;
    T= np.append(T, sol.t)&lt;br /&gt;
&lt;br /&gt;
    tempo = tempo + delta_t&lt;br /&gt;
    for i in range(len(sol.t)):       #o integrador possui um número de vetores intermediários ao vetor da solução final sol.y[-1]&lt;br /&gt;
        &lt;br /&gt;
        &lt;br /&gt;
        y = nova_fase(sol.y,i)                              # aqui são registradas as funções definidas para cada estado de integração&lt;br /&gt;
        Fase.append(y)&lt;br /&gt;
&lt;br /&gt;
        Ei =  Energia_total(y)&lt;br /&gt;
&lt;br /&gt;
        E = np.append(E, Ei[0])&lt;br /&gt;
&lt;br /&gt;
        E_pot.append(Ei[2])&lt;br /&gt;
        X_pot.append(Ei[1])&lt;br /&gt;
    &lt;br /&gt;
    y = nova_fase(sol.y, -1)                     # A distribuição atual é atualizada para nova integração &lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Animações ===&lt;br /&gt;
&lt;br /&gt;
Foi utilizado o código abaixo para gerar os gifs da evolução temporal&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&#039;python&#039;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
from matplotlib.animation import FuncAnimation&lt;br /&gt;
from IPython import display&lt;br /&gt;
&lt;br /&gt;
# código base para montar gifs da evolução temporal &lt;br /&gt;
fig, (ax1, ax2, ax3) = plt.subplots(3,1 ,figsize = (6,14))    #cria uma figura de três linhas&lt;br /&gt;
&lt;br /&gt;
lines = []                                                    #objeto padrão da biblioteca FuncAnimation&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def animate(frame):&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    # As entradas são limpas para evitar superposição de imagens nos frames&lt;br /&gt;
    ax1.cla()              &lt;br /&gt;
    ax2.cla()&lt;br /&gt;
    ax3.cla()&lt;br /&gt;
&lt;br /&gt;
    # Plot do espaço de fases&lt;br /&gt;
    ax1.scatter(Fase[frame][0:4000], Fase[frame][4000:8000], color = &#039;k&#039;, s  =5)&lt;br /&gt;
    ax1.scatter(-Fase[frame][0:4000], -Fase[frame][4000:8000], color = &#039;k&#039;, s = 5)&lt;br /&gt;
    ax1.set_xlabel(&#039;$posição$&#039;)&lt;br /&gt;
    ax1.set_ylabel(&#039;$velocidade$&#039;)&lt;br /&gt;
    ax1.set_xlim(-4,4)&lt;br /&gt;
    ax1.set_ylim(-2.5,2.5)   &lt;br /&gt;
&lt;br /&gt;
    # Plot da distribuição de Potencial&lt;br /&gt;
    ax2.plot(X_pot[frame],E_pot[frame], color = &#039;grey&#039;)&lt;br /&gt;
    ax2.plot(-np.flip(X_pot[frame]),np.flip(E_pot[frame]), color = &#039;grey&#039;)&lt;br /&gt;
    ax2.scatter(X_pot[frame],E_pot[frame], color = &#039;b&#039;, s  =5)&lt;br /&gt;
    ax2.scatter(-np.flip(X_pot[frame]),np.flip(E_pot[frame]), color = &#039;b&#039;, s  =5)&lt;br /&gt;
    ax2.set_ylabel(&amp;quot;potencial&amp;quot;)&lt;br /&gt;
    ax2.set_xlabel(&amp;quot;posição&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    # Plot da energia total no tempo&lt;br /&gt;
    ax3.plot(T[0:frame],E[0:frame], color = &#039;k&#039;)&lt;br /&gt;
    ax3.set_ylabel(&amp;quot;Energia&amp;quot;)&lt;br /&gt;
    ax3.set_xlabel(&amp;quot;tempo&amp;quot;)&lt;br /&gt;
    ax3.set_xlim(0, T[-1])&lt;br /&gt;
    ax3.set_ylim(E[0]- 10, E[0] + 10)&lt;br /&gt;
    &lt;br /&gt;
    return lines&lt;br /&gt;
&lt;br /&gt;
# Execução do programa e geração do gif inline   &lt;br /&gt;
anima = FuncAnimation(fig, animate,frames=len(T), interval=20, blit=True)&lt;br /&gt;
video = anima.to_html5_video()&lt;br /&gt;
html = display.HTML(video)&lt;br /&gt;
display.display(html)&lt;br /&gt;
&lt;br /&gt;
plt.close()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Renanrs</name></author>
	</entry>
	<entry>
		<id>http://fiscomp.if.ufrgs.br/index.php?title=Din%C3%A2mica_Molecular_de_Part%C3%ADculas-Planares_Interagentes&amp;diff=6132</id>
		<title>Dinâmica Molecular de Partículas-Planares Interagentes</title>
		<link rel="alternate" type="text/html" href="http://fiscomp.if.ufrgs.br/index.php?title=Din%C3%A2mica_Molecular_de_Part%C3%ADculas-Planares_Interagentes&amp;diff=6132"/>
		<updated>2021-11-22T11:23:39Z</updated>

		<summary type="html">&lt;p&gt;Renanrs: /* Função de movimento e aceleração das partículas */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
Em construção&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Grupo: Antônio Carlan, Gabriela Pereira, Renan Soares e Victor Gandara&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Objetivo:&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= O modelo =&lt;br /&gt;
&lt;br /&gt;
É possível criar um modelo simplificado de interação de partículas imaginando que todas elas são compostas por planos de mesma massa e sem espessura, paralelos entre si e com liberdade de movimento relevante no eixo perpendicular às superfícies das mesmas.&lt;br /&gt;
&lt;br /&gt;
Tal modelo pode ser utilizado para estudar a dinâmica de um número elevado de partículas e conta com algumas particularidades simplificadoras de complexidade numérica. Alguns estudos utilizam esse modelo para estudar o comportamento de feixes carregados com a menor dimensionalidade possível [1] e também para sistemas auto-gravitantes [2]. As duas aplicações citadas serão as demonstradas a seguir mas o modelo é versátil para diferentes condições iniciais e de contorno.&lt;br /&gt;
&lt;br /&gt;
== Descrição do Modelo ==&lt;br /&gt;
&lt;br /&gt;
=== Disposição espacial ===&lt;br /&gt;
&lt;br /&gt;
Um número &amp;quot;N&amp;quot; de partículas-plano de mesma massa é disposto ao longo do eixo x com uma função de distribuição n(x) e com todas as partículas paralelas ao plano yz. No caso do modelo auto-gravitante, movimentos ao longo do eixo z não têm relevância prática mas para o modelo de um feixe de planos é definido que todos os planos se movem na direção z com mesma velocidade.&lt;br /&gt;
&lt;br /&gt;
A consideração de movimento ao longo do eixo z para o modelo de feixe é importante para a análise do comportamento do espaço de fases ao longo do comprimento do acelerador de partículas. Aqui, podemos imaginar estudar casos em que o feixe gerado inicialmente no espaço de fase terá um comportamento constante no tempo para cada secção transversal em xy para uma coordenada em z pré-estabelecida.&lt;br /&gt;
&lt;br /&gt;
ADD IMAGEM &lt;br /&gt;
&lt;br /&gt;
=== Ausência de Efeitos de Colisão ===&lt;br /&gt;
&lt;br /&gt;
O modelo leva em consideração que todas os planos possuem a mesma massa e que as colisões não levam a perda de energia no sistema.&lt;br /&gt;
&lt;br /&gt;
Dessa forma podemos prever o que ocorre quando a posição de dois planos coincide pois há conservação no momento linear em x e o coeficiente de restituição (razão entre as velocidades de afastamento e aproximação dos corpos) é igual a 1.&lt;br /&gt;
&lt;br /&gt;
ADD IMAGEM&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{cases} mv_1 - mv_2 = -mv_1&#039; + mv_2&#039;  \\ \\   \frac{v_1&#039; + v_2&#039;}{v_1 + v_2} = 1  \end{cases}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
O sistema de equações resulta em: &amp;lt;math&amp;gt;v_1&#039; = v_2 \ \ \ ; \ \ \ v_2&#039; = v_1&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dessa forma, é irrelevante ponderar se houve de fato uma colisão com troca de velocidades ou se as partículas simplesmente cruzam sem interferir de forma relevante. A última consideração é a levada em conta no ponto de vista computacional pois exclui a necessidade de atualizar a velocidade das partículas que passaram pela mesma posição no eixo x.&lt;br /&gt;
&lt;br /&gt;
=== Interação entre as partículas ===&lt;br /&gt;
&lt;br /&gt;
Para analisar a interação entre as partículas é preciso entender como uma única partícula afeta seu entorno.&lt;br /&gt;
&lt;br /&gt;
No caso das partículas-plano carregadas eletricamente podemos considerar os efeitos de campo elétrico de um isolante plano infinito:&lt;br /&gt;
&lt;br /&gt;
ADD IMAGEM&lt;br /&gt;
&lt;br /&gt;
Pela lei de Gauss, para uma dada distribuição de carga com densidade superficial &amp;lt;math&amp;gt;\sigma&amp;lt;/math&amp;gt;: &lt;br /&gt;
:&amp;lt;math&amp;gt; &lt;br /&gt;
\oint  \overrightarrow{E}. d\overrightarrow{S}  = \frac{Q_{int}}{\epsilon_0} &lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
E.A - (-E.A) = \frac{\sigma . A   }{\epsilon_0} &lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
E= \frac{\sigma }{2\epsilon_0}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
O mesmo pode ser feito para um plano com densidade de massa distribuída uniformemente, para o caso do sistema auto-gravitante, com mudança na constante física multiplicativa e no sinal.&lt;br /&gt;
&lt;br /&gt;
O fato importante a ser destacado aqui é a total independência do campo gerado pela partícula e a distância. Dessa forma, a interação entre as partículas em qualquer sistema que seguir esse modelo não terá dependência da distância entre elas e sim da posição relativa entre as partículas consideradas.&lt;br /&gt;
&lt;br /&gt;
=== Interferência externa do sistema ===&lt;br /&gt;
&lt;br /&gt;
Para o caso dos planos no sistema auto-gravitante não é necessária ação externa alguma para manter o equilíbrio em um sistema dinâmico estável. Sempre é levado em conta que todas as partículas têm velocidade em x inferior a velocidade de escape do restante do sistema e, por conta disso e das forças sempre atrativas de interação, o sistema não expande indefinidamente.&lt;br /&gt;
&lt;br /&gt;
Já no caso de planos carregados eletricamente as forças de interação entre os planos serão sempre repulsivas e a energia total do sistema é positiva. Sem uma interação externa, mesmo um sistema composto por um número limitado de partículas de fraca interação expandiria indefinidamente. Por causa disso, nesse caso é considerado que há uma força colimadora no feixe de planos proporcional a distância da origem. A origem dessa força externa vem de modelos de maior dimensionalidade de aceleradores de partícula que contam com um campo magnético externo capaz de colimar um feixe de cargas radialmente, por não existir um paralelo direto para o modelo unidimensional consideramos apenas uma força restauradora que impede a expansão indefinida do sistema como um todo. Também é possível ajustar condições de contorno simulando as paredes externas do acelerador como placas condutoras infinitas e com potencial definido. Esse tipo de consideração pode ser feita para sistemas que não são simétricos e impede que as cargas se afastem demasiadamente da origem.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
ADD IMAGEM&lt;br /&gt;
&lt;br /&gt;
= Comportamento de uma Partícula no Sistema =&lt;br /&gt;
&lt;br /&gt;
Graças a caracterização das partículas temos que o campo gerado por uma partícula-plano pode ser caracterizado (para ambos os sistemas citados) da seguinte forma:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
E_i(x) = -\lambda\Theta[-(x-x_i)]  + \lambda\Theta(x-x_i)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ADD IMAGEM&lt;br /&gt;
&lt;br /&gt;
Em que a constante &amp;lt;math&amp;gt;\lambda&amp;lt;/math&amp;gt; pode ser tanto positiva (cargas positivas) quanto negativa (cargas negativas ou interação gravitacional) e a função &amp;lt;math&amp;gt;\Theta&amp;lt;/math&amp;gt; equivale a função degrau de Heaviside:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\Theta(x) = \begin{cases} 0, \ \ x&amp;lt;0 \\ 1, \ \ x&amp;gt;0 \end{cases}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dessa forma, para exemplificação, um sistema de 5 partículas-plano teria uma interação da seguinte forma:&lt;br /&gt;
&lt;br /&gt;
ADD IMAGEM&lt;br /&gt;
&lt;br /&gt;
Aqui, F seria a força de interação entre duas partículas no caso de planos carregados. É possível notar que a força de interação varia de duas unidades dessa constante para cada partícula contada em uma direção e que a força máxima sentida (pelas partículas-plano localizadas nas extremidades) é proporcional a &amp;lt;math&amp;gt;(N-1)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
É possível notar que para uma distribuição de partículas-plano do tipo:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt; &lt;br /&gt;
n(x) =   \sum_{i=1}^N \delta(x_i) &lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
com o índice  &amp;lt;math&amp;gt;\ \ &#039;&#039;i&#039;&#039;\ &amp;lt;/math&amp;gt; sendo a ordem da partícula contada do sentido negativo para o positivo do eixo x, teremos uma força resultante de interação para uma partícula que pode ser definida por &lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
F_i =  [-(N-1) + 2(i-1)]F&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt; &lt;br /&gt;
F_i = (2i - N-1)F&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Essa força é suficiente para manter o sistema auto-gravitante coeso mas para as partículas carregadas devemos adicionar a força restauradora descrita anteriormente:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
F^{grav.}_{R,i} = (2i - N-1)F&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
F^{el.}_{R,i} = (2i - N-1)F - \kappa x_i&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Conservação da Energia do Sistema =&lt;br /&gt;
&lt;br /&gt;
Ao realizar uma simulação numérica com um grande número de entes que representam um sistema físico é importante que seja feita uma verificação sobre o quão apropriados os resultados da simulação de fato são. Uma das formas mais comuns de verificar se uma simulação numérica está correta na dinâmica molecular de vários corpos e efetuar periodicamente a soma da energia do sistema.&lt;br /&gt;
&lt;br /&gt;
No caso de sistemas como os descritos, não há nenhum incremento de energia proveniente de uma fonte externa. Mesmo para o sistema eletricamente carregado, a força restauradora é potencial e não muda a energia total do sistema dada uma distribuição inicial de posição e momento.&lt;br /&gt;
&lt;br /&gt;
Para todos os efeitos, a energia dos sistemas estudados pode ser dividida em três partes: &lt;br /&gt;
&lt;br /&gt;
== Energia Cinética ==&lt;br /&gt;
&lt;br /&gt;
Todas as partículas da distribuição escolhida terão massa e velocidade, de forma que a energia cinética do sistema será dada por:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
En_{cin} = \frac{m}{2}\sum_{i=1}^N \dot{x_i}^2&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Energia Potencial Restauradora ==&lt;br /&gt;
&lt;br /&gt;
Observada no sistema eletricamente carregado citado, pode ser descrita como:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
En_{pot} = \frac{\kappa}{2}\sum_{i=1}^N x_i^2&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Energia Potencial Intrínseca  ==&lt;br /&gt;
&lt;br /&gt;
Energia contida na interação entre as partículas. A energia de uma partícula depende do potencial na sua posição da sua carga (ou massa).&lt;br /&gt;
&lt;br /&gt;
Como potenciais não são absolutos, é estabelecido um Potencial nulo de referência nas condições de contorno do sistema. Como pode ser visto no gif com as partículas-plano carregadas em azul, são colocadas placas condutoras planas nas posições &amp;lt;math&amp;gt;x=L&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;x= -L&amp;lt;/math&amp;gt; (caso haja simetria no espaço de fase do sistema) e é estabelecido que os potenciais nessas posições são &amp;lt;math&amp;gt;V(-L) = V(L) = 0&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Uma maneira mais simples de determinar o potencial das N partículas é considerar que há nas posições de contorno,  &amp;lt;math&amp;gt;x_0&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;x_{N+1}&amp;lt;/math&amp;gt;, partículas não interagentes.&lt;br /&gt;
&lt;br /&gt;
A diferença de potencial entre duas posições vizinhas pode ser determinada por:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\Delta V_i = (x_{i} - x_{i - 1})E_i&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
com &amp;lt;math&amp;gt;E_i&amp;lt;/math&amp;gt; sendo o módulo do campo entre a i-ésima e a (i - 1)-ésima partícula, dado por:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
E_i = (2i - N - 1)\lambda&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ADD IMAGEM&lt;br /&gt;
&lt;br /&gt;
O que resulta na energia de uma partícula específica (k-ésima) descrita por:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
En_k = \alpha \sum_{i = 1}^{k}(x_i - x_{i - 1})(2i - N - 1)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aqui foram aglutinadas as possíveis constantes multiplicativas em uma constante &amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt; que pode ser escolhida para se adequar ao sistema estudado e a energia intrínseca do sistema é dada pela soma da energia de interação de cada uma das partículas. Como o sistema é dividido em intervalos com variação de potencial discretos, podemos escrever a energia intrínseca da seguinte forma:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
En_{int} = \alpha \sum_{k = 1}^{N}\sum_{i = 1}^{k}(x_i - x_{i - 1})(2i - N - 1)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A soma dessas três energias deve se manter constante (ou com pouca variação relativa significativa, pelo menos) durante a simulação:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
E_{total} = En_{cin} + En_{pot} + En_{int} = cte.&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Modelagem Computacional =&lt;br /&gt;
&lt;br /&gt;
== Criando a Distribuição do Sistema ==&lt;br /&gt;
&lt;br /&gt;
O primeiro passo para criar a simulação das N partículas é definir as coordenadas fundamentais das partículas em si (posição e velocidade).&lt;br /&gt;
&lt;br /&gt;
A simulação que será utilizada de exemplo é simétrica no espaço de fase, ou seja, para cada partícula com coordenadas &amp;lt;math&amp;gt;(x_i,y_i)&amp;lt;/math&amp;gt; existirá uma partícula espelhada &lt;br /&gt;
com coordenadas &amp;lt;math&amp;gt;(-x_i,-y_i)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Esse artifício é utilizado para que o centro de massa mantenha-se na origem e que o momento linear do sistema em x seja sempre nulo. Com isso é garantido que haverá sempre, também, a simetria par entre as energias das partículas espelhadas e a simetria ímpar entre as forças resultantes.&lt;br /&gt;
&lt;br /&gt;
Com isso garantido, basta fazer o cálculo numérico de uma metade da distribuição levando em conta a presença da outra metade, porém não tornando necessário que os cálculos sejam repetidos pois o comportamento de cada partícula espelhada torna-se perfeitamente previsível.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&#039;python&#039;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Importando as bibliotecas necessárias &lt;br /&gt;
from math import *&lt;br /&gt;
import matplotlib.pyplot as plt&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
A=[]     #criamos uma lista vazia&lt;br /&gt;
&lt;br /&gt;
N =  1000       # Determinamos o número de partículas utilizado&lt;br /&gt;
&lt;br /&gt;
for i in range(int(N)):&lt;br /&gt;
&lt;br /&gt;
    A.append([np.random.rand() ,2*(np.random.rand() - 1/2)]) #valores aleatórios de x entre 0 e 1 e de v entre -1 e 1 são adicionados&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A = np.array(A)&lt;br /&gt;
X= np.array([])     #Arrays usados para exemplificar&lt;br /&gt;
V= np.array([])     #distribuição inicial&lt;br /&gt;
&lt;br /&gt;
for i in range (len(A)):    #simetrização da distribuição&lt;br /&gt;
    X=np.append(X,A[i][0])&lt;br /&gt;
    V=np.append(V,A[i][1])&lt;br /&gt;
    V=np.append(V,-A[i][1])&lt;br /&gt;
    X=np.append(X,-A[i][0])&lt;br /&gt;
    &lt;br /&gt;
plt.xlabel(&#039;posição&#039;)             #plot da distribuição inicial&lt;br /&gt;
plt.ylabel(&#039;momento linear&#039;)&lt;br /&gt;
plt.title(&#039;Espaço de fase inicial&#039;)&lt;br /&gt;
plt.grid(True)&lt;br /&gt;
&lt;br /&gt;
plt.scatter(X,V)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ADD IMAGEM - &amp;lt;matplotlib.collections.PathCollection at 0x7f4ab8366ad0&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Função de Indexação ==&lt;br /&gt;
&lt;br /&gt;
Em outras modelagens como a interação de cargas em sistemas bidimensionais ou de massas em tridimensionais é necessário calcular a força de interação entre partículas em função das distâncias. Na modelagem proposta não é necessário calcular distâncias mas sim saber o ordenamento das partículas ao longo do eixo &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
No entanto, é muito comum em simulações que utilizam métodos de integração utilizar vetores que possuam apenas uma coluna e &amp;lt;math&amp;gt;2N&amp;lt;/math&amp;gt; linhas, sendo a primeira metade de linhas correspondentes às posições e a outra metade correspondente às velocidades.&lt;br /&gt;
&lt;br /&gt;
Para não precisar atualizar as linhas de posição e velocidade do vetor 2N-dimensional, utiliza-se uma função de indexação que será responsável por indicar qual é a ordem da partícula correspondente a uma determinada linha em um dado estado.&lt;br /&gt;
&lt;br /&gt;
Assim, a posição da partícula é atualizada no tempo e seu índice também, porém a posição dela no vetor de fase nunca se modifica. Esse fato é importante para estudos que pretendem analisar a trajetória de um único corpo no tempo, como é feito nos diagramas de Poincaré, por exemplo.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&#039;python&#039;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
teste = np.array([2,6,3,9,0,1,4])   #criado um vetor de teste  para que seus valores sejam indexados&lt;br /&gt;
&lt;br /&gt;
def indexador(arr):                 #define-se a função&lt;br /&gt;
    &lt;br /&gt;
    ordenador = []                  #é criada uma lista vazia&lt;br /&gt;
    &lt;br /&gt;
    for i in range(len(arr)):&lt;br /&gt;
        &lt;br /&gt;
        ordenador.append([abs(arr[i]),i]) # para cada valor criamos uma lista com o valor absoluto e a ordem atual&lt;br /&gt;
        &lt;br /&gt;
    ordenador.sort()                      # é feito o ordenamento da lista &#039;ordenador&#039; de acordo com o primeiro elemento&lt;br /&gt;
    &lt;br /&gt;
    for i in range(len(arr)):             &lt;br /&gt;
&lt;br /&gt;
        ordenador[i].append(i)            # é adicionado um terceiro valor para cada elemento de ordenador com o valor da sua nova ordem na sequência&lt;br /&gt;
        &lt;br /&gt;
    for i in range(len(arr)):&lt;br /&gt;
        &lt;br /&gt;
        a = ordenador[i][0]&lt;br /&gt;
        b = ordenador[i][1]             # É feita a troca do segundo com o primeiro valor de cada elemento de ordenador para...&lt;br /&gt;
        ordenador[i][0] = b&lt;br /&gt;
        ordenador[i][1] = a&lt;br /&gt;
        &lt;br /&gt;
    ordenador.sort()                    # reordenar os elementos de acordo com a ordem antiga&lt;br /&gt;
        &lt;br /&gt;
        &lt;br /&gt;
    lista = []&lt;br /&gt;
    &lt;br /&gt;
    for i in range(len(arr)):&lt;br /&gt;
        &lt;br /&gt;
        lista.append(ordenador[i][2])   #por fim guarda-se a ordem correspondente a cada valor da lista colocada como variável &lt;br /&gt;
        &lt;br /&gt;
    indexador = np.array(lista)  &lt;br /&gt;
        &lt;br /&gt;
    return indexador                     # e essa ordem é retornada como saída da função&lt;br /&gt;
&lt;br /&gt;
print(indexador(teste))&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Função de movimento e aceleração das partículas ==&lt;br /&gt;
&lt;br /&gt;
Para simular como um estado evolui no tempo, é necessário que tenhamos as derivadas temporais de todas as coordenadas do vetor de estado (&amp;lt;math&amp;gt;y&amp;lt;/math&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Para as coordenadas espaciais x (&amp;lt;math&amp;gt;y[i], \ 0\leq i&amp;lt; N &amp;lt;/math&amp;gt;) temos que:  &lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\dot{x_i} = y_{[i + N]} &lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Para as coordenadas de velocidade v (&amp;lt;math&amp;gt;y[i], \ N\leq i&amp;lt; 2N-1 &amp;lt;/math&amp;gt;) teremos que usar a relação de forças que foi descrita no modelo. Algumas simplificações comuns serão feitas como considerar constantes físicas unitárias (&amp;lt;math&amp;gt;m = q = \kappa = 1&amp;lt;/math&amp;gt;) e relações de proporcionalidade com o número de partículas do sistema para mantê-lo com um comportamento mais suave (&amp;lt;math&amp;gt;F = 1/N&amp;lt;/math&amp;gt;). O programa será escrito levando em conta o modelo de cargas elétricas: &lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\dot{v_i} = \ddot{x_i} = \frac{1}{m}[ -\kappa y_{[i - N]} + (2i - N - 1)F ]&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A relação acima pode ser descrita de forma diferente se levarmos em conta que a simulação é simétrica em x e que todas as posições iniciais são positivas.&lt;br /&gt;
&lt;br /&gt;
A partícula que recebe índice &amp;lt;math&amp;gt;1&amp;lt;/math&amp;gt; possui &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; partículas à esquerda (x negativo) e &amp;lt;math&amp;gt;(N-1)&amp;lt;/math&amp;gt; partículas a direita (x positivo), o que resulta uma força de interação de &amp;lt;math&amp;gt;F&amp;lt;/math&amp;gt; para a direita. A de índice 2 terá força de interação &amp;lt;math&amp;gt;3F&amp;lt;/math&amp;gt;, a de índice 3 terá &amp;lt;math&amp;gt;5F&amp;lt;/math&amp;gt; e assim por diante.&lt;br /&gt;
&lt;br /&gt;
Antes de reescrever a equação da aceleração deve-se levar em consideração de uma das partículas distribuídas no espaço de fase assumirem coordenadas negativas (caso tenham proximidade da origem e velocidade negativa). Novamente usando o argumento de simetria, sabe-se que caso uma partícula assuma uma posição negativa, a partícula espelhada assumirá a posição simétrica em relação a origem. Dessa forma basta calcular a força de interação sobre a partícula espelhada e inverter o sinal para a partícula original. Levando tudo isso em conta teremos a seguinte equação da aceleração:  &lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\ddot{x_i} = \frac{1}{m}\Big{[} -\kappa y_{[i - N]} + \frac{y_{[i - N]}}{|y_{[i - N]}|}(2i- 1)F     \Big{]}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&#039;python&#039;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
def deriv(t, y):&lt;br /&gt;
&lt;br /&gt;
    p = len(y)&lt;br /&gt;
    k = indexador(y[0:int(p/2)])&lt;br /&gt;
    sinal=abs(y[0:int(p/2)])/y[0:int(p/2)]&lt;br /&gt;
    &lt;br /&gt;
    dydt = np.zeros(int(p))&lt;br /&gt;
&lt;br /&gt;
    dydt[0:int(p/2)] = y[int(p/2):int(p)] #definindo as derivadas temporais de posição&lt;br /&gt;
    &lt;br /&gt;
                                                         #definindo as derivadas temporais de velocidade&lt;br /&gt;
    dydt[int(p/2):int(p)] = -y[0:int(p/2)] + ((np.ones(int(p/2)) + 2*k )/(p))*sinal&lt;br /&gt;
    &lt;br /&gt;
    deriv = dydt[0:int(p)]&lt;br /&gt;
    &lt;br /&gt;
    return deriv&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Função de Energia do estado ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&#039;python&#039;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
def Energia_total(y):     # Para calcular a energia precisamos apenas do vetor de estado y do sistema de partículas utilizado&lt;br /&gt;
&lt;br /&gt;
    l = int(len(y)/2)     # a variável l representa a quantidade de valores que teremos &lt;br /&gt;
    pot = np.zeros(l+1)   # cria-se um array com l + 1 dimensões para representar as l partículas e os respectivos potenciais &lt;br /&gt;
&lt;br /&gt;
    r = abs(np.array(y[0:l]))       # cria-se um array r com as coordenadas de posição do estado y&lt;br /&gt;
    r = np.append(r,4)   # adiciona-se uma coordenada para representar o contorno externo do experimento&lt;br /&gt;
    r.sort()              # Faz-se o ordenamento desse array por distância da origem&lt;br /&gt;
    &lt;br /&gt;
    pot_0 = 0             # O potencial do contorno deve ser nulo &lt;br /&gt;
    &lt;br /&gt;
    for i in range(l,0,-1):     # Loop decrescente que define o potencial de posição para cada partícula &lt;br /&gt;
        &lt;br /&gt;
        pot[i] = pot_0&lt;br /&gt;
        &lt;br /&gt;
        pot_0 = pot_0 + (1/2)*(i/l)*abs((r[i] - r[i-1]))&lt;br /&gt;
        &lt;br /&gt;
    pot[0] = pot_0&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    v = np.array(y[l:-1])       # Cria-se um array com os valores de velocidade&lt;br /&gt;
    &lt;br /&gt;
    E_total = 0&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    for i in range(l-1):        #Soma-se as energias de cada partícula&lt;br /&gt;
&lt;br /&gt;
      E_total = E_total + pot[i] + 0.5*v[i]**2 + 0.5*r[i]**2&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    return 2*E_total, r[0:l+1], pot[0:l+1]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Evolução da Distribuição no Tempo ==&lt;br /&gt;
&lt;br /&gt;
Para simular a evolução temporal da distribuição inicial escolhida, precisamos de um método de integração numérica no tempo. O método escolhido deverá partir do estado da distribuição e da função de derivada temporal atribuída para estimar como a evolução ocorre.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&#039;python&#039;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
from scipy.integrate import solve_ivp  #integrador numérico escolhido&lt;br /&gt;
&lt;br /&gt;
def nova_fase(y,i):      #função que define a função do espaço de fase em cada instante de tempo, adaptada para o integrador numérico escolhido&lt;br /&gt;
    &lt;br /&gt;
    fase = np.array([])&lt;br /&gt;
    &lt;br /&gt;
    for j in range(len(y)):&lt;br /&gt;
            &lt;br /&gt;
        fase = np.append(fase,y[j][i])&lt;br /&gt;
        &lt;br /&gt;
    return fase&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Fase = []   # Cria uma lista para reservar a evolução do espaço de fase no tempo&lt;br /&gt;
T = np.array([])     # Cria uma lista que registra os tempos de marcação do integrador numérico&lt;br /&gt;
E = np.array([])     # Cria uma lista que registra a energia da distribuição no tempo&lt;br /&gt;
E_pot = []           # Cria uma lista que registra o comportamento da energia potencial ao longo de x no tempo&lt;br /&gt;
X_pot = []           # O análogo ao anterior para a posição&lt;br /&gt;
tempo = 0.0  # o tempo começa em 0&lt;br /&gt;
delta_t = 1   # o intervalo de tempo é 0.1&lt;br /&gt;
&lt;br /&gt;
X = np.random.rand(4000)&lt;br /&gt;
V = np.random.rand(4000) - np.ones(4000)*0.5&lt;br /&gt;
y = np.append(X,2*V)    #define-se a fase inicial&lt;br /&gt;
&lt;br /&gt;
for j in range(50):&lt;br /&gt;
&lt;br /&gt;
    sol = solve_ivp(deriv, (tempo,tempo + delta_t), y , rtol = 0.00001)     # integrador numérico realiza a integração&lt;br /&gt;
&lt;br /&gt;
    T= np.append(T, sol.t)&lt;br /&gt;
&lt;br /&gt;
    tempo = tempo + delta_t&lt;br /&gt;
    for i in range(len(sol.t)):       #o integrador possui um número de vetores intermediários ao vetor da solução final sol.y[-1]&lt;br /&gt;
        &lt;br /&gt;
        &lt;br /&gt;
        y = nova_fase(sol.y,i)                              # aqui são registradas as funções definidas para cada estado de integração&lt;br /&gt;
        Fase.append(y)&lt;br /&gt;
&lt;br /&gt;
        Ei =  Energia_total(y)&lt;br /&gt;
&lt;br /&gt;
        E = np.append(E, Ei[0])&lt;br /&gt;
&lt;br /&gt;
        E_pot.append(Ei[2])&lt;br /&gt;
        X_pot.append(Ei[1])&lt;br /&gt;
    &lt;br /&gt;
    y = nova_fase(sol.y, -1)                     # A distribuição atual é atualizada para nova integração &lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Animações ===&lt;br /&gt;
&lt;br /&gt;
Foi utilizado o código abaixo para gerar os gifs da evolução temporal&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&#039;python&#039;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
from matplotlib.animation import FuncAnimation&lt;br /&gt;
from IPython import display&lt;br /&gt;
&lt;br /&gt;
# código base para montar gifs da evolução temporal &lt;br /&gt;
fig, (ax1, ax2, ax3) = plt.subplots(3,1 ,figsize = (6,14))    #cria uma figura de três linhas&lt;br /&gt;
&lt;br /&gt;
lines = []                                                    #objeto padrão da biblioteca FuncAnimation&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def animate(frame):&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    # As entradas são limpas para evitar superposição de imagens nos frames&lt;br /&gt;
    ax1.cla()              &lt;br /&gt;
    ax2.cla()&lt;br /&gt;
    ax3.cla()&lt;br /&gt;
&lt;br /&gt;
    # Plot do espaço de fases&lt;br /&gt;
    ax1.scatter(Fase[frame][0:4000], Fase[frame][4000:8000], color = &#039;k&#039;, s  =5)&lt;br /&gt;
    ax1.scatter(-Fase[frame][0:4000], -Fase[frame][4000:8000], color = &#039;k&#039;, s = 5)&lt;br /&gt;
    ax1.set_xlabel(&#039;$posição$&#039;)&lt;br /&gt;
    ax1.set_ylabel(&#039;$velocidade$&#039;)&lt;br /&gt;
    ax1.set_xlim(-4,4)&lt;br /&gt;
    ax1.set_ylim(-2.5,2.5)   &lt;br /&gt;
&lt;br /&gt;
    # Plot da distribuição de Potencial&lt;br /&gt;
    ax2.plot(X_pot[frame],E_pot[frame], color = &#039;grey&#039;)&lt;br /&gt;
    ax2.plot(-np.flip(X_pot[frame]),np.flip(E_pot[frame]), color = &#039;grey&#039;)&lt;br /&gt;
    ax2.scatter(X_pot[frame],E_pot[frame], color = &#039;b&#039;, s  =5)&lt;br /&gt;
    ax2.scatter(-np.flip(X_pot[frame]),np.flip(E_pot[frame]), color = &#039;b&#039;, s  =5)&lt;br /&gt;
    ax2.set_ylabel(&amp;quot;potencial&amp;quot;)&lt;br /&gt;
    ax2.set_xlabel(&amp;quot;posição&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    # Plot da energia total no tempo&lt;br /&gt;
    ax3.plot(T[0:frame],E[0:frame], color = &#039;k&#039;)&lt;br /&gt;
    ax3.set_ylabel(&amp;quot;Energia&amp;quot;)&lt;br /&gt;
    ax3.set_xlabel(&amp;quot;tempo&amp;quot;)&lt;br /&gt;
    ax3.set_xlim(0, T[-1])&lt;br /&gt;
    ax3.set_ylim(E[0]- 10, E[0] + 10)&lt;br /&gt;
    &lt;br /&gt;
    return lines&lt;br /&gt;
&lt;br /&gt;
# Execução do programa e geração do gif inline   &lt;br /&gt;
anima = FuncAnimation(fig, animate,frames=len(T), interval=20, blit=True)&lt;br /&gt;
video = anima.to_html5_video()&lt;br /&gt;
html = display.HTML(video)&lt;br /&gt;
display.display(html)&lt;br /&gt;
&lt;br /&gt;
plt.close()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Renanrs</name></author>
	</entry>
	<entry>
		<id>http://fiscomp.if.ufrgs.br/index.php?title=Din%C3%A2mica_Molecular_de_Part%C3%ADculas-Planares_Interagentes&amp;diff=6131</id>
		<title>Dinâmica Molecular de Partículas-Planares Interagentes</title>
		<link rel="alternate" type="text/html" href="http://fiscomp.if.ufrgs.br/index.php?title=Din%C3%A2mica_Molecular_de_Part%C3%ADculas-Planares_Interagentes&amp;diff=6131"/>
		<updated>2021-11-22T11:22:17Z</updated>

		<summary type="html">&lt;p&gt;Renanrs: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
Em construção&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Grupo: Antônio Carlan, Gabriela Pereira, Renan Soares e Victor Gandara&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Objetivo:&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= O modelo =&lt;br /&gt;
&lt;br /&gt;
É possível criar um modelo simplificado de interação de partículas imaginando que todas elas são compostas por planos de mesma massa e sem espessura, paralelos entre si e com liberdade de movimento relevante no eixo perpendicular às superfícies das mesmas.&lt;br /&gt;
&lt;br /&gt;
Tal modelo pode ser utilizado para estudar a dinâmica de um número elevado de partículas e conta com algumas particularidades simplificadoras de complexidade numérica. Alguns estudos utilizam esse modelo para estudar o comportamento de feixes carregados com a menor dimensionalidade possível [1] e também para sistemas auto-gravitantes [2]. As duas aplicações citadas serão as demonstradas a seguir mas o modelo é versátil para diferentes condições iniciais e de contorno.&lt;br /&gt;
&lt;br /&gt;
== Descrição do Modelo ==&lt;br /&gt;
&lt;br /&gt;
=== Disposição espacial ===&lt;br /&gt;
&lt;br /&gt;
Um número &amp;quot;N&amp;quot; de partículas-plano de mesma massa é disposto ao longo do eixo x com uma função de distribuição n(x) e com todas as partículas paralelas ao plano yz. No caso do modelo auto-gravitante, movimentos ao longo do eixo z não têm relevância prática mas para o modelo de um feixe de planos é definido que todos os planos se movem na direção z com mesma velocidade.&lt;br /&gt;
&lt;br /&gt;
A consideração de movimento ao longo do eixo z para o modelo de feixe é importante para a análise do comportamento do espaço de fases ao longo do comprimento do acelerador de partículas. Aqui, podemos imaginar estudar casos em que o feixe gerado inicialmente no espaço de fase terá um comportamento constante no tempo para cada secção transversal em xy para uma coordenada em z pré-estabelecida.&lt;br /&gt;
&lt;br /&gt;
ADD IMAGEM &lt;br /&gt;
&lt;br /&gt;
=== Ausência de Efeitos de Colisão ===&lt;br /&gt;
&lt;br /&gt;
O modelo leva em consideração que todas os planos possuem a mesma massa e que as colisões não levam a perda de energia no sistema.&lt;br /&gt;
&lt;br /&gt;
Dessa forma podemos prever o que ocorre quando a posição de dois planos coincide pois há conservação no momento linear em x e o coeficiente de restituição (razão entre as velocidades de afastamento e aproximação dos corpos) é igual a 1.&lt;br /&gt;
&lt;br /&gt;
ADD IMAGEM&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{cases} mv_1 - mv_2 = -mv_1&#039; + mv_2&#039;  \\ \\   \frac{v_1&#039; + v_2&#039;}{v_1 + v_2} = 1  \end{cases}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
O sistema de equações resulta em: &amp;lt;math&amp;gt;v_1&#039; = v_2 \ \ \ ; \ \ \ v_2&#039; = v_1&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dessa forma, é irrelevante ponderar se houve de fato uma colisão com troca de velocidades ou se as partículas simplesmente cruzam sem interferir de forma relevante. A última consideração é a levada em conta no ponto de vista computacional pois exclui a necessidade de atualizar a velocidade das partículas que passaram pela mesma posição no eixo x.&lt;br /&gt;
&lt;br /&gt;
=== Interação entre as partículas ===&lt;br /&gt;
&lt;br /&gt;
Para analisar a interação entre as partículas é preciso entender como uma única partícula afeta seu entorno.&lt;br /&gt;
&lt;br /&gt;
No caso das partículas-plano carregadas eletricamente podemos considerar os efeitos de campo elétrico de um isolante plano infinito:&lt;br /&gt;
&lt;br /&gt;
ADD IMAGEM&lt;br /&gt;
&lt;br /&gt;
Pela lei de Gauss, para uma dada distribuição de carga com densidade superficial &amp;lt;math&amp;gt;\sigma&amp;lt;/math&amp;gt;: &lt;br /&gt;
:&amp;lt;math&amp;gt; &lt;br /&gt;
\oint  \overrightarrow{E}. d\overrightarrow{S}  = \frac{Q_{int}}{\epsilon_0} &lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
E.A - (-E.A) = \frac{\sigma . A   }{\epsilon_0} &lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
E= \frac{\sigma }{2\epsilon_0}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
O mesmo pode ser feito para um plano com densidade de massa distribuída uniformemente, para o caso do sistema auto-gravitante, com mudança na constante física multiplicativa e no sinal.&lt;br /&gt;
&lt;br /&gt;
O fato importante a ser destacado aqui é a total independência do campo gerado pela partícula e a distância. Dessa forma, a interação entre as partículas em qualquer sistema que seguir esse modelo não terá dependência da distância entre elas e sim da posição relativa entre as partículas consideradas.&lt;br /&gt;
&lt;br /&gt;
=== Interferência externa do sistema ===&lt;br /&gt;
&lt;br /&gt;
Para o caso dos planos no sistema auto-gravitante não é necessária ação externa alguma para manter o equilíbrio em um sistema dinâmico estável. Sempre é levado em conta que todas as partículas têm velocidade em x inferior a velocidade de escape do restante do sistema e, por conta disso e das forças sempre atrativas de interação, o sistema não expande indefinidamente.&lt;br /&gt;
&lt;br /&gt;
Já no caso de planos carregados eletricamente as forças de interação entre os planos serão sempre repulsivas e a energia total do sistema é positiva. Sem uma interação externa, mesmo um sistema composto por um número limitado de partículas de fraca interação expandiria indefinidamente. Por causa disso, nesse caso é considerado que há uma força colimadora no feixe de planos proporcional a distância da origem. A origem dessa força externa vem de modelos de maior dimensionalidade de aceleradores de partícula que contam com um campo magnético externo capaz de colimar um feixe de cargas radialmente, por não existir um paralelo direto para o modelo unidimensional consideramos apenas uma força restauradora que impede a expansão indefinida do sistema como um todo. Também é possível ajustar condições de contorno simulando as paredes externas do acelerador como placas condutoras infinitas e com potencial definido. Esse tipo de consideração pode ser feita para sistemas que não são simétricos e impede que as cargas se afastem demasiadamente da origem.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
ADD IMAGEM&lt;br /&gt;
&lt;br /&gt;
= Comportamento de uma Partícula no Sistema =&lt;br /&gt;
&lt;br /&gt;
Graças a caracterização das partículas temos que o campo gerado por uma partícula-plano pode ser caracterizado (para ambos os sistemas citados) da seguinte forma:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
E_i(x) = -\lambda\Theta[-(x-x_i)]  + \lambda\Theta(x-x_i)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ADD IMAGEM&lt;br /&gt;
&lt;br /&gt;
Em que a constante &amp;lt;math&amp;gt;\lambda&amp;lt;/math&amp;gt; pode ser tanto positiva (cargas positivas) quanto negativa (cargas negativas ou interação gravitacional) e a função &amp;lt;math&amp;gt;\Theta&amp;lt;/math&amp;gt; equivale a função degrau de Heaviside:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\Theta(x) = \begin{cases} 0, \ \ x&amp;lt;0 \\ 1, \ \ x&amp;gt;0 \end{cases}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dessa forma, para exemplificação, um sistema de 5 partículas-plano teria uma interação da seguinte forma:&lt;br /&gt;
&lt;br /&gt;
ADD IMAGEM&lt;br /&gt;
&lt;br /&gt;
Aqui, F seria a força de interação entre duas partículas no caso de planos carregados. É possível notar que a força de interação varia de duas unidades dessa constante para cada partícula contada em uma direção e que a força máxima sentida (pelas partículas-plano localizadas nas extremidades) é proporcional a &amp;lt;math&amp;gt;(N-1)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
É possível notar que para uma distribuição de partículas-plano do tipo:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt; &lt;br /&gt;
n(x) =   \sum_{i=1}^N \delta(x_i) &lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
com o índice  &amp;lt;math&amp;gt;\ \ &#039;&#039;i&#039;&#039;\ &amp;lt;/math&amp;gt; sendo a ordem da partícula contada do sentido negativo para o positivo do eixo x, teremos uma força resultante de interação para uma partícula que pode ser definida por &lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
F_i =  [-(N-1) + 2(i-1)]F&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt; &lt;br /&gt;
F_i = (2i - N-1)F&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Essa força é suficiente para manter o sistema auto-gravitante coeso mas para as partículas carregadas devemos adicionar a força restauradora descrita anteriormente:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
F^{grav.}_{R,i} = (2i - N-1)F&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
F^{el.}_{R,i} = (2i - N-1)F - \kappa x_i&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Conservação da Energia do Sistema =&lt;br /&gt;
&lt;br /&gt;
Ao realizar uma simulação numérica com um grande número de entes que representam um sistema físico é importante que seja feita uma verificação sobre o quão apropriados os resultados da simulação de fato são. Uma das formas mais comuns de verificar se uma simulação numérica está correta na dinâmica molecular de vários corpos e efetuar periodicamente a soma da energia do sistema.&lt;br /&gt;
&lt;br /&gt;
No caso de sistemas como os descritos, não há nenhum incremento de energia proveniente de uma fonte externa. Mesmo para o sistema eletricamente carregado, a força restauradora é potencial e não muda a energia total do sistema dada uma distribuição inicial de posição e momento.&lt;br /&gt;
&lt;br /&gt;
Para todos os efeitos, a energia dos sistemas estudados pode ser dividida em três partes: &lt;br /&gt;
&lt;br /&gt;
== Energia Cinética ==&lt;br /&gt;
&lt;br /&gt;
Todas as partículas da distribuição escolhida terão massa e velocidade, de forma que a energia cinética do sistema será dada por:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
En_{cin} = \frac{m}{2}\sum_{i=1}^N \dot{x_i}^2&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Energia Potencial Restauradora ==&lt;br /&gt;
&lt;br /&gt;
Observada no sistema eletricamente carregado citado, pode ser descrita como:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
En_{pot} = \frac{\kappa}{2}\sum_{i=1}^N x_i^2&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Energia Potencial Intrínseca  ==&lt;br /&gt;
&lt;br /&gt;
Energia contida na interação entre as partículas. A energia de uma partícula depende do potencial na sua posição da sua carga (ou massa).&lt;br /&gt;
&lt;br /&gt;
Como potenciais não são absolutos, é estabelecido um Potencial nulo de referência nas condições de contorno do sistema. Como pode ser visto no gif com as partículas-plano carregadas em azul, são colocadas placas condutoras planas nas posições &amp;lt;math&amp;gt;x=L&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;x= -L&amp;lt;/math&amp;gt; (caso haja simetria no espaço de fase do sistema) e é estabelecido que os potenciais nessas posições são &amp;lt;math&amp;gt;V(-L) = V(L) = 0&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Uma maneira mais simples de determinar o potencial das N partículas é considerar que há nas posições de contorno,  &amp;lt;math&amp;gt;x_0&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;x_{N+1}&amp;lt;/math&amp;gt;, partículas não interagentes.&lt;br /&gt;
&lt;br /&gt;
A diferença de potencial entre duas posições vizinhas pode ser determinada por:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\Delta V_i = (x_{i} - x_{i - 1})E_i&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
com &amp;lt;math&amp;gt;E_i&amp;lt;/math&amp;gt; sendo o módulo do campo entre a i-ésima e a (i - 1)-ésima partícula, dado por:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
E_i = (2i - N - 1)\lambda&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ADD IMAGEM&lt;br /&gt;
&lt;br /&gt;
O que resulta na energia de uma partícula específica (k-ésima) descrita por:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
En_k = \alpha \sum_{i = 1}^{k}(x_i - x_{i - 1})(2i - N - 1)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aqui foram aglutinadas as possíveis constantes multiplicativas em uma constante &amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt; que pode ser escolhida para se adequar ao sistema estudado e a energia intrínseca do sistema é dada pela soma da energia de interação de cada uma das partículas. Como o sistema é dividido em intervalos com variação de potencial discretos, podemos escrever a energia intrínseca da seguinte forma:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
En_{int} = \alpha \sum_{k = 1}^{N}\sum_{i = 1}^{k}(x_i - x_{i - 1})(2i - N - 1)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A soma dessas três energias deve se manter constante (ou com pouca variação relativa significativa, pelo menos) durante a simulação:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
E_{total} = En_{cin} + En_{pot} + En_{int} = cte.&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Modelagem Computacional =&lt;br /&gt;
&lt;br /&gt;
== Criando a Distribuição do Sistema ==&lt;br /&gt;
&lt;br /&gt;
O primeiro passo para criar a simulação das N partículas é definir as coordenadas fundamentais das partículas em si (posição e velocidade).&lt;br /&gt;
&lt;br /&gt;
A simulação que será utilizada de exemplo é simétrica no espaço de fase, ou seja, para cada partícula com coordenadas &amp;lt;math&amp;gt;(x_i,y_i)&amp;lt;/math&amp;gt; existirá uma partícula espelhada &lt;br /&gt;
com coordenadas &amp;lt;math&amp;gt;(-x_i,-y_i)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Esse artifício é utilizado para que o centro de massa mantenha-se na origem e que o momento linear do sistema em x seja sempre nulo. Com isso é garantido que haverá sempre, também, a simetria par entre as energias das partículas espelhadas e a simetria ímpar entre as forças resultantes.&lt;br /&gt;
&lt;br /&gt;
Com isso garantido, basta fazer o cálculo numérico de uma metade da distribuição levando em conta a presença da outra metade, porém não tornando necessário que os cálculos sejam repetidos pois o comportamento de cada partícula espelhada torna-se perfeitamente previsível.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&#039;python&#039;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Importando as bibliotecas necessárias &lt;br /&gt;
from math import *&lt;br /&gt;
import matplotlib.pyplot as plt&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
A=[]     #criamos uma lista vazia&lt;br /&gt;
&lt;br /&gt;
N =  1000       # Determinamos o número de partículas utilizado&lt;br /&gt;
&lt;br /&gt;
for i in range(int(N)):&lt;br /&gt;
&lt;br /&gt;
    A.append([np.random.rand() ,2*(np.random.rand() - 1/2)]) #valores aleatórios de x entre 0 e 1 e de v entre -1 e 1 são adicionados&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A = np.array(A)&lt;br /&gt;
X= np.array([])     #Arrays usados para exemplificar&lt;br /&gt;
V= np.array([])     #distribuição inicial&lt;br /&gt;
&lt;br /&gt;
for i in range (len(A)):    #simetrização da distribuição&lt;br /&gt;
    X=np.append(X,A[i][0])&lt;br /&gt;
    V=np.append(V,A[i][1])&lt;br /&gt;
    V=np.append(V,-A[i][1])&lt;br /&gt;
    X=np.append(X,-A[i][0])&lt;br /&gt;
    &lt;br /&gt;
plt.xlabel(&#039;posição&#039;)             #plot da distribuição inicial&lt;br /&gt;
plt.ylabel(&#039;momento linear&#039;)&lt;br /&gt;
plt.title(&#039;Espaço de fase inicial&#039;)&lt;br /&gt;
plt.grid(True)&lt;br /&gt;
&lt;br /&gt;
plt.scatter(X,V)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ADD IMAGEM - &amp;lt;matplotlib.collections.PathCollection at 0x7f4ab8366ad0&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Função de Indexação ==&lt;br /&gt;
&lt;br /&gt;
Em outras modelagens como a interação de cargas em sistemas bidimensionais ou de massas em tridimensionais é necessário calcular a força de interação entre partículas em função das distâncias. Na modelagem proposta não é necessário calcular distâncias mas sim saber o ordenamento das partículas ao longo do eixo &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
No entanto, é muito comum em simulações que utilizam métodos de integração utilizar vetores que possuam apenas uma coluna e &amp;lt;math&amp;gt;2N&amp;lt;/math&amp;gt; linhas, sendo a primeira metade de linhas correspondentes às posições e a outra metade correspondente às velocidades.&lt;br /&gt;
&lt;br /&gt;
Para não precisar atualizar as linhas de posição e velocidade do vetor 2N-dimensional, utiliza-se uma função de indexação que será responsável por indicar qual é a ordem da partícula correspondente a uma determinada linha em um dado estado.&lt;br /&gt;
&lt;br /&gt;
Assim, a posição da partícula é atualizada no tempo e seu índice também, porém a posição dela no vetor de fase nunca se modifica. Esse fato é importante para estudos que pretendem analisar a trajetória de um único corpo no tempo, como é feito nos diagramas de Poincaré, por exemplo.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&#039;python&#039;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
teste = np.array([2,6,3,9,0,1,4])   #criado um vetor de teste  para que seus valores sejam indexados&lt;br /&gt;
&lt;br /&gt;
def indexador(arr):                 #define-se a função&lt;br /&gt;
    &lt;br /&gt;
    ordenador = []                  #é criada uma lista vazia&lt;br /&gt;
    &lt;br /&gt;
    for i in range(len(arr)):&lt;br /&gt;
        &lt;br /&gt;
        ordenador.append([abs(arr[i]),i]) # para cada valor criamos uma lista com o valor absoluto e a ordem atual&lt;br /&gt;
        &lt;br /&gt;
    ordenador.sort()                      # é feito o ordenamento da lista &#039;ordenador&#039; de acordo com o primeiro elemento&lt;br /&gt;
    &lt;br /&gt;
    for i in range(len(arr)):             &lt;br /&gt;
&lt;br /&gt;
        ordenador[i].append(i)            # é adicionado um terceiro valor para cada elemento de ordenador com o valor da sua nova ordem na sequência&lt;br /&gt;
        &lt;br /&gt;
    for i in range(len(arr)):&lt;br /&gt;
        &lt;br /&gt;
        a = ordenador[i][0]&lt;br /&gt;
        b = ordenador[i][1]             # É feita a troca do segundo com o primeiro valor de cada elemento de ordenador para...&lt;br /&gt;
        ordenador[i][0] = b&lt;br /&gt;
        ordenador[i][1] = a&lt;br /&gt;
        &lt;br /&gt;
    ordenador.sort()                    # reordenar os elementos de acordo com a ordem antiga&lt;br /&gt;
        &lt;br /&gt;
        &lt;br /&gt;
    lista = []&lt;br /&gt;
    &lt;br /&gt;
    for i in range(len(arr)):&lt;br /&gt;
        &lt;br /&gt;
        lista.append(ordenador[i][2])   #por fim guarda-se a ordem correspondente a cada valor da lista colocada como variável &lt;br /&gt;
        &lt;br /&gt;
    indexador = np.array(lista)  &lt;br /&gt;
        &lt;br /&gt;
    return indexador                     # e essa ordem é retornada como saída da função&lt;br /&gt;
&lt;br /&gt;
print(indexador(teste))&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Função de movimento e aceleração das partículas ==&lt;br /&gt;
&lt;br /&gt;
Para simular como um estado evolui no tempo, é necessário que tenhamos as derivadas temporais de todas as coordenadas do vetor de estado (&amp;lt;math&amp;gt;y&amp;lt;/math&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Para as coordenadas espaciais x (&amp;lt;math&amp;gt;y[i], \ 0\leq i&amp;lt; N &amp;lt;/math&amp;gt;) temos que:  &lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\dot{x_i} = y_{[i + N]} &lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Para as coordenadas de velocidade v (&amp;lt;math&amp;gt;y[i], \ N\leq i&amp;lt; 2N-1 &amp;lt;/math&amp;gt;) teremos que usar a relação de forças que foi descrita no modelo. Algumas simplificações comuns serão feitas como considerar constantes físicas unitárias (&amp;lt;math&amp;gt;m = q = \kappa = 1&amp;lt;/math&amp;gt;) e relações de proporcionalidade com o número de partículas do sistema para mantê-lo com um comportamento mais suave (&amp;lt;math&amp;gt;F = 1/N&amp;lt;/math&amp;gt;). O programa será escrito levando em conta o modelo de cargas elétricas: &lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\dot{v_i} = \ddot{x_i} = \frac{1}{m}\Big{[} -\kappa y_{[i - N]} + (2i - N - 1)F     \Big{]}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A relação acima pode ser descrita de forma diferente se levarmos em conta que a simulação é simétrica em x e que todas as posições iniciais são positivas.&lt;br /&gt;
&lt;br /&gt;
A partícula que recebe índice &amp;lt;math&amp;gt;1&amp;lt;/math&amp;gt; possui &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; partículas à esquerda (x negativo) e &amp;lt;math&amp;gt;(N-1)&amp;lt;/math&amp;gt; partículas a direita (x positivo), o que resulta uma força de interação de &amp;lt;math&amp;gt;F&amp;lt;/math&amp;gt; para a direita. A de índice 2 terá força de interação &amp;lt;math&amp;gt;3F&amp;lt;/math&amp;gt;, a de índice 3 terá &amp;lt;math&amp;gt;5F&amp;lt;/math&amp;gt; e assim por diante.&lt;br /&gt;
&lt;br /&gt;
Antes de reescrever a equação da aceleração deve-se levar em consideração de uma das partículas distribuídas no espaço de fase assumirem coordenadas negativas (caso tenham proximidade da origem e velocidade negativa). Novamente usando o argumento de simetria, sabe-se que caso uma partícula assuma uma posição negativa, a partícula espelhada assumirá a posição simétrica em relação a origem. Dessa forma basta calcular a força de interação sobre a partícula espelhada e inverter o sinal para a partícula original. Levando tudo isso em conta teremos a seguinte equação da aceleração:  &lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\ddot{x_i} = \frac{1}{m}\Big{[} -\kappa y_{[i - N]} + \frac{y_{[i - N]}}{|y_{[i - N]}|}(2i- 1)F     \Big{]}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&#039;python&#039;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
def deriv(t, y):&lt;br /&gt;
&lt;br /&gt;
    p = len(y)&lt;br /&gt;
    k = indexador(y[0:int(p/2)])&lt;br /&gt;
    sinal=abs(y[0:int(p/2)])/y[0:int(p/2)]&lt;br /&gt;
    &lt;br /&gt;
    dydt = np.zeros(int(p))&lt;br /&gt;
&lt;br /&gt;
    dydt[0:int(p/2)] = y[int(p/2):int(p)] #definindo as derivadas temporais de posição&lt;br /&gt;
    &lt;br /&gt;
                                                         #definindo as derivadas temporais de velocidade&lt;br /&gt;
    dydt[int(p/2):int(p)] = -y[0:int(p/2)] + ((np.ones(int(p/2)) + 2*k )/(p))*sinal&lt;br /&gt;
    &lt;br /&gt;
    deriv = dydt[0:int(p)]&lt;br /&gt;
    &lt;br /&gt;
    return deriv&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Função de Energia do estado ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&#039;python&#039;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
def Energia_total(y):     # Para calcular a energia precisamos apenas do vetor de estado y do sistema de partículas utilizado&lt;br /&gt;
&lt;br /&gt;
    l = int(len(y)/2)     # a variável l representa a quantidade de valores que teremos &lt;br /&gt;
    pot = np.zeros(l+1)   # cria-se um array com l + 1 dimensões para representar as l partículas e os respectivos potenciais &lt;br /&gt;
&lt;br /&gt;
    r = abs(np.array(y[0:l]))       # cria-se um array r com as coordenadas de posição do estado y&lt;br /&gt;
    r = np.append(r,4)   # adiciona-se uma coordenada para representar o contorno externo do experimento&lt;br /&gt;
    r.sort()              # Faz-se o ordenamento desse array por distância da origem&lt;br /&gt;
    &lt;br /&gt;
    pot_0 = 0             # O potencial do contorno deve ser nulo &lt;br /&gt;
    &lt;br /&gt;
    for i in range(l,0,-1):     # Loop decrescente que define o potencial de posição para cada partícula &lt;br /&gt;
        &lt;br /&gt;
        pot[i] = pot_0&lt;br /&gt;
        &lt;br /&gt;
        pot_0 = pot_0 + (1/2)*(i/l)*abs((r[i] - r[i-1]))&lt;br /&gt;
        &lt;br /&gt;
    pot[0] = pot_0&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    v = np.array(y[l:-1])       # Cria-se um array com os valores de velocidade&lt;br /&gt;
    &lt;br /&gt;
    E_total = 0&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    for i in range(l-1):        #Soma-se as energias de cada partícula&lt;br /&gt;
&lt;br /&gt;
      E_total = E_total + pot[i] + 0.5*v[i]**2 + 0.5*r[i]**2&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    return 2*E_total, r[0:l+1], pot[0:l+1]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Evolução da Distribuição no Tempo ==&lt;br /&gt;
&lt;br /&gt;
Para simular a evolução temporal da distribuição inicial escolhida, precisamos de um método de integração numérica no tempo. O método escolhido deverá partir do estado da distribuição e da função de derivada temporal atribuída para estimar como a evolução ocorre.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&#039;python&#039;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
from scipy.integrate import solve_ivp  #integrador numérico escolhido&lt;br /&gt;
&lt;br /&gt;
def nova_fase(y,i):      #função que define a função do espaço de fase em cada instante de tempo, adaptada para o integrador numérico escolhido&lt;br /&gt;
    &lt;br /&gt;
    fase = np.array([])&lt;br /&gt;
    &lt;br /&gt;
    for j in range(len(y)):&lt;br /&gt;
            &lt;br /&gt;
        fase = np.append(fase,y[j][i])&lt;br /&gt;
        &lt;br /&gt;
    return fase&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Fase = []   # Cria uma lista para reservar a evolução do espaço de fase no tempo&lt;br /&gt;
T = np.array([])     # Cria uma lista que registra os tempos de marcação do integrador numérico&lt;br /&gt;
E = np.array([])     # Cria uma lista que registra a energia da distribuição no tempo&lt;br /&gt;
E_pot = []           # Cria uma lista que registra o comportamento da energia potencial ao longo de x no tempo&lt;br /&gt;
X_pot = []           # O análogo ao anterior para a posição&lt;br /&gt;
tempo = 0.0  # o tempo começa em 0&lt;br /&gt;
delta_t = 1   # o intervalo de tempo é 0.1&lt;br /&gt;
&lt;br /&gt;
X = np.random.rand(4000)&lt;br /&gt;
V = np.random.rand(4000) - np.ones(4000)*0.5&lt;br /&gt;
y = np.append(X,2*V)    #define-se a fase inicial&lt;br /&gt;
&lt;br /&gt;
for j in range(50):&lt;br /&gt;
&lt;br /&gt;
    sol = solve_ivp(deriv, (tempo,tempo + delta_t), y , rtol = 0.00001)     # integrador numérico realiza a integração&lt;br /&gt;
&lt;br /&gt;
    T= np.append(T, sol.t)&lt;br /&gt;
&lt;br /&gt;
    tempo = tempo + delta_t&lt;br /&gt;
    for i in range(len(sol.t)):       #o integrador possui um número de vetores intermediários ao vetor da solução final sol.y[-1]&lt;br /&gt;
        &lt;br /&gt;
        &lt;br /&gt;
        y = nova_fase(sol.y,i)                              # aqui são registradas as funções definidas para cada estado de integração&lt;br /&gt;
        Fase.append(y)&lt;br /&gt;
&lt;br /&gt;
        Ei =  Energia_total(y)&lt;br /&gt;
&lt;br /&gt;
        E = np.append(E, Ei[0])&lt;br /&gt;
&lt;br /&gt;
        E_pot.append(Ei[2])&lt;br /&gt;
        X_pot.append(Ei[1])&lt;br /&gt;
    &lt;br /&gt;
    y = nova_fase(sol.y, -1)                     # A distribuição atual é atualizada para nova integração &lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Animações ===&lt;br /&gt;
&lt;br /&gt;
Foi utilizado o código abaixo para gerar os gifs da evolução temporal&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&#039;python&#039;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
from matplotlib.animation import FuncAnimation&lt;br /&gt;
from IPython import display&lt;br /&gt;
&lt;br /&gt;
# código base para montar gifs da evolução temporal &lt;br /&gt;
fig, (ax1, ax2, ax3) = plt.subplots(3,1 ,figsize = (6,14))    #cria uma figura de três linhas&lt;br /&gt;
&lt;br /&gt;
lines = []                                                    #objeto padrão da biblioteca FuncAnimation&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def animate(frame):&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    # As entradas são limpas para evitar superposição de imagens nos frames&lt;br /&gt;
    ax1.cla()              &lt;br /&gt;
    ax2.cla()&lt;br /&gt;
    ax3.cla()&lt;br /&gt;
&lt;br /&gt;
    # Plot do espaço de fases&lt;br /&gt;
    ax1.scatter(Fase[frame][0:4000], Fase[frame][4000:8000], color = &#039;k&#039;, s  =5)&lt;br /&gt;
    ax1.scatter(-Fase[frame][0:4000], -Fase[frame][4000:8000], color = &#039;k&#039;, s = 5)&lt;br /&gt;
    ax1.set_xlabel(&#039;$posição$&#039;)&lt;br /&gt;
    ax1.set_ylabel(&#039;$velocidade$&#039;)&lt;br /&gt;
    ax1.set_xlim(-4,4)&lt;br /&gt;
    ax1.set_ylim(-2.5,2.5)   &lt;br /&gt;
&lt;br /&gt;
    # Plot da distribuição de Potencial&lt;br /&gt;
    ax2.plot(X_pot[frame],E_pot[frame], color = &#039;grey&#039;)&lt;br /&gt;
    ax2.plot(-np.flip(X_pot[frame]),np.flip(E_pot[frame]), color = &#039;grey&#039;)&lt;br /&gt;
    ax2.scatter(X_pot[frame],E_pot[frame], color = &#039;b&#039;, s  =5)&lt;br /&gt;
    ax2.scatter(-np.flip(X_pot[frame]),np.flip(E_pot[frame]), color = &#039;b&#039;, s  =5)&lt;br /&gt;
    ax2.set_ylabel(&amp;quot;potencial&amp;quot;)&lt;br /&gt;
    ax2.set_xlabel(&amp;quot;posição&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    # Plot da energia total no tempo&lt;br /&gt;
    ax3.plot(T[0:frame],E[0:frame], color = &#039;k&#039;)&lt;br /&gt;
    ax3.set_ylabel(&amp;quot;Energia&amp;quot;)&lt;br /&gt;
    ax3.set_xlabel(&amp;quot;tempo&amp;quot;)&lt;br /&gt;
    ax3.set_xlim(0, T[-1])&lt;br /&gt;
    ax3.set_ylim(E[0]- 10, E[0] + 10)&lt;br /&gt;
    &lt;br /&gt;
    return lines&lt;br /&gt;
&lt;br /&gt;
# Execução do programa e geração do gif inline   &lt;br /&gt;
anima = FuncAnimation(fig, animate,frames=len(T), interval=20, blit=True)&lt;br /&gt;
video = anima.to_html5_video()&lt;br /&gt;
html = display.HTML(video)&lt;br /&gt;
display.display(html)&lt;br /&gt;
&lt;br /&gt;
plt.close()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Renanrs</name></author>
	</entry>
	<entry>
		<id>http://fiscomp.if.ufrgs.br/index.php?title=Din%C3%A2mica_Molecular_de_Part%C3%ADculas-Planares_Interagentes&amp;diff=6125</id>
		<title>Dinâmica Molecular de Partículas-Planares Interagentes</title>
		<link rel="alternate" type="text/html" href="http://fiscomp.if.ufrgs.br/index.php?title=Din%C3%A2mica_Molecular_de_Part%C3%ADculas-Planares_Interagentes&amp;diff=6125"/>
		<updated>2021-11-21T15:06:40Z</updated>

		<summary type="html">&lt;p&gt;Renanrs: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
Em construção&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Grupo: Antônio Carlan, Gabriela Pereira, Renan Soares e Victor Gandara&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Objetivo:&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= O modelo =&lt;br /&gt;
&lt;br /&gt;
É possível criar um modelo simplificado de interação de partículas imaginando que todas elas são compostas por planos de mesma massa e sem espessura, paralelos entre si e com liberdade de movimento relevante no eixo perpendicular às superfícies das mesmas.&lt;br /&gt;
&lt;br /&gt;
Tal modelo pode ser utilizado para estudar a dinâmica de um número elevado de partículas e conta com algumas particularidades simplificadoras de complexidade numérica. Alguns estudos utilizam esse modelo para estudar o comportamento de feixes carregados com a menor dimensionalidade possível [1] e também para sistemas auto-gravitantes [2]. As duas aplicações citadas serão as demonstradas a seguir mas o modelo é versátil para diferentes condições iniciais e de contorno.&lt;br /&gt;
&lt;br /&gt;
== Descrição do Modelo ==&lt;br /&gt;
&lt;br /&gt;
=== Disposição espacial ===&lt;br /&gt;
&lt;br /&gt;
Um número &amp;quot;N&amp;quot; de partículas-plano de mesma massa é disposto ao longo do eixo x com uma função de distribuição n(x) e com todas as partículas paralelas ao plano yz. No caso do modelo auto-gravitante, movimentos ao longo do eixo z não têm relevância prática mas para o modelo de um feixe de planos é definido que todos os planos se movem na direção z com mesma velocidade.&lt;br /&gt;
&lt;br /&gt;
A consideração de movimento ao longo do eixo z para o modelo de feixe é importante para a análise do comportamento do espaço de fases ao longo do comprimento do acelerador de partículas. Aqui, podemos imaginar estudar casos em que o feixe gerado inicialmente no espaço de fase terá um comportamento constante no tempo para cada secção transversal em xy para uma coordenada em z pré-estabelecida.&lt;br /&gt;
&lt;br /&gt;
ADD IMAGEM &lt;br /&gt;
&lt;br /&gt;
=== Ausência de Efeitos de Colisão ===&lt;br /&gt;
&lt;br /&gt;
O modelo leva em consideração que todas os planos possuem a mesma massa e que as colisões não levam a perda de energia no sistema.&lt;br /&gt;
&lt;br /&gt;
Dessa forma podemos prever o que ocorre quando a posição de dois planos coincide pois há conservação no momento linear em x e o coeficiente de restituição (razão entre as velocidades de afastamento e aproximação dos corpos) é igual a 1.&lt;br /&gt;
&lt;br /&gt;
ADD IMAGEM&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{cases} mv_1 - mv_2 = -mv_1&#039; + mv_2&#039;  \\ \\   \frac{v_1&#039; + v_2&#039;}{v_1 + v_2} = 1  \end{cases}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
O sistema de equações resulta em: &amp;lt;math&amp;gt;v_1&#039; = v_2 \ \ \ ; \ \ \ v_2&#039; = v_1&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dessa forma, é irrelevante ponderar se houve de fato uma colisão com troca de velocidades ou se as partículas simplesmente cruzam sem interferir de forma relevante. A última consideração é a levada em conta no ponto de vista computacional pois exclui a necessidade de atualizar a velocidade das partículas que passaram pela mesma posição no eixo x.&lt;br /&gt;
&lt;br /&gt;
=== Interação entre as partículas ===&lt;br /&gt;
&lt;br /&gt;
Para analisar a interação entre as partículas é preciso entender como uma única partícula afeta seu entorno.&lt;br /&gt;
&lt;br /&gt;
No caso das partículas-plano carregadas eletricamente podemos considerar os efeitos de campo elétrico de um isolante plano infinito:&lt;br /&gt;
&lt;br /&gt;
ADD IMAGEM&lt;br /&gt;
&lt;br /&gt;
Pela lei de Gauss, para uma dada distribuição de carga com densidade superficial &amp;lt;math&amp;gt;\sigma&amp;lt;/math&amp;gt;: &lt;br /&gt;
:&amp;lt;math&amp;gt; &lt;br /&gt;
\oint  \overrightarrow{E}. d\overrightarrow{S}  = \frac{Q_{int}}{\epsilon_0} &lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
E.A - (-E.A) = \frac{\sigma . A   }{\epsilon_0} &lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
E= \frac{\sigma }{2\epsilon_0}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
O mesmo pode ser feito para um plano com densidade de massa distribuída uniformemente, para o caso do sistema auto-gravitante, com mudança na constante física multiplicativa e no sinal.&lt;br /&gt;
&lt;br /&gt;
O fato importante a ser destacado aqui é a total independência do campo gerado pela partícula e a distância. Dessa forma, a interação entre as partículas em qualquer sistema que seguir esse modelo não terá dependência da distância entre elas e sim da posição relativa entre as partículas consideradas.&lt;br /&gt;
&lt;br /&gt;
=== Interferência externa do sistema ===&lt;br /&gt;
&lt;br /&gt;
Para o caso dos planos no sistema auto-gravitante não é necessária ação externa alguma para manter o equilíbrio em um sistema dinâmico estável. Sempre é levado em conta que todas as partículas têm velocidade em x inferior a velocidade de escape do restante do sistema e, por conta disso e das forças sempre atrativas de interação, o sistema não expande indefinidamente.&lt;br /&gt;
&lt;br /&gt;
Já no caso de planos carregados eletricamente as forças de interação entre os planos serão sempre repulsivas e a energia total do sistema é positiva. Sem uma interação externa, mesmo um sistema composto por um número limitado de partículas de fraca interação expandiria indefinidamente. Por causa disso, nesse caso é considerado que há uma força colimadora no feixe de planos proporcional a distância da origem. A origem dessa força externa vem de modelos de maior dimensionalidade de aceleradores de partícula que contam com um campo magnético externo capaz de colimar um feixe de cargas radialmente, por não existir um paralelo direto para o modelo unidimensional consideramos apenas uma força restauradora que impede a expansão indefinida do sistema como um todo. Também é possível ajustar condições de contorno simulando as paredes externas do acelerador como placas condutoras infinitas e com potencial definido. Esse tipo de consideração pode ser feita para sistemas que não são simétricos e impede que as cargas se afastem demasiadamente da origem.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
ADD IMAGEM&lt;br /&gt;
&lt;br /&gt;
= Comportamento de uma Partícula no Sistema =&lt;br /&gt;
&lt;br /&gt;
Graças a caracterização das partículas temos que o campo gerado por uma partícula-plano pode ser caracterizado (para ambos os sistemas citados) da seguinte forma:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
E_i(x) = -\lambda\Theta[-(x-x_i)]  + \lambda\Theta(x-x_i)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ADD IMAGEM&lt;br /&gt;
&lt;br /&gt;
Em que a constante &amp;lt;math&amp;gt;\lambda&amp;lt;/math&amp;gt; pode ser tanto positiva (cargas positivas) quanto negativa (cargas negativas ou interação gravitacional) e a função &amp;lt;math&amp;gt;\Theta&amp;lt;/math&amp;gt; equivale a função degrau de Heaviside:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\Theta(x) = \begin{cases} 0, \ \ x&amp;lt;0 \\ 1, \ \ x&amp;gt;0 \end{cases}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dessa forma, para exemplificação, um sistema de 5 partículas-plano teria uma interação da seguinte forma:&lt;br /&gt;
&lt;br /&gt;
ADD IMAGEM&lt;br /&gt;
&lt;br /&gt;
Aqui, F seria a força de interação entre duas partículas no caso de planos carregados. É possível notar que a força de interação varia de duas unidades dessa constante para cada partícula contada em uma direção e que a força máxima sentida (pelas partículas-plano localizadas nas extremidades) é proporcional a &amp;lt;math&amp;gt;(N-1)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
É possível notar que para uma distribuição de partículas-plano do tipo:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt; &lt;br /&gt;
n(x) =   \sum_{i=1}^N \delta(x_i) &lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
com o índice  &amp;lt;math&amp;gt;\ \ &#039;&#039;i&#039;&#039;\ &amp;lt;/math&amp;gt; sendo a ordem da partícula contada do sentido negativo para o positivo do eixo x, teremos uma força resultante de interação para uma partícula que pode ser definida por &lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
F_i =  [-(N-1) + 2(i-1)]F&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt; &lt;br /&gt;
F_i = (2i - N-1)F&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Essa força é suficiente para manter o sistema auto-gravitante coeso mas para as partículas carregadas devemos adicionar a força restauradora descrita anteriormente:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
F^{grav.}_{R,i} = (2i - N-1)F&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
F^{el.}_{R,i} = (2i - N-1)F - \kappa x_i&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Conservação da Energia do Sistema =&lt;br /&gt;
&lt;br /&gt;
Ao realizar uma simulação numérica com um grande número de entes que representam um sistema físico é importante que seja feita uma verificação sobre o quão apropriados os resultados da simulação de fato são. Uma das formas mais comuns de verificar se uma simulação numérica está correta na dinâmica molecular de vários corpos e efetuar periodicamente a soma da energia do sistema.&lt;br /&gt;
&lt;br /&gt;
No caso de sistemas como os descritos, não há nenhum incremento de energia proveniente de uma fonte externa. Mesmo para o sistema eletricamente carregado, a força restauradora é potencial e não muda a energia total do sistema dada uma distribuição inicial de posição e momento.&lt;br /&gt;
&lt;br /&gt;
Para todos os efeitos, a energia dos sistemas estudados pode ser dividida em três partes: &lt;br /&gt;
&lt;br /&gt;
== Energia Cinética ==&lt;br /&gt;
&lt;br /&gt;
Todas as partículas da distribuição escolhida terão massa e velocidade, de forma que a energia cinética do sistema será dada por:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
En_{cin} = \frac{m}{2}\sum_{i=1}^N \dot{x_i}^2&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Energia Potencial Restauradora ==&lt;br /&gt;
&lt;br /&gt;
Observada no sistema eletricamente carregado citado, pode ser descrita como:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
En_{pot} = \frac{\kappa}{2}\sum_{i=1}^N x_i^2&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Energia Potencial Intrínseca  ==&lt;br /&gt;
&lt;br /&gt;
Energia contida na interação entre as partículas. A energia de uma partícula depende do potencial na sua posição da sua carga (ou massa).&lt;br /&gt;
&lt;br /&gt;
Como potenciais não são absolutos, é estabelecido um Potencial nulo de referência nas condições de contorno do sistema. Como pode ser visto no gif com as partículas-plano carregadas em azul, são colocadas placas condutoras planas nas posições &amp;lt;math&amp;gt;x=L&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;x= -L&amp;lt;/math&amp;gt; (caso haja simetria no espaço de fase do sistema) e é estabelecido que os potenciais nessas posições são &amp;lt;math&amp;gt;V(-L) = V(L) = 0&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Uma maneira mais simples de determinar o potencial das N partículas é considerar que há nas posições de contorno,  &amp;lt;math&amp;gt;x_0&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;x_{N+1}&amp;lt;/math&amp;gt;, partículas não interagentes.&lt;br /&gt;
&lt;br /&gt;
A diferença de potencial entre duas posições vizinhas pode ser determinada por:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\Delta V_i = (x_{i} - x_{i - 1})E_i&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
com &amp;lt;math&amp;gt;E_i&amp;lt;/math&amp;gt; sendo o módulo do campo entre a i-ésima e a (i - 1)-ésima partícula, dado por:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
E_i = (2i - N - 1)\lambda&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ADD IMAGEM&lt;br /&gt;
&lt;br /&gt;
O que resulta na energia de uma partícula específica (k-ésima) descrita por:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
En_k = \alpha \sum_{i = 1}^{k}(x_i - x_{i - 1})(2i - N - 1)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aqui foram aglutinadas as possíveis constantes multiplicativas em uma constante &amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt; que pode ser escolhida para se adequar ao sistema estudado e a energia intrínseca do sistema é dada pela soma da energia de interação de cada uma das partículas. Como o sistema é dividido em intervalos com variação de potencial discretos, podemos escrever a energia intrínseca da seguinte forma:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
En_{int} = \alpha \sum_{k = 1}^{N}\sum_{i = 1}^{k}(x_i - x_{i - 1})(2i - N - 1)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A soma dessas três energias deve se manter constante (ou com pouca variação relativa significativa, pelo menos) durante a simulação:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
E_{total} = En_{cin} + En_{pot} + En_{int} = cte.&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Modelagem Computacional =&lt;br /&gt;
&lt;br /&gt;
== Criando a Distribuição do Sistema ==&lt;br /&gt;
&lt;br /&gt;
O primeiro passo para criar a simulação das N partículas é definir as coordenadas fundamentais das partículas em si (posição e velocidade).&lt;br /&gt;
&lt;br /&gt;
A simulação que será utilizada de exemplo é simétrica no espaço de fase, ou seja, para cada partícula com coordenadas &amp;lt;math&amp;gt;(x_i,y_i)&amp;lt;/math&amp;gt; existirá uma partícula espelhada &lt;br /&gt;
com coordenadas &amp;lt;math&amp;gt;(-x_i,-y_i)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Esse artifício é utilizado para que o centro de massa mantenha-se na origem e que o momento linear do sistema em x seja sempre nulo. Com isso é garantido que haverá sempre, também, a simetria par entre as energias das partículas espelhadas e a simetria ímpar entre as forças resultantes.&lt;br /&gt;
&lt;br /&gt;
Com isso garantido, basta fazer o cálculo numérico de uma metade da distribuição levando em conta a presença da outra metade, porém não tornando necessário que os cálculos sejam repetidos pois o comportamento de cada partícula espelhada torna-se perfeitamente previsível.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&#039;python&#039;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Importando as bibliotecas necessárias &lt;br /&gt;
from math import *&lt;br /&gt;
import matplotlib.pyplot as plt&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
A=[]     #criamos uma lista vazia&lt;br /&gt;
&lt;br /&gt;
N =  1000       # Determinamos o número de partículas utilizado&lt;br /&gt;
&lt;br /&gt;
for i in range(int(N)):&lt;br /&gt;
&lt;br /&gt;
    A.append([np.random.rand() ,2*(np.random.rand() - 1/2)]) #valores aleatórios de x entre 0 e 1 e de v entre -1 e 1 são adicionados&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A = np.array(A)&lt;br /&gt;
X= np.array([])     #Arrays usados para exemplificar&lt;br /&gt;
V= np.array([])     #distribuição inicial&lt;br /&gt;
&lt;br /&gt;
for i in range (len(A)):    #simetrização da distribuição&lt;br /&gt;
    X=np.append(X,A[i][0])&lt;br /&gt;
    V=np.append(V,A[i][1])&lt;br /&gt;
    V=np.append(V,-A[i][1])&lt;br /&gt;
    X=np.append(X,-A[i][0])&lt;br /&gt;
    &lt;br /&gt;
plt.xlabel(&#039;posição&#039;)             #plot da distribuição inicial&lt;br /&gt;
plt.ylabel(&#039;momento linear&#039;)&lt;br /&gt;
plt.title(&#039;Espaço de fase inicial&#039;)&lt;br /&gt;
plt.grid(True)&lt;br /&gt;
&lt;br /&gt;
plt.scatter(X,V)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ADD IMAGEM - &amp;lt;matplotlib.collections.PathCollection at 0x7f4ab8366ad0&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Função de Indexação ==&lt;br /&gt;
&lt;br /&gt;
Em outras modelagens como a interação de cargas em sistemas bidimensionais ou de massas em tridimensionais é necessário calcular a força de interação entre partículas em função das distâncias. Na modelagem proposta não é necessário calcular distâncias mas sim saber o ordenamento das partículas ao longo do eixo &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
No entanto, é muito comum em simulações que utilizam métodos de integração utilizar vetores que possuam apenas uma coluna e &amp;lt;math&amp;gt;2N&amp;lt;/math&amp;gt; linhas, sendo a primeira metade de linhas correspondentes às posições e a outra metade correspondente às velocidades.&lt;br /&gt;
&lt;br /&gt;
Para não precisar atualizar as linhas de posição e velocidade do vetor 2N-dimensional, utiliza-se uma função de indexação que será responsável por indicar qual é a ordem da partícula correspondente a uma determinada linha em um dado estado.&lt;br /&gt;
&lt;br /&gt;
Assim, a posição da partícula é atualizada no tempo e seu índice também, porém a posição dela no vetor de fase nunca se modifica. Esse fato é importante para estudos que pretendem analisar a trajetória de um único corpo no tempo, como é feito nos diagramas de Poincaré, por exemplo.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&#039;python&#039;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
teste = np.array([2,6,3,9,0,1,4])   #criado um vetor de teste  para que seus valores sejam indexados&lt;br /&gt;
&lt;br /&gt;
def indexador(arr):                 #define-se a função&lt;br /&gt;
    &lt;br /&gt;
    ordenador = []                  #é criada uma lista vazia&lt;br /&gt;
    &lt;br /&gt;
    for i in range(len(arr)):&lt;br /&gt;
        &lt;br /&gt;
        ordenador.append([abs(arr[i]),i]) # para cada valor criamos uma lista com o valor absoluto e a ordem atual&lt;br /&gt;
        &lt;br /&gt;
    ordenador.sort()                      # é feito o ordenamento da lista &#039;ordenador&#039; de acordo com o primeiro elemento&lt;br /&gt;
    &lt;br /&gt;
    for i in range(len(arr)):             &lt;br /&gt;
&lt;br /&gt;
        ordenador[i].append(i)            # é adicionado um terceiro valor para cada elemento de ordenador com o valor da sua nova ordem na sequência&lt;br /&gt;
        &lt;br /&gt;
    for i in range(len(arr)):&lt;br /&gt;
        &lt;br /&gt;
        a = ordenador[i][0]&lt;br /&gt;
        b = ordenador[i][1]             # É feita a troca do segundo com o primeiro valor de cada elemento de ordenador para...&lt;br /&gt;
        ordenador[i][0] = b&lt;br /&gt;
        ordenador[i][1] = a&lt;br /&gt;
        &lt;br /&gt;
    ordenador.sort()                    # reordenar os elementos de acordo com a ordem antiga&lt;br /&gt;
        &lt;br /&gt;
        &lt;br /&gt;
    lista = []&lt;br /&gt;
    &lt;br /&gt;
    for i in range(len(arr)):&lt;br /&gt;
        &lt;br /&gt;
        lista.append(ordenador[i][2])   #por fim guarda-se a ordem correspondente a cada valor da lista colocada como variável &lt;br /&gt;
        &lt;br /&gt;
    indexador = np.array(lista)  &lt;br /&gt;
        &lt;br /&gt;
    return indexador                     # e essa ordem é retornada como saída da função&lt;br /&gt;
&lt;br /&gt;
print(indexador(teste))&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Função de movimento e aceleração das partículas ==&lt;br /&gt;
&lt;br /&gt;
Para simular como um estado evolui no tempo, é necessário que tenhamos as derivadas temporais de todas as coordenadas do vetor de estado (&amp;lt;math&amp;gt;y&amp;lt;/math&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Para as coordenadas espaciais x (&amp;lt;math&amp;gt;y[i], \ 0\leq i&amp;lt; N &amp;lt;/math&amp;gt;) temos que:  &lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\dot{x_i} = y_{[i + N]} &lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Para as coordenadas de velocidade v (&amp;lt;math&amp;gt;y[i], \ N\leq i&amp;lt; 2N-1 &amp;lt;/math&amp;gt;) teremos que usar a relação de forças que foi descrita no modelo. Algumas simplificações comuns serão feitas como considerar constantes físicas unitárias (&amp;lt;math&amp;gt;m = q = \kappa = 1&amp;lt;/math&amp;gt;) e relações de proporcionalidade com o número de partículas do sistema para mantê-lo com um comportamento mais suave (&amp;lt;math&amp;gt;F = 1/N&amp;lt;/math&amp;gt;). O programa será escrito levando em conta o modelo de cargas elétricas: &lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\dot{v}_i = \ddot{x}_i = \frac{1}{m}\Big{[} -\kappa y_{[i - N]} + (2i - N - 1)F     \Big{]}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A relação acima pode ser descrita de forma diferente se levarmos em conta que a simulação é simétrica em x e que todas as posições iniciais são positivas.&lt;br /&gt;
&lt;br /&gt;
A partícula que recebe índice &amp;lt;math&amp;gt;1&amp;lt;/math&amp;gt; possui &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; partículas à esquerda (x negativo) e &amp;lt;math&amp;gt;(N-1)&amp;lt;/math&amp;gt; partículas a direita (x positivo), o que resulta uma força de interação de &amp;lt;math&amp;gt;F&amp;lt;/math&amp;gt; para a direita. A de índice 2 terá força de interação &amp;lt;math&amp;gt;3F&amp;lt;/math&amp;gt;, a de índice 3 terá &amp;lt;math&amp;gt;5F&amp;lt;/math&amp;gt; e assim por diante.&lt;br /&gt;
&lt;br /&gt;
Antes de reescrever a equação da aceleração deve-se levar em consideração de uma das partículas distribuídas no espaço de fase assumirem coordenadas negativas (caso tenham proximidade da origem e velocidade negativa). Novamente usando o argumento de simetria, sabe-se que caso uma partícula assuma uma posição negativa, a partícula espelhada assumirá a posição simétrica em relação a origem. Dessa forma basta calcular a força de interação sobre a partícula espelhada e inverter o sinal para a partícula original. Levando tudo isso em conta teremos a seguinte equação da aceleração:  &lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\ddot{x}_i = \frac{1}{m}\Big{[} -\kappa y_{[i - N]} + \frac{y_{[i - N]}}{|y_{[i - N]}|}(2i- 1)F     \Big{]}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&#039;python&#039;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
def deriv(t, y):&lt;br /&gt;
&lt;br /&gt;
    p = len(y)&lt;br /&gt;
    k = indexador(y[0:int(p/2)])&lt;br /&gt;
    sinal=abs(y[0:int(p/2)])/y[0:int(p/2)]&lt;br /&gt;
    &lt;br /&gt;
    dydt = np.zeros(int(p))&lt;br /&gt;
&lt;br /&gt;
    dydt[0:int(p/2)] = y[int(p/2):int(p)] #definindo as derivadas temporais de posição&lt;br /&gt;
    &lt;br /&gt;
                                                         #definindo as derivadas temporais de velocidade&lt;br /&gt;
    dydt[int(p/2):int(p)] = -y[0:int(p/2)] + ((np.ones(int(p/2)) + 2*k )/(p))*sinal&lt;br /&gt;
    &lt;br /&gt;
    deriv = dydt[0:int(p)]&lt;br /&gt;
    &lt;br /&gt;
    return deriv&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Função de Energia do estado ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&#039;python&#039;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
def Energia_total(y):     # Para calcular a energia precisamos apenas do vetor de estado y do sistema de partículas utilizado&lt;br /&gt;
&lt;br /&gt;
    l = int(len(y)/2)     # a variável l representa a quantidade de valores que teremos &lt;br /&gt;
    pot = np.zeros(l+1)   # cria-se um array com l + 1 dimensões para representar as l partículas e os respectivos potenciais &lt;br /&gt;
&lt;br /&gt;
    r = abs(np.array(y[0:l]))       # cria-se um array r com as coordenadas de posição do estado y&lt;br /&gt;
    r = np.append(r,4)   # adiciona-se uma coordenada para representar o contorno externo do experimento&lt;br /&gt;
    r.sort()              # Faz-se o ordenamento desse array por distância da origem&lt;br /&gt;
    &lt;br /&gt;
    pot_0 = 0             # O potencial do contorno deve ser nulo &lt;br /&gt;
    &lt;br /&gt;
    for i in range(l,0,-1):     # Loop decrescente que define o potencial de posição para cada partícula &lt;br /&gt;
        &lt;br /&gt;
        pot[i] = pot_0&lt;br /&gt;
        &lt;br /&gt;
        pot_0 = pot_0 + (1/2)*(i/l)*abs((r[i] - r[i-1]))&lt;br /&gt;
        &lt;br /&gt;
    pot[0] = pot_0&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    v = np.array(y[l:-1])       # Cria-se um array com os valores de velocidade&lt;br /&gt;
    &lt;br /&gt;
    E_total = 0&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    for i in range(l-1):        #Soma-se as energias de cada partícula&lt;br /&gt;
&lt;br /&gt;
      E_total = E_total + pot[i] + 0.5*v[i]**2 + 0.5*r[i]**2&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    return 2*E_total, r[0:l+1], pot[0:l+1]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Evolução da Distribuição no Tempo ==&lt;br /&gt;
&lt;br /&gt;
Para simular a evolução temporal da distribuição inicial escolhida, precisamos de um método de integração numérica no tempo. O método escolhido deverá partir do estado da distribuição e da função de derivada temporal atribuída para estimar como a evolução ocorre.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&#039;python&#039;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
from scipy.integrate import solve_ivp  #integrador numérico escolhido&lt;br /&gt;
&lt;br /&gt;
def nova_fase(y,i):      #função que define a função do espaço de fase em cada instante de tempo, adaptada para o integrador numérico escolhido&lt;br /&gt;
    &lt;br /&gt;
    fase = np.array([])&lt;br /&gt;
    &lt;br /&gt;
    for j in range(len(y)):&lt;br /&gt;
            &lt;br /&gt;
        fase = np.append(fase,y[j][i])&lt;br /&gt;
        &lt;br /&gt;
    return fase&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Fase = []   # Cria uma lista para reservar a evolução do espaço de fase no tempo&lt;br /&gt;
T = np.array([])     # Cria uma lista que registra os tempos de marcação do integrador numérico&lt;br /&gt;
E = np.array([])     # Cria uma lista que registra a energia da distribuição no tempo&lt;br /&gt;
E_pot = []           # Cria uma lista que registra o comportamento da energia potencial ao longo de x no tempo&lt;br /&gt;
X_pot = []           # O análogo ao anterior para a posição&lt;br /&gt;
tempo = 0.0  # o tempo começa em 0&lt;br /&gt;
delta_t = 1   # o intervalo de tempo é 0.1&lt;br /&gt;
&lt;br /&gt;
X = np.random.rand(4000)&lt;br /&gt;
V = np.random.rand(4000) - np.ones(4000)*0.5&lt;br /&gt;
y = np.append(X,2*V)    #define-se a fase inicial&lt;br /&gt;
&lt;br /&gt;
for j in range(50):&lt;br /&gt;
&lt;br /&gt;
    sol = solve_ivp(deriv, (tempo,tempo + delta_t), y , rtol = 0.00001)     # integrador numérico realiza a integração&lt;br /&gt;
&lt;br /&gt;
    T= np.append(T, sol.t)&lt;br /&gt;
&lt;br /&gt;
    tempo = tempo + delta_t&lt;br /&gt;
    for i in range(len(sol.t)):       #o integrador possui um número de vetores intermediários ao vetor da solução final sol.y[-1]&lt;br /&gt;
        &lt;br /&gt;
        &lt;br /&gt;
        y = nova_fase(sol.y,i)                              # aqui são registradas as funções definidas para cada estado de integração&lt;br /&gt;
        Fase.append(y)&lt;br /&gt;
&lt;br /&gt;
        Ei =  Energia_total(y)&lt;br /&gt;
&lt;br /&gt;
        E = np.append(E, Ei[0])&lt;br /&gt;
&lt;br /&gt;
        E_pot.append(Ei[2])&lt;br /&gt;
        X_pot.append(Ei[1])&lt;br /&gt;
    &lt;br /&gt;
    y = nova_fase(sol.y, -1)                     # A distribuição atual é atualizada para nova integração &lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Animações ===&lt;br /&gt;
&lt;br /&gt;
Foi utilizado o código abaixo para gerar os gifs da evolução temporal&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&#039;python&#039;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
from matplotlib.animation import FuncAnimation&lt;br /&gt;
from IPython import display&lt;br /&gt;
&lt;br /&gt;
# código base para montar gifs da evolução temporal &lt;br /&gt;
fig, (ax1, ax2, ax3) = plt.subplots(3,1 ,figsize = (6,14))    #cria uma figura de três linhas&lt;br /&gt;
&lt;br /&gt;
lines = []                                                    #objeto padrão da biblioteca FuncAnimation&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def animate(frame):&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    # As entradas são limpas para evitar superposição de imagens nos frames&lt;br /&gt;
    ax1.cla()              &lt;br /&gt;
    ax2.cla()&lt;br /&gt;
    ax3.cla()&lt;br /&gt;
&lt;br /&gt;
    # Plot do espaço de fases&lt;br /&gt;
    ax1.scatter(Fase[frame][0:4000], Fase[frame][4000:8000], color = &#039;k&#039;, s  =5)&lt;br /&gt;
    ax1.scatter(-Fase[frame][0:4000], -Fase[frame][4000:8000], color = &#039;k&#039;, s = 5)&lt;br /&gt;
    ax1.set_xlabel(&#039;$posição$&#039;)&lt;br /&gt;
    ax1.set_ylabel(&#039;$velocidade$&#039;)&lt;br /&gt;
    ax1.set_xlim(-4,4)&lt;br /&gt;
    ax1.set_ylim(-2.5,2.5)   &lt;br /&gt;
&lt;br /&gt;
    # Plot da distribuição de Potencial&lt;br /&gt;
    ax2.plot(X_pot[frame],E_pot[frame], color = &#039;grey&#039;)&lt;br /&gt;
    ax2.plot(-np.flip(X_pot[frame]),np.flip(E_pot[frame]), color = &#039;grey&#039;)&lt;br /&gt;
    ax2.scatter(X_pot[frame],E_pot[frame], color = &#039;b&#039;, s  =5)&lt;br /&gt;
    ax2.scatter(-np.flip(X_pot[frame]),np.flip(E_pot[frame]), color = &#039;b&#039;, s  =5)&lt;br /&gt;
    ax2.set_ylabel(&amp;quot;potencial&amp;quot;)&lt;br /&gt;
    ax2.set_xlabel(&amp;quot;posição&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    # Plot da energia total no tempo&lt;br /&gt;
    ax3.plot(T[0:frame],E[0:frame], color = &#039;k&#039;)&lt;br /&gt;
    ax3.set_ylabel(&amp;quot;Energia&amp;quot;)&lt;br /&gt;
    ax3.set_xlabel(&amp;quot;tempo&amp;quot;)&lt;br /&gt;
    ax3.set_xlim(0, T[-1])&lt;br /&gt;
    ax3.set_ylim(E[0]- 10, E[0] + 10)&lt;br /&gt;
    &lt;br /&gt;
    return lines&lt;br /&gt;
&lt;br /&gt;
# Execução do programa e geração do gif inline   &lt;br /&gt;
anima = FuncAnimation(fig, animate,frames=len(T), interval=20, blit=True)&lt;br /&gt;
video = anima.to_html5_video()&lt;br /&gt;
html = display.HTML(video)&lt;br /&gt;
display.display(html)&lt;br /&gt;
&lt;br /&gt;
plt.close()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Renanrs</name></author>
	</entry>
	<entry>
		<id>http://fiscomp.if.ufrgs.br/index.php?title=Din%C3%A2mica_Molecular_de_Part%C3%ADculas-Planares_Interagentes&amp;diff=6124</id>
		<title>Dinâmica Molecular de Partículas-Planares Interagentes</title>
		<link rel="alternate" type="text/html" href="http://fiscomp.if.ufrgs.br/index.php?title=Din%C3%A2mica_Molecular_de_Part%C3%ADculas-Planares_Interagentes&amp;diff=6124"/>
		<updated>2021-11-21T15:00:23Z</updated>

		<summary type="html">&lt;p&gt;Renanrs: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
Em construção&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Grupo: Antônio Carlan, Gabriela Pereira, Renan Soares e Victor Gandara&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Objetivo:&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= O modelo =&lt;br /&gt;
&lt;br /&gt;
É possível criar um modelo simplificado de interação de partículas imaginando que todas elas são compostas por planos de mesma massa e sem espessura, paralelos entre si e com liberdade de movimento relevante no eixo perpendicular às superfícies das mesmas.&lt;br /&gt;
&lt;br /&gt;
Tal modelo pode ser utilizado para estudar a dinâmica de um número elevado de partículas e conta com algumas particularidades simplificadoras de complexidade numérica. Alguns estudos utilizam esse modelo para estudar o comportamento de feixes carregados com a menor dimensionalidade possível [1] e também para sistemas auto-gravitantes [2]. As duas aplicações citadas serão as demonstradas a seguir mas o modelo é versátil para diferentes condições iniciais e de contorno.&lt;br /&gt;
&lt;br /&gt;
== Descrição do Modelo ==&lt;br /&gt;
&lt;br /&gt;
=== Disposição espacial ===&lt;br /&gt;
&lt;br /&gt;
Um número &amp;quot;N&amp;quot; de partículas-plano de mesma massa é disposto ao longo do eixo x com uma função de distribuição n(x) e com todas as partículas paralelas ao plano yz. No caso do modelo auto-gravitante, movimentos ao longo do eixo z não têm relevância prática mas para o modelo de um feixe de planos é definido que todos os planos se movem na direção z com mesma velocidade.&lt;br /&gt;
&lt;br /&gt;
A consideração de movimento ao longo do eixo z para o modelo de feixe é importante para a análise do comportamento do espaço de fases ao longo do comprimento do acelerador de partículas. Aqui, podemos imaginar estudar casos em que o feixe gerado inicialmente no espaço de fase terá um comportamento constante no tempo para cada secção transversal em xy para uma coordenada em z pré-estabelecida.&lt;br /&gt;
&lt;br /&gt;
ADD IMAGEM &lt;br /&gt;
&lt;br /&gt;
=== Ausência de Efeitos de Colisão ===&lt;br /&gt;
&lt;br /&gt;
O modelo leva em consideração que todas os planos possuem a mesma massa e que as colisões não levam a perda de energia no sistema.&lt;br /&gt;
&lt;br /&gt;
Dessa forma podemos prever o que ocorre quando a posição de dois planos coincide pois há conservação no momento linear em x e o coeficiente de restituição (razão entre as velocidades de afastamento e aproximação dos corpos) é igual a 1.&lt;br /&gt;
&lt;br /&gt;
ADD IMAGEM&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{cases} mv_1 - mv_2 = -mv_1&#039; + mv_2&#039;  \\ \\   \frac{v_1&#039; + v_2&#039;}{v_1 + v_2} = 1  \end{cases}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
O sistema de equações resulta em: &amp;lt;math&amp;gt;v_1&#039; = v_2 \ \ \ ; \ \ \ v_2&#039; = v_1&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dessa forma, é irrelevante ponderar se houve de fato uma colisão com troca de velocidades ou se as partículas simplesmente cruzam sem interferir de forma relevante. A última consideração é a levada em conta no ponto de vista computacional pois exclui a necessidade de atualizar a velocidade das partículas que passaram pela mesma posição no eixo x.&lt;br /&gt;
&lt;br /&gt;
=== Interação entre as partículas ===&lt;br /&gt;
&lt;br /&gt;
Para analisar a interação entre as partículas é preciso entender como uma única partícula afeta seu entorno.&lt;br /&gt;
&lt;br /&gt;
No caso das partículas-plano carregadas eletricamente podemos considerar os efeitos de campo elétrico de um isolante plano infinito:&lt;br /&gt;
&lt;br /&gt;
ADD IMAGEM&lt;br /&gt;
&lt;br /&gt;
Pela lei de Gauss, para uma dada distribuição de carga com densidade superficial &amp;lt;math&amp;gt;\sigma&amp;lt;/math&amp;gt;: &lt;br /&gt;
:&amp;lt;math&amp;gt; &lt;br /&gt;
\oint  \overrightarrow{E}. d\overrightarrow{S}  = \frac{Q_{int}}{\epsilon_0} &lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
E.A - (-E.A) = \frac{\sigma . A   }{\epsilon_0} &lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
E= \frac{\sigma }{2\epsilon_0}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
O mesmo pode ser feito para um plano com densidade de massa distribuída uniformemente, para o caso do sistema auto-gravitante, com mudança na constante física multiplicativa e no sinal.&lt;br /&gt;
&lt;br /&gt;
O fato importante a ser destacado aqui é a total independência do campo gerado pela partícula e a distância. Dessa forma, a interação entre as partículas em qualquer sistema que seguir esse modelo não terá dependência da distância entre elas e sim da posição relativa entre as partículas consideradas.&lt;br /&gt;
&lt;br /&gt;
=== Interferência externa do sistema ===&lt;br /&gt;
&lt;br /&gt;
Para o caso dos planos no sistema auto-gravitante não é necessária ação externa alguma para manter o equilíbrio em um sistema dinâmico estável. Sempre é levado em conta que todas as partículas têm velocidade em x inferior a velocidade de escape do restante do sistema e, por conta disso e das forças sempre atrativas de interação, o sistema não expande indefinidamente.&lt;br /&gt;
&lt;br /&gt;
Já no caso de planos carregados eletricamente as forças de interação entre os planos serão sempre repulsivas e a energia total do sistema é positiva. Sem uma interação externa, mesmo um sistema composto por um número limitado de partículas de fraca interação expandiria indefinidamente. Por causa disso, nesse caso é considerado que há uma força colimadora no feixe de planos proporcional a distância da origem. A origem dessa força externa vem de modelos de maior dimensionalidade de aceleradores de partícula que contam com um campo magnético externo capaz de colimar um feixe de cargas radialmente, por não existir um paralelo direto para o modelo unidimensional consideramos apenas uma força restauradora que impede a expansão indefinida do sistema como um todo. Também é possível ajustar condições de contorno simulando as paredes externas do acelerador como placas condutoras infinitas e com potencial definido. Esse tipo de consideração pode ser feita para sistemas que não são simétricos e impede que as cargas se afastem demasiadamente da origem.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
ADD IMAGEM&lt;br /&gt;
&lt;br /&gt;
= Comportamento de uma Partícula no Sistema =&lt;br /&gt;
&lt;br /&gt;
Graças a caracterização das partículas temos que o campo gerado por uma partícula-plano pode ser caracterizado (para ambos os sistemas citados) da seguinte forma:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
E_i(x) = -\lambda\Theta[-(x-x_i)]  + \lambda\Theta(x-x_i)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ADD IMAGEM&lt;br /&gt;
&lt;br /&gt;
Em que a constante &amp;lt;math&amp;gt;\lambda&amp;lt;/math&amp;gt; pode ser tanto positiva (cargas positivas) quanto negativa (cargas negativas ou interação gravitacional) e a função &amp;lt;math&amp;gt;\Theta&amp;lt;/math&amp;gt; equivale a função degrau de Heaviside:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\Theta(x) = \begin{cases} 0, \ \ x&amp;lt;0 \\ 1, \ \ x&amp;gt;0 \end{cases}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dessa forma, para exemplificação, um sistema de 5 partículas-plano teria uma interação da seguinte forma:&lt;br /&gt;
&lt;br /&gt;
ADD IMAGEM&lt;br /&gt;
&lt;br /&gt;
Aqui, F seria a força de interação entre duas partículas no caso de planos carregados. É possível notar que a força de interação varia de duas unidades dessa constante para cada partícula contada em uma direção e que a força máxima sentida (pelas partículas-plano localizadas nas extremidades) é proporcional a &amp;lt;math&amp;gt;(N-1)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
É possível notar que para uma distribuição de partículas-plano do tipo:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt; &lt;br /&gt;
n(x) =   \sum_{i=1}^N \delta(x_i) &lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
com o índice  &amp;lt;math&amp;gt;\ \ &#039;&#039;i&#039;&#039;\ &amp;lt;/math&amp;gt; sendo a ordem da partícula contada do sentido negativo para o positivo do eixo x, teremos uma força resultante de interação para uma partícula que pode ser definida por &lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
F_i =  [-(N-1) + 2(i-1)]F&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt; &lt;br /&gt;
F_i = (2i - N-1)F&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Essa força é suficiente para manter o sistema auto-gravitante coeso mas para as partículas carregadas devemos adicionar a força restauradora descrita anteriormente:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
F^{grav.}_{R,i} = (2i - N-1)F&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
F^{el.}_{R,i} = (2i - N-1)F - \kappa x_i&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Conservação da Energia do Sistema =&lt;br /&gt;
&lt;br /&gt;
Ao realizar uma simulação numérica com um grande número de entes que representam um sistema físico é importante que seja feita uma verificação sobre o quão apropriados os resultados da simulação de fato são. Uma das formas mais comuns de verificar se uma simulação numérica está correta na dinâmica molecular de vários corpos e efetuar periodicamente a soma da energia do sistema.&lt;br /&gt;
&lt;br /&gt;
No caso de sistemas como os descritos, não há nenhum incremento de energia proveniente de uma fonte externa. Mesmo para o sistema eletricamente carregado, a força restauradora é potencial e não muda a energia total do sistema dada uma distribuição inicial de posição e momento.&lt;br /&gt;
&lt;br /&gt;
Para todos os efeitos, a energia dos sistemas estudados pode ser dividida em três partes: &lt;br /&gt;
&lt;br /&gt;
== Energia Cinética ==&lt;br /&gt;
&lt;br /&gt;
Todas as partículas da distribuição escolhida terão massa e velocidade, de forma que a energia cinética do sistema será dada por:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
En_{cin} = \frac{m}{2}\sum_{i=1}^N \dot{x_i}^2&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Energia Potencial Restauradora ==&lt;br /&gt;
&lt;br /&gt;
Observada no sistema eletricamente carregado citado, pode ser descrita como:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
En_{pot} = \frac{\kappa}{2}\sum_{i=1}^N x_i^2&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Energia Potencial Intrínseca  ==&lt;br /&gt;
&lt;br /&gt;
Energia contida na interação entre as partículas. A energia de uma partícula depende do potencial na sua posição da sua carga (ou massa).&lt;br /&gt;
&lt;br /&gt;
Como potenciais não são absolutos, é estabelecido um Potencial nulo de referência nas condições de contorno do sistema. Como pode ser visto no gif com as partículas-plano carregadas em azul, são colocadas placas condutoras planas nas posições &amp;lt;math&amp;gt;x=L&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;x= -L&amp;lt;/math&amp;gt; (caso haja simetria no espaço de fase do sistema) e é estabelecido que os potenciais nessas posições são &amp;lt;math&amp;gt;V(-L) = V(L) = 0&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Uma maneira mais simples de determinar o potencial das N partículas é considerar que há nas posições de contorno,  &amp;lt;math&amp;gt;x_0&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;x_{N+1}&amp;lt;/math&amp;gt;, partículas não interagentes.&lt;br /&gt;
&lt;br /&gt;
A diferença de potencial entre duas posições vizinhas pode ser determinada por:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\Delta V_i = (x_{i} - x_{i - 1})E_i&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
com &amp;lt;math&amp;gt;E_i&amp;lt;/math&amp;gt; sendo o módulo do campo entre a i-ésima e a (i - 1)-ésima partícula, dado por:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
E_i = (2i - N - 1)\lambda&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ADD IMAGEM&lt;br /&gt;
&lt;br /&gt;
O que resulta na energia de uma partícula específica (k-ésima) descrita por:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
En_k = \alpha \sum_{i = 1}^{k}(x_i - x_{i - 1})(2i - N - 1)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aqui foram aglutinadas as possíveis constantes multiplicativas em uma constante &amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt; que pode ser escolhida para se adequar ao sistema estudado e a energia intrínseca do sistema é dada pela soma da energia de interação de cada uma das partículas. Como o sistema é dividido em intervalos com variação de potencial discretos, podemos escrever a energia intrínseca da seguinte forma:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
En_{int} = \alpha \sum_{k = 1}^{N}\sum_{i = 1}^{k}(x_i - x_{i - 1})(2i - N - 1)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A soma dessas três energias deve se manter constante (ou com pouca variação relativa significativa, pelo menos) durante a simulação:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
E_{total} = En_{cin} + En_{pot} + En_{int} = cte.&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Modelagem Computacional =&lt;br /&gt;
&lt;br /&gt;
== Criando a Distribuição do Sistema ==&lt;br /&gt;
&lt;br /&gt;
O primeiro passo para criar a simulação das N partículas é definir as coordenadas fundamentais das partículas em si (posição e velocidade).&lt;br /&gt;
&lt;br /&gt;
A simulação que será utilizada de exemplo é simétrica no espaço de fase, ou seja, para cada partícula com coordenadas &amp;lt;math&amp;gt;(x_i,y_i)&amp;lt;/math&amp;gt; existirá uma partícula espelhada &lt;br /&gt;
com coordenadas &amp;lt;math&amp;gt;(-x_i,-y_i)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Esse artifício é utilizado para que o centro de massa mantenha-se na origem e que o momento linear do sistema em x seja sempre nulo. Com isso é garantido que haverá sempre, também, a simetria par entre as energias das partículas espelhadas e a simetria ímpar entre as forças resultantes.&lt;br /&gt;
&lt;br /&gt;
Com isso garantido, basta fazer o cálculo numérico de uma metade da distribuição levando em conta a presença da outra metade, porém não tornando necessário que os cálculos sejam repetidos pois o comportamento de cada partícula espelhada torna-se perfeitamente previsível.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&#039;python&#039;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Importando as bibliotecas necessárias &lt;br /&gt;
from math import *&lt;br /&gt;
import matplotlib.pyplot as plt&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
A=[]     #criamos uma lista vazia&lt;br /&gt;
&lt;br /&gt;
N =  1000       # Determinamos o número de partículas utilizado&lt;br /&gt;
&lt;br /&gt;
for i in range(int(N)):&lt;br /&gt;
&lt;br /&gt;
    A.append([np.random.rand() ,2*(np.random.rand() - 1/2)]) #valores aleatórios de x entre 0 e 1 e de v entre -1 e 1 são adicionados&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A = np.array(A)&lt;br /&gt;
X= np.array([])     #Arrays usados para exemplificar&lt;br /&gt;
V= np.array([])     #distribuição inicial&lt;br /&gt;
&lt;br /&gt;
for i in range (len(A)):    #simetrização da distribuição&lt;br /&gt;
    X=np.append(X,A[i][0])&lt;br /&gt;
    V=np.append(V,A[i][1])&lt;br /&gt;
    V=np.append(V,-A[i][1])&lt;br /&gt;
    X=np.append(X,-A[i][0])&lt;br /&gt;
    &lt;br /&gt;
plt.xlabel(&#039;posição&#039;)             #plot da distribuição inicial&lt;br /&gt;
plt.ylabel(&#039;momento linear&#039;)&lt;br /&gt;
plt.title(&#039;Espaço de fase inicial&#039;)&lt;br /&gt;
plt.grid(True)&lt;br /&gt;
&lt;br /&gt;
plt.scatter(X,V)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ADD IMAGEM - &amp;lt;matplotlib.collections.PathCollection at 0x7f4ab8366ad0&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Função de Indexação ==&lt;br /&gt;
&lt;br /&gt;
Em outras modelagens como a interação de cargas em sistemas bidimensionais ou de massas em tridimensionais é necessário calcular a força de interação entre partículas em função das distâncias. Na modelagem proposta não é necessário calcular distâncias mas sim saber o ordenamento das partículas ao longo do eixo &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
No entanto, é muito comum em simulações que utilizam métodos de integração utilizar vetores que possuam apenas uma coluna e &amp;lt;math&amp;gt;2N&amp;lt;/math&amp;gt; linhas, sendo a primeira metade de linhas correspondentes às posições e a outra metade correspondente às velocidades.&lt;br /&gt;
&lt;br /&gt;
Para não precisar atualizar as linhas de posição e velocidade do vetor 2N-dimensional, utiliza-se uma função de indexação que será responsável por indicar qual é a ordem da partícula correspondente a uma determinada linha em um dado estado.&lt;br /&gt;
&lt;br /&gt;
Assim, a posição da partícula é atualizada no tempo e seu índice também, porém a posição dela no vetor de fase nunca se modifica. Esse fato é importante para estudos que pretendem analisar a trajetória de um único corpo no tempo, como é feito nos diagramas de Poincaré, por exemplo.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&#039;python&#039;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
teste = np.array([2,6,3,9,0,1,4])   #criado um vetor de teste  para que seus valores sejam indexados&lt;br /&gt;
&lt;br /&gt;
def indexador(arr):                 #define-se a função&lt;br /&gt;
    &lt;br /&gt;
    ordenador = []                  #é criada uma lista vazia&lt;br /&gt;
    &lt;br /&gt;
    for i in range(len(arr)):&lt;br /&gt;
        &lt;br /&gt;
        ordenador.append([abs(arr[i]),i]) # para cada valor criamos uma lista com o valor absoluto e a ordem atual&lt;br /&gt;
        &lt;br /&gt;
    ordenador.sort()                      # é feito o ordenamento da lista &#039;ordenador&#039; de acordo com o primeiro elemento&lt;br /&gt;
    &lt;br /&gt;
    for i in range(len(arr)):             &lt;br /&gt;
&lt;br /&gt;
        ordenador[i].append(i)            # é adicionado um terceiro valor para cada elemento de ordenador com o valor da sua nova ordem na sequência&lt;br /&gt;
        &lt;br /&gt;
    for i in range(len(arr)):&lt;br /&gt;
        &lt;br /&gt;
        a = ordenador[i][0]&lt;br /&gt;
        b = ordenador[i][1]             # É feita a troca do segundo com o primeiro valor de cada elemento de ordenador para...&lt;br /&gt;
        ordenador[i][0] = b&lt;br /&gt;
        ordenador[i][1] = a&lt;br /&gt;
        &lt;br /&gt;
    ordenador.sort()                    # reordenar os elementos de acordo com a ordem antiga&lt;br /&gt;
        &lt;br /&gt;
        &lt;br /&gt;
    lista = []&lt;br /&gt;
    &lt;br /&gt;
    for i in range(len(arr)):&lt;br /&gt;
        &lt;br /&gt;
        lista.append(ordenador[i][2])   #por fim guarda-se a ordem correspondente a cada valor da lista colocada como variável &lt;br /&gt;
        &lt;br /&gt;
    indexador = np.array(lista)  &lt;br /&gt;
        &lt;br /&gt;
    return indexador                     # e essa ordem é retornada como saída da função&lt;br /&gt;
&lt;br /&gt;
print(indexador(teste))&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Função de movimento e aceleração das partículas ==&lt;br /&gt;
&lt;br /&gt;
Para simular como um estado evolui no tempo, é necessário que tenhamos as derivadas temporais de todas as coordenadas do vetor de estado (&amp;lt;math&amp;gt;y&amp;lt;/math&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Para as coordenadas espaciais x (&amp;lt;math&amp;gt;y[i], \ 0\leq i&amp;lt; N &amp;lt;/math&amp;gt;) temos que:  &lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\dot{x_i} = y_{[i + N]} &lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Para as coordenadas de velocidade v (&amp;lt;math&amp;gt;y[i], \ N\leq i&amp;lt; 2N-1 &amp;lt;/math&amp;gt;) teremos que usar a relação de forças que foi descrita no modelo. Algumas simplificações comuns serão feitas como considerar constantes físicas unitárias (&amp;lt;math&amp;gt;m = q = \kappa = 1&amp;lt;/math&amp;gt;) e relações de proporcionalidade com o número de partículas do sistema para mantê-lo com um comportamento mais suave (&amp;lt;math&amp;gt;F = 1/N&amp;lt;/math&amp;gt;). O programa será escrito levando em conta o modelo de cargas elétricas: &lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\dot{v}_i = \ddot{x}_i = \frac{1}{m}\Big{[} -\kappa y_{[i - N]} + (2i - N - 1)F     \Big{]}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A relação acima pode ser descrita de forma diferente se levarmos em conta que a simulação é simétrica em x e que todas as posições iniciais são positivas.&lt;br /&gt;
&lt;br /&gt;
A partícula que recebe índice &amp;lt;math&amp;gt;1&amp;lt;/math&amp;gt; possui &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; partículas à esquerda (x negativo) e &amp;lt;math&amp;gt;(N-1)&amp;lt;/math&amp;gt; partículas a direita (x positivo), o que resulta uma força de interação de &amp;lt;math&amp;gt;F&amp;lt;/math&amp;gt; para a direita. A de índice 2 terá força de interação &amp;lt;math&amp;gt;3F&amp;lt;/math&amp;gt;, a de índice 3 terá &amp;lt;math&amp;gt;5F&amp;lt;/math&amp;gt; e assim por diante.&lt;br /&gt;
&lt;br /&gt;
Antes de reescrever a equação da aceleração deve-se levar em consideração de uma das partículas distribuídas no espaço de fase assumirem coordenadas negativas (caso tenham proximidade da origem e velocidade negativa). Novamente usando o argumento de simetria, sabe-se que caso uma partícula assuma uma posição negativa, a partícula espelhada assumirá a posição simétrica em relação a origem. Dessa forma basta calcular a força de interação sobre a partícula espelhada e inverter o sinal para a partícula original. Levando tudo isso em conta teremos a seguinte equação da aceleração:  &lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\ddot{x}_i = \frac{1}{m}\Big{[} -\kappa y_{[i - N]} + \frac{y_{[i - N]}}{|y_{[i - N]}|}(2i- 1)F     \Big{]}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;/div&gt;</summary>
		<author><name>Renanrs</name></author>
	</entry>
	<entry>
		<id>http://fiscomp.if.ufrgs.br/index.php?title=Din%C3%A2mica_Molecular_de_Part%C3%ADculas-Planares_Interagentes&amp;diff=6123</id>
		<title>Dinâmica Molecular de Partículas-Planares Interagentes</title>
		<link rel="alternate" type="text/html" href="http://fiscomp.if.ufrgs.br/index.php?title=Din%C3%A2mica_Molecular_de_Part%C3%ADculas-Planares_Interagentes&amp;diff=6123"/>
		<updated>2021-11-21T14:39:16Z</updated>

		<summary type="html">&lt;p&gt;Renanrs: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
Em construção&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Grupo: Antônio Carlan, Gabriela Pereira, Renan Soares e Victor Gandara&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Objetivo:&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= O modelo =&lt;br /&gt;
&lt;br /&gt;
É possível criar um modelo simplificado de interação de partículas imaginando que todas elas são compostas por planos de mesma massa e sem espessura, paralelos entre si e com liberdade de movimento relevante no eixo perpendicular às superfícies das mesmas.&lt;br /&gt;
&lt;br /&gt;
Tal modelo pode ser utilizado para estudar a dinâmica de um número elevado de partículas e conta com algumas particularidades simplificadoras de complexidade numérica. Alguns estudos utilizam esse modelo para estudar o comportamento de feixes carregados com a menor dimensionalidade possível [1] e também para sistemas auto-gravitantes [2]. As duas aplicações citadas serão as demonstradas a seguir mas o modelo é versátil para diferentes condições iniciais e de contorno.&lt;br /&gt;
&lt;br /&gt;
== Descrição do Modelo ==&lt;br /&gt;
&lt;br /&gt;
=== Disposição espacial ===&lt;br /&gt;
&lt;br /&gt;
Um número &amp;quot;N&amp;quot; de partículas-plano de mesma massa é disposto ao longo do eixo x com uma função de distribuição n(x) e com todas as partículas paralelas ao plano yz. No caso do modelo auto-gravitante, movimentos ao longo do eixo z não têm relevância prática mas para o modelo de um feixe de planos é definido que todos os planos se movem na direção z com mesma velocidade.&lt;br /&gt;
&lt;br /&gt;
A consideração de movimento ao longo do eixo z para o modelo de feixe é importante para a análise do comportamento do espaço de fases ao longo do comprimento do acelerador de partículas. Aqui, podemos imaginar estudar casos em que o feixe gerado inicialmente no espaço de fase terá um comportamento constante no tempo para cada secção transversal em xy para uma coordenada em z pré-estabelecida.&lt;br /&gt;
&lt;br /&gt;
ADD IMAGEM &lt;br /&gt;
&lt;br /&gt;
=== Ausência de Efeitos de Colisão ===&lt;br /&gt;
&lt;br /&gt;
O modelo leva em consideração que todas os planos possuem a mesma massa e que as colisões não levam a perda de energia no sistema.&lt;br /&gt;
&lt;br /&gt;
Dessa forma podemos prever o que ocorre quando a posição de dois planos coincide pois há conservação no momento linear em x e o coeficiente de restituição (razão entre as velocidades de afastamento e aproximação dos corpos) é igual a 1.&lt;br /&gt;
&lt;br /&gt;
ADD IMAGEM&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{cases} mv_1 - mv_2 = -mv_1&#039; + mv_2&#039;  \\ \\   \frac{v_1&#039; + v_2&#039;}{v_1 + v_2} = 1  \end{cases}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
O sistema de equações resulta em: &amp;lt;math&amp;gt;v_1&#039; = v_2 \ \ \ ; \ \ \ v_2&#039; = v_1&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dessa forma, é irrelevante ponderar se houve de fato uma colisão com troca de velocidades ou se as partículas simplesmente cruzam sem interferir de forma relevante. A última consideração é a levada em conta no ponto de vista computacional pois exclui a necessidade de atualizar a velocidade das partículas que passaram pela mesma posição no eixo x.&lt;br /&gt;
&lt;br /&gt;
=== Interação entre as partículas ===&lt;br /&gt;
&lt;br /&gt;
Para analisar a interação entre as partículas é preciso entender como uma única partícula afeta seu entorno.&lt;br /&gt;
&lt;br /&gt;
No caso das partículas-plano carregadas eletricamente podemos considerar os efeitos de campo elétrico de um isolante plano infinito:&lt;br /&gt;
&lt;br /&gt;
ADD IMAGEM&lt;br /&gt;
&lt;br /&gt;
Pela lei de Gauss, para uma dada distribuição de carga com densidade superficial &amp;lt;math&amp;gt;\sigma&amp;lt;/math&amp;gt;: &lt;br /&gt;
:&amp;lt;math&amp;gt; &lt;br /&gt;
\oint  \overrightarrow{E}. d\overrightarrow{S}  = \frac{Q_{int}}{\epsilon_0} &lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
E.A - (-E.A) = \frac{\sigma . A   }{\epsilon_0} &lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
E= \frac{\sigma }{2\epsilon_0}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
O mesmo pode ser feito para um plano com densidade de massa distribuída uniformemente, para o caso do sistema auto-gravitante, com mudança na constante física multiplicativa e no sinal.&lt;br /&gt;
&lt;br /&gt;
O fato importante a ser destacado aqui é a total independência do campo gerado pela partícula e a distância. Dessa forma, a interação entre as partículas em qualquer sistema que seguir esse modelo não terá dependência da distância entre elas e sim da posição relativa entre as partículas consideradas.&lt;br /&gt;
&lt;br /&gt;
=== Interferência externa do sistema ===&lt;br /&gt;
&lt;br /&gt;
Para o caso dos planos no sistema auto-gravitante não é necessária ação externa alguma para manter o equilíbrio em um sistema dinâmico estável. Sempre é levado em conta que todas as partículas têm velocidade em x inferior a velocidade de escape do restante do sistema e, por conta disso e das forças sempre atrativas de interação, o sistema não expande indefinidamente.&lt;br /&gt;
&lt;br /&gt;
Já no caso de planos carregados eletricamente as forças de interação entre os planos serão sempre repulsivas e a energia total do sistema é positiva. Sem uma interação externa, mesmo um sistema composto por um número limitado de partículas de fraca interação expandiria indefinidamente. Por causa disso, nesse caso é considerado que há uma força colimadora no feixe de planos proporcional a distância da origem. A origem dessa força externa vem de modelos de maior dimensionalidade de aceleradores de partícula que contam com um campo magnético externo capaz de colimar um feixe de cargas radialmente, por não existir um paralelo direto para o modelo unidimensional consideramos apenas uma força restauradora que impede a expansão indefinida do sistema como um todo. Também é possível ajustar condições de contorno simulando as paredes externas do acelerador como placas condutoras infinitas e com potencial definido. Esse tipo de consideração pode ser feita para sistemas que não são simétricos e impede que as cargas se afastem demasiadamente da origem.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
ADD IMAGEM&lt;br /&gt;
&lt;br /&gt;
= Comportamento de uma Partícula no Sistema =&lt;br /&gt;
&lt;br /&gt;
Graças a caracterização das partículas temos que o campo gerado por uma partícula-plano pode ser caracterizado (para ambos os sistemas citados) da seguinte forma:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
E_i(x) = -\lambda\Theta[-(x-x_i)]  + \lambda\Theta(x-x_i)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ADD IMAGEM&lt;br /&gt;
&lt;br /&gt;
Em que a constante &amp;lt;math&amp;gt;\lambda&amp;lt;/math&amp;gt; pode ser tanto positiva (cargas positivas) quanto negativa (cargas negativas ou interação gravitacional) e a função &amp;lt;math&amp;gt;\Theta&amp;lt;/math&amp;gt; equivale a função degrau de Heaviside:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\Theta(x) = \begin{cases} 0, \ \ x&amp;lt;0 \\ 1, \ \ x&amp;gt;0 \end{cases}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dessa forma, para exemplificação, um sistema de 5 partículas-plano teria uma interação da seguinte forma:&lt;br /&gt;
&lt;br /&gt;
ADD IMAGEM&lt;br /&gt;
&lt;br /&gt;
Aqui, F seria a força de interação entre duas partículas no caso de planos carregados. É possível notar que a força de interação varia de duas unidades dessa constante para cada partícula contada em uma direção e que a força máxima sentida (pelas partículas-plano localizadas nas extremidades) é proporcional a &amp;lt;math&amp;gt;(N-1)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
É possível notar que para uma distribuição de partículas-plano do tipo:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt; &lt;br /&gt;
n(x) =   \sum_{i=1}^N \delta(x_i) &lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
com o índice  &amp;lt;math&amp;gt;\ \ &#039;&#039;i&#039;&#039;\ &amp;lt;/math&amp;gt; sendo a ordem da partícula contada do sentido negativo para o positivo do eixo x, teremos uma força resultante de interação para uma partícula que pode ser definida por &lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
F_i =  [-(N-1) + 2(i-1)]F&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt; &lt;br /&gt;
F_i = (2i - N-1)F&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Essa força é suficiente para manter o sistema auto-gravitante coeso mas para as partículas carregadas devemos adicionar a força restauradora descrita anteriormente:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
F^{grav.}_{R,i} = (2i - N-1)F&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
F^{el.}_{R,i} = (2i - N-1)F - \kappa x_i&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Conservação da Energia do Sistema =&lt;br /&gt;
&lt;br /&gt;
Ao realizar uma simulação numérica com um grande número de entes que representam um sistema físico é importante que seja feita uma verificação sobre o quão apropriados os resultados da simulação de fato são. Uma das formas mais comuns de verificar se uma simulação numérica está correta na dinâmica molecular de vários corpos e efetuar periodicamente a soma da energia do sistema.&lt;br /&gt;
&lt;br /&gt;
No caso de sistemas como os descritos, não há nenhum incremento de energia proveniente de uma fonte externa. Mesmo para o sistema eletricamente carregado, a força restauradora é potencial e não muda a energia total do sistema dada uma distribuição inicial de posição e momento.&lt;br /&gt;
&lt;br /&gt;
Para todos os efeitos, a energia dos sistemas estudados pode ser dividida em três partes: &lt;br /&gt;
&lt;br /&gt;
== Energia Cinética ==&lt;br /&gt;
&lt;br /&gt;
Todas as partículas da distribuição escolhida terão massa e velocidade, de forma que a energia cinética do sistema será dada por:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
En_{cin} = \frac{m}{2}\sum_{i=1}^N \dot{x_i}^2&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Energia Potencial Restauradora ==&lt;br /&gt;
&lt;br /&gt;
Observada no sistema eletricamente carregado citado, pode ser descrita como:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
En_{pot} = \frac{\kappa}{2}\sum_{i=1}^N x_i^2&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Energia Potencial Intrínseca  ==&lt;br /&gt;
&lt;br /&gt;
Energia contida na interação entre as partículas. A energia de uma partícula depende do potencial na sua posição da sua carga (ou massa).&lt;br /&gt;
&lt;br /&gt;
Como potenciais não são absolutos, é estabelecido um Potencial nulo de referência nas condições de contorno do sistema. Como pode ser visto no gif com as partículas-plano carregadas em azul, são colocadas placas condutoras planas nas posições &amp;lt;math&amp;gt;x=L&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;x= -L&amp;lt;/math&amp;gt; (caso haja simetria no espaço de fase do sistema) e é estabelecido que os potenciais nessas posições são &amp;lt;math&amp;gt;V(-L) = V(L) = 0&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Uma maneira mais simples de determinar o potencial das N partículas é considerar que há nas posições de contorno,  &amp;lt;math&amp;gt;x_0&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;x_{N+1}&amp;lt;/math&amp;gt;, partículas não interagentes.&lt;br /&gt;
&lt;br /&gt;
A diferença de potencial entre duas posições vizinhas pode ser determinada por:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\Delta V_i = (x_{i} - x_{i - 1})E_i&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
com &amp;lt;math&amp;gt;E_i&amp;lt;/math&amp;gt; sendo o módulo do campo entre a i-ésima e a (i - 1)-ésima partícula, dado por:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
E_i = (2i - N - 1)\lambda&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ADD IMAGEM&lt;br /&gt;
&lt;br /&gt;
O que resulta na energia de uma partícula específica (k-ésima) descrita por:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
En_k = \alpha \sum_{i = 1}^{k}(x_i - x_{i - 1})(2i - N - 1)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aqui foram aglutinadas as possíveis constantes multiplicativas em uma constante &amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt; que pode ser escolhida para se adequar ao sistema estudado e a energia intrínseca do sistema é dada pela soma da energia de interação de cada uma das partículas. Como o sistema é dividido em intervalos com variação de potencial discretos, podemos escrever a energia intrínseca da seguinte forma:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
En_{int} = \alpha \sum_{k = 1}^{N}\sum_{i = 1}^{k}(x_i - x_{i - 1})(2i - N - 1)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A soma dessas três energias deve se manter constante (ou com pouca variação relativa significativa, pelo menos) durante a simulação:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
E_{total} = En_{cin} + En_{pot} + En_{int} = cte.&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Modelagem Computacional =&lt;/div&gt;</summary>
		<author><name>Renanrs</name></author>
	</entry>
	<entry>
		<id>http://fiscomp.if.ufrgs.br/index.php?title=Din%C3%A2mica_Molecular_de_Part%C3%ADculas-Planares_Interagentes&amp;diff=6122</id>
		<title>Dinâmica Molecular de Partículas-Planares Interagentes</title>
		<link rel="alternate" type="text/html" href="http://fiscomp.if.ufrgs.br/index.php?title=Din%C3%A2mica_Molecular_de_Part%C3%ADculas-Planares_Interagentes&amp;diff=6122"/>
		<updated>2021-11-21T14:36:04Z</updated>

		<summary type="html">&lt;p&gt;Renanrs: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
Em construção&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Grupo: Antônio Carlan, Gabriela Pereira, Renan Soares e Victor Gandara&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Objetivo:&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= O modelo =&lt;br /&gt;
&lt;br /&gt;
É possível criar um modelo simplificado de interação de partículas imaginando que todas elas são compostas por planos de mesma massa e sem espessura, paralelos entre si e com liberdade de movimento relevante no eixo perpendicular às superfícies das mesmas.&lt;br /&gt;
&lt;br /&gt;
Tal modelo pode ser utilizado para estudar a dinâmica de um número elevado de partículas e conta com algumas particularidades simplificadoras de complexidade numérica. Alguns estudos utilizam esse modelo para estudar o comportamento de feixes carregados com a menor dimensionalidade possível [1] e também para sistemas auto-gravitantes [2]. As duas aplicações citadas serão as demonstradas a seguir mas o modelo é versátil para diferentes condições iniciais e de contorno.&lt;br /&gt;
&lt;br /&gt;
== Descrição do Modelo ==&lt;br /&gt;
&lt;br /&gt;
=== Disposição espacial ===&lt;br /&gt;
&lt;br /&gt;
Um número &amp;quot;N&amp;quot; de partículas-plano de mesma massa é disposto ao longo do eixo x com uma função de distribuição n(x) e com todas as partículas paralelas ao plano yz. No caso do modelo auto-gravitante, movimentos ao longo do eixo z não têm relevância prática mas para o modelo de um feixe de planos é definido que todos os planos se movem na direção z com mesma velocidade.&lt;br /&gt;
&lt;br /&gt;
A consideração de movimento ao longo do eixo z para o modelo de feixe é importante para a análise do comportamento do espaço de fases ao longo do comprimento do acelerador de partículas. Aqui, podemos imaginar estudar casos em que o feixe gerado inicialmente no espaço de fase terá um comportamento constante no tempo para cada secção transversal em xy para uma coordenada em z pré-estabelecida.&lt;br /&gt;
&lt;br /&gt;
ADD IMAGEM &lt;br /&gt;
&lt;br /&gt;
=== Ausência de Efeitos de Colisão ===&lt;br /&gt;
&lt;br /&gt;
O modelo leva em consideração que todas os planos possuem a mesma massa e que as colisões não levam a perda de energia no sistema.&lt;br /&gt;
&lt;br /&gt;
Dessa forma podemos prever o que ocorre quando a posição de dois planos coincide pois há conservação no momento linear em x e o coeficiente de restituição (razão entre as velocidades de afastamento e aproximação dos corpos) é igual a 1.&lt;br /&gt;
&lt;br /&gt;
ADD IMAGEM&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{cases} mv_1 - mv_2 = -mv_1&#039; + mv_2&#039;  \\ \\   \frac{v_1&#039; + v_2&#039;}{v_1 + v_2} = 1  \end{cases}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
O sistema de equações resulta em: &amp;lt;math&amp;gt;v_1&#039; = v_2 \ \ \ ; \ \ \ v_2&#039; = v_1&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dessa forma, é irrelevante ponderar se houve de fato uma colisão com troca de velocidades ou se as partículas simplesmente cruzam sem interferir de forma relevante. A última consideração é a levada em conta no ponto de vista computacional pois exclui a necessidade de atualizar a velocidade das partículas que passaram pela mesma posição no eixo x.&lt;br /&gt;
&lt;br /&gt;
=== Interação entre as partículas ===&lt;br /&gt;
&lt;br /&gt;
Para analisar a interação entre as partículas é preciso entender como uma única partícula afeta seu entorno.&lt;br /&gt;
&lt;br /&gt;
No caso das partículas-plano carregadas eletricamente podemos considerar os efeitos de campo elétrico de um isolante plano infinito:&lt;br /&gt;
&lt;br /&gt;
ADD IMAGEM&lt;br /&gt;
&lt;br /&gt;
Pela lei de Gauss, para uma dada distribuição de carga com densidade superficial &amp;lt;math&amp;gt;\sigma&amp;lt;/math&amp;gt;: &lt;br /&gt;
:&amp;lt;math&amp;gt; &lt;br /&gt;
\oint  \overrightarrow{E}. d\overrightarrow{S}  = \frac{Q_{int}}{\epsilon_0} &lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
E.A - (-E.A) = \frac{\sigma . A   }{\epsilon_0} &lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
E= \frac{\sigma }{2\epsilon_0}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
O mesmo pode ser feito para um plano com densidade de massa distribuída uniformemente, para o caso do sistema auto-gravitante, com mudança na constante física multiplicativa e no sinal.&lt;br /&gt;
&lt;br /&gt;
O fato importante a ser destacado aqui é a total independência do campo gerado pela partícula e a distância. Dessa forma, a interação entre as partículas em qualquer sistema que seguir esse modelo não terá dependência da distância entre elas e sim da posição relativa entre as partículas consideradas.&lt;br /&gt;
&lt;br /&gt;
=== Interferência externa do sistema ===&lt;br /&gt;
&lt;br /&gt;
Para o caso dos planos no sistema auto-gravitante não é necessária ação externa alguma para manter o equilíbrio em um sistema dinâmico estável. Sempre é levado em conta que todas as partículas têm velocidade em x inferior a velocidade de escape do restante do sistema e, por conta disso e das forças sempre atrativas de interação, o sistema não expande indefinidamente.&lt;br /&gt;
&lt;br /&gt;
Já no caso de planos carregados eletricamente as forças de interação entre os planos serão sempre repulsivas e a energia total do sistema é positiva. Sem uma interação externa, mesmo um sistema composto por um número limitado de partículas de fraca interação expandiria indefinidamente. Por causa disso, nesse caso é considerado que há uma força colimadora no feixe de planos proporcional a distância da origem. A origem dessa força externa vem de modelos de maior dimensionalidade de aceleradores de partícula que contam com um campo magnético externo capaz de colimar um feixe de cargas radialmente, por não existir um paralelo direto para o modelo unidimensional consideramos apenas uma força restauradora que impede a expansão indefinida do sistema como um todo. Também é possível ajustar condições de contorno simulando as paredes externas do acelerador como placas condutoras infinitas e com potencial definido. Esse tipo de consideração pode ser feita para sistemas que não são simétricos e impede que as cargas se afastem demasiadamente da origem.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
ADD IMAGEM&lt;br /&gt;
&lt;br /&gt;
= Comportamento de uma Partícula no Sistema =&lt;br /&gt;
&lt;br /&gt;
Graças a caracterização das partículas temos que o campo gerado por uma partícula-plano pode ser caracterizado (para ambos os sistemas citados) da seguinte forma:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
E_i(x) = -\lambda\Theta[-(x-x_i)]  + \lambda\Theta(x-x_i)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ADD IMAGEM&lt;br /&gt;
&lt;br /&gt;
Em que a constante &amp;lt;math&amp;gt;\lambda&amp;lt;/math&amp;gt; pode ser tanto positiva (cargas positivas) quanto negativa (cargas negativas ou interação gravitacional) e a função &amp;lt;math&amp;gt;\Theta&amp;lt;/math&amp;gt; equivale a função degrau de Heaviside:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\Theta(x) = \begin{cases} 0, \ \ x&amp;lt;0 \\ 1, \ \ x&amp;gt;0 \end{cases}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dessa forma, para exemplificação, um sistema de 5 partículas-plano teria uma interação da seguinte forma:&lt;br /&gt;
&lt;br /&gt;
ADD IMAGEM&lt;br /&gt;
&lt;br /&gt;
Aqui, F seria a força de interação entre duas partículas no caso de planos carregados. É possível notar que a força de interação varia de duas unidades dessa constante para cada partícula contada em uma direção e que a força máxima sentida (pelas partículas-plano localizadas nas extremidades) é proporcional a &amp;lt;math&amp;gt;(N-1)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
É possível notar que para uma distribuição de partículas-plano do tipo:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt; &lt;br /&gt;
n(x) =   \sum_{i=1}^N \delta(x_i) &lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
com o índice  &amp;lt;math&amp;gt;\ \ &#039;&#039;i&#039;&#039;\ &amp;lt;/math&amp;gt; sendo a ordem da partícula contada do sentido negativo para o positivo do eixo x, teremos uma força resultante de interação para uma partícula que pode ser definida por &lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
F_i =  [-(N-1) + 2(i-1)]F \\ \\ \\ \\ F_i = (2i - N-1)F&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Essa força é suficiente para manter o sistema auto-gravitante coeso mas para as partículas carregadas devemos adicionar a força restauradora descrita anteriormente:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
F^{grav.}_{R,i} = (2i - N-1)F \\&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
F^{el.}_{R,i} = (2i - N-1)F - \kappa x_i \\ \\ &lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Conservação da Energia do Sistema =&lt;br /&gt;
&lt;br /&gt;
Ao realizar uma simulação numérica com um grande número de entes que representam um sistema físico é importante que seja feita uma verificação sobre o quão apropriados os resultados da simulação de fato são. Uma das formas mais comuns de verificar se uma simulação numérica está correta na dinâmica molecular de vários corpos e efetuar periodicamente a soma da energia do sistema.&lt;br /&gt;
&lt;br /&gt;
No caso de sistemas como os descritos, não há nenhum incremento de energia proveniente de uma fonte externa. Mesmo para o sistema eletricamente carregado, a força restauradora é potencial e não muda a energia total do sistema dada uma distribuição inicial de posição e momento.&lt;br /&gt;
&lt;br /&gt;
Para todos os efeitos, a energia dos sistemas estudados pode ser dividida em três partes: &lt;br /&gt;
&lt;br /&gt;
== Energia Cinética ==&lt;br /&gt;
&lt;br /&gt;
Todas as partículas da distribuição escolhida terão massa e velocidade, de forma que a energia cinética do sistema será dada por:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
En_{cin} = \frac{m}{2}\sum_{i=1}^N \dot{x_i}^2 \\&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Energia Potencial Restauradora ====&lt;br /&gt;
&lt;br /&gt;
Observada no sistema eletricamente carregado citado, pode ser descrita como:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
En_{pot} = \frac{\kappa}{2}\sum_{i=1}^N x_i^2 \\&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Energia Potencial Intrínseca  ==&lt;br /&gt;
&lt;br /&gt;
Energia contida na interação entre as partículas. A energia de uma partícula depende do potencial na sua posição da sua carga (ou massa).&lt;br /&gt;
&lt;br /&gt;
Como potenciais não são absolutos, é estabelecido um Potencial nulo de referência nas condições de contorno do sistema. Como pode ser visto no gif com as partículas-plano carregadas em azul, são colocadas placas condutoras planas nas posições &amp;lt;math&amp;gt;x=L&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;x= -L&amp;lt;/math&amp;gt; (caso haja simetria no espaço de fase do sistema) e é estabelecido que os potenciais nessas posições são &amp;lt;math&amp;gt;V(-L) = V(L) = 0&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Uma maneira mais simples de determinar o potencial das N partículas é considerar que há nas posições de contorno,  &amp;lt;math&amp;gt;x_0&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;x_{N+1}&amp;lt;/math&amp;gt;, partículas não interagentes.&lt;br /&gt;
&lt;br /&gt;
A diferença de potencial entre duas posições vizinhas pode ser determinada por:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\Delta V_i = (x_{i} - x_{i - 1})E_i&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
com &amp;lt;math&amp;gt;E_i&amp;lt;/math&amp;gt; sendo o módulo do campo entre a i-ésima e a (i - 1)-ésima partícula, dado por:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
E_i = (2i - N - 1)\lambda&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ADD IMAGEM&lt;br /&gt;
&lt;br /&gt;
O que resulta na energia de uma partícula específica (k-ésima) descrita por:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
En_k = \alpha \sum_{i = 1}^{k}(x_i - x_{i - 1})(2i - N - 1)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aqui foram aglutinadas as possíveis constantes multiplicativas em uma constante &amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt; que pode ser escolhida para se adequar ao sistema estudado e a energia intrínseca do sistema é dada pela soma da energia de interação de cada uma das partículas. Como o sistema é dividido em intervalos com variação de potencial discretos, podemos escrever a energia intrínseca da seguinte forma:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
En_{int} = \alpha \sum_{k = 1}^{N}\sum_{i = 1}^{k}(x_i - x_{i - 1})(2i - N - 1)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A soma dessas três energias deve se manter constante (ou com pouca variação relativa significativa, pelo menos) durante a simulação:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
E_{total} = En_{cin} + En_{pot} + En_{int} = cte.&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Modelagem Computacional =&lt;/div&gt;</summary>
		<author><name>Renanrs</name></author>
	</entry>
	<entry>
		<id>http://fiscomp.if.ufrgs.br/index.php?title=Din%C3%A2mica_Molecular_de_Part%C3%ADculas-Planares_Interagentes&amp;diff=6121</id>
		<title>Dinâmica Molecular de Partículas-Planares Interagentes</title>
		<link rel="alternate" type="text/html" href="http://fiscomp.if.ufrgs.br/index.php?title=Din%C3%A2mica_Molecular_de_Part%C3%ADculas-Planares_Interagentes&amp;diff=6121"/>
		<updated>2021-11-21T14:35:12Z</updated>

		<summary type="html">&lt;p&gt;Renanrs: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
Em construção&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Grupo: Antônio Carlan, Gabriela Pereira, Renan Soares e Victor Gandara&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Objetivo:&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= O modelo =&lt;br /&gt;
&lt;br /&gt;
É possível criar um modelo simplificado de interação de partículas imaginando que todas elas são compostas por planos de mesma massa e sem espessura, paralelos entre si e com liberdade de movimento relevante no eixo perpendicular às superfícies das mesmas.&lt;br /&gt;
&lt;br /&gt;
Tal modelo pode ser utilizado para estudar a dinâmica de um número elevado de partículas e conta com algumas particularidades simplificadoras de complexidade numérica. Alguns estudos utilizam esse modelo para estudar o comportamento de feixes carregados com a menor dimensionalidade possível [1] e também para sistemas auto-gravitantes [2]. As duas aplicações citadas serão as demonstradas a seguir mas o modelo é versátil para diferentes condições iniciais e de contorno.&lt;br /&gt;
&lt;br /&gt;
== Descrição do Modelo ==&lt;br /&gt;
&lt;br /&gt;
=== Disposição espacial ===&lt;br /&gt;
&lt;br /&gt;
Um número &amp;quot;N&amp;quot; de partículas-plano de mesma massa é disposto ao longo do eixo x com uma função de distribuição n(x) e com todas as partículas paralelas ao plano yz. No caso do modelo auto-gravitante, movimentos ao longo do eixo z não têm relevância prática mas para o modelo de um feixe de planos é definido que todos os planos se movem na direção z com mesma velocidade.&lt;br /&gt;
&lt;br /&gt;
A consideração de movimento ao longo do eixo z para o modelo de feixe é importante para a análise do comportamento do espaço de fases ao longo do comprimento do acelerador de partículas. Aqui, podemos imaginar estudar casos em que o feixe gerado inicialmente no espaço de fase terá um comportamento constante no tempo para cada secção transversal em xy para uma coordenada em z pré-estabelecida.&lt;br /&gt;
&lt;br /&gt;
ADD IMAGEM &lt;br /&gt;
&lt;br /&gt;
=== Ausência de Efeitos de Colisão ===&lt;br /&gt;
&lt;br /&gt;
O modelo leva em consideração que todas os planos possuem a mesma massa e que as colisões não levam a perda de energia no sistema.&lt;br /&gt;
&lt;br /&gt;
Dessa forma podemos prever o que ocorre quando a posição de dois planos coincide pois há conservação no momento linear em x e o coeficiente de restituição (razão entre as velocidades de afastamento e aproximação dos corpos) é igual a 1.&lt;br /&gt;
&lt;br /&gt;
ADD IMAGEM&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{cases} mv_1 - mv_2 = -mv_1&#039; + mv_2&#039;  \\ \\   \frac{v_1&#039; + v_2&#039;}{v_1 + v_2} = 1  \end{cases}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
O sistema de equações resulta em: &amp;lt;math&amp;gt;v_1&#039; = v_2 \ \ \ ; \ \ \ v_2&#039; = v_1&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dessa forma, é irrelevante ponderar se houve de fato uma colisão com troca de velocidades ou se as partículas simplesmente cruzam sem interferir de forma relevante. A última consideração é a levada em conta no ponto de vista computacional pois exclui a necessidade de atualizar a velocidade das partículas que passaram pela mesma posição no eixo x.&lt;br /&gt;
&lt;br /&gt;
=== Interação entre as partículas ===&lt;br /&gt;
&lt;br /&gt;
Para analisar a interação entre as partículas é preciso entender como uma única partícula afeta seu entorno.&lt;br /&gt;
&lt;br /&gt;
No caso das partículas-plano carregadas eletricamente podemos considerar os efeitos de campo elétrico de um isolante plano infinito:&lt;br /&gt;
&lt;br /&gt;
ADD IMAGEM&lt;br /&gt;
&lt;br /&gt;
Pela lei de Gauss, para uma dada distribuição de carga com densidade superficial &amp;lt;math&amp;gt;\sigma&amp;lt;/math&amp;gt;: &lt;br /&gt;
:&amp;lt;math&amp;gt; &lt;br /&gt;
\oint  \overrightarrow{E}. d\overrightarrow{S}  = \frac{Q_{int}}{\epsilon_0} &lt;br /&gt;
E.A - (-E.A) = \frac{\sigma . A   }{\epsilon_0} &lt;br /&gt;
E= \frac{\sigma }{2\epsilon_0}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
O mesmo pode ser feito para um plano com densidade de massa distribuída uniformemente, para o caso do sistema auto-gravitante, com mudança na constante física multiplicativa e no sinal.&lt;br /&gt;
&lt;br /&gt;
O fato importante a ser destacado aqui é a total independência do campo gerado pela partícula e a distância. Dessa forma, a interação entre as partículas em qualquer sistema que seguir esse modelo não terá dependência da distância entre elas e sim da posição relativa entre as partículas consideradas.&lt;br /&gt;
&lt;br /&gt;
=== Interferência externa do sistema ===&lt;br /&gt;
&lt;br /&gt;
Para o caso dos planos no sistema auto-gravitante não é necessária ação externa alguma para manter o equilíbrio em um sistema dinâmico estável. Sempre é levado em conta que todas as partículas têm velocidade em x inferior a velocidade de escape do restante do sistema e, por conta disso e das forças sempre atrativas de interação, o sistema não expande indefinidamente.&lt;br /&gt;
&lt;br /&gt;
Já no caso de planos carregados eletricamente as forças de interação entre os planos serão sempre repulsivas e a energia total do sistema é positiva. Sem uma interação externa, mesmo um sistema composto por um número limitado de partículas de fraca interação expandiria indefinidamente. Por causa disso, nesse caso é considerado que há uma força colimadora no feixe de planos proporcional a distância da origem. A origem dessa força externa vem de modelos de maior dimensionalidade de aceleradores de partícula que contam com um campo magnético externo capaz de colimar um feixe de cargas radialmente, por não existir um paralelo direto para o modelo unidimensional consideramos apenas uma força restauradora que impede a expansão indefinida do sistema como um todo. Também é possível ajustar condições de contorno simulando as paredes externas do acelerador como placas condutoras infinitas e com potencial definido. Esse tipo de consideração pode ser feita para sistemas que não são simétricos e impede que as cargas se afastem demasiadamente da origem.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
ADD IMAGEM&lt;br /&gt;
&lt;br /&gt;
= Comportamento de uma Partícula no Sistema =&lt;br /&gt;
&lt;br /&gt;
Graças a caracterização das partículas temos que o campo gerado por uma partícula-plano pode ser caracterizado (para ambos os sistemas citados) da seguinte forma:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
E_i(x) = -\lambda\Theta[-(x-x_i)]  + \lambda\Theta(x-x_i)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ADD IMAGEM&lt;br /&gt;
&lt;br /&gt;
Em que a constante &amp;lt;math&amp;gt;\lambda&amp;lt;/math&amp;gt; pode ser tanto positiva (cargas positivas) quanto negativa (cargas negativas ou interação gravitacional) e a função &amp;lt;math&amp;gt;\Theta&amp;lt;/math&amp;gt; equivale a função degrau de Heaviside:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\Theta(x) = \begin{cases} 0, \ \ x&amp;lt;0 \\ 1, \ \ x&amp;gt;0 \end{cases}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dessa forma, para exemplificação, um sistema de 5 partículas-plano teria uma interação da seguinte forma:&lt;br /&gt;
&lt;br /&gt;
ADD IMAGEM&lt;br /&gt;
&lt;br /&gt;
Aqui, F seria a força de interação entre duas partículas no caso de planos carregados. É possível notar que a força de interação varia de duas unidades dessa constante para cada partícula contada em uma direção e que a força máxima sentida (pelas partículas-plano localizadas nas extremidades) é proporcional a &amp;lt;math&amp;gt;(N-1)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
É possível notar que para uma distribuição de partículas-plano do tipo:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt; &lt;br /&gt;
n(x) =   \sum_{i=1}^N \delta(x_i) &lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
com o índice  &amp;lt;math&amp;gt;\ \ &#039;&#039;i&#039;&#039;\ &amp;lt;/math&amp;gt; sendo a ordem da partícula contada do sentido negativo para o positivo do eixo x, teremos uma força resultante de interação para uma partícula que pode ser definida por &lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
F_i =  [-(N-1) + 2(i-1)]F \\ \\ \\ \\ F_i = (2i - N-1)F&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Essa força é suficiente para manter o sistema auto-gravitante coeso mas para as partículas carregadas devemos adicionar a força restauradora descrita anteriormente:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
F^{grav.}_{R,i} = (2i - N-1)F \\&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
F^{el.}_{R,i} = (2i - N-1)F - \kappa x_i \\ \\ &lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Conservação da Energia do Sistema =&lt;br /&gt;
&lt;br /&gt;
Ao realizar uma simulação numérica com um grande número de entes que representam um sistema físico é importante que seja feita uma verificação sobre o quão apropriados os resultados da simulação de fato são. Uma das formas mais comuns de verificar se uma simulação numérica está correta na dinâmica molecular de vários corpos e efetuar periodicamente a soma da energia do sistema.&lt;br /&gt;
&lt;br /&gt;
No caso de sistemas como os descritos, não há nenhum incremento de energia proveniente de uma fonte externa. Mesmo para o sistema eletricamente carregado, a força restauradora é potencial e não muda a energia total do sistema dada uma distribuição inicial de posição e momento.&lt;br /&gt;
&lt;br /&gt;
Para todos os efeitos, a energia dos sistemas estudados pode ser dividida em três partes: &lt;br /&gt;
&lt;br /&gt;
== Energia Cinética ==&lt;br /&gt;
&lt;br /&gt;
Todas as partículas da distribuição escolhida terão massa e velocidade, de forma que a energia cinética do sistema será dada por:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
En_{cin} = \frac{m}{2}\sum_{i=1}^N \dot{x_i}^2 \\&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Energia Potencial Restauradora ====&lt;br /&gt;
&lt;br /&gt;
Observada no sistema eletricamente carregado citado, pode ser descrita como:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
En_{pot} = \frac{\kappa}{2}\sum_{i=1}^N x_i^2 \\&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Energia Potencial Intrínseca  ==&lt;br /&gt;
&lt;br /&gt;
Energia contida na interação entre as partículas. A energia de uma partícula depende do potencial na sua posição da sua carga (ou massa).&lt;br /&gt;
&lt;br /&gt;
Como potenciais não são absolutos, é estabelecido um Potencial nulo de referência nas condições de contorno do sistema. Como pode ser visto no gif com as partículas-plano carregadas em azul, são colocadas placas condutoras planas nas posições &amp;lt;math&amp;gt;x=L&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;x= -L&amp;lt;/math&amp;gt; (caso haja simetria no espaço de fase do sistema) e é estabelecido que os potenciais nessas posições são &amp;lt;math&amp;gt;V(-L) = V(L) = 0&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Uma maneira mais simples de determinar o potencial das N partículas é considerar que há nas posições de contorno,  &amp;lt;math&amp;gt;x_0&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;x_{N+1}&amp;lt;/math&amp;gt;, partículas não interagentes.&lt;br /&gt;
&lt;br /&gt;
A diferença de potencial entre duas posições vizinhas pode ser determinada por:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\Delta V_i = (x_{i} - x_{i - 1})E_i&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
com &amp;lt;math&amp;gt;E_i&amp;lt;/math&amp;gt; sendo o módulo do campo entre a i-ésima e a (i - 1)-ésima partícula, dado por:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
E_i = (2i - N - 1)\lambda&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ADD IMAGEM&lt;br /&gt;
&lt;br /&gt;
O que resulta na energia de uma partícula específica (k-ésima) descrita por:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
En_k = \alpha \sum_{i = 1}^{k}(x_i - x_{i - 1})(2i - N - 1)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aqui foram aglutinadas as possíveis constantes multiplicativas em uma constante &amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt; que pode ser escolhida para se adequar ao sistema estudado e a energia intrínseca do sistema é dada pela soma da energia de interação de cada uma das partículas. Como o sistema é dividido em intervalos com variação de potencial discretos, podemos escrever a energia intrínseca da seguinte forma:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
En_{int} = \alpha \sum_{k = 1}^{N}\sum_{i = 1}^{k}(x_i - x_{i - 1})(2i - N - 1)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A soma dessas três energias deve se manter constante (ou com pouca variação relativa significativa, pelo menos) durante a simulação:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
E_{total} = En_{cin} + En_{pot} + En_{int} = cte.&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Modelagem Computacional =&lt;/div&gt;</summary>
		<author><name>Renanrs</name></author>
	</entry>
	<entry>
		<id>http://fiscomp.if.ufrgs.br/index.php?title=Din%C3%A2mica_Molecular_de_Part%C3%ADculas-Planares_Interagentes&amp;diff=6120</id>
		<title>Dinâmica Molecular de Partículas-Planares Interagentes</title>
		<link rel="alternate" type="text/html" href="http://fiscomp.if.ufrgs.br/index.php?title=Din%C3%A2mica_Molecular_de_Part%C3%ADculas-Planares_Interagentes&amp;diff=6120"/>
		<updated>2021-11-20T19:10:19Z</updated>

		<summary type="html">&lt;p&gt;Renanrs: Criou página com &amp;#039; Em construção   &amp;#039;&amp;#039;&amp;#039;Grupo: Antônio Carlan, Gabriela Pereira, Renan Soares e Victor Gandara&amp;#039;&amp;#039;&amp;#039;  &amp;#039;&amp;#039;&amp;#039;Objetivo:&amp;#039;&amp;#039;&amp;#039;    = O modelo =  É possível criar um modelo simplificado de...&amp;#039;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
Em construção&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Grupo: Antônio Carlan, Gabriela Pereira, Renan Soares e Victor Gandara&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Objetivo:&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= O modelo =&lt;br /&gt;
&lt;br /&gt;
É possível criar um modelo simplificado de interação de partículas imaginando que todas elas são compostas por planos de mesma massa e sem espessura, paralelos entre si e com liberdade de movimento relevante no eixo perpendicular às superfícies das mesmas.&lt;br /&gt;
&lt;br /&gt;
Tal modelo pode ser utilizado para estudar a dinâmica de um número elevado de partículas e conta com algumas particularidades simplificadoras de complexidade numérica. Alguns estudos utilizam esse modelo para estudar o comportamento de feixes carregados com a menor dimensionalidade possível [1] e também para sistemas auto-gravitantes [2]. As duas aplicações citadas serão as demonstradas a seguir mas o modelo é versátil para diferentes condições iniciais e de contorno.&lt;br /&gt;
&lt;br /&gt;
== Descrição do Modelo ==&lt;br /&gt;
&lt;br /&gt;
=== Disposição espacial ===&lt;br /&gt;
&lt;br /&gt;
Um número &amp;quot;N&amp;quot; de partículas-plano de mesma massa é disposto ao longo do eixo x com uma função de distribuição n(x) e com todas as partículas paralelas ao plano yz. No caso do modelo auto-gravitante, movimentos ao longo do eixo z não têm relevância prática mas para o modelo de um feixe de planos é definido que todos os planos se movem na direção z com mesma velocidade.&lt;br /&gt;
&lt;br /&gt;
A consideração de movimento ao longo do eixo z para o modelo de feixe é importante para a análise do comportamento do espaço de fases ao longo do comprimento do acelerador de partículas. Aqui, podemos imaginar estudar casos em que o feixe gerado inicialmente no espaço de fase terá um comportamento constante no tempo para cada secção transversal em xy para uma coordenada em z pré-estabelecida.&lt;br /&gt;
&lt;br /&gt;
ADD IMAGEM &lt;br /&gt;
&lt;br /&gt;
=== Ausência de Efeitos de Colisão ===&lt;br /&gt;
&lt;br /&gt;
O modelo leva em consideração que todas os planos possuem a mesma massa e que as colisões não levam a perda de energia no sistema.&lt;br /&gt;
&lt;br /&gt;
Dessa forma podemos prever o que ocorre quando a posição de dois planos coincide pois há conservação no momento linear em x e o coeficiente de restituição (razão entre as velocidades de afastamento e aproximação dos corpos) é igual a 1.&lt;br /&gt;
&lt;br /&gt;
ADD IMAGEM&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{cases} mv_1 - mv_2 = -mv_1&#039; + mv_2&#039;  \\ \\   \frac{v_1&#039; + v_2&#039;}{v_1 + v_2} = 1  \end{cases}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
O sistema de equações resulta em: &amp;lt;math&amp;gt;v_1&#039; = v_2 \ \ \ ; \ \ \ v_2&#039; = v_1&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dessa forma, é irrelevante ponderar se houve de fato uma colisão com troca de velocidades ou se as partículas simplesmente cruzam sem interferir de forma relevante. A última consideração é a levada em conta no ponto de vista computacional pois exclui a necessidade de atualizar a velocidade das partículas que passaram pela mesma posição no eixo x.&lt;br /&gt;
&lt;br /&gt;
=== Interação entre as partículas ===&lt;br /&gt;
&lt;br /&gt;
Para analisar a interação entre as partículas é preciso entender como uma única partícula afeta seu entorno.&lt;br /&gt;
&lt;br /&gt;
No caso das partículas-plano carregadas eletricamente podemos considerar os efeitos de campo elétrico de um isolante plano infinito:&lt;br /&gt;
&lt;br /&gt;
ADD IMAGEM&lt;br /&gt;
&lt;br /&gt;
Pela lei de Gauss, para uma dada distribuição de carga com densidade superficial σ:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pela lei de Gauss, para uma dada distribuição de carga com densidade superficial &amp;lt;math&amp;gt;\sigma&amp;lt;/math&amp;gt;: &lt;br /&gt;
:&amp;lt;math&amp;gt; &lt;br /&gt;
\oint  \overrightarrow{E}. d\overrightarrow{S}  = \frac{Q_{int}}{\epsilon_0} \\ \\ \\ E.A - (-E.A) = \frac{\sigma . A   }{\epsilon_0} \\ \\ \\ E= \frac{\sigma }{2\epsilon_0}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
O mesmo pode ser feito para um plano com densidade de massa distribuída uniformemente, para o caso do sistema auto-gravitante, com mudança na constante física multiplicativa e no sinal.&lt;br /&gt;
&lt;br /&gt;
O fato importante a ser destacado aqui é a total independência do campo gerado pela partícula e a distância. Dessa forma, a interação entre as partículas em qualquer sistema que seguir esse modelo não terá dependência da distância entre elas e sim da posição relativa entre as partículas consideradas.&lt;br /&gt;
&lt;br /&gt;
=== Interferência externa do sistema ===&lt;br /&gt;
&lt;br /&gt;
Para o caso dos planos no sistema auto-gravitante não é necessária ação externa alguma para manter o equilíbrio em um sistema dinâmico estável. Sempre é levado em conta que todas as partículas têm velocidade em x inferior a velocidade de escape do restante do sistema e, por conta disso e das forças sempre atrativas de interação, o sistema não expande indefinidamente.&lt;br /&gt;
&lt;br /&gt;
Já no caso de planos carregados eletricamente as forças de interação entre os planos serão sempre repulsivas e a energia total do sistema é positiva. Sem uma interação externa, mesmo um sistema composto por um número limitado de partículas de fraca interação expandiria indefinidamente. Por causa disso, nesse caso é considerado que há uma força colimadora no feixe de planos proporcional a distância da origem. A origem dessa força externa vem de modelos de maior dimensionalidade de aceleradores de partícula que contam com um campo magnético externo capaz de colimar um feixe de cargas radialmente, por não existir um paralelo direto para o modelo unidimensional consideramos apenas uma força restauradora que impede a expansão indefinida do sistema como um todo. Também é possível ajustar condições de contorno simulando as paredes externas do acelerador como placas condutoras infinitas e com potencial definido. Esse tipo de consideração pode ser feita para sistemas que não são simétricos e impede que as cargas se afastem demasiadamente da origem.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
ADD IMAGEM&lt;br /&gt;
&lt;br /&gt;
= Comportamento de uma Partícula no Sistema =&lt;br /&gt;
&lt;br /&gt;
Graças a caracterização das partículas temos que o campo gerado por uma partícula-plano pode ser caracterizado (para ambos os sistemas citados) da seguinte forma:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
E_i(x) = -\lambda\Theta[-(x-x_i)]  + \lambda\Theta(x-x_i)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ADD IMAGEM&lt;br /&gt;
&lt;br /&gt;
Em que a constante &amp;lt;math&amp;gt;\lambda&amp;lt;/math&amp;gt; pode ser tanto positiva (cargas positivas) quanto negativa (cargas negativas ou interação gravitacional) e a função &amp;lt;math&amp;gt;\Theta&amp;lt;/math&amp;gt; equivale a função degrau de Heaviside:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\Theta(x) = \begin{cases} 0, \ \ x&amp;lt;0 \\ 1, \ \ x&amp;gt;0 \end{cases}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dessa forma, para exemplificação, um sistema de 5 partículas-plano teria uma interação da seguinte forma:&lt;br /&gt;
&lt;br /&gt;
ADD IMAGEM&lt;br /&gt;
&lt;br /&gt;
Aqui, F seria a força de interação entre duas partículas no caso de planos carregados. É possível notar que a força de interação varia de duas unidades dessa constante para cada partícula contada em uma direção e que a força máxima sentida (pelas partículas-plano localizadas nas extremidades) é proporcional a &amp;lt;math&amp;gt;(N-1)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
É possível notar que para uma distribuição de partículas-plano do tipo:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt; &lt;br /&gt;
n(x) =   \sum_{i=1}^N \delta(x_i) &lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
com o índice  &amp;lt;math&amp;gt;\ \ &#039;&#039;i&#039;&#039;\ &amp;lt;/math&amp;gt; sendo a ordem da partícula contada do sentido negativo para o positivo do eixo x, teremos uma força resultante de interação para uma partícula que pode ser definida por &lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
F_i =  [-(N-1) + 2(i-1)]F \\ \\ \\ \\ F_i = (2i - N-1)F&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Essa força é suficiente para manter o sistema auto-gravitante coeso mas para as partículas carregadas devemos adicionar a força restauradora descrita anteriormente:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
F^{grav.}_{R,i} = (2i - N-1)F \\&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
F^{el.}_{R,i} = (2i - N-1)F - \kappa x_i \\ \\ &lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Conservação da Energia do Sistema =&lt;br /&gt;
&lt;br /&gt;
Ao realizar uma simulação numérica com um grande número de entes que representam um sistema físico é importante que seja feita uma verificação sobre o quão apropriados os resultados da simulação de fato são. Uma das formas mais comuns de verificar se uma simulação numérica está correta na dinâmica molecular de vários corpos e efetuar periodicamente a soma da energia do sistema.&lt;br /&gt;
&lt;br /&gt;
No caso de sistemas como os descritos, não há nenhum incremento de energia proveniente de uma fonte externa. Mesmo para o sistema eletricamente carregado, a força restauradora é potencial e não muda a energia total do sistema dada uma distribuição inicial de posição e momento.&lt;br /&gt;
&lt;br /&gt;
Para todos os efeitos, a energia dos sistemas estudados pode ser dividida em três partes: &lt;br /&gt;
&lt;br /&gt;
== Energia Cinética ==&lt;br /&gt;
&lt;br /&gt;
Todas as partículas da distribuição escolhida terão massa e velocidade, de forma que a energia cinética do sistema será dada por:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
En_{cin} = \frac{m}{2}\sum_{i=1}^N \dot{x_i}^2 \\&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Energia Potencial Restauradora ====&lt;br /&gt;
&lt;br /&gt;
Observada no sistema eletricamente carregado citado, pode ser descrita como:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
En_{pot} = \frac{\kappa}{2}\sum_{i=1}^N x_i^2 \\&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Energia Potencial Intrínseca  ==&lt;br /&gt;
&lt;br /&gt;
Energia contida na interação entre as partículas. A energia de uma partícula depende do potencial na sua posição da sua carga (ou massa).&lt;br /&gt;
&lt;br /&gt;
Como potenciais não são absolutos, é estabelecido um Potencial nulo de referência nas condições de contorno do sistema. Como pode ser visto no gif com as partículas-plano carregadas em azul, são colocadas placas condutoras planas nas posições &amp;lt;math&amp;gt;x=L&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;x= -L&amp;lt;/math&amp;gt; (caso haja simetria no espaço de fase do sistema) e é estabelecido que os potenciais nessas posições são &amp;lt;math&amp;gt;V(-L) = V(L) = 0&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Uma maneira mais simples de determinar o potencial das N partículas é considerar que há nas posições de contorno,  &amp;lt;math&amp;gt;x_0&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;x_{N+1}&amp;lt;/math&amp;gt;, partículas não interagentes.&lt;br /&gt;
&lt;br /&gt;
A diferença de potencial entre duas posições vizinhas pode ser determinada por:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\Delta V_i = (x_{i} - x_{i - 1})E_i&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
com &amp;lt;math&amp;gt;E_i&amp;lt;/math&amp;gt; sendo o módulo do campo entre a i-ésima e a (i - 1)-ésima partícula, dado por:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
E_i = (2i - N - 1)\lambda&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ADD IMAGEM&lt;br /&gt;
&lt;br /&gt;
O que resulta na energia de uma partícula específica (k-ésima) descrita por:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
En_k = \alpha \sum_{i = 1}^{k}(x_i - x_{i - 1})(2i - N - 1)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aqui foram aglutinadas as possíveis constantes multiplicativas em uma constante &amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt; que pode ser escolhida para se adequar ao sistema estudado e a energia intrínseca do sistema é dada pela soma da energia de interação de cada uma das partículas. Como o sistema é dividido em intervalos com variação de potencial discretos, podemos escrever a energia intrínseca da seguinte forma:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
En_{int} = \alpha \sum_{k = 1}^{N}\sum_{i = 1}^{k}(x_i - x_{i - 1})(2i - N - 1)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A soma dessas três energias deve se manter constante (ou com pouca variação relativa significativa, pelo menos) durante a simulação:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
E_{total} = En_{cin} + En_{pot} + En_{int} = cte.&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Modelagem Computacional =&lt;/div&gt;</summary>
		<author><name>Renanrs</name></author>
	</entry>
	<entry>
		<id>http://fiscomp.if.ufrgs.br/index.php?title=Trabalhos_2021/1&amp;diff=6119</id>
		<title>Trabalhos 2021/1</title>
		<link rel="alternate" type="text/html" href="http://fiscomp.if.ufrgs.br/index.php?title=Trabalhos_2021/1&amp;diff=6119"/>
		<updated>2021-11-20T14:09:07Z</updated>

		<summary type="html">&lt;p&gt;Renanrs: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;===[[Equação de Burgers]] ===&lt;br /&gt;
&lt;br /&gt;
===[[Método de Elementos Finitos]]===&lt;br /&gt;
&lt;br /&gt;
===[[Equação de Águas Rasas]]===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===[[Modelos Epidemiológicos]]===&lt;br /&gt;
&lt;br /&gt;
===[[Dinâmica Molecular de Partículas-Planares Interagentes]]===&lt;/div&gt;</summary>
		<author><name>Renanrs</name></author>
	</entry>
	<entry>
		<id>http://fiscomp.if.ufrgs.br/index.php?title=M%C3%A9todo_de_Elementos_Finitos&amp;diff=6035</id>
		<title>Método de Elementos Finitos</title>
		<link rel="alternate" type="text/html" href="http://fiscomp.if.ufrgs.br/index.php?title=M%C3%A9todo_de_Elementos_Finitos&amp;diff=6035"/>
		<updated>2021-10-26T12:46:17Z</updated>

		<summary type="html">&lt;p&gt;Renanrs: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Grupo: Antônio Carlan, Gabriela Pereira, Renan Soares e Victor Gandara&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Objetivo:&#039;&#039;&#039; Apresentar uma introdução do Método de Elementos Finitos, abordando seu funcionamento e demonstrando suas etapas através de um exemplo, demonstrando seu potencial e o que o diferencia de outros métodos estudados nas cadeiras de métodos computacionais até então vistos.&lt;br /&gt;
&lt;br /&gt;
= Introdução ao Método de Elementos Finitos(MEF) =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Aplicação ===&lt;br /&gt;
 &lt;br /&gt;
Este é um método numérico de resolução aproximada para problemas de valores sobre contorno em equações diferenciais. É largamente utilizado na industrial para o desenvolvimento de novas tecnologias e produtos, pode ser utilizado tanto no processo de desenvolvimento quanto de otimização, através da simulação da física de situações em que se espera que o projeto atue.&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:FAE visualization.jpg|400px|thumb|center| Simulação de deformação de um veiculo https://en.wikipedia.org/wiki/Finite_element_method]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
O que torna este método diferente é a forma com que ele discretiza e faz suas aproximações. Sua discretização é feita na geometria, ou seja, repartindo o objeto em diversos elementos menores. Desta forma é possível que se resolva problemas em geometrias complexas cuja solução analítica é desconhecida e que seriam muito difíceis com outros métodos. Também permite trabalhar de maneira simples com materiais compostos, ou de diferentes densidades em um objeto, uma vez que podemos definir tais propriedades individualmente para cada elemento.&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:Exemplo inicio .png|400px|thumb|center| Modelo normal e modelo discretizado e representado por uma malha e simulação de estresse sofrido no objeto.]]&lt;br /&gt;
&lt;br /&gt;
=== O Método ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;q&amp;gt; O conceito fundamental do MEF é a aproximação de uma quantidade continua(p. ex., tensão elétrica, temperatura, etc.) através de um modelo discreto composto por um conjunto de funções simples que são definidas em um número finito de subdomínios(elementos)&amp;lt;/q&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A resolução de um problema através do MEF envolve quatro etapas principais:&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;Discretização da região:&#039;&#039;&#039; Transformar o objeto de estudo em vários elementos menores que juntos formam o objeto original de forma aproximada e a isso chama-se &#039;&#039;&#039;Malha&#039;&#039;&#039;.&lt;br /&gt;
# &#039;&#039;&#039;Aproximação da solução:&#039;&#039;&#039; Obtenção das equações correspondentes de cada elemento, através de interpolação polinomial.&lt;br /&gt;
# &#039;&#039;&#039;Montagem do sistema global:&#039;&#039;&#039; Juntar os elementos e suas equações em uma matriz que fornecerá a solução global.&lt;br /&gt;
# &#039;&#039;&#039;Resolução do sistema:&#039;&#039;&#039; Resolver a matriz gerada para obter a solução aproximada do problema.&lt;br /&gt;
&lt;br /&gt;
==== Discretização: A Malha ====&lt;br /&gt;
&lt;br /&gt;
A malha define o domínio do problema, ela é a base do método. Porém não é parte do algoritmo em si. Normalmente é criada automaticamente por um programa especifico para isso, como GMSH e NetGen. Apenas sendo fornecida as especificações que se deseja para a malha, vão influenciar na quantidade de nós, na dimensão do domínio e na precisão da aproximação.&lt;br /&gt;
&lt;br /&gt;
Ela é composta por um conjunto de pontos interligados que descrevem o objeto. Estes pontos são chamados de &#039;&#039;&#039;nós&#039;&#039;&#039; e a união destes nós forma um elemento, e a união destes elementos formam o objeto que é nosso domínio.&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:Nos.png|400px|thumb|center| Malha composta por elementos que são compostos por nós.]]&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;Dimensão:&#039;&#039;&#039; A malha pode ser unidimensional, bidimensional ou tridimensional.&lt;br /&gt;
[[Arquivo:Print slide 5.png|400px|thumb|center| Malha composta por elementos que são compostos por nós.]]&lt;br /&gt;
# &#039;&#039;&#039;Ordem:&#039;&#039;&#039; Quanto maior a ordem da malha mais precisa será a aproximação dos resultados entre os nós, porém aumenta o consumo computacional.&lt;br /&gt;
# &#039;&#039;&#039;Densidade de elementos:&#039;&#039;&#039; Pode-se escolher por gerar uma malha mais ou menos detalhada, isso implica no consumo computacional. Quanto mais detalhada a malha, ou seja, quanto maior o numero de nós da malha, menor será o erro de aproximação do problema real.&lt;br /&gt;
[[Arquivo:Densidade de malha.png|400px|thumb|center| Discretização de uma área utilizando o software GMSH com diferentes padrões gerando duas malhas com diferentes densidades de nós.]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Funcionamento do método ===&lt;br /&gt;
&lt;br /&gt;
Cada nó desta malha terá atribuída uma variável do problema físico que esta sendo implementado(o valor da grandeza contínua para aquele ponto), como Tensão Elétrica, Dilatação, Temperatura, etc. Esta variável é chamada &#039;&#039;&#039;Valor nodal&#039;&#039;&#039;, ela representa a solução da equação naquele ponto (Variáveis nodais = incógnitas ou graus de liberdade do problema).&lt;br /&gt;
[[Arquivo:Slide7.png|400px|thumb|center|]]&lt;br /&gt;
&lt;br /&gt;
Já a grandeza contínua é aproximada em cada elemento por um &#039;&#039;&#039;polinômio&#039;&#039;&#039; que é definido usando os valores nodais da grandeza. Ou seja, nós iremos descobrir os valores nodais dos nós e entre eles,os valores da grandeza contínua serão dados por uma aproximação polinomial.&lt;br /&gt;
&lt;br /&gt;
Lembrando que os elementos são formados pelos nós e que os valores nodais estão associado aos nós e não ao elemento diretamente.&lt;br /&gt;
&lt;br /&gt;
Então, cada elemento terá um polinômio que descreve a grandeza contínua na região entre os nós que formam este elemento, no caso de uma matriz com elementos de primeira ordem, será uma reta entre os valores nodais. Os polinômios são escolhidos/deduzidos de forma que a continuidade seja mantida na fronteira entre os elementos, utilizando os métodos matemáticos adequados para isso.&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Este polinômio resulta de um ajuste dos valores nodais para que se tenha uma boa aproximação da grandeza real, este ajuste é feito através da minimização de alguma grandeza associada ao problema.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==== Interpolação ====&lt;br /&gt;
&lt;br /&gt;
Os valores nodais, que são nossas incógnitas, precisam ser isolados e deixados em função das coordenadas dos nós, que possuímos através da malha de elementos finitos já gerada.&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:Slide9.png|400px|thumb|center|]] &lt;br /&gt;
 &lt;br /&gt;
&amp;lt;math&amp;gt; V_1 e V_2 &amp;lt;/math&amp;gt; -&amp;gt; valores nodais&lt;br /&gt;
&amp;lt;math&amp;gt; x_1 e x_2 &amp;lt;/math&amp;gt; -&amp;gt; coordenadas dos nós&lt;br /&gt;
&amp;lt;math&amp;gt; L = x_2 - x_1 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aproximação polinomial no caso da malha de primeira ordem: &lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
V(x) = a_1 + a_2 x &lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As variáveis a1 e a2 são coeficientes da interpolação, porém não as temos e não queremos deixa-las no calculo, para isso:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
V_1 = a_1 + a_2 x_1 &lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
V_2 = a_1 + a_2 x_2&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
logo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 \begin{bmatrix}&lt;br /&gt;
 V_1 \\&lt;br /&gt;
 V_2 \\&lt;br /&gt;
 \end{bmatrix}&lt;br /&gt;
 = &lt;br /&gt;
 \begin{bmatrix}&lt;br /&gt;
 1 &amp;amp; x_1 \\&lt;br /&gt;
 1 &amp;amp; x_2 \\&lt;br /&gt;
 \end{bmatrix}&lt;br /&gt;
 \begin{bmatrix}&lt;br /&gt;
 a_1 \\&lt;br /&gt;
 a_2 \\&lt;br /&gt;
 \end{bmatrix}&lt;br /&gt;
 &amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Portanto:&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
a_1 = \frac{1}{L} (V_1 x_2 - V_2 x_2)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
a_2 = \frac{1}{L} (V_1 - V_2)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Substituindo os valores de &amp;lt;math&amp;gt; a_1 &amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt; a_2 &amp;lt;/math&amp;gt; na equação de interpolação anterior &amp;lt;math&amp;gt; V(x) = a_1 + a_2 x  &amp;lt;/math&amp;gt; ficaremos com:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
V(x) = \frac{1}{L} [V_1 x_2 - V_2 x_1 + (V_2 - V_1) x]&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ou, como é definido a aproximação nodal:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
V(x) = \frac{(x_2 - x)}{L} V_1 + \frac{(x - x_1)}{L} V_2&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Esta fica conhecida por aproximação nodal pois a grandeza &amp;lt;math&amp;gt; V(x) &amp;lt;/math&amp;gt; pode ser obtida em qualquer ponto do intervalo &amp;lt;math&amp;gt; [x_1, x_2] &amp;lt;/math&amp;gt; a partir dos valores &amp;lt;math&amp;gt; V_1 &amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt; V_2 &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===== Função Interpolação =====&lt;br /&gt;
&lt;br /&gt;
Esta aproximação nodal pode ainda ser reescrita como:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
V(x) = \phi_1{(x)}V_1 + \phi_2{(x)}V_2&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Com: &lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\phi_1{(x)} = \frac{x_2 - x}{L}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
e &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\phi_2{(x)} = \frac{x - x_1}{L}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
sendo &amp;lt;math&amp;gt; L = x_2 - x_1 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As funções &amp;lt;math&amp;gt;\phi_1{(x)}&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;\phi_2{(x)}&amp;lt;/math&amp;gt; são conhecidas como &#039;&#039;&#039;funções de interpolação&#039;&#039;&#039; e são responsáveis por fazer com que cada nó do elemento contribua com uma parte do valor resultante em qualquer ponto dentro do elemento.&lt;br /&gt;
&lt;br /&gt;
E devido a propriedade do  delta de Kronecker, vista abaixo, é garantido que as equações só terão valor entre os nós dentro do elemento que são definidos:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\phi_i{(x_j)} =\left\{\begin{array}{lc} 1, \quad \text{se}\quad i=j\\&lt;br /&gt;
0, \quad \text{se} \quad i \ne j \end{array}\right.&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Então, por exemplo, nossa equação para o elemento 1, no caso visto aqui de 1D, para um problema  de tensão, fica:&lt;br /&gt;
&lt;br /&gt;
Elemento 1:&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
V^{(1)} (x) = \phi_1^{(1)}(x) V_1 \phi_2^{(1)}(x) V_2&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Com:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\phi_1^{(1)}{(x)} = \frac{x_2 - x}{x_2 - x_1}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
e&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\phi_2^{(1)}{(x)} = \frac{x - x_1}{x_2 - x_1}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Fica fácil perceber que os valores nodais dos dois nós se interpolam e contribuem para os valores entre para o resultado.&lt;br /&gt;
&lt;br /&gt;
A notação geral da função interpolação fica:&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\phi_i^{(e)} (x)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Em que: &amp;lt;math&amp;gt; (e) = elemento &amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt; i = nó &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As funções são diferentes para cada elemento e elas são nulas fora do elemento a que pertencem.&lt;br /&gt;
&lt;br /&gt;
Também existem a função chapéu, que é outro tipo de interpolação.&lt;br /&gt;
&lt;br /&gt;
==== Solução Global ====&lt;br /&gt;
&lt;br /&gt;
Seguindo com o caso do problema de tensão elétrica, a solução global será dada pelo somatório das funções de interpolação de cada elemento.&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
V_ex (x) \cong V(x) - \sum_{e=1}^{N_{elem}} V^{(e)} (x)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Até aqui nós chegamos a essa equação partindo da premissa que temos os valores nodais, fizemos isso apenas para explicar como os valores nodas e suas interpolações se comportam na malha.&lt;br /&gt;
&lt;br /&gt;
Porém os valores nodais são as nossas incógnitas e são eles quem queremos descobrir, a interpolação será a predição dos valores entre os valores nodais.&lt;br /&gt;
&lt;br /&gt;
Como visto, no MEF cada elemento terá suas próprias equações baseadas nos seus valores nodais e nas coordenadas destes valores. Para de fato introduzir o problema físico precisamos da forma fraca dele, já que é a partir da forma fraca que chegaremos no sistema de equações que nos permite obter os valores nodais&lt;br /&gt;
&lt;br /&gt;
===== Forma Fraca =====&lt;br /&gt;
&lt;br /&gt;
Quando se tem uma problema envolvendo um operador diferencial, é possível usar o que se conhece por forma fraca do operador, que nada mais é que a representação integral do problema, a qual já engloba/explicita as condições de contorno e utiliza-se o método de resíduos ponderados para isso.&lt;br /&gt;
&lt;br /&gt;
Para a construção da forma fraca nós podemos escolher uma função arbitrária w(x) e multiplicá-la pela forma forte, que é a equação diferencial original que descreve o problema, e pela condição de contorno em x=0. Em sequência nós integramos ambas dentro do domínio onde elas foram definidas. Como w(x) é uma função arbitrária que pode ser qualquer função, ela força a solução, já que qualquer coisa multiplicada por ela tem que ser 0.&lt;br /&gt;
Para entender esse método, nós podemos olhar o problema de uma barra elástica carregada axialmente.&lt;br /&gt;
Imagem.jpg&lt;br /&gt;
[[Arquivo:Imagem.jpg|400px|thumb|center|]]&lt;br /&gt;
&lt;br /&gt;
Considerando que a barra está em equilíbrio, nós podemos representar a relação entre as forças internas p(x) e as externas b(x) por essa equação&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
-p(x) + b (x + \frac{\Delta x}{2}) \Delta_x + p(x + \Delta_x) = 0&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Reorganizando e tomando o limite quando &amp;lt;math&amp;gt;\Delta_x&amp;lt;/math&amp;gt; tende a 0 nós chegamos em uma equação diferencial para descrever esse problema.&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
\frac{p(x + \Delta_x) - p(x)}{\Delta_x} + b (x + \frac{\Delta_x}{2}) = 0&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
No entanto, ela está em termos das forças internas. Para reescrever isso, basta lembrar que a tensão é definida como a força pela área da seção transversal e, pela lei de tensão deformação para um material elástico linear, nós temos que&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\sigma = E_(x) \varepsilon_(x)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
onde E é o módulo de young e épsilon é a deformação, definida como&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\varepsilon_(x)= \frac{u(x + \Delta_x) - u(x)}{\Delta_x}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Então, lembrando também da definição de derivada, eu posso reescrever a equação para esse problema como&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\frac{d}{dx} (AE \frac{du}{dx}) +b = 0&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
E, para resolver essa equação, precisamos das condições de contorno, as quais podemos tomar como sendo&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\sigma(0) = (E \frac{du}{dx})_{x=0} = \frac{p(0)}{A(0)} \equiv -\tau&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
u(l)= u&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
relembrando que u(x) é a função que representa o deslocamento do corpo, ou seja, a deformação.&lt;br /&gt;
Agora, para obter a forma fraca, eu multiplico e integro a equação diferencial e a condição de contorno que diz respeito a tensão&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\int w (\frac{d}{dx} (AE \frac{du}{dx}) +b)dx=0&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
 w A(E\frac{du}{dx} + \tau)=0&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Aqui vale notar que a integral da condição de contorno foi substituída pela multiplicação pela área, já que o domínio dessa condição de contorno é a área da seção transversal mas só em x=0, ou seja, ela age só em um ponto&lt;br /&gt;
Agora, utilizando a definição de integração por partes, eu consigo escrever&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\int_{0}^{l} w\frac{d}{dx} (AE \frac{du}{dx})dx = (wA \tau)|_{0}^{l} - \int_{0}^{l} \frac{dw}{dx} AE \frac{du}{dx}dx&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Olhando pra esse termo e para a equação da condição de contorno mostrada anteriormente, e lembrando da definição de sigma, eu vejo que eu posso reescrever essa equação integral como&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\int_{0}^{l} \frac{dw}{dx} AE \frac{du}{dx} dx= (wA \tau)_{x=0} + \int_{0}^{l} wb dx&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
que é a forma fraca da equação diferencial que descreve o nosso problema&lt;br /&gt;
&lt;br /&gt;
Qualquer solução que satisfizer a forma fraca, com w(l)=0 e u(l)=u também será solução da equação diferencial original do nosso problema&lt;br /&gt;
&lt;br /&gt;
Alternativamente, podemos encontrar a forma fraca através da minimização de um funcional dentro de um espaço de funções válido para o nosso problema e suas condições de contorno. A obtenção desse funcional não é um processo trivial, mas quando se trata de problemas físicos, esse funcional coincide com a energia do sistema, sendo, por exemplo, a energia potencial elástica do sólido para problemas de mecânica dos sólidos e a energia eletrostática armazenada na região de cálculo para problemas eletrostáticos sem carga livre no domínio de estudo. A função que minimiza essa energia é a solução do problema original. Como discretizamos o problema, devemos minimizar o funcional com relação a cada nó. Se eu tenho 10 nós vou ter 10 equações (derivadas igualadas a 0) para minimizar o funcional nos 10 nós.&lt;br /&gt;
&lt;br /&gt;
Podemos usar um problema eletrostático sem cargas livres para exemplificar esse método, conhecido como Método Variacional. Tomando as equações de Maxwell temos, então:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\nabla . \vec{D} = \rho&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\vec{E} = - \nabla V&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\vec{D} = \epsilon \vec{E}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\nabla ^2 V = - \frac{\rho}{\epsilon}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\nabla ^2 V = 0&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A equação que rege esse problema eletrostático é a equação de laplace, e em um problema 2D fica:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\frac{\partial^2 {V}}{\partial x^2} + \frac{\partial^2 {V}}{\partial y^2} = 0&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Obtém-se, então, uma equação funcional associada à energia do sistema&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
F = \int_{\omega} \frac{1}{2} E^2 d\omega&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pelo método variacional, eu satisfaço a equação de laplace quando a energia armazenada no sistema, que é o meu funcional, for mínima. Como analisamos elemento por elemento, podemos dizer que o funcional vai ser constante dentro de um elemento, e tem que ser minimizado &lt;br /&gt;
dentro desse elemento, para tal, eu minimizo o funcional com relação a cada nó do elemento, o que me leva a um conjunto de equações que podemos organizar no que se conhece como matriz elementar, se eu tenho 3 nós em cada elemento vou ter uma matriz 3 por 3.&lt;br /&gt;
Podemos escrever a derivada total do funcional como a soma da derivada em cada elemento, onde &amp;lt;math&amp;gt;F^e&amp;lt;/math&amp;gt; é o valor do funcional em cada elemento&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\frac{\partial{F^{(e)}}}{\partial{V_n}} = \sum_{e=1}^{M} \frac{\partial F^e}{\partial V_n} = 0&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
onde,&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\frac{\partial{F^{(e)}}}{\partial{V_n}} = \frac{\partial}{\partial V_n} \int_{e}^{} \frac{1}{2} \varepsilon^{(e)} E^2 d\Omega&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se consideramos a permissividade e o campo elétrico constante em cada elemento, eles podem sair da integral. A integral de &amp;lt;math&amp;gt;\Omega&amp;lt;/math&amp;gt; no elemento é a área do elemento, que é o determinante (D) dividido por 2, com isso, obtemos que:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\frac{\partial{F^{(e)}}}{\partial{V_n}} = \frac{\partial}{\partial V_n} [ \frac{1}{2} \varepsilon^{(e)} E^2 \int_{e} d\Omega] = \frac{1}{2} \varepsilon^{(e)} \frac{D \partial{E^2}}{2 \partial{V_n}}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
utilizando elementos triangulares e interpolação linear 2D, podemos escrever a derivada segunda do campo elétrico como:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\frac{\partial E^2}{\partial V_1} = \frac{2}{D^2} [(q_1 V_1 + q_2 V_2 + q_3 V_3)q_1 + (r_1 V_1 + r_2 V_2 + r_3 V_3)r_1&lt;br /&gt;
&amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Com isso, eu posso escrever a matriz elementar como:&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:Matriz elementar.png|400px|thumb|center|]] &lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
C_{ij} = \frac{\epsilon}{2Det} (q_i q_j + r_i r_j)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mas eu preciso minimizar o funcional em todos os elementos, então a contribuição de cada elemento deve ser inserida na matriz global - MXM - sendo M o número de nós. Na matriz global nós somamos os termos dos nós que se interseccionam em diferentes elementos. É preciso de duas condições de contorno (valores para 2 nós), substituindo elas na matriz global eu consigo calcular os valores para os nós que eu desconheço. Depois de resolver os valores para os nós, eu consigo determinar a solução em qualquer ponto do domínio.&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:Contribuição elemento.png|400px|thumb|center|]] &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Um exemplo de como ficaria a matriz global e seus elementos para uma determinada malha:&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:Matrizglobal.png|400px|thumb|center|]] &lt;br /&gt;
&lt;br /&gt;
Por fim tendo a matriz global determinada e com as condições de contorno aplicadas, sua resolução trará enfim a solução do problema pelo método de elementos finitos.&lt;br /&gt;
&lt;br /&gt;
=== Programas CAE ===&lt;br /&gt;
&lt;br /&gt;
Na engenharia este método é largamente aplicado, porém raramente utilizado desta forma, criando a matriz manualmente e os programas para solução do método. Existem programas que estão a décadas sendo aperfeiçoados, alguns proprietários como o CONSOL, e outros livres como OpenFOAM, Calcuix, ElmerFEM, entre outros.&lt;br /&gt;
&lt;br /&gt;
A implementação do MEF em projetos costuma seguir um workflow assim: &lt;br /&gt;
&lt;br /&gt;
# Desenho do modelo 3D que deseja estudar.&lt;br /&gt;
# Transformar este modelo em uma malha, no formato que os programas de elementos finitos reconhecem.&lt;br /&gt;
# Indicar o problema físico a ser estudado e suas condições iniciais aplicadas ao modelo 3D.&lt;br /&gt;
# Rodar o programa adequado para o problema.&lt;br /&gt;
# Utilizar de programas para examinar os resultados.&lt;br /&gt;
&lt;br /&gt;
Como pode-se ver no diagrama abaixo também:&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:FEM Workbench workflow.png|400px|thumb|center| Workflow no FreeCAD - https://wiki.freecadweb.org/FEM_Workbench]]&lt;/div&gt;</summary>
		<author><name>Renanrs</name></author>
	</entry>
	<entry>
		<id>http://fiscomp.if.ufrgs.br/index.php?title=M%C3%A9todo_de_Elementos_Finitos&amp;diff=6034</id>
		<title>Método de Elementos Finitos</title>
		<link rel="alternate" type="text/html" href="http://fiscomp.if.ufrgs.br/index.php?title=M%C3%A9todo_de_Elementos_Finitos&amp;diff=6034"/>
		<updated>2021-10-23T22:44:04Z</updated>

		<summary type="html">&lt;p&gt;Renanrs: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Grupo: Antônio Carlan, Gabriela Pereira, Renan Soares e Victor Gandara&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Objetivo:&#039;&#039;&#039; Apresentar uma introdução do Método de Elementos Finitos, abordando seu funcionamento e demonstrando suas etapas através de um exemplo, demonstrando seu potencial e o que o diferencia de outros métodos estudados nas cadeiras de métodos computacionais até então vistos.&lt;br /&gt;
&lt;br /&gt;
= Introdução ao Método de Elementos Finitos(MEF) =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Aplicação ===&lt;br /&gt;
 &lt;br /&gt;
Este é um método numérico de resolução aproximada para problemas de valores sobre contorno em equações diferenciais. É largamente utilizado na industrial para o desenvolvimento de novas tecnologias e produtos, pode ser utilizado tanto no processo de desenvolvimento quanto de otimização, através da simulação da física de situações em que se espera que o projeto atue.&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:FAE visualization.jpg|400px|thumb|center| Simulação de deformação de um veiculo https://en.wikipedia.org/wiki/Finite_element_method]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
O que torna este método diferente é a forma com que ele discretiza e faz suas aproximações. Sua discretização é feita na geometria, ou seja, repartindo o objeto em diversos elementos menores. Desta forma é possível que se resolva problemas em geometrias complexas cuja solução analítica é desconhecida e que seriam muito difíceis com outros métodos. Também permite trabalhar de maneira simples com materiais compostos, ou de diferentes densidades em um objeto, uma vez que podemos definir tais propriedades individualmente para cada elemento.&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:Exemplo inicio .png|400px|thumb|center| Modelo normal e modelo discretizado e representado por uma malha e simulação de estresse sofrido no objeto.]]&lt;br /&gt;
&lt;br /&gt;
=== O Método ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;q&amp;gt; O conceito fundamental do MEF é a aproximação de uma quantidade continua(p. ex., tensão elétrica, temperatura, etc.) através de um modelo discreto composto por um conjunto de funções simples que são definidas em um número finito de subdomínios(elementos)&amp;lt;/q&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A resolução de um problema através do MEF envolve quatro etapas principais:&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;Discretização da região:&#039;&#039;&#039; Transformar o objeto de estudo em vários elementos menores que juntos formam o objeto original de forma aproximada e a isso chama-se &#039;&#039;&#039;Malha&#039;&#039;&#039;.&lt;br /&gt;
# &#039;&#039;&#039;Aproximação da solução:&#039;&#039;&#039; Obtenção das equações correspondentes de cada elemento, através de interpolação polinomial.&lt;br /&gt;
# &#039;&#039;&#039;Montagem do sistema global:&#039;&#039;&#039; Juntar os elementos e suas equações em uma matriz que fornecerá a solução global.&lt;br /&gt;
# &#039;&#039;&#039;Resolução do sistema:&#039;&#039;&#039; Resolver a matriz gerada para obter a solução aproximada do problema.&lt;br /&gt;
&lt;br /&gt;
==== Discretização: A Malha ====&lt;br /&gt;
&lt;br /&gt;
A malha define o domínio do problema, ela é a base do método. Porém não é parte do algoritmo em si. Normalmente é criada automaticamente por um programa especifico para isso, como GMSH e NetGen. Apenas sendo fornecida as especificações que se deseja para a malha, vão influenciar na quantidade de nós, na dimensão do domínio e na precisão da aproximação.&lt;br /&gt;
&lt;br /&gt;
Ela é composta por um conjunto de pontos interligados que descrevem o objeto. Estes pontos são chamados de &#039;&#039;&#039;nós&#039;&#039;&#039; e a união destes nós forma um elemento, e a união destes elementos formam o objeto que é nosso domínio.&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:Nos.png|400px|thumb|center| Malha composta por elementos que são compostos por nós.]]&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;Dimensão:&#039;&#039;&#039; A malha pode ser unidimensional, bidimensional ou tridimensional.&lt;br /&gt;
[[Arquivo:Print slide 5.png|400px|thumb|center| Malha composta por elementos que são compostos por nós.]]&lt;br /&gt;
# &#039;&#039;&#039;Ordem:&#039;&#039;&#039; Quanto maior a ordem da malha mais precisa será a aproximação dos resultados entre os nós, porém aumenta o consumo computacional.&lt;br /&gt;
# &#039;&#039;&#039;Densidade de elementos:&#039;&#039;&#039; Pode-se escolher por gerar uma malha mais ou menos detalhada, isso implica no consumo computacional. Quanto mais detalhada a malha, ou seja, quanto maior o numero de nós da malha, menor será o erro de aproximação do problema real.&lt;br /&gt;
[[Arquivo:Densidade de malha.png|400px|thumb|center| Discretização de uma área utilizando o software GMSH com diferentes padrões gerando duas malhas com diferentes densidades de nós.]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Funcionamento do método ===&lt;br /&gt;
&lt;br /&gt;
Cada nó desta malha terá atribuída uma variável do problema físico que esta sendo implementado(o valor da grandeza contínua para aquele ponto), como Tensão Elétrica, Dilatação, Temperatura, etc. Esta variável é chamada &#039;&#039;&#039;Valor nodal&#039;&#039;&#039;, ela representa a solução da equação naquele ponto (Variáveis nodais = incógnitas ou graus de liberdade do problema).&lt;br /&gt;
[[Arquivo:Slide7.png|400px|thumb|center|]]&lt;br /&gt;
&lt;br /&gt;
Já a grandeza contínua é aproximada em cada elemento por um &#039;&#039;&#039;polinômio&#039;&#039;&#039; que é definido usando os valores nodais da grandeza. Ou seja, nós iremos descobrir os valores nodais dos nós e entre eles,os valores da grandeza contínua serão dados por uma aproximação polinomial.&lt;br /&gt;
&lt;br /&gt;
Lembrando que os elementos são formados pelos nós e que os valores nodais estão associado aos nós e não ao elemento diretamente.&lt;br /&gt;
&lt;br /&gt;
Então, cada elemento terá um polinômio que descreve a grandeza contínua na região entre os nós que formam este elemento, no caso de uma matriz com elementos de primeira ordem, será uma reta entre os valores nodais. Os polinômios são escolhidos/deduzidos de forma que a continuidade seja mantida na fronteira entre os elementos, utilizando os métodos matemáticos adequados para isso.&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Este polinômio resulta de um ajuste dos valores nodais para que se tenha uma boa aproximação da grandeza real, este ajuste é feito através da minimização de alguma grandeza associada ao problema.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==== Interpolação ====&lt;br /&gt;
&lt;br /&gt;
Os valores nodais, que são nossas incógnitas, precisam ser isolados e deixados em função das coordenadas dos nós, que possuímos através da malha de elementos finitos já gerada.&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:Slide9.png|400px|thumb|center|]] &lt;br /&gt;
 &lt;br /&gt;
&amp;lt;math&amp;gt; V_1 e V_2 &amp;lt;/math&amp;gt; -&amp;gt; valores nodais&lt;br /&gt;
&amp;lt;math&amp;gt; x_1 e x_2 &amp;lt;/math&amp;gt; -&amp;gt; coordenadas dos nós&lt;br /&gt;
&amp;lt;math&amp;gt; L = x_2 - x_1 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aproximação polinomial no caso da malha de primeira ordem: &lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
V(x) = a_1 + a_2 x &lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As variáveis a1 e a2 são coeficientes da interpolação, porém não as temos e não queremos deixa-las no calculo, para isso:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
V_1 = a_1 + a_2 x_1 &lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
V_2 = a_1 + a_2 x_2&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
logo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 \begin{bmatrix}&lt;br /&gt;
 V_1 \\&lt;br /&gt;
 V_2 \\&lt;br /&gt;
 \end{bmatrix}&lt;br /&gt;
 = &lt;br /&gt;
 \begin{bmatrix}&lt;br /&gt;
 1 &amp;amp; x_1 \\&lt;br /&gt;
 1 &amp;amp; x_2 \\&lt;br /&gt;
 \end{bmatrix}&lt;br /&gt;
 \begin{bmatrix}&lt;br /&gt;
 a_1 \\&lt;br /&gt;
 a_2 \\&lt;br /&gt;
 \end{bmatrix}&lt;br /&gt;
 &amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Portanto:&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
a_1 = \frac{1}{L} (V_1 x_2 - V_2 x_2)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
a_2 = \frac{1}{L} (V_1 - V_2)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Substituindo os valores de &amp;lt;math&amp;gt; a_1 &amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt; a_2 &amp;lt;/math&amp;gt; na equação de interpolação anterior &amp;lt;math&amp;gt; V(x) = a_1 + a_2 x  &amp;lt;/math&amp;gt; ficaremos com:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
V(x) = \frac{1}{L} [V_1 x_2 - V_2 x_1 + (V_2 - V_1) x]&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ou, como é definido a aproximação nodal:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
V(x) = \frac{(x_2 - x)}{L} V_1 + \frac{(x - x_1)}{L} V_2&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Esta fica conhecida por aproximação nodal pois a grandeza &amp;lt;math&amp;gt; V(x) &amp;lt;/math&amp;gt; pode ser obtida em qualquer ponto do intervalo &amp;lt;math&amp;gt; [x_1, x_2] &amp;lt;/math&amp;gt; a partir dos valores &amp;lt;math&amp;gt; V_1 &amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt; V_2 &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===== Função Interpolação =====&lt;br /&gt;
&lt;br /&gt;
Esta aproximação nodal pode ainda ser reescrita como:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
V(x) = \phi_1{(x)}V_1 + \phi_2{(x)}V_2&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Com: &lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\phi_1{(x)} = \frac{x_2 - x}{L}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
e &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\phi_2{(x)} = \frac{x - x_1}{L}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
sendo &amp;lt;math&amp;gt; L = x_2 - x_1 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As funções &amp;lt;math&amp;gt;\phi_1{(x)}&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;\phi_2{(x)}&amp;lt;/math&amp;gt; são conhecidas como &#039;&#039;&#039;funções de interpolação&#039;&#039;&#039; e são responsáveis por fazer com que cada nó do elemento contribua com uma parte do valor resultante em qualquer ponto dentro do elemento.&lt;br /&gt;
&lt;br /&gt;
E devido a propriedade do  delta de Kronecker, vista abaixo, é garantido que as equações só terão valor entre os nós dentro do elemento que são definidos:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\phi_i{(x_j)} =\left\{\begin{array}{lc} 1, \quad \text{se}\quad i=j\\&lt;br /&gt;
0, \quad \text{se} \quad i \ne j \end{array}\right.&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Então, por exemplo, nossa equação para o elemento 1, no caso visto aqui de 1D, para um problema  de tensão, fica:&lt;br /&gt;
&lt;br /&gt;
Elemento 1:&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
V^{(1)} (x) = \phi_1^{(1)}(x) V_1 \phi_2^{(1)}(x) V_2&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Com:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\phi_1^{(1)}{(x)} = \frac{x_2 - x}{x_2 - x_1}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
e&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\phi_2^{(1)}{(x)} = \frac{x - x_1}{x_2 - x_1}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Fica fácil perceber que os valores nodais dos dois nós se interpolam e contribuem para os valores entre para o resultado.&lt;br /&gt;
&lt;br /&gt;
A notação geral da função interpolação fica:&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\phi_i^{(e)} (x)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Em que: &amp;lt;math&amp;gt; (e) = elemento &amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt; i = nó &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As funções são diferentes para cada elemento e elas são nulas fora do elemento a que pertencem.&lt;br /&gt;
&lt;br /&gt;
Também existem a função chapéu, que é outro tipo de interpolação.&lt;br /&gt;
&lt;br /&gt;
==== Solução Global ====&lt;br /&gt;
&lt;br /&gt;
Seguindo com o caso do problema de tensão elétrica, a solução global será dada pelo somatório das funções de interpolação de cada elemento.&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
V_ex (x) \cong V(x) - \sum_{e=1}^{N_{elem}} V^{(e)} (x)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Até aqui nós chegamos a essa equação partindo da premissa que temos os valores nodais, fizemos isso apenas para explicar como os valores nodas e suas interpolações se comportam na malha.&lt;br /&gt;
&lt;br /&gt;
Porém os valores nodais são as nossas incógnitas e são eles quem queremos descobrir, a interpolação será a predição dos valores entre os valores nodais.&lt;br /&gt;
&lt;br /&gt;
Como visto, no MEF cada elemento terá suas próprias equações baseadas nos seus valores nodais e nas coordenadas destes valores. Para de fato introduzir o problema físico precisamos da forma fraca dele, já que é a partir da forma fraca que chegaremos no sistema de equações que nos permite obter os valores nodais&lt;br /&gt;
&lt;br /&gt;
===== Forma Fraca =====&lt;br /&gt;
&lt;br /&gt;
Quando se tem uma problema envolvendo um operador diferencial, é possível usar o que se conhece por forma fraca do operador, que nada mais é que a representação integral do problema, a qual já engloba/explicita as condições de contorno e utiliza-se o método de resíduos ponderados para isso.&lt;br /&gt;
&lt;br /&gt;
Para a construção da forma fraca nós podemos escolher uma função arbitrária w(x) e multiplicá-la pela forma forte, que é a equação diferencial original que descreve o problema, e pela condição de contorno em x=0. Em sequência nós integramos ambas dentro do domínio onde elas foram definidas. Como w(x) é uma função arbitrária que pode ser qualquer função, ela força a solução, já que qualquer coisa multiplicada por ela tem que ser 0.&lt;br /&gt;
Para entender esse método, nós podemos olhar o problema de uma barra elástica carregada axialmente.&lt;br /&gt;
Imagem.jpg&lt;br /&gt;
[[Arquivo:Imagem.jpg|400px|thumb|center|]]&lt;br /&gt;
&lt;br /&gt;
Considerando que a barra está em equilíbrio, nós podemos representar a relação entre as forças internas p(x) e as externas b(x) por essa equação&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
-p(x) + b (x + \frac{\Delta x}{2}) \Delta_x + p(x + \Delta_x) = 0&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Reorganizando e tomando o limite quando &amp;lt;math&amp;gt;\Delta_x&amp;lt;/math&amp;gt; tende a 0 nós chegamos em uma equação diferencial para descrever esse problema.&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
\frac{p(x + \Delta_x) - p(x)}{\Delta_x} + b (x + \frac{\Delta_x}{2}) = 0&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
No entanto, ela está em termos das forças internas, para reescrever isso, basta lembrar que a tensão é definida como a força pela área da seção transversal e, pela lei de tensão deformação para um material elástico linear, nós temos que&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\sigma = E_(x) \varepsilon_(x)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
onde E é o módulo de young e épsilon é a deformação, definida como&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\varepsilon_(x)= \frac{u(x + \Delta_x) - u(x)}{\Delta_x}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Então, lembrando também da definição de derivada, eu posso reescrever a equação para esse problema como&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\frac{d}{dx} (AE \frac{du}{dx}) +b = 0&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
E, para resolver essa equação, precisamos das condições de contorno, as quais podemos tomar como sendo&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\sigma(0) = (E \frac{du}{dx})_{x=0} = \frac{p(0)}{A(0)} \equiv \tau&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
relembrando que u(x) é a função que representa o deslocamento do corpo, ou seja, a deformação.&lt;br /&gt;
Agora, para obter a forma fraca, eu multiplico e integro a equação diferencial e a condição de contorno que diz respeito a tensão&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\frac{\partial{F^{(e)}}}{\partial{V_n}} = \frac{\partial}{\partial V_n} \int_{e}^{} \frac{1}{2} \varepsilon^(e) E^2 d\Omega&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aqui vale notar que a integral da condição de contorno foi substituída pela multiplicação pela área, já que o domínio dessa condição de contorno é a área da seção transversal mas só em x=0, ou seja, ela age só em um ponto&lt;br /&gt;
Agora, utilizando a definição de integração por partes, eu consigo escrever&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\frac{\partial{F^{(e)}}}{\partial{V_n}} = \frac{\partial}{\partial V_n} [ \frac{1}{2} \varepsilon^{(e)} E^2 \int_{e} d\Omega] = \frac{1}{2} \varepsilon^{(e)} \frac{D \partial{E^2}}{2 \partial{V_n}}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Olhando pra esse termo e para a equação da condição de contorno mostrada anteriormente e lembrando da definição de sigma, eu vejo que eu posso reescrever essa equação integral como&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
\int \frac{dw}{dx} AE \frac{du}{dx} = (wA \tau)_{x=0} + \int_{0}^{l} wb dx&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
que é a forma fraca da equação diferencial que descreve o nosso problema&lt;br /&gt;
&lt;br /&gt;
Qualquer solução que satisfizer a forma fraca, com w(l)=0 e u(l)= &amp;lt;math&amp;gt;\tau&amp;lt;/math&amp;gt; também será solução da equação diferencial original do nosso problema&lt;br /&gt;
&lt;br /&gt;
Alternativamente, podemos encontrar a forma fraca através da minimização de um funcional, um método chamado de Método Variacional, dentro de um espaço de funções válido para o nosso problema e suas condições de contorno. A obtenção desse funcional não é um processo trivial, mas quando se trata de problemas físicos, esse funcional coincide com a energia do sistema, sendo, por exemplo, a energia potencial elástica do sólido para problemas de mecânica dos sólidos e a energia eletrostática armazenada na região de cálculo para problemas eletrostáticos sem carga livre no domínio de estudo. A função que minimiza essa energia é a solução do problema original. Como discretizamos o problema, devemos minimizar o funcional com relação a cada nó. Se eu tenho 10 nós vou ter 10 equações (derivadas igualadas a 0) para minimizar o funcional nos 10 nós.&lt;br /&gt;
&lt;br /&gt;
Usando o problema eletrostático para exemplificar o Método Variacional:&lt;br /&gt;
&lt;br /&gt;
Obtém-se uma equação funcional associada à energia do sistema&lt;br /&gt;
A equação que rege o problema eletrostático é a equação de laplace, e em um problema 2D fica:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\frac{\partial^2 {V}}{\partial x^2} + \frac{\partial^2 {V}}{\partial y^2} = 0&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\nabla . \vec{D} = \rho&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\vec{E} = - \nabla V&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\vec{D} = \epsilon \vec{E}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\nabla ^2 V = - \frac{\rho}{\epsilon}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\nabla ^2 V = 0&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
F = \int_{\omega} \frac{1}{2} E^2 d\omega&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pelo método variacional, eu satisfaço a equação de laplace quando a energia armazenada no sistema, que é o meu funcional, forma mínima. Como analisamos elemento por elemento, podemos dizer que o funcional vai ser constante dentro de um elemento, e tem que ser minimizado &lt;br /&gt;
dentro desse elemento, para tal, eu minimizo o funcional com relação a cada nó do elemento, o que me leva a um conjunto de equações que podemos organizar no que se conhece como matriz elementar, se eu tenho 3 nós em cada elemento vou ter uma matriz 3 por 3.&lt;br /&gt;
Podemos escrever a derivada total do funcional como a soma da derivada em cada elemento, onde F^E é o valor do funcional em cada elemento&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\frac{\partial{F^{(e)}}}{\partial{V_n}} = \sum_{e=1}^{M} \frac{\partial F^e}{\partial V_n} = 0&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
onde,&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\frac{\partial{F^{(e)}}}{\partial{V_n}} = \frac{\partial}{\partial V_n} \int_{e}^{} \frac{1}{2} \varepsilon^{(e)} E^2 d\Omega&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se consideramos a permissividade e o campo elétrico constante em cada elemento, eles podem sair da integral. A integral de ÔMEGA no elemento é a área do elemento, que é o determinante dividido por 2, com isso, obtemos que:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\frac{\partial{F^{(e)}}}{\partial{V_n}} = \frac{\partial}{\partial V_n} [ \frac{1}{2} \varepsilon^{(e)} E^2 \int_{e} d\Omega] = \frac{1}{2} \varepsilon^(e) \frac{D \partial{E^2}}{2 \partial{V_n}}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
utilizando elementos triangulares e interpolação linear 2D, podemos escrever a derivada segunda do campo elétrico como:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\frac{\partial E^2}{\partial V_1} = \frac{2}{D^2} [(q_1 V_1 + q_2 V_2 + q_3 V_3)q_1 + (r_1 V_1 + r_2 V_2 + r_3 V_3)r_1&lt;br /&gt;
&amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Com isso, eu posso escrever a matriz elementar como:&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:Matriz elementar.png|400px|thumb|center|]] &lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
C_{ij} = \frac{\epsilon}{2Det} (q_i q_j + r_i r_j)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mas eu preciso minimizar o funcional em todos os elementos, então a contribuição de cada elemento deve ser inserida na matriz global - MXM - sendo M o número de nós. Na matriz global nós somamos os termos dos nós que se interseccionam em diferentes elementos. É preciso de duas condições de contorno (valores para 2 nós), substituindo elas na matriz global eu consigo calcular os valores para os nós que eu desconheço. Depois de resolver os valores para os nós, eu consigo determinar a solução em qualquer ponto do domínio.&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:Contribuição elemento.png|400px|thumb|center|]] &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Um exemplo de como ficaria a matriz global e seus elementos para uma determinada malha:&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:Matrizglobal.png|400px|thumb|center|]] &lt;br /&gt;
&lt;br /&gt;
Por fim tendo a matriz global determinada e com as condições de contorno aplicadas, sua resolução trará enfim a solução do problema pelo método de elementos finitos.&lt;br /&gt;
&lt;br /&gt;
=== Programas CAE ===&lt;br /&gt;
&lt;br /&gt;
Na engenharia este método é largamente aplicado, porém raramente utilizado desta forma, criando a matriz manualmente e os programas para solução do método. Existem programas que estão a décadas sendo aperfeiçoados, alguns proprietários como o CONSOL, e outros livres como OpenFOAM, Calcuix, ElmerFEM, entre outros.&lt;br /&gt;
&lt;br /&gt;
A implementação do MEF em projetos costuma seguir um workflow assim: &lt;br /&gt;
&lt;br /&gt;
# Desenho do modelo 3D que deseja estudar.&lt;br /&gt;
# Transformar este modelo em uma malha, no formato que os programas de elementos finitos reconhecem.&lt;br /&gt;
# Indicar o problema físico a ser estudado e suas condições iniciais aplicadas ao modelo 3D.&lt;br /&gt;
# Rodar o programa adequado para o problema.&lt;br /&gt;
# Utilizar de programas para examinar os resultados.&lt;br /&gt;
&lt;br /&gt;
Como pode-se ver no diagrama abaixo também:&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:FEM Workbench workflow.png|400px|thumb|center| Workflow no FreeCAD - https://wiki.freecadweb.org/FEM_Workbench]]&lt;/div&gt;</summary>
		<author><name>Renanrs</name></author>
	</entry>
	<entry>
		<id>http://fiscomp.if.ufrgs.br/index.php?title=Arquivo:Imagem.jpg&amp;diff=6033</id>
		<title>Arquivo:Imagem.jpg</title>
		<link rel="alternate" type="text/html" href="http://fiscomp.if.ufrgs.br/index.php?title=Arquivo:Imagem.jpg&amp;diff=6033"/>
		<updated>2021-10-23T22:41:55Z</updated>

		<summary type="html">&lt;p&gt;Renanrs: modelo&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;modelo&lt;/div&gt;</summary>
		<author><name>Renanrs</name></author>
	</entry>
	<entry>
		<id>http://fiscomp.if.ufrgs.br/index.php?title=M%C3%A9todo_de_Elementos_Finitos&amp;diff=6032</id>
		<title>Método de Elementos Finitos</title>
		<link rel="alternate" type="text/html" href="http://fiscomp.if.ufrgs.br/index.php?title=M%C3%A9todo_de_Elementos_Finitos&amp;diff=6032"/>
		<updated>2021-10-23T22:40:42Z</updated>

		<summary type="html">&lt;p&gt;Renanrs: /* Forma Fraca */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Em construção - as referencias e imagens ainda estão faltando&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Grupo: Antônio Carlan, Gabriela Pereira, Renan Soares e Victor Gandara&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Objetivo:&#039;&#039;&#039; Apresentar uma introdução do Método de Elementos Finitos, abordando seu funcionamento e demonstrando suas etapas através de um exemplo, demonstrando seu potencial e o que o diferencia de outros métodos estudados nas cadeiras de métodos computacionais até então vistos.&lt;br /&gt;
&lt;br /&gt;
= Introdução ao Método de Elementos Finitos(MEF) =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Aplicação ===&lt;br /&gt;
 &lt;br /&gt;
Este é um método numérico de resolução aproximada para problemas de valores sobre contorno em equações diferenciais. É largamente utilizado na industrial para o desenvolvimento de novas tecnologias e produtos, pode ser utilizado tanto no processo de desenvolvimento quanto de otimização, através da simulação da física de situações em que se espera que o projeto atue.&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:FAE visualization.jpg|400px|thumb|center| Simulação de deformação de um veiculo https://en.wikipedia.org/wiki/Finite_element_method]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
O que torna este método diferente é a forma com que ele discretiza e faz suas aproximações. Sua discretização é feita na geometria, ou seja, repartindo o objeto em diversos elementos menores. Desta forma é possível que se resolva problemas em geometrias complexas cuja solução analítica é desconhecida e que seriam muito difíceis com outros métodos. Também permite trabalhar de maneira simples com materiais compostos, ou de diferentes densidades em um objeto, uma vez que podemos definir tais propriedades individualmente para cada elemento.&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:Exemplo inicio .png|400px|thumb|center| Modelo normal e modelo discretizado e representado por uma malha e simulação de estresse sofrido no objeto.]]&lt;br /&gt;
&lt;br /&gt;
=== O Método ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;q&amp;gt; O conceito fundamental do MEF é a aproximação de uma quantidade continua(p. ex., tensão elétrica, temperatura, etc.) através de um modelo discreto composto por um conjunto de funções simples que são definidas em um número finito de subdomínios(elementos)&amp;lt;/q&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A resolução de um problema através do MEF envolve quatro etapas principais:&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;Discretização da região:&#039;&#039;&#039; Transformar o objeto de estudo em vários elementos menores que juntos formam o objeto original de forma aproximada e a isso chama-se &#039;&#039;&#039;Malha&#039;&#039;&#039;.&lt;br /&gt;
# &#039;&#039;&#039;Aproximação da solução:&#039;&#039;&#039; Obtenção das equações correspondentes de cada elemento, através de interpolação polinomial.&lt;br /&gt;
# &#039;&#039;&#039;Montagem do sistema global:&#039;&#039;&#039; Juntar os elementos e suas equações em uma matriz que fornecerá a solução global.&lt;br /&gt;
# &#039;&#039;&#039;Resolução do sistema:&#039;&#039;&#039; Resolver a matriz gerada para obter a solução aproximada do problema.&lt;br /&gt;
&lt;br /&gt;
==== Discretização: A Malha ====&lt;br /&gt;
&lt;br /&gt;
A malha define o domínio do problema, ela é a base do método. Porém não é parte do algoritmo em si. Normalmente é criada automaticamente por um programa especifico para isso, como GMSH e NetGen. Apenas sendo fornecida as especificações que se deseja para a malha, vão influenciar na quantidade de nós, na dimensão do domínio e na precisão da aproximação.&lt;br /&gt;
&lt;br /&gt;
Ela é composta por um conjunto de pontos interligados que descrevem o objeto. Estes pontos são chamados de &#039;&#039;&#039;nós&#039;&#039;&#039; e a união destes nós forma um elemento, e a união destes elementos formam o objeto que é nosso domínio.&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:Nos.png|400px|thumb|center| Malha composta por elementos que são compostos por nós.]]&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;Dimensão:&#039;&#039;&#039; A malha pode ser unidimensional, bidimensional ou tridimensional.&lt;br /&gt;
[[Arquivo:Print slide 5.png|400px|thumb|center| Malha composta por elementos que são compostos por nós.]]&lt;br /&gt;
# &#039;&#039;&#039;Ordem:&#039;&#039;&#039; Quanto maior a ordem da malha mais precisa será a aproximação dos resultados entre os nós, porém aumenta o consumo computacional.&lt;br /&gt;
# &#039;&#039;&#039;Densidade de elementos:&#039;&#039;&#039; Pode-se escolher por gerar uma malha mais ou menos detalhada, isso implica no consumo computacional. Quanto mais detalhada a malha, ou seja, quanto maior o numero de nós da malha, menor será o erro de aproximação do problema real.&lt;br /&gt;
[[Arquivo:Densidade de malha.png|400px|thumb|center| Discretização de uma área utilizando o software GMSH com diferentes padrões gerando duas malhas com diferentes densidades de nós.]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Funcionamento do método ===&lt;br /&gt;
&lt;br /&gt;
Cada nó desta malha terá atribuída uma variável do problema físico que esta sendo implementado(o valor da grandeza contínua para aquele ponto), como Tensão Elétrica, Dilatação, Temperatura, etc. Esta variável é chamada &#039;&#039;&#039;Valor nodal&#039;&#039;&#039;, ela representa a solução da equação naquele ponto (Variáveis nodais = incógnitas ou graus de liberdade do problema).&lt;br /&gt;
[[Arquivo:Slide7.png|400px|thumb|center|]]&lt;br /&gt;
&lt;br /&gt;
Já a grandeza contínua é aproximada em cada elemento por um &#039;&#039;&#039;polinômio&#039;&#039;&#039; que é definido usando os valores nodais da grandeza. Ou seja, nós iremos descobrir os valores nodais dos nós e entre eles,os valores da grandeza contínua serão dados por uma aproximação polinomial.&lt;br /&gt;
&lt;br /&gt;
Lembrando que os elementos são formados pelos nós e que os valores nodais estão associado aos nós e não ao elemento diretamente.&lt;br /&gt;
&lt;br /&gt;
Então, cada elemento terá um polinômio que descreve a grandeza contínua na região entre os nós que formam este elemento, no caso de uma matriz com elementos de primeira ordem, será uma reta entre os valores nodais. Os polinômios são escolhidos/deduzidos de forma que a continuidade seja mantida na fronteira entre os elementos, utilizando os métodos matemáticos adequados para isso.&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Este polinômio resulta de um ajuste dos valores nodais para que se tenha uma boa aproximação da grandeza real, este ajuste é feito através da minimização de alguma grandeza associada ao problema.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==== Interpolação ====&lt;br /&gt;
&lt;br /&gt;
Os valores nodais, que são nossas incógnitas, precisam ser isolados e deixados em função das coordenadas dos nós, que possuímos através da malha de elementos finitos já gerada.&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:Slide9.png|400px|thumb|center|]] &lt;br /&gt;
 &lt;br /&gt;
&amp;lt;math&amp;gt; V_1 e V_2 &amp;lt;/math&amp;gt; -&amp;gt; valores nodais&lt;br /&gt;
&amp;lt;math&amp;gt; x_1 e x_2 &amp;lt;/math&amp;gt; -&amp;gt; coordenadas dos nós&lt;br /&gt;
&amp;lt;math&amp;gt; L = x_2 - x_1 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aproximação polinomial no caso da malha de primeira ordem: &lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
V(x) = a_1 + a_2 x &lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As variáveis a1 e a2 são coeficientes da interpolação, porém não as temos e não queremos deixa-las no calculo, para isso:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
V_1 = a_1 + a_2 x_1 &lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
V_2 = a_1 + a_2 x_2&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
logo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 \begin{bmatrix}&lt;br /&gt;
 V_1 \\&lt;br /&gt;
 V_2 \\&lt;br /&gt;
 \end{bmatrix}&lt;br /&gt;
 = &lt;br /&gt;
 \begin{bmatrix}&lt;br /&gt;
 1 &amp;amp; x_1 \\&lt;br /&gt;
 1 &amp;amp; x_2 \\&lt;br /&gt;
 \end{bmatrix}&lt;br /&gt;
 \begin{bmatrix}&lt;br /&gt;
 a_1 \\&lt;br /&gt;
 a_2 \\&lt;br /&gt;
 \end{bmatrix}&lt;br /&gt;
 &amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Portanto:&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
a_1 = \frac{1}{L} (V_1 x_2 - V_2 x_2)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
a_2 = \frac{1}{L} (V_1 - V_2)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Substituindo os valores de &amp;lt;math&amp;gt; a_1 &amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt; a_2 &amp;lt;/math&amp;gt; na equação de interpolação anterior &amp;lt;math&amp;gt; V(x) = a_1 + a_2 x  &amp;lt;/math&amp;gt; ficaremos com:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
V(x) = \frac{1}{L} [V_1 x_2 - V_2 x_1 + (V_2 - V_1) x]&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ou, como é definido a aproximação nodal:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
V(x) = \frac{(x_2 - x)}{L} V_1 + \frac{(x - x_1)}{L} V_2&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Esta fica conhecida por aproximação nodal pois a grandeza &amp;lt;math&amp;gt; V(x) &amp;lt;/math&amp;gt; pode ser obtida em qualquer ponto do intervalo &amp;lt;math&amp;gt; [x_1, x_2] &amp;lt;/math&amp;gt; a partir dos valores &amp;lt;math&amp;gt; V_1 &amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt; V_2 &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===== Função Interpolação =====&lt;br /&gt;
&lt;br /&gt;
Esta aproximação nodal pode ainda ser reescrita como:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
V(x) = \phi_1{(x)}V_1 + \phi_2{(x)}V_2&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Com: &lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\phi_1{(x)} = \frac{x_2 - x}{L}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
e &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\phi_2{(x)} = \frac{x - x_1}{L}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
sendo &amp;lt;math&amp;gt; L = x_2 - x_1 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As funções &amp;lt;math&amp;gt;\phi_1{(x)}&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;\phi_2{(x)}&amp;lt;/math&amp;gt; são conhecidas como &#039;&#039;&#039;funções de interpolação&#039;&#039;&#039; e são responsáveis por fazer com que cada nó do elemento contribua com uma parte do valor resultante em qualquer ponto dentro do elemento.&lt;br /&gt;
&lt;br /&gt;
E devido a propriedade do  delta de Kronecker, vista abaixo, é garantido que as equações só terão valor entre os nós dentro do elemento que são definidos:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\phi_i{(x_j)} =\left\{\begin{array}{lc} 1, \quad \text{se}\quad i=j\\&lt;br /&gt;
0, \quad \text{se} \quad i \ne j \end{array}\right.&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Então, por exemplo, nossa equação para o elemento 1, no caso visto aqui de 1D, para um problema  de tensão, fica:&lt;br /&gt;
&lt;br /&gt;
Elemento 1:&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
V^{(1)} (x) = \phi_1^{(1)}(x) V_1 \phi_2^{(1)}(x) V_2&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Com:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\phi_1^{(1)}{(x)} = \frac{x_2 - x}{x_2 - x_1}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
e&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\phi_2^{(1)}{(x)} = \frac{x - x_1}{x_2 - x_1}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Fica fácil perceber que os valores nodais dos dois nós se interpolam e contribuem para os valores entre para o resultado.&lt;br /&gt;
&lt;br /&gt;
A notação geral da função interpolação fica:&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\phi_i^{(e)} (x)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Em que: &amp;lt;math&amp;gt; (e) = elemento &amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt; i = nó &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As funções são diferentes para cada elemento e elas são nulas fora do elemento a que pertencem.&lt;br /&gt;
&lt;br /&gt;
Também existem a função chapéu, que é outro tipo de interpolação.&lt;br /&gt;
&lt;br /&gt;
==== Solução Global ====&lt;br /&gt;
&lt;br /&gt;
Seguindo com o caso do problema de tensão elétrica, a solução global será dada pelo somatório das funções de interpolação de cada elemento.&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
V_ex (x) \cong V(x) - \sum_{e=1}^{N_{elem}} V^{(e)} (x)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Até aqui nós chegamos a essa equação partindo da premissa que temos os valores nodais, fizemos isso apenas para explicar como os valores nodas e suas interpolações se comportam na malha.&lt;br /&gt;
&lt;br /&gt;
Porém os valores nodais são as nossas incógnitas e são eles quem queremos descobrir, a interpolação será a predição dos valores entre os valores nodais.&lt;br /&gt;
&lt;br /&gt;
Como visto, no MEF cada elemento terá suas próprias equações baseadas nos seus valores nodais e nas coordenadas destes valores. Para de fato introduzir o problema físico precisamos da forma fraca dele, já que é a partir da forma fraca que chegaremos no sistema de equações que nos permite obter os valores nodais&lt;br /&gt;
&lt;br /&gt;
===== Forma Fraca =====&lt;br /&gt;
&lt;br /&gt;
Quando se tem uma problema envolvendo um operador diferencial, é possível usar o que se conhece por forma fraca do operador, que nada mais é que a representação integral do problema, a qual já engloba/explicita as condições de contorno e utiliza-se o método de resíduos ponderados para isso.&lt;br /&gt;
&lt;br /&gt;
Para a construção da forma fraca nós podemos escolher uma função arbitrária w(x) e multiplicá-la pela forma forte, que é a equação diferencial original que descreve o problema, e pela condição de contorno em x=0. Em sequência nós integramos ambas dentro do domínio onde elas foram definidas. Como w(x) é uma função arbitrária que pode ser qualquer função, ela força a solução, já que qualquer coisa multiplicada por ela tem que ser 0.&lt;br /&gt;
Para entender esse método, nós podemos olhar o problema de uma barra elástica carregada axialmente.&lt;br /&gt;
&lt;br /&gt;
Considerando que a barra está em equilíbrio, nós podemos representar a relação entre as forças internas p(x) e as externas b(x) por essa equação&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
-p(x) + b (x + \frac{\Delta x}{2}) \Delta_x + p(x + \Delta_x) = 0&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Reorganizando e tomando o limite quando &amp;lt;math&amp;gt;\Delta_x&amp;lt;/math&amp;gt; tende a 0 nós chegamos em uma equação diferencial para descrever esse problema.&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
\frac{p(x + \Delta_x) - p(x)}{\Delta_x} + b (x + \frac{\Delta_x}{2}) = 0&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
No entanto, ela está em termos das forças internas, para reescrever isso, basta lembrar que a tensão é definida como a força pela área da seção transversal e, pela lei de tensão deformação para um material elástico linear, nós temos que&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\sigma = E_(x) \varepsilon_(x)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
onde E é o módulo de young e épsilon é a deformação, definida como&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\varepsilon_(x)= \frac{u(x + \Delta_x) - u(x)}{\Delta_x}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Então, lembrando também da definição de derivada, eu posso reescrever a equação para esse problema como&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\frac{d}{dx} (AE \frac{du}{dx}) +b = 0&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
E, para resolver essa equação, precisamos das condições de contorno, as quais podemos tomar como sendo&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\sigma(0) = (E \frac{du}{dx})_{x=0} = \frac{p(0)}{A(0)} \equiv \tau&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
relembrando que u(x) é a função que representa o deslocamento do corpo, ou seja, a deformação.&lt;br /&gt;
Agora, para obter a forma fraca, eu multiplico e integro a equação diferencial e a condição de contorno que diz respeito a tensão&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\frac{\partial{F^{(e)}}}{\partial{V_n}} = \frac{\partial}{\partial V_n} \int_{e}^{} \frac{1}{2} \varepsilon^(e) E^2 d\Omega&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aqui vale notar que a integral da condição de contorno foi substituída pela multiplicação pela área, já que o domínio dessa condição de contorno é a área da seção transversal mas só em x=0, ou seja, ela age só em um ponto&lt;br /&gt;
Agora, utilizando a definição de integração por partes, eu consigo escrever&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\frac{\partial{F^{(e)}}}{\partial{V_n}} = \frac{\partial}{\partial V_n} [ \frac{1}{2} \varepsilon^{(e)} E^2 \int_{e} d\Omega] = \frac{1}{2} \varepsilon^{(e)} \frac{D \partial{E^2}}{2 \partial{V_n}}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Olhando pra esse termo e para a equação da condição de contorno mostrada anteriormente e lembrando da definição de sigma, eu vejo que eu posso reescrever essa equação integral como&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
\int \frac{dw}{dx} AE \frac{du}{dx} = (wA \tau)_{x=0} + \int_{0}^{l} wb dx&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
que é a forma fraca da equação diferencial que descreve o nosso problema&lt;br /&gt;
&lt;br /&gt;
Qualquer solução que satisfizer a forma fraca, com w(l)=0 e u(l)= &amp;lt;math&amp;gt;\tau&amp;lt;/math&amp;gt; também será solução da equação diferencial original do nosso problema&lt;br /&gt;
&lt;br /&gt;
Alternativamente, podemos encontrar a forma fraca através da minimização de um funcional, um método chamado de Método Variacional, dentro de um espaço de funções válido para o nosso problema e suas condições de contorno. A obtenção desse funcional não é um processo trivial, mas quando se trata de problemas físicos, esse funcional coincide com a energia do sistema, sendo, por exemplo, a energia potencial elástica do sólido para problemas de mecânica dos sólidos e a energia eletrostática armazenada na região de cálculo para problemas eletrostáticos sem carga livre no domínio de estudo. A função que minimiza essa energia é a solução do problema original. Como discretizamos o problema, devemos minimizar o funcional com relação a cada nó. Se eu tenho 10 nós vou ter 10 equações (derivadas igualadas a 0) para minimizar o funcional nos 10 nós.&lt;br /&gt;
&lt;br /&gt;
Usando o problema eletrostático para exemplificar o Método Variacional:&lt;br /&gt;
&lt;br /&gt;
Obtém-se uma equação funcional associada à energia do sistema&lt;br /&gt;
A equação que rege o problema eletrostático é a equação de laplace, e em um problema 2D fica:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\frac{\partial^2 {V}}{\partial x^2} + \frac{\partial^2 {V}}{\partial y^2} = 0&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\nabla . \vec{D} = \rho&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\vec{E} = - \nabla V&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\vec{D} = \epsilon \vec{E}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\nabla ^2 V = - \frac{\rho}{\epsilon}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\nabla ^2 V = 0&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
F = \int_{\omega} \frac{1}{2} E^2 d\omega&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pelo método variacional, eu satisfaço a equação de laplace quando a energia armazenada no sistema, que é o meu funcional, forma mínima. Como analisamos elemento por elemento, podemos dizer que o funcional vai ser constante dentro de um elemento, e tem que ser minimizado &lt;br /&gt;
dentro desse elemento, para tal, eu minimizo o funcional com relação a cada nó do elemento, o que me leva a um conjunto de equações que podemos organizar no que se conhece como matriz elementar, se eu tenho 3 nós em cada elemento vou ter uma matriz 3 por 3.&lt;br /&gt;
Podemos escrever a derivada total do funcional como a soma da derivada em cada elemento, onde F^E é o valor do funcional em cada elemento&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\frac{\partial{F^{(e)}}}{\partial{V_n}} = \sum_{e=1}^{M} \frac{\partial F^e}{\partial V_n} = 0&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
onde,&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\frac{\partial{F^{(e)}}}{\partial{V_n}} = \frac{\partial}{\partial V_n} \int_{e}^{} \frac{1}{2} \varepsilon^{(e)} E^2 d\Omega&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se consideramos a permissividade e o campo elétrico constante em cada elemento, eles podem sair da integral. A integral de ÔMEGA no elemento é a área do elemento, que é o determinante dividido por 2, com isso, obtemos que:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\frac{\partial{F^{(e)}}}{\partial{V_n}} = \frac{\partial}{\partial V_n} [ \frac{1}{2} \varepsilon^{(e)} E^2 \int_{e} d\Omega] = \frac{1}{2} \varepsilon^(e) \frac{D \partial{E^2}}{2 \partial{V_n}}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
utilizando elementos triangulares e interpolação linear 2D, podemos escrever a derivada segunda do campo elétrico como:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\frac{\partial E^2}{\partial V_1} = \frac{2}{D^2} [(q_1 V_1 + q_2 V_2 + q_3 V_3)q_1 + (r_1 V_1 + r_2 V_2 + r_3 V_3)r_1&lt;br /&gt;
&amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Com isso, eu posso escrever a matriz elementar como:&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:Matriz elementar.png|400px|thumb|center|]] &lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
C_{ij} = \frac{\epsilon}{2Det} (q_i q_j + r_i r_j)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mas eu preciso minimizar o funcional em todos os elementos, então a contribuição de cada elemento deve ser inserida na matriz global - MXM - sendo M o número de nós. Na matriz global nós somamos os termos dos nós que se interseccionam em diferentes elementos. É preciso de duas condições de contorno (valores para 2 nós), substituindo elas na matriz global eu consigo calcular os valores para os nós que eu desconheço. Depois de resolver os valores para os nós, eu consigo determinar a solução em qualquer ponto do domínio.&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:Contribuição elemento.png|400px|thumb|center|]] &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Um exemplo de como ficaria a matriz global e seus elementos para uma determinada malha:&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:Matrizglobal.png|400px|thumb|center|]] &lt;br /&gt;
&lt;br /&gt;
Por fim tendo a matriz global determinada e com as condições de contorno aplicadas, sua resolução trará enfim a solução do problema pelo método de elementos finitos.&lt;br /&gt;
&lt;br /&gt;
=== Programas CAE ===&lt;br /&gt;
&lt;br /&gt;
Na engenharia este método é largamente aplicado, porém raramente utilizado desta forma, criando a matriz manualmente e os programas para solução do método. Existem programas que estão a décadas sendo aperfeiçoados, alguns proprietários como o CONSOL, e outros livres como OpenFOAM, Calcuix, ElmerFEM, entre outros.&lt;br /&gt;
&lt;br /&gt;
A implementação do MEF em projetos costuma seguir um workflow assim: &lt;br /&gt;
&lt;br /&gt;
# Desenho do modelo 3D que deseja estudar.&lt;br /&gt;
# Transformar este modelo em uma malha, no formato que os programas de elementos finitos reconhecem.&lt;br /&gt;
# Indicar o problema físico a ser estudado e suas condições iniciais aplicadas ao modelo 3D.&lt;br /&gt;
# Rodar o programa adequado para o problema.&lt;br /&gt;
# Utilizar de programas para examinar os resultados.&lt;br /&gt;
&lt;br /&gt;
Como pode-se ver no diagrama abaixo também:&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:FEM Workbench workflow.png|400px|thumb|center| Workflow no FreeCAD - https://wiki.freecadweb.org/FEM_Workbench]]&lt;/div&gt;</summary>
		<author><name>Renanrs</name></author>
	</entry>
	<entry>
		<id>http://fiscomp.if.ufrgs.br/index.php?title=M%C3%A9todo_de_Elementos_Finitos&amp;diff=6031</id>
		<title>Método de Elementos Finitos</title>
		<link rel="alternate" type="text/html" href="http://fiscomp.if.ufrgs.br/index.php?title=M%C3%A9todo_de_Elementos_Finitos&amp;diff=6031"/>
		<updated>2021-10-23T22:35:17Z</updated>

		<summary type="html">&lt;p&gt;Renanrs: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Em construção - as referencias e imagens ainda estão faltando&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Grupo: Antônio Carlan, Gabriela Pereira, Renan Soares e Victor Gandara&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Objetivo:&#039;&#039;&#039; Apresentar uma introdução do Método de Elementos Finitos, abordando seu funcionamento e demonstrando suas etapas através de um exemplo, demonstrando seu potencial e o que o diferencia de outros métodos estudados nas cadeiras de métodos computacionais até então vistos.&lt;br /&gt;
&lt;br /&gt;
= Introdução ao Método de Elementos Finitos(MEF) =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Aplicação ===&lt;br /&gt;
 &lt;br /&gt;
Este é um método numérico de resolução aproximada para problemas de valores sobre contorno em equações diferenciais. É largamente utilizado na industrial para o desenvolvimento de novas tecnologias e produtos, pode ser utilizado tanto no processo de desenvolvimento quanto de otimização, através da simulação da física de situações em que se espera que o projeto atue.&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:FAE visualization.jpg|400px|thumb|center| Simulação de deformação de um veiculo https://en.wikipedia.org/wiki/Finite_element_method]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
O que torna este método diferente é a forma com que ele discretiza e faz suas aproximações. Sua discretização é feita na geometria, ou seja, repartindo o objeto em diversos elementos menores. Desta forma é possível que se resolva problemas em geometrias complexas cuja solução analítica é desconhecida e que seriam muito difíceis com outros métodos. Também permite trabalhar de maneira simples com materiais compostos, ou de diferentes densidades em um objeto, uma vez que podemos definir tais propriedades individualmente para cada elemento.&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:Exemplo inicio .png|400px|thumb|center| Modelo normal e modelo discretizado e representado por uma malha e simulação de estresse sofrido no objeto.]]&lt;br /&gt;
&lt;br /&gt;
=== O Método ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;q&amp;gt; O conceito fundamental do MEF é a aproximação de uma quantidade continua(p. ex., tensão elétrica, temperatura, etc.) através de um modelo discreto composto por um conjunto de funções simples que são definidas em um número finito de subdomínios(elementos)&amp;lt;/q&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A resolução de um problema através do MEF envolve quatro etapas principais:&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;Discretização da região:&#039;&#039;&#039; Transformar o objeto de estudo em vários elementos menores que juntos formam o objeto original de forma aproximada e a isso chama-se &#039;&#039;&#039;Malha&#039;&#039;&#039;.&lt;br /&gt;
# &#039;&#039;&#039;Aproximação da solução:&#039;&#039;&#039; Obtenção das equações correspondentes de cada elemento, através de interpolação polinomial.&lt;br /&gt;
# &#039;&#039;&#039;Montagem do sistema global:&#039;&#039;&#039; Juntar os elementos e suas equações em uma matriz que fornecerá a solução global.&lt;br /&gt;
# &#039;&#039;&#039;Resolução do sistema:&#039;&#039;&#039; Resolver a matriz gerada para obter a solução aproximada do problema.&lt;br /&gt;
&lt;br /&gt;
==== Discretização: A Malha ====&lt;br /&gt;
&lt;br /&gt;
A malha define o domínio do problema, ela é a base do método. Porém não é parte do algoritmo em si. Normalmente é criada automaticamente por um programa especifico para isso, como GMSH e NetGen. Apenas sendo fornecida as especificações que se deseja para a malha, vão influenciar na quantidade de nós, na dimensão do domínio e na precisão da aproximação.&lt;br /&gt;
&lt;br /&gt;
Ela é composta por um conjunto de pontos interligados que descrevem o objeto. Estes pontos são chamados de &#039;&#039;&#039;nós&#039;&#039;&#039; e a união destes nós forma um elemento, e a união destes elementos formam o objeto que é nosso domínio.&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:Nos.png|400px|thumb|center| Malha composta por elementos que são compostos por nós.]]&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;Dimensão:&#039;&#039;&#039; A malha pode ser unidimensional, bidimensional ou tridimensional.&lt;br /&gt;
[[Arquivo:Print slide 5.png|400px|thumb|center| Malha composta por elementos que são compostos por nós.]]&lt;br /&gt;
# &#039;&#039;&#039;Ordem:&#039;&#039;&#039; Quanto maior a ordem da malha mais precisa será a aproximação dos resultados entre os nós, porém aumenta o consumo computacional.&lt;br /&gt;
# &#039;&#039;&#039;Densidade de elementos:&#039;&#039;&#039; Pode-se escolher por gerar uma malha mais ou menos detalhada, isso implica no consumo computacional. Quanto mais detalhada a malha, ou seja, quanto maior o numero de nós da malha, menor será o erro de aproximação do problema real.&lt;br /&gt;
[[Arquivo:Densidade de malha.png|400px|thumb|center| Discretização de uma área utilizando o software GMSH com diferentes padrões gerando duas malhas com diferentes densidades de nós.]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Funcionamento do método ===&lt;br /&gt;
&lt;br /&gt;
Cada nó desta malha terá atribuída uma variável do problema físico que esta sendo implementado(o valor da grandeza contínua para aquele ponto), como Tensão Elétrica, Dilatação, Temperatura, etc. Esta variável é chamada &#039;&#039;&#039;Valor nodal&#039;&#039;&#039;, ela representa a solução da equação naquele ponto (Variáveis nodais = incógnitas ou graus de liberdade do problema).&lt;br /&gt;
[[Arquivo:Slide7.png|400px|thumb|center|]]&lt;br /&gt;
&lt;br /&gt;
Já a grandeza contínua é aproximada em cada elemento por um &#039;&#039;&#039;polinômio&#039;&#039;&#039; que é definido usando os valores nodais da grandeza. Ou seja, nós iremos descobrir os valores nodais dos nós e entre eles,os valores da grandeza contínua serão dados por uma aproximação polinomial.&lt;br /&gt;
&lt;br /&gt;
Lembrando que os elementos são formados pelos nós e que os valores nodais estão associado aos nós e não ao elemento diretamente.&lt;br /&gt;
&lt;br /&gt;
Então, cada elemento terá um polinômio que descreve a grandeza contínua na região entre os nós que formam este elemento, no caso de uma matriz com elementos de primeira ordem, será uma reta entre os valores nodais. Os polinômios são escolhidos/deduzidos de forma que a continuidade seja mantida na fronteira entre os elementos, utilizando os métodos matemáticos adequados para isso.&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Este polinômio resulta de um ajuste dos valores nodais para que se tenha uma boa aproximação da grandeza real, este ajuste é feito através da minimização de alguma grandeza associada ao problema.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==== Interpolação ====&lt;br /&gt;
&lt;br /&gt;
Os valores nodais, que são nossas incógnitas, precisam ser isolados e deixados em função das coordenadas dos nós, que possuímos através da malha de elementos finitos já gerada.&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:Slide9.png|400px|thumb|center|]] &lt;br /&gt;
 &lt;br /&gt;
&amp;lt;math&amp;gt; V_1 e V_2 &amp;lt;/math&amp;gt; -&amp;gt; valores nodais&lt;br /&gt;
&amp;lt;math&amp;gt; x_1 e x_2 &amp;lt;/math&amp;gt; -&amp;gt; coordenadas dos nós&lt;br /&gt;
&amp;lt;math&amp;gt; L = x_2 - x_1 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aproximação polinomial no caso da malha de primeira ordem: &lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
V(x) = a_1 + a_2 x &lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As variáveis a1 e a2 são coeficientes da interpolação, porém não as temos e não queremos deixa-las no calculo, para isso:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
V_1 = a_1 + a_2 x_1 &lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
V_2 = a_1 + a_2 x_2&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
logo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 \begin{bmatrix}&lt;br /&gt;
 V_1 \\&lt;br /&gt;
 V_2 \\&lt;br /&gt;
 \end{bmatrix}&lt;br /&gt;
 = &lt;br /&gt;
 \begin{bmatrix}&lt;br /&gt;
 1 &amp;amp; x_1 \\&lt;br /&gt;
 1 &amp;amp; x_2 \\&lt;br /&gt;
 \end{bmatrix}&lt;br /&gt;
 \begin{bmatrix}&lt;br /&gt;
 a_1 \\&lt;br /&gt;
 a_2 \\&lt;br /&gt;
 \end{bmatrix}&lt;br /&gt;
 &amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Portanto:&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
a_1 = \frac{1}{L} (V_1 x_2 - V_2 x_2)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
a_2 = \frac{1}{L} (V_1 - V_2)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Substituindo os valores de &amp;lt;math&amp;gt; a_1 &amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt; a_2 &amp;lt;/math&amp;gt; na equação de interpolação anterior &amp;lt;math&amp;gt; V(x) = a_1 + a_2 x  &amp;lt;/math&amp;gt; ficaremos com:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
V(x) = \frac{1}{L} [V_1 x_2 - V_2 x_1 + (V_2 - V_1) x]&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ou, como é definido a aproximação nodal:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
V(x) = \frac{(x_2 - x)}{L} V_1 + \frac{(x - x_1)}{L} V_2&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Esta fica conhecida por aproximação nodal pois a grandeza &amp;lt;math&amp;gt; V(x) &amp;lt;/math&amp;gt; pode ser obtida em qualquer ponto do intervalo &amp;lt;math&amp;gt; [x_1, x_2] &amp;lt;/math&amp;gt; a partir dos valores &amp;lt;math&amp;gt; V_1 &amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt; V_2 &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===== Função Interpolação =====&lt;br /&gt;
&lt;br /&gt;
Esta aproximação nodal pode ainda ser reescrita como:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
V(x) = \phi_1{(x)}V_1 + \phi_2{(x)}V_2&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Com: &lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\phi_1{(x)} = \frac{x_2 - x}{L}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
e &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\phi_2{(x)} = \frac{x - x_1}{L}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
sendo &amp;lt;math&amp;gt; L = x_2 - x_1 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As funções &amp;lt;math&amp;gt;\phi_1{(x)}&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;\phi_2{(x)}&amp;lt;/math&amp;gt; são conhecidas como &#039;&#039;&#039;funções de interpolação&#039;&#039;&#039; e são responsáveis por fazer com que cada nó do elemento contribua com uma parte do valor resultante em qualquer ponto dentro do elemento.&lt;br /&gt;
&lt;br /&gt;
E devido a propriedade do  delta de Kronecker, vista abaixo, é garantido que as equações só terão valor entre os nós dentro do elemento que são definidos:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\phi_i{(x_j)} =\left\{\begin{array}{lc} 1, \quad \text{se}\quad i=j\\&lt;br /&gt;
0, \quad \text{se} \quad i \ne j \end{array}\right.&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Então, por exemplo, nossa equação para o elemento 1, no caso visto aqui de 1D, para um problema  de tensão, fica:&lt;br /&gt;
&lt;br /&gt;
Elemento 1:&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
V^{(1)} (x) = \phi_1^{(1)}(x) V_1 \phi_2^{(1)}(x) V_2&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Com:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\phi_1^{(1)}{(x)} = \frac{x_2 - x}{x_2 - x_1}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
e&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\phi_2^{(1)}{(x)} = \frac{x - x_1}{x_2 - x_1}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Fica fácil perceber que os valores nodais dos dois nós se interpolam e contribuem para os valores entre para o resultado.&lt;br /&gt;
&lt;br /&gt;
A notação geral da função interpolação fica:&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\phi_i^{(e)} (x)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Em que: &amp;lt;math&amp;gt; (e) = elemento &amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt; i = nó &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As funções são diferentes para cada elemento e elas são nulas fora do elemento a que pertencem.&lt;br /&gt;
&lt;br /&gt;
Também existem a função chapéu, que é outro tipo de interpolação.&lt;br /&gt;
&lt;br /&gt;
==== Solução Global ====&lt;br /&gt;
&lt;br /&gt;
Seguindo com o caso do problema de tensão elétrica, a solução global será dada pelo somatório das funções de interpolação de cada elemento.&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
V_ex (x) \cong V(x) - \sum_{e=1}^{N_{elem}} V^{(e)} (x)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Até aqui nós chegamos a essa equação partindo da premissa que temos os valores nodais, fizemos isso apenas para explicar como os valores nodas e suas interpolações se comportam na malha.&lt;br /&gt;
&lt;br /&gt;
Porém os valores nodais são as nossas incógnitas e são eles quem queremos descobrir, a interpolação será a predição dos valores entre os valores nodais.&lt;br /&gt;
&lt;br /&gt;
Como visto, no MEF cada elemento terá suas próprias equações baseadas nos seus valores nodais e nas coordenadas destes valores. Para de fato introduzir o problema físico precisamos da forma fraca dele, já que é a partir da forma fraca que chegaremos no sistema de equações que nos permite obter os valores nodais&lt;br /&gt;
&lt;br /&gt;
===== Forma Fraca =====&lt;br /&gt;
&lt;br /&gt;
Quando se tem uma problema envolvendo um operador diferencial, é possível usar o que se conhece por forma fraca do operador, que nada mais é que a representação integral do problema, a qual já engloba/explicita as condições de contorno e utiliza-se o método de resíduos ponderados para isso.&lt;br /&gt;
&lt;br /&gt;
Para a construção da forma fraca nós podemos escolher uma função arbitrária w(x) e multiplicá-la pela forma forte, que é a equação diferencial original que descreve o problema, e pela condição de contorno em x=0. Em sequência nós integramos ambas dentro do domínio onde elas foram definidas. Como w(x) é uma função arbitrária que pode ser qualquer função, ela força a solução, já que qualquer coisa multiplicada por ela tem que ser 0.&lt;br /&gt;
Para entender esse método, nós podemos olhar o problema de uma barra elástica carregada axialmente.&lt;br /&gt;
&lt;br /&gt;
Considerando que a barra está em equilíbrio, nós podemos representar a relação entre as forças internas p(x) e as externas b(x) por essa equação&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
-p(x) + b (x + \frac{\Delta x}{2}) \Delta_x + p(x + \Delta_x) = 0&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Reorganizando e tomando o limite quando &amp;lt;math&amp;gt;\Delta_x&amp;lt;/math&amp;gt; tende a 0 nós chegamos em uma equação diferencial para descrever esse problema.&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
\frac{p(x + \Delta_x) - p(x)}{Delta_x} + b (x + \frac{\Delta_x}{2}) = 0&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
No entanto, ela está em termos das forças internas, para reescrever isso, basta lembrar que a tensão é definida como a força pela área da seção transversal e, pela lei de tensão deformação para um material elástico linear, nós temos que&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\sigma = E_(x) \varepsilon_(x)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
onde E é o módulo de young e épsilon é a deformação, definida como&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\varepsilon_(x)= \frac{u(x + \Delta_x) - u(x)}{\Delta_x}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Então, lembrando também da definição de derivada, eu posso reescrever a equação para esse problema como&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\frac{d}{dx} (AE \frac{du}{dx}) +b = 0&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
E, para resolver essa equação, precisamos das condições de contorno, as quais podemos tomar como sendo&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\sigma(0) = (E \frac{du}{dx})_{x=0} = \frac{p(0)}{A(0)} \equiv \tau&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
relembrando que u(x) é a função que representa o deslocamento do corpo, ou seja, a deformação.&lt;br /&gt;
Agora, para obter a forma fraca, eu multiplico e integro a equação diferencial e a condição de contorno que diz respeito a tensão&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\frac{\partial{F^(e)}}{\partial{V_n}} = \frac{\partial}{\partial V_n} \int_{e}^{} \frac{1}{2} \varepsilon^(e) E^2 d\Omega&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aqui vale notar que a integral da condição de contorno foi substituída pela multiplicação pela área, já que o domínio dessa condição de contorno é a área da seção transversal mas só em x=0, ou seja, ela age só em um ponto&lt;br /&gt;
Agora, utilizando a definição de integração por partes, eu consigo escrever&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\frac{\partial{F^(e)}}{\partial{V_n}} = \frac{\partial}{\partial V_n} [ \frac{1}{2} \varepsilon^(e) E^2 \int_{e} d\Omega] = \frac{1}{2} \varepsilon^(e) \frac{D \partial{E^2}}{2 \partial{V_n}}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Olhando pra esse termo e para a equação da condição de contorno mostrada anteriormente e lembrando da definição de sigma, eu vejo que eu posso reescrever essa equação integral como&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
\int \frac{dw}{dx} AE \frac{du}{dx} = (wA \tau)_{x=0} + \int_{0}^{l} wb dx&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
que é a forma fraca da equação diferencial que descreve o nosso problema&lt;br /&gt;
&lt;br /&gt;
Qualquer solução que satisfizer a forma fraca, com w(l)=0 e u(l)= &amp;lt;math&amp;gt;\tau&amp;lt;/math&amp;gt; também será solução da equação diferencial original do nosso problema&lt;br /&gt;
&lt;br /&gt;
Alternativamente, podemos encontrar a forma fraca através da minimização de um funcional, um método chamado de Método Variacional, dentro de um espaço de funções válido para o nosso problema e suas condições de contorno. A obtenção desse funcional não é um processo trivial, mas quando se trata de problemas físicos, esse funcional coincide com a energia do sistema, sendo, por exemplo, a energia potencial elástica do sólido para problemas de mecânica dos sólidos e a energia eletrostática armazenada na região de cálculo para problemas eletrostáticos sem carga livre no domínio de estudo. A função que minimiza essa energia é a solução do problema original. Como discretizamos o problema, devemos minimizar o funcional com relação a cada nó. Se eu tenho 10 nós vou ter 10 equações (derivadas igualadas a 0) para minimizar o funcional nos 10 nós.&lt;br /&gt;
&lt;br /&gt;
Usando o problema eletrostático para exemplificar o Método Variacional:&lt;br /&gt;
&lt;br /&gt;
Obtém-se uma equação funcional associada à energia do sistema&lt;br /&gt;
A equação que rege o problema eletrostático é a equação de laplace, e em um problema 2D fica:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\frac{\partial^2 {V}}{\partial x^2} + \frac{\partial^2 {V}}{\partial y^2} = 0&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\nabla . \vec{D} = \rho&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\vec{E} = - \nabla V&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\vec{D} = \epsilon \vec{E}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\nabla ^2 V = - \frac{\rho}{\epsilon}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\nabla ^2 V = 0&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
F = \int_{\omega} \frac{1}{2} E^2 d\omega&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pelo método variacional, eu satisfaço a equação de laplace quando a energia armazenada no sistema, que é o meu funcional, forma mínima. Como analisamos elemento por elemento, podemos dizer que o funcional vai ser constante dentro de um elemento, e tem que ser minimizado &lt;br /&gt;
dentro desse elemento, para tal, eu minimizo o funcional com relação a cada nó do elemento, o que me leva a um conjunto de equações que podemos organizar no que se conhece como matriz elementar, se eu tenho 3 nós em cada elemento vou ter uma matriz 3 por 3.&lt;br /&gt;
Podemos escrever a derivada total do funcional como a soma da derivada em cada elemento, onde F^E é o valor do funcional em cada elemento&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\frac{\partial{F^(e)}}{\partial{V_n}} = \sum_{e=1}^{M} \frac{\partial F^e}{\partial V_n} = 0&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
onde,&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\frac{\partial{F^(e)}}{\partial{V_n}} = \frac{\partial}{\partial V_n} \int_{e}^{} \frac{1}{2} \varepsilon^(e) E^2 d\Omega&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se consideramos a permissividade e o campo elétrico constante em cada elemento, eles podem sair da integral. A integral de ÔMEGA no elemento é a área do elemento, que é o determinante dividido por 2, com isso, obtemos que:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\frac{\partial{F^(e)}}{\partial{V_n}} = \frac{\partial}{\partial V_n} [ \frac{1}{2} \varepsilon^(e) E^2 \int_{e} d\Omega] = \frac{1}{2} \varepsilon^(e) \frac{D \partial{E^2}}{2 \partial{V_n}}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
utilizando elementos triangulares e interpolação linear 2D, podemos escrever a derivada segunda do campo elétrico como:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\frac{\partial E^2}{\partial V_1} = \frac{2}{D^2} [(q_1 V_1 + q_2 V_2 + q_3 V_3)q_1 + (r_1 V_1 + r_2 V_2 + r_3 V_3)r_1&lt;br /&gt;
&amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Com isso, eu posso escrever a matriz elementar como:&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:Matriz elementar.png|400px|thumb|center|]] &lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
C_{ij} = \frac{\epsilon}{2Det} (q_i q_j + r_i r_j)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mas eu preciso minimizar o funcional em todos os elementos, então a contribuição de cada elemento deve ser inserida na matriz global - MXM - sendo M o número de nós. Na matriz global nós somamos os termos dos nós que se interseccionam em diferentes elementos. É preciso de duas condições de contorno (valores para 2 nós), substituindo elas na matriz global eu consigo calcular os valores para os nós que eu desconheço. Depois de resolver os valores para os nós, eu consigo determinar a solução em qualquer ponto do domínio.&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:Contribuição elemento.png|400px|thumb|center|]] &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Um exemplo de como ficaria a matriz global e seus elementos para uma determinada malha:&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:Matrizglobal.png|400px|thumb|center|]] &lt;br /&gt;
&lt;br /&gt;
Por fim tendo a matriz global determinada e com as condições de contorno aplicadas, sua resolução trará enfim a solução do problema pelo método de elementos finitos.&lt;br /&gt;
&lt;br /&gt;
=== Programas CAE ===&lt;br /&gt;
&lt;br /&gt;
Na engenharia este método é largamente aplicado, porém raramente utilizado desta forma, criando a matriz manualmente e os programas para solução do método. Existem programas que estão a décadas sendo aperfeiçoados, alguns proprietários como o CONSOL, e outros livres como OpenFOAM, Calcuix, ElmerFEM, entre outros.&lt;br /&gt;
&lt;br /&gt;
A implementação do MEF em projetos costuma seguir um workflow assim: &lt;br /&gt;
&lt;br /&gt;
# Desenho do modelo 3D que deseja estudar.&lt;br /&gt;
# Transformar este modelo em uma malha, no formato que os programas de elementos finitos reconhecem.&lt;br /&gt;
# Indicar o problema físico a ser estudado e suas condições iniciais aplicadas ao modelo 3D.&lt;br /&gt;
# Rodar o programa adequado para o problema.&lt;br /&gt;
# Utilizar de programas para examinar os resultados.&lt;br /&gt;
&lt;br /&gt;
Como pode-se ver no diagrama abaixo também:&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:FEM Workbench workflow.png|400px|thumb|center| Workflow no FreeCAD - https://wiki.freecadweb.org/FEM_Workbench]]&lt;/div&gt;</summary>
		<author><name>Renanrs</name></author>
	</entry>
	<entry>
		<id>http://fiscomp.if.ufrgs.br/index.php?title=M%C3%A9todo_de_Elementos_Finitos&amp;diff=6030</id>
		<title>Método de Elementos Finitos</title>
		<link rel="alternate" type="text/html" href="http://fiscomp.if.ufrgs.br/index.php?title=M%C3%A9todo_de_Elementos_Finitos&amp;diff=6030"/>
		<updated>2021-10-22T21:34:48Z</updated>

		<summary type="html">&lt;p&gt;Renanrs: /* Forma Fraca */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Em construção - as referencias e imagens ainda estão faltando&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Grupo: Antônio Carlan, Gabriela Pereira, Renan Soares e Victor Gandara&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Objetivo:&#039;&#039;&#039; Apresentar uma introdução do Método de Elementos Finitos, abordando seu funcionamento e demonstrando suas etapas através de um exemplo, demonstrando seu potencial e o que o diferencia de outros métodos estudados nas cadeiras de métodos computacionais até então vistos.&lt;br /&gt;
&lt;br /&gt;
= Introdução ao Método de Elementos Finitos(MEF) =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Aplicação ===&lt;br /&gt;
 &lt;br /&gt;
Este é um método numérico de resolução aproximada para problemas de valores sobre contorno em equações diferenciais. É largamente utilizado na industrial para o desenvolvimento de novas tecnologias e produtos, pode ser utilizado tanto no processo de desenvolvimento quanto de otimização, através da simulação da física de situações em que se espera que o projeto atue.&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:FAE visualization.jpg|400px|thumb|center| Simulação de deformação de um veiculo https://en.wikipedia.org/wiki/Finite_element_method]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
O que torna este método diferente é a forma com que ele discretiza e faz suas aproximações. Sua discretização é feita na geometria, ou seja, repartindo o objeto em diversos elementos menores. Desta forma é possível que se resolva problemas em geometrias complexas cuja solução analítica é desconhecida e que seriam muito difíceis com outros métodos. Também permite trabalhar de maneira simples com materiais compostos, ou de diferentes densidades em um objeto, uma vez que podemos definir tais propriedades individualmente para cada elemento.&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:Exemplo inicio .png|400px|thumb|center| Modelo normal e modelo discretizado e representado por uma malha e simulação de estresse sofrido no objeto.]]&lt;br /&gt;
&lt;br /&gt;
=== O Método ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;q&amp;gt; O conceito fundamental do MEF é a aproximação de uma quantidade continua(p. ex., tensão elétrica, temperatura, etc.) através de um modelo discreto composto por um conjunto de funções simples que são definidas em um número finito de subdomínios(elementos)&amp;lt;/q&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A resolução de um problema através do MEF envolve quatro etapas principais:&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;Discretização da região:&#039;&#039;&#039; Transformar o objeto de estudo em vários elementos menores que juntos formam o objeto original de forma aproximada e a isso chama-se &#039;&#039;&#039;Malha&#039;&#039;&#039;.&lt;br /&gt;
# &#039;&#039;&#039;Aproximação da solução:&#039;&#039;&#039; Obtenção das equações correspondentes de cada elemento, através de interpolação polinomial.&lt;br /&gt;
# &#039;&#039;&#039;Montagem do sistema global:&#039;&#039;&#039; Juntar os elementos e suas equações em uma matriz que fornecerá a solução global.&lt;br /&gt;
# &#039;&#039;&#039;Resolução do sistema:&#039;&#039;&#039; Resolver a matriz gerada para obter a solução aproximada do problema.&lt;br /&gt;
&lt;br /&gt;
==== Discretização: A Malha ====&lt;br /&gt;
&lt;br /&gt;
A malha define o domínio do problema, ela é a base do método. Porém não é parte do algoritmo em si. Normalmente é criada automaticamente por um programa especifico para isso, como GMSH e NetGen. Apenas sendo fornecida as especificações que se deseja para a malha, vão influenciar na quantidade de nós, na dimensão do domínio e na precisão da aproximação.&lt;br /&gt;
&lt;br /&gt;
Ela é composta por um conjunto de pontos interligados que descrevem o objeto. Estes pontos são chamados de &#039;&#039;&#039;nós&#039;&#039;&#039; e a união destes nós forma um elemento, e a união destes elementos formam o objeto que é nosso domínio.&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:Nos.png|400px|thumb|center| Malha composta por elementos que são compostos por nós.]]&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;Dimensão:&#039;&#039;&#039; A malha pode ser unidimensional, bidimensional ou tridimensional.&lt;br /&gt;
[[Arquivo:Print slide 5.png|400px|thumb|center| Malha composta por elementos que são compostos por nós.]]&lt;br /&gt;
# &#039;&#039;&#039;Ordem:&#039;&#039;&#039; Quanto maior a ordem da malha mais precisa será a aproximação dos resultados entre os nós, porém aumenta o consumo computacional.&lt;br /&gt;
# &#039;&#039;&#039;Densidade de elementos:&#039;&#039;&#039; Pode-se escolher por gerar uma malha mais ou menos detalhada, isso implica no consumo computacional. Quanto mais detalhada a malha, ou seja, quanto maior o numero de nós da malha, menor será o erro de aproximação do problema real.&lt;br /&gt;
[[Arquivo:Densidade de malha.png|400px|thumb|center| Discretização de uma área utilizando o software GMSH com diferentes padrões gerando duas malhas com diferentes densidades de nós.]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Funcionamento do método ===&lt;br /&gt;
&lt;br /&gt;
Cada nó desta malha terá atribuída uma variável do problema físico que esta sendo implementado(o valor da grandeza contínua para aquele ponto), como Tensão Elétrica, Dilatação, Temperatura, etc. Esta variável é chamada &#039;&#039;&#039;Valor nodal&#039;&#039;&#039;, ela representa a solução da equação naquele ponto (Variáveis nodais = incógnitas ou graus de liberdade do problema).&lt;br /&gt;
[[Arquivo:Slide7.png|400px|thumb|center|]]&lt;br /&gt;
&lt;br /&gt;
Já a grandeza contínua é aproximada em cada elemento por um &#039;&#039;&#039;polinômio&#039;&#039;&#039; que é definido usando os valores nodais da grandeza. Ou seja, nós iremos descobrir os valores nodais dos nós e entre eles,os valores da grandeza contínua serão dados por uma aproximação polinomial.&lt;br /&gt;
&lt;br /&gt;
Lembrando que os elementos são formados pelos nós e que os valores nodais estão associado aos nós e não ao elemento diretamente.&lt;br /&gt;
&lt;br /&gt;
Então, cada elemento terá um polinômio que descreve a grandeza contínua na região entre os nós que formam este elemento, no caso de uma matriz com elementos de primeira ordem, será uma reta entre os valores nodais. Os polinômios são escolhidos/deduzidos de forma que a continuidade seja mantida na fronteira entre os elementos, utilizando os métodos matemáticos adequados para isso.&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Este polinômio resulta de um ajuste dos valores nodais para que se tenha uma boa aproximação da grandeza real, este ajuste é feito através da minimização de alguma grandeza associada ao problema.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==== Interpolação ====&lt;br /&gt;
&lt;br /&gt;
Os valores nodais, que são nossas incógnitas, precisam ser isolados e deixados em função das coordenadas dos nós, que possuímos através da malha de elementos finitos já gerada.&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:Slide9.png|400px|thumb|center|]] &lt;br /&gt;
 &lt;br /&gt;
&amp;lt;math&amp;gt; V_1 e V_2 &amp;lt;/math&amp;gt; -&amp;gt; valores nodais&lt;br /&gt;
&amp;lt;math&amp;gt; x_1 e x_2 &amp;lt;/math&amp;gt; -&amp;gt; coordenadas dos nós&lt;br /&gt;
&amp;lt;math&amp;gt; L = x_2 - x_1 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aproximação polinomial no caso da malha de primeira ordem: &lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
V(x) = a_1 + a_2 x &lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As variáveis a1 e a2 são coeficientes da interpolação, porém não as temos e não queremos deixa-las no calculo, para isso:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
V_1 = a_1 + a_2 x_1 &lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
V_2 = a_1 + a_2 x_2&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
logo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 \begin{bmatrix}&lt;br /&gt;
 V_1 \\&lt;br /&gt;
 V_2 \\&lt;br /&gt;
 \end{bmatrix}&lt;br /&gt;
 = &lt;br /&gt;
 \begin{bmatrix}&lt;br /&gt;
 1 &amp;amp; x_1 \\&lt;br /&gt;
 1 &amp;amp; x_2 \\&lt;br /&gt;
 \end{bmatrix}&lt;br /&gt;
 \begin{bmatrix}&lt;br /&gt;
 a_1 \\&lt;br /&gt;
 a_2 \\&lt;br /&gt;
 \end{bmatrix}&lt;br /&gt;
 &amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Portanto:&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
a_1 = \frac{1}{L} (V_1 x_2 - V_2 x_2)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
a_2 = \frac{1}{L} (V_1 - V_2)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Substituindo os valores de &amp;lt;math&amp;gt; a_1 &amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt; a_2 &amp;lt;/math&amp;gt; na equação de interpolação anterior &amp;lt;math&amp;gt; V(x) = a_1 + a_2 x  &amp;lt;/math&amp;gt; ficaremos com:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
V(x) = \frac{1}{L} [V_1 x_2 - V_2 x_1 + (V_2 - V_1) x]&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ou, como é definido a aproximação nodal:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
V(x) = \frac{(x_2 - x)}{L} V_1 + \frac{(x - x_1)}{L} V_2&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Esta fica conhecida por aproximação nodal pois a grandeza &amp;lt;math&amp;gt; V(x) &amp;lt;/math&amp;gt; pode ser obtida em qualquer ponto do intervalo &amp;lt;math&amp;gt; [x_1, x_2] &amp;lt;/math&amp;gt; a partir dos valores &amp;lt;math&amp;gt; V_1 &amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt; V_2 &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===== Função Interpolação =====&lt;br /&gt;
&lt;br /&gt;
Esta aproximação nodal pode ainda ser reescrita como:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
V(x) = \phi_1{(x)}V_1 + \phi_2{(x)}V_2&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Com: &lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\phi_1{(x)} = \frac{x_2 - x}{L}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
e &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\phi_2{(x)} = \frac{x - x_1}{L}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
sendo &amp;lt;math&amp;gt; L = x_2 - x_1 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As funções &amp;lt;math&amp;gt;\phi_1{(x)}&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;\phi_2{(x)}&amp;lt;/math&amp;gt; são conhecidas como &#039;&#039;&#039;funções de interpolação&#039;&#039;&#039; e são responsáveis por fazer com que cada nó do elemento contribua com uma parte do valor resultante em qualquer ponto dentro do elemento.&lt;br /&gt;
&lt;br /&gt;
E devido a propriedade do  delta de Kronecker, vista abaixo, é garantido que as equações só terão valor entre os nós dentro do elemento que são definidos:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\phi_i{(x_j)} =\left\{\begin{array}{lc} 1, \quad \text{se}\quad i=j\\&lt;br /&gt;
0, \quad \text{se} \quad i \ne j \end{array}\right.&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Então, por exemplo, nossa equação para o elemento 1, no caso visto aqui de 1D, para um problema  de tensão, fica:&lt;br /&gt;
&lt;br /&gt;
Elemento 1:&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
V^{(1)} (x) = \phi_1^{(1)}(x) V_1 \phi_2^{(1)}(x) V_2&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Com:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\phi_1^{(1)}{(x)} = \frac{x_2 - x}{x_2 - x_1}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
e&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\phi_2^{(1)}{(x)} = \frac{x - x_1}{x_2 - x_1}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Fica fácil perceber que os valores nodais dos dois nós se interpolam e contribuem para os valores entre para o resultado.&lt;br /&gt;
&lt;br /&gt;
A notação geral da função interpolação fica:&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\phi_i^{(e)} (x)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Em que: &amp;lt;math&amp;gt; (e) = elemento &amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt; i = nó &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As funções são diferentes para cada elemento e elas são nulas fora do elemento a que pertencem.&lt;br /&gt;
&lt;br /&gt;
Também existem a função chapéu, que é outro tipo de interpolação.&lt;br /&gt;
&lt;br /&gt;
==== Solução Global ====&lt;br /&gt;
&lt;br /&gt;
Seguindo com o caso do problema de tensão elétrica, a solução global será dada pelo somatório das funções de interpolação de cada elemento.&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
V_ex (x) \cong V(x) - \sum_{e=1}^{N_{elem}} V^{(e)} (x)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Até aqui nós chegamos a essa equação partindo da premissa que temos os valores nodais, fizemos isso apenas para explicar como os valores nodas e suas interpolações se comportam na malha.&lt;br /&gt;
&lt;br /&gt;
Porém os valores nodais são as nossas incógnitas e são eles quem queremos descobrir, a interpolação será a predição dos valores entre os valores nodais.&lt;br /&gt;
&lt;br /&gt;
Como visto, no MEF cada elemento terá suas próprias equações baseadas nos seus valores nodais e nas coordenadas destes valores. Para de fato introduzir o problema físico precisamos da forma fraca dele, já que é a partir da forma fraca que chegaremos no sistema de equações que nos permite obter os valores nodais&lt;br /&gt;
&lt;br /&gt;
===== Forma Fraca =====&lt;br /&gt;
&lt;br /&gt;
Quando se tem uma problema envolvendo um operador diferencial, é possível usar o que se conhece por forma fraca do operador, que nada mais é que a representação integral do problema, a qual já engloba/explicita as condições de contorno e utiliza-se o método de resíduos ponderados para isso.&lt;br /&gt;
&lt;br /&gt;
Para a construção da forma fraca nós podemos escolher uma função arbitrária w(x) e multiplicá-la pela forma forte, que é a equação diferencial original que descreve o problema, e pela condição de contorno em x=0. Em sequência nós integramos ambas dentro do domínio onde elas foram definidas. Como w(x) é uma função arbitrária que pode ser qualquer função, ela força a solução, já que qualquer coisa multiplicada por ela tem que ser 0.&lt;br /&gt;
Para entender esse método, nós podemos olhar o problema de uma barra elástica carregada axialmente.&lt;br /&gt;
&lt;br /&gt;
Considerando que a barra está em equilíbrio, nós podemos representar a relação entre as forças internas p(x) e as externas b(x) por essa equação&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
-p(x) + b (x + \frac{\Delta x}{2}) \Delta_x + p(x + \Delta_x) = 0&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Reorganizando e tomando o limite quando &amp;lt;math&amp;gt;\Delta_x&amp;lt;/math&amp;gt; tende a 0 nós chegamos em uma equação diferencial para descrever esse problema.&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
\frac{p(x + \Delta_x) - p(x)}{Delta_x} + b (x + \frac{\Delta_x}{2}) = 0&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
No entanto, ela está em termos das forças internas, para reescrever isso, basta lembrar que a tensão é definida como a força pela área da seção transversal e, pela lei de tensão deformação para um material elástico linear, nós temos que&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\sigma = E_(x) \varepsilon_(x)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
onde E é o módulo de young e épsilon é a deformação, definida como&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\varepsilon_(x)= \frac{u(x + \Delta_x) - u(x)}{\Delta_x}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Então, lembrando também da definição de derivada, eu posso reescrever a equação para esse problema como&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\frac{d}{dx} (AE \frac{du}{dx}) +b = 0&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
E, para resolver essa equação, precisamos das condições de contorno, as quais podemos tomar como sendo&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\sigma(0) = (E \frac{du}{dx})_{x=0} = \frac{p(0)}{A(0)} \equiv \tau&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
relembrando que u(x) é a função que representa o deslocamento do corpo, ou seja, a deformação.&lt;br /&gt;
Agora, para obter a forma fraca, eu multiplico e integro a equação diferencial e a condição de contorno que diz respeito a tensão&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\frac{\partial{F^(e)}}{\partial{V_n}} = \frac{\partial}{\partial V_n} \int_{e}^{} \frac{1}{2} \varepsilon^(e) E^2 d\Omega&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aqui vale notar que a integral da condição de contorno foi substituída pela multiplicação pela área, já que o domínio dessa condição de contorno é a área da seção transversal mas só em x=0, ou seja, ela age só em um ponto&lt;br /&gt;
Agora, utilizando a definição de integração por partes, eu consigo escrever&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\frac{\partial{F^(e)}}{\partial{V_n}} = \frac{\partial}{\partial V_n} [ \frac{1}{2} \varepsilon^(e) E^2 \int_{e} d\Omega] = \frac{1}{2} \varepsilon^(e) \frac{D \partial{E^2}}{2 \partial{V_n}}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Olhando pra esse termo e para a equação da condição de contorno mostrada anteriormente e lembrando da definição de sigma, eu vejo que eu posso reescrever essa equação integral como&lt;br /&gt;
&lt;br /&gt;
QUINTA EQ DO SLIDE&lt;br /&gt;
&lt;br /&gt;
que é a forma fraca da equação diferencial que descreve o nosso problema&lt;br /&gt;
&lt;br /&gt;
Qualquer solução que satisfizer a forma fraca, com w(l)=0 e u(l)= \tau também será solução da equação diferencial original do nosso problema&lt;br /&gt;
&lt;br /&gt;
Alternativamente, podemos encontrar a forma fraca através da minimização de um funcional, um método chamado de Método Variacional, dentro de um espaço de funções válido para o nosso problema e suas condições de contorno. A obtenção desse funcional não é um processo trivial, mas quando se trata de problemas físicos, esse funcional coincide com a energia do sistema, sendo, por exemplo, a energia potencial elástica do sólido para problemas de mecânica dos sólidos e a energia eletrostática armazenada na região de cálculo para problemas eletrostáticos sem carga livre no domínio de estudo. A função que minimiza essa energia é a solução do problema original. Como discretizamos o problema, devemos minimizar o funcional com relação a cada nó. Se eu tenho 10 nós vou ter 10 equações (derivadas igualadas a 0) para minimizar o funcional nos 10 nós.&lt;br /&gt;
&lt;br /&gt;
Usando o problema eletrostático para exemplificar o Método Variacional:&lt;br /&gt;
&lt;br /&gt;
Obtém-se uma equação funcional associada à energia do sistema&lt;br /&gt;
A equação que rege o problema eletrostático é a equação de laplace, e em um problema 2D fica:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\frac{\partial^2 {V}}{\partial x^2} + \frac{\partial^2 {V}}{\partial y^2} = 0&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\nabla . \vec{D} = \rho&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\vec{E} = - \nabla V&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\vec{D} = \epsilon \vec{E}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\nabla ^2 V = - \frac{\rho}{\epsilon}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\nabla ^2 V = 0&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
F = \int_{\omega} \frac{1}{2} E^2 d\omega&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pelo método variacional, eu satisfaço a equação de laplace quando a energia armazenada no sistema, que é o meu funcional, forma mínima. Como analisamos elemento por elemento, podemos dizer que o funcional vai ser constante dentro de um elemento, e tem que ser minimizado &lt;br /&gt;
dentro desse elemento, para tal, eu minimizo o funcional com relação a cada nó do elemento, o que me leva a um conjunto de equações que podemos organizar no que se conhece como matriz elementar, se eu tenho 3 nós em cada elemento vou ter uma matriz 3 por 3.&lt;br /&gt;
Podemos escrever a derivada total do funcional como a soma da derivada em cada elemento, onde F^E é o valor do funcional em cada elemento&lt;br /&gt;
&lt;br /&gt;
EQ 2 DO SLIDE&lt;br /&gt;
&lt;br /&gt;
onde,&lt;br /&gt;
&lt;br /&gt;
EQ 3 DO SLIDE&lt;br /&gt;
&lt;br /&gt;
Se consideramos a permissividade e o campo elétrico constante em cada elemento, eles podem sair da integral. A integral de ÔMEGA no elemento é a área do elemento, que é o determinante dividido por 2, com isso, obtemos que:&lt;br /&gt;
&lt;br /&gt;
EQ 4 DO SLIDE&lt;br /&gt;
&lt;br /&gt;
utilizando elementos triangulares e interpolação linear 2D, podemos escrever a derivada segunda do campo elétrico como:&lt;br /&gt;
&lt;br /&gt;
ÚLTIMA EQ DO SLIDE&lt;br /&gt;
 &lt;br /&gt;
Com isso, eu posso escrever a matriz elementar como:&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:Matriz elementar.png|400px|thumb|center|]] &lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
C_{ij} = \frac{\epsilon}{2Det} (q_i q_j + r_i r_j)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mas eu preciso minimizar o funcional em todos os elementos, então a contribuição de cada elemento deve ser inserida na matriz global - MXM - sendo M o número de nós. Na matriz global nós somamos os termos dos nós que se interseccionam em diferentes elementos. É preciso de duas condições de contorno (valores para 2 nós), substituindo elas na matriz global eu consigo calcular os valores para os nós que eu desconheço. Depois de resolver os valores para os nós, eu consigo determinar a solução em qualquer ponto do domínio.&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:Contribuição elemento.png|400px|thumb|center|]] &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Um exemplo de como ficaria a matriz global e seus elementos para uma determinada malha:&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:Matrizglobal.png|400px|thumb|center|]] &lt;br /&gt;
&lt;br /&gt;
Por fim tendo a matriz global determinada e com as condições de contorno aplicadas, sua resolução trará enfim a solução do problema pelo método de elementos finitos.&lt;br /&gt;
&lt;br /&gt;
=== Programas CAE ===&lt;br /&gt;
&lt;br /&gt;
Na engenharia este método é largamente aplicado, porém raramente utilizado desta forma, criando a matriz manualmente e os programas para solução do método. Existem programas que estão a décadas sendo aperfeiçoados, alguns proprietários como o CONSOL, e outros livres como OpenFOAM, Calcuix, ElmerFEM, entre outros.&lt;br /&gt;
&lt;br /&gt;
A implementação do MEF em projetos costuma seguir um workflow assim: &lt;br /&gt;
&lt;br /&gt;
# Desenho do modelo 3D que deseja estudar.&lt;br /&gt;
# Transformar este modelo em uma malha, no formato que os programas de elementos finitos reconhecem.&lt;br /&gt;
# Indicar o problema físico a ser estudado e suas condições iniciais aplicadas ao modelo 3D.&lt;br /&gt;
# Rodar o programa adequado para o problema.&lt;br /&gt;
# Utilizar de programas para examinar os resultados.&lt;br /&gt;
&lt;br /&gt;
Como pode-se ver no diagrama abaixo também:&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:FEM Workbench workflow.png|400px|thumb|center| Workflow no FreeCAD - https://wiki.freecadweb.org/FEM_Workbench]]&lt;/div&gt;</summary>
		<author><name>Renanrs</name></author>
	</entry>
	<entry>
		<id>http://fiscomp.if.ufrgs.br/index.php?title=M%C3%A9todo_de_Elementos_Finitos&amp;diff=6029</id>
		<title>Método de Elementos Finitos</title>
		<link rel="alternate" type="text/html" href="http://fiscomp.if.ufrgs.br/index.php?title=M%C3%A9todo_de_Elementos_Finitos&amp;diff=6029"/>
		<updated>2021-10-22T19:43:51Z</updated>

		<summary type="html">&lt;p&gt;Renanrs: /* Forma Fraca */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Em construção - as referencias e imagens ainda estão faltando&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Grupo: Antônio Carlan, Gabriela Pereira, Renan Soares e Victor Gandara&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Objetivo:&#039;&#039;&#039; Apresentar uma introdução do Método de Elementos Finitos, abordando seu funcionamento e demonstrando suas etapas através de um exemplo, demonstrando seu potencial e o que o diferencia de outros métodos estudados nas cadeiras de métodos computacionais até então vistos.&lt;br /&gt;
&lt;br /&gt;
= Introdução ao Método de Elementos Finitos(MEF) =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Aplicação ===&lt;br /&gt;
 &lt;br /&gt;
Este é um método numérico de resolução aproximada para problemas de valores sobre contorno em equações diferenciais. É largamente utilizado na industrial para o desenvolvimento de novas tecnologias e produtos, pode ser utilizado tanto no processo de desenvolvimento quanto de otimização, através da simulação da física de situações em que se espera que o projeto atue.&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:FAE visualization.jpg|400px|thumb|center| Simulação de deformação de um veiculo https://en.wikipedia.org/wiki/Finite_element_method]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
O que torna este método diferente é a forma com que ele discretiza e faz suas aproximações. Sua discretização é feita na geometria, ou seja, repartindo o objeto em diversos elementos menores. Desta forma é possível que se resolva problemas em geometrias complexas cuja solução analítica é desconhecida e que seriam muito difíceis com outros métodos. Também permite trabalhar de maneira simples com materiais compostos, ou de diferentes densidades em um objeto, uma vez que podemos definir tais propriedades individualmente para cada elemento.&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:Exemplo inicio .png|400px|thumb|center| Modelo normal e modelo discretizado e representado por uma malha e simulação de estresse sofrido no objeto.]]&lt;br /&gt;
&lt;br /&gt;
=== O Método ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;q&amp;gt; O conceito fundamental do MEF é a aproximação de uma quantidade continua(p. ex., tensão elétrica, temperatura, etc.) através de um modelo discreto composto por um conjunto de funções simples que são definidas em um número finito de subdomínios(elementos)&amp;lt;/q&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A resolução de um problema através do MEF envolve quatro etapas principais:&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;Discretização da região:&#039;&#039;&#039; Transformar o objeto de estudo em vários elementos menores que juntos formam o objeto original de forma aproximada e a isso chama-se &#039;&#039;&#039;Malha&#039;&#039;&#039;.&lt;br /&gt;
# &#039;&#039;&#039;Aproximação da solução:&#039;&#039;&#039; Obtenção das equações correspondentes de cada elemento, através de interpolação polinomial.&lt;br /&gt;
# &#039;&#039;&#039;Montagem do sistema global:&#039;&#039;&#039; Juntar os elementos e suas equações em uma matriz que fornecerá a solução global.&lt;br /&gt;
# &#039;&#039;&#039;Resolução do sistema:&#039;&#039;&#039; Resolver a matriz gerada para obter a solução aproximada do problema.&lt;br /&gt;
&lt;br /&gt;
==== Discretização: A Malha ====&lt;br /&gt;
&lt;br /&gt;
A malha define o domínio do problema, ela é a base do método. Porém não é parte do algoritmo em si. Normalmente é criada automaticamente por um programa especifico para isso, como GMSH e NetGen. Apenas sendo fornecida as especificações que se deseja para a malha, vão influenciar na quantidade de nós, na dimensão do domínio e na precisão da aproximação.&lt;br /&gt;
&lt;br /&gt;
Ela é composta por um conjunto de pontos interligados que descrevem o objeto. Estes pontos são chamados de &#039;&#039;&#039;nós&#039;&#039;&#039; e a união destes nós forma um elemento, e a união destes elementos formam o objeto que é nosso domínio.&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:Nos.png|400px|thumb|center| Malha composta por elementos que são compostos por nós.]]&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;Dimensão:&#039;&#039;&#039; A malha pode ser unidimensional, bidimensional ou tridimensional.&lt;br /&gt;
[[Arquivo:Print slide 5.png|400px|thumb|center| Malha composta por elementos que são compostos por nós.]]&lt;br /&gt;
# &#039;&#039;&#039;Ordem:&#039;&#039;&#039; Quanto maior a ordem da malha mais precisa será a aproximação dos resultados entre os nós, porém aumenta o consumo computacional.&lt;br /&gt;
# &#039;&#039;&#039;Densidade de elementos:&#039;&#039;&#039; Pode-se escolher por gerar uma malha mais ou menos detalhada, isso implica no consumo computacional. Quanto mais detalhada a malha, ou seja, quanto maior o numero de nós da malha, menor será o erro de aproximação do problema real.&lt;br /&gt;
[[Arquivo:Densidade de malha.png|400px|thumb|center| Discretização de uma área utilizando o software GMSH com diferentes padrões gerando duas malhas com diferentes densidades de nós.]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Funcionamento do método ===&lt;br /&gt;
&lt;br /&gt;
Cada nó desta malha terá atribuída uma variável do problema físico que esta sendo implementado(o valor da grandeza contínua para aquele ponto), como Tensão Elétrica, Dilatação, Temperatura, etc. Esta variável é chamada &#039;&#039;&#039;Valor nodal&#039;&#039;&#039;, ela representa a solução da equação naquele ponto (Variáveis nodais = incógnitas ou graus de liberdade do problema).&lt;br /&gt;
[[Arquivo:Slide7.png|400px|thumb|center|]]&lt;br /&gt;
&lt;br /&gt;
Já a grandeza contínua é aproximada em cada elemento por um &#039;&#039;&#039;polinômio&#039;&#039;&#039; que é definido usando os valores nodais da grandeza. Ou seja, nós iremos descobrir os valores nodais dos nós e entre eles,os valores da grandeza contínua serão dados por uma aproximação polinomial.&lt;br /&gt;
&lt;br /&gt;
Lembrando que os elementos são formados pelos nós e que os valores nodais estão associado aos nós e não ao elemento diretamente.&lt;br /&gt;
&lt;br /&gt;
Então, cada elemento terá um polinômio que descreve a grandeza contínua na região entre os nós que formam este elemento, no caso de uma matriz com elementos de primeira ordem, será uma reta entre os valores nodais. Os polinômios são escolhidos/deduzidos de forma que a continuidade seja mantida na fronteira entre os elementos, utilizando os métodos matemáticos adequados para isso.&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Este polinômio resulta de um ajuste dos valores nodais para que se tenha uma boa aproximação da grandeza real, este ajuste é feito através da minimização de alguma grandeza associada ao problema.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==== Interpolação ====&lt;br /&gt;
&lt;br /&gt;
Os valores nodais, que são nossas incógnitas, precisam ser isolados e deixados em função das coordenadas dos nós, que possuímos através da malha de elementos finitos já gerada.&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:Slide9.png|400px|thumb|center|]] &lt;br /&gt;
 &lt;br /&gt;
&amp;lt;math&amp;gt; V_1 e V_2 &amp;lt;/math&amp;gt; -&amp;gt; valores nodais&lt;br /&gt;
&amp;lt;math&amp;gt; x_1 e x_2 &amp;lt;/math&amp;gt; -&amp;gt; coordenadas dos nós&lt;br /&gt;
&amp;lt;math&amp;gt; L = x_2 - x_1 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aproximação polinomial no caso da malha de primeira ordem: &lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
V(x) = a_1 + a_2 x &lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As variáveis a1 e a2 são coeficientes da interpolação, porém não as temos e não queremos deixa-las no calculo, para isso:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
V_1 = a_1 + a_2 x_1 &lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
V_2 = a_1 + a_2 x_2&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
logo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 \begin{bmatrix}&lt;br /&gt;
 V_1 \\&lt;br /&gt;
 V_2 \\&lt;br /&gt;
 \end{bmatrix}&lt;br /&gt;
 = &lt;br /&gt;
 \begin{bmatrix}&lt;br /&gt;
 1 &amp;amp; x_1 \\&lt;br /&gt;
 1 &amp;amp; x_2 \\&lt;br /&gt;
 \end{bmatrix}&lt;br /&gt;
 \begin{bmatrix}&lt;br /&gt;
 a_1 \\&lt;br /&gt;
 a_2 \\&lt;br /&gt;
 \end{bmatrix}&lt;br /&gt;
 &amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Portanto:&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
a_1 = \frac{1}{L} (V_1 x_2 - V_2 x_2)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
a_2 = \frac{1}{L} (V_1 - V_2)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Substituindo os valores de &amp;lt;math&amp;gt; a_1 &amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt; a_2 &amp;lt;/math&amp;gt; na equação de interpolação anterior &amp;lt;math&amp;gt; V(x) = a_1 + a_2 x  &amp;lt;/math&amp;gt; ficaremos com:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
V(x) = \frac{1}{L} [V_1 x_2 - V_2 x_1 + (V_2 - V_1) x]&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ou, como é definido a aproximação nodal:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
V(x) = \frac{(x_2 - x)}{L} V_1 + \frac{(x - x_1)}{L} V_2&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Esta fica conhecida por aproximação nodal pois a grandeza &amp;lt;math&amp;gt; V(x) &amp;lt;/math&amp;gt; pode ser obtida em qualquer ponto do intervalo &amp;lt;math&amp;gt; [x_1, x_2] &amp;lt;/math&amp;gt; a partir dos valores &amp;lt;math&amp;gt; V_1 &amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt; V_2 &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===== Função Interpolação =====&lt;br /&gt;
&lt;br /&gt;
Esta aproximação nodal pode ainda ser reescrita como:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
V(x) = \phi_1{(x)}V_1 + \phi_2{(x)}V_2&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Com: &lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\phi_1{(x)} = \frac{x_2 - x}{L}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
e &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\phi_2{(x)} = \frac{x - x_1}{L}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
sendo &amp;lt;math&amp;gt; L = x_2 - x_1 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As funções &amp;lt;math&amp;gt;\phi_1{(x)}&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;\phi_2{(x)}&amp;lt;/math&amp;gt; são conhecidas como &#039;&#039;&#039;funções de interpolação&#039;&#039;&#039; e são responsáveis por fazer com que cada nó do elemento contribua com uma parte do valor resultante em qualquer ponto dentro do elemento.&lt;br /&gt;
&lt;br /&gt;
E devido a propriedade do  delta de Kronecker, vista abaixo, é garantido que as equações só terão valor entre os nós dentro do elemento que são definidos:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\phi_i{(x_j)} =\left\{\begin{array}{lc} 1, \quad \text{se}\quad i=j\\&lt;br /&gt;
0, \quad \text{se} \quad i \ne j \end{array}\right.&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Então, por exemplo, nossa equação para o elemento 1, no caso visto aqui de 1D, para um problema  de tensão, fica:&lt;br /&gt;
&lt;br /&gt;
Elemento 1:&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
V^{(1)} (x) = \phi_1^{(1)}(x) V_1 \phi_2^{(1)}(x) V_2&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Com:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\phi_1^{(1)}{(x)} = \frac{x_2 - x}{x_2 - x_1}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
e&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\phi_2^{(1)}{(x)} = \frac{x - x_1}{x_2 - x_1}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Fica fácil perceber que os valores nodais dos dois nós se interpolam e contribuem para os valores entre para o resultado.&lt;br /&gt;
&lt;br /&gt;
A notação geral da função interpolação fica:&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\phi_i^{(e)} (x)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Em que: &amp;lt;math&amp;gt; (e) = elemento &amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt; i = nó &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As funções são diferentes para cada elemento e elas são nulas fora do elemento a que pertencem.&lt;br /&gt;
&lt;br /&gt;
Também existem a função chapéu, que é outro tipo de interpolação.&lt;br /&gt;
&lt;br /&gt;
==== Solução Global ====&lt;br /&gt;
&lt;br /&gt;
Seguindo com o caso do problema de tensão elétrica, a solução global será dada pelo somatório das funções de interpolação de cada elemento.&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
V_ex (x) \cong V(x) - \sum_{e=1}^{N_{elem}} V^{(e)} (x)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Até aqui nós chegamos a essa equação partindo da premissa que temos os valores nodais, fizemos isso apenas para explicar como os valores nodas e suas interpolações se comportam na malha.&lt;br /&gt;
&lt;br /&gt;
Porém os valores nodais são as nossas incógnitas e são eles quem queremos descobrir, a interpolação será a predição dos valores entre os valores nodais.&lt;br /&gt;
&lt;br /&gt;
Como visto, no MEF cada elemento terá suas próprias equações baseadas nos seus valores nodais e nas coordenadas destes valores. Para de fato introduzir o problema físico precisamos da forma fraca dele, já que é a partir da forma fraca que chegaremos no sistema de equações que nos permite obter os valores nodais&lt;br /&gt;
&lt;br /&gt;
===== Forma Fraca =====&lt;br /&gt;
&lt;br /&gt;
Quando se tem uma problema envolvendo um operador diferencial, é possível usar o que se conhece por forma fraca do operador, que nada mais é que a representação integral do problema, a qual já engloba/explicita as condições de contorno e utiliza-se o método de resíduos ponderados para isso.&lt;br /&gt;
&lt;br /&gt;
Para a construção da forma fraca nós podemos escolher uma função arbitrária w(x) e multiplicá-la pela forma forte, que é a equação diferencial original que descreve o problema, e pela condição de contorno em x=0. Em sequência nós integramos ambas dentro do domínio onde elas foram definidas. Como w(x) é uma função arbitrária que pode ser qualquer função, ela força a solução, já que qualquer coisa multiplicada por ela tem que ser 0.&lt;br /&gt;
Para entender esse método, nós podemos olhar o problema de uma barra elástica carregada axialmente.&lt;br /&gt;
&lt;br /&gt;
IMAGEM&lt;br /&gt;
&lt;br /&gt;
Considerando que a barra está em equilíbrio, nós podemos representar a relação entre as forças internas p(x) e as externas b(x) por essa equação&lt;br /&gt;
&lt;br /&gt;
PRIMEIRA EQ DO SLIDE&lt;br /&gt;
&lt;br /&gt;
Reorganizando e tomando o limite quando DELTAX tende a 0 nós chegamos em uma equação diferencial para descrever esse problema.&lt;br /&gt;
&lt;br /&gt;
SEGUNDA EQ DO SLIDE&lt;br /&gt;
&lt;br /&gt;
No entanto, ela está em termos das forças internas, para reescrever isso, basta lembrar que a tensão é definida como a força pela área da seção transversal e, pela lei de tensão deformação para um material elástico linear, nós temos que&lt;br /&gt;
&lt;br /&gt;
SIGMA = E*EPSILON&lt;br /&gt;
&lt;br /&gt;
onde E é o módulo de young e épsilon é a deformação, definida como&lt;br /&gt;
&lt;br /&gt;
EPISLON = NANANA&lt;br /&gt;
&lt;br /&gt;
Então, lembrando também da definição de derivada, eu posso reescrever a equação para esse problema como&lt;br /&gt;
&lt;br /&gt;
PRIMEIRA EQ SLIDE 2&lt;br /&gt;
&lt;br /&gt;
E, para resolver essa equação, precisamos das condições de contorno, as quais podemos tomar como sendo&lt;br /&gt;
&lt;br /&gt;
SEGUNDA EQ DO SLIDE 2&lt;br /&gt;
&lt;br /&gt;
relembrando que u(x) é a função que representa o deslocamento do corpo, ou seja, a deformação.&lt;br /&gt;
Agora, para obter a forma fraca, eu multiplico e integro a equação diferencial e a condição de contorno que diz respeito a tensão&lt;br /&gt;
&lt;br /&gt;
TERCEIRA EQ DO SLIDE&lt;br /&gt;
&lt;br /&gt;
Aqui vale notar que a integral da condição de contorno foi substituída pela multiplicação pela área, já que o domínio dessa condição de contorno é a área da seção transversal mas só em x=0, ou seja, ela age só em um ponto&lt;br /&gt;
Agora, utilizando a definição de integração por partes, eu consigo escrever&lt;br /&gt;
&lt;br /&gt;
QUARTA EQ DO SLIDE&lt;br /&gt;
&lt;br /&gt;
Olhando pra esse termo e para a equação da condição de contorno mostrada anteriormente e lembrando da definição de sigma, eu vejo que eu posso reescrever essa equação integral como&lt;br /&gt;
&lt;br /&gt;
QUINTA EQ DO SLIDE&lt;br /&gt;
&lt;br /&gt;
que é a forma fraca da equação diferencial que descreve o nosso problema&lt;br /&gt;
&lt;br /&gt;
Qualquer solução que satisfizer a forma fraca, com w(l)=0 e u(l)= UBARRA também será solução da equação diferencial original do nosso problema&lt;br /&gt;
&lt;br /&gt;
Alternativamente, podemos encontrar a forma fraca através da minimização de um funcional, um método chamado de Método Variacional, dentro de um espaço de funções válido para o nosso problema e suas condições de contorno. A obtenção desse funcional não é um processo trivial, mas quando se trata de problemas físicos, esse funcional coincide com a energia do sistema, sendo, por exemplo, a energia potencial elástica do sólido para problemas de mecânica dos sólidos e a energia eletrostática armazenada na região de cálculo para problemas eletrostáticos sem carga livre no domínio de estudo. A função que minimiza essa energia é a solução do problema original. Como discretizamos o problema, devemos minimizar o funcional com relação a cada nó. Se eu tenho 10 nós vou ter 10 equações (derivadas igualadas a 0) para minimizar o funcional nos 10 nós.&lt;br /&gt;
&lt;br /&gt;
Usando o problema eletrostático para exemplificar o Método Variacional:&lt;br /&gt;
&lt;br /&gt;
Obtém-se uma equação funcional associada à energia do sistema&lt;br /&gt;
A equação que rege o problema eletrostático é a equação de laplace, e em um problema 2D fica:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\frac{\partial^2 {V}}{\partial x^2} + \frac{\partial^2 {V}}{\partial y^2} = 0&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\nabla . \vec{D} = \rho&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\vec{E} = - \nabla V&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\vec{D} = \epsilon \vec{E}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\nabla ^2 V = - \frac{\rho}{\epsilon}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\nabla ^2 V = 0&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
F = \int_{\omega} \frac{1}{2} E^2 d\omega&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pelo método variacional, eu satisfaço a equação de laplace quando a energia armazenada no sistema, que é o meu funcional, for mínima. Como analisamos elemento por elemento, podemos dizer que o funcional vai ser constante dentro de um elemento, e tem que ser minimizado &lt;br /&gt;
dentro desse elemento, para tal, eu minimizo o funcional com relação a cada nó do elemento, o que me leva a um conjunto de equações que podemos organizar no que se conhece como matriz elementar, se eu tenho 3 nós em cada elemento vou ter uma matriz 3 por 3.&lt;br /&gt;
Podemos escrever a derivada total do funcional como a soma da derivada em cada elemento, onde F^E é o valor do funcional em cada elemento&lt;br /&gt;
&lt;br /&gt;
EQ 2 DO SLIDE&lt;br /&gt;
&lt;br /&gt;
onde,&lt;br /&gt;
&lt;br /&gt;
EQ 3 DO SLIDE&lt;br /&gt;
&lt;br /&gt;
Se consideramos a permissividade e o campo elétrico constante em cada elemento, eles podem sair da integral. A integral de ÔMEGA no elemento é a área do elemento, que é o determinante dividido por 2, com isso, obtemos que:&lt;br /&gt;
&lt;br /&gt;
EQ 4 DO SLIDE&lt;br /&gt;
&lt;br /&gt;
utilizando elementos triangulares e interpolação linear 2D, podemos escrever a derivada segunda do campo elétrico como:&lt;br /&gt;
&lt;br /&gt;
ÚLTIMA EQ DO SLIDE&lt;br /&gt;
 &lt;br /&gt;
Com isso, eu posso escrever a matriz elementar como:&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:Matriz elementar.png|400px|thumb|center|]] &lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
C_{ij} = \frac{\epsilon}{2Det} (q_i q_j + r_i r_j)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mas eu preciso minimizar o funcional em todos os elementos, então a contribuição de cada elemento deve ser inserida na matriz global - MXM - sendo M o número de nós. Na matriz global nós somamos os termos dos nós que se interseccionam em diferentes elementos. É preciso de duas condições de contorno (valores para 2 nós), substituindo elas na matriz global eu consigo calcular os valores para os nós que eu desconheço. Depois de resolver os valores para os nós, eu consigo determinar a solução em qualquer ponto do domínio.&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:Contribuição elemento.png|400px|thumb|center|]] &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Um exemplo de como ficaria a matriz global e seus elementos para uma determinada malha:&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:Matrizglobal.png|400px|thumb|center|]] &lt;br /&gt;
&lt;br /&gt;
Por fim tendo a matriz global determinada e com as condições de contorno aplicadas, sua resolução trará enfim a solução do problema pelo método de elementos finitos.&lt;br /&gt;
&lt;br /&gt;
=== Programas CAE ===&lt;br /&gt;
&lt;br /&gt;
Na engenharia este método é largamente aplicado, porém raramente utilizado desta forma, criando a matriz manualmente e os programas para solução do método. Existem programas que estão a décadas sendo aperfeiçoados, alguns proprietários como o CONSOL, e outros livres como OpenFOAM, Calcuix, ElmerFEM, entre outros.&lt;br /&gt;
&lt;br /&gt;
A implementação do MEF em projetos costuma seguir um workflow assim: &lt;br /&gt;
&lt;br /&gt;
# Desenho do modelo 3D que deseja estudar.&lt;br /&gt;
# Transformar este modelo em uma malha, no formato que os programas de elementos finitos reconhecem.&lt;br /&gt;
# Indicar o problema físico a ser estudado e suas condições iniciais aplicadas ao modelo 3D.&lt;br /&gt;
# Rodar o programa adequado para o problema.&lt;br /&gt;
# Utilizar de programas para examinar os resultados.&lt;br /&gt;
&lt;br /&gt;
Como pode-se ver no diagrama abaixo também:&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:FEM Workbench workflow.png|400px|thumb|center| Workflow no FreeCAD - https://wiki.freecadweb.org/FEM_Workbench]]&lt;/div&gt;</summary>
		<author><name>Renanrs</name></author>
	</entry>
	<entry>
		<id>http://fiscomp.if.ufrgs.br/index.php?title=M%C3%A9todo_de_Elementos_Finitos&amp;diff=6028</id>
		<title>Método de Elementos Finitos</title>
		<link rel="alternate" type="text/html" href="http://fiscomp.if.ufrgs.br/index.php?title=M%C3%A9todo_de_Elementos_Finitos&amp;diff=6028"/>
		<updated>2021-10-22T19:37:09Z</updated>

		<summary type="html">&lt;p&gt;Renanrs: /* Forma Fraca */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Em construção - as referencias e imagens ainda estão faltando&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Grupo: Antônio Carlan, Gabriela Pereira, Renan Soares e Victor Gandara&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Objetivo:&#039;&#039;&#039; Apresentar uma introdução do Método de Elementos Finitos, abordando seu funcionamento e demonstrando suas etapas através de um exemplo, demonstrando seu potencial e o que o diferencia de outros métodos estudados nas cadeiras de métodos computacionais até então vistos.&lt;br /&gt;
&lt;br /&gt;
= Introdução ao Método de Elementos Finitos(MEF) =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Aplicação ===&lt;br /&gt;
 &lt;br /&gt;
Este é um método numérico de resolução aproximada para problemas de valores sobre contorno em equações diferenciais. É largamente utilizado na industrial para o desenvolvimento de novas tecnologias e produtos, pode ser utilizado tanto no processo de desenvolvimento quanto de otimização, através da simulação da física de situações em que se espera que o projeto atue.&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:FAE visualization.jpg|400px|thumb|center| Simulação de deformação de um veiculo https://en.wikipedia.org/wiki/Finite_element_method]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
O que torna este método diferente é a forma com que ele discretiza e faz suas aproximações. Sua discretização é feita na geometria, ou seja, repartindo o objeto em diversos elementos menores. Desta forma é possível que se resolva problemas em geometrias complexas cuja solução analítica é desconhecida e que seriam muito difíceis com outros métodos. Também permite trabalhar de maneira simples com materiais compostos, ou de diferentes densidades em um objeto, uma vez que podemos definir tais propriedades individualmente para cada elemento.&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:Exemplo inicio .png|400px|thumb|center| Modelo normal e modelo discretizado e representado por uma malha e simulação de estresse sofrido no objeto.]]&lt;br /&gt;
&lt;br /&gt;
=== O Método ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;q&amp;gt; O conceito fundamental do MEF é a aproximação de uma quantidade continua(p. ex., tensão elétrica, temperatura, etc.) através de um modelo discreto composto por um conjunto de funções simples que são definidas em um número finito de subdomínios(elementos)&amp;lt;/q&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A resolução de um problema através do MEF envolve quatro etapas principais:&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;Discretização da região:&#039;&#039;&#039; Transformar o objeto de estudo em vários elementos menores que juntos formam o objeto original de forma aproximada e a isso chama-se &#039;&#039;&#039;Malha&#039;&#039;&#039;.&lt;br /&gt;
# &#039;&#039;&#039;Aproximação da solução:&#039;&#039;&#039; Obtenção das equações correspondentes de cada elemento, através de interpolação polinomial.&lt;br /&gt;
# &#039;&#039;&#039;Montagem do sistema global:&#039;&#039;&#039; Juntar os elementos e suas equações em uma matriz que fornecerá a solução global.&lt;br /&gt;
# &#039;&#039;&#039;Resolução do sistema:&#039;&#039;&#039; Resolver a matriz gerada para obter a solução aproximada do problema.&lt;br /&gt;
&lt;br /&gt;
==== Discretização: A Malha ====&lt;br /&gt;
&lt;br /&gt;
A malha define o domínio do problema, ela é a base do método. Porém não é parte do algoritmo em si. Normalmente é criada automaticamente por um programa especifico para isso, como GMSH e NetGen. Apenas sendo fornecida as especificações que se deseja para a malha, vão influenciar na quantidade de nós, na dimensão do domínio e na precisão da aproximação.&lt;br /&gt;
&lt;br /&gt;
Ela é composta por um conjunto de pontos interligados que descrevem o objeto. Estes pontos são chamados de &#039;&#039;&#039;nós&#039;&#039;&#039; e a união destes nós forma um elemento, e a união destes elementos formam o objeto que é nosso domínio.&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:Nos.png|400px|thumb|center| Malha composta por elementos que são compostos por nós.]]&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;Dimensão:&#039;&#039;&#039; A malha pode ser unidimensional, bidimensional ou tridimensional.&lt;br /&gt;
[[Arquivo:Print slide 5.png|400px|thumb|center| Malha composta por elementos que são compostos por nós.]]&lt;br /&gt;
# &#039;&#039;&#039;Ordem:&#039;&#039;&#039; Quanto maior a ordem da malha mais precisa será a aproximação dos resultados entre os nós, porém aumenta o consumo computacional.&lt;br /&gt;
# &#039;&#039;&#039;Densidade de elementos:&#039;&#039;&#039; Pode-se escolher por gerar uma malha mais ou menos detalhada, isso implica no consumo computacional. Quanto mais detalhada a malha, ou seja, quanto maior o numero de nós da malha, menor será o erro de aproximação do problema real.&lt;br /&gt;
[[Arquivo:Densidade de malha.png|400px|thumb|center| Discretização de uma área utilizando o software GMSH com diferentes padrões gerando duas malhas com diferentes densidades de nós.]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Funcionamento do método ===&lt;br /&gt;
&lt;br /&gt;
Cada nó desta malha terá atribuída uma variável do problema físico que esta sendo implementado(o valor da grandeza contínua para aquele ponto), como Tensão Elétrica, Dilatação, Temperatura, etc. Esta variável é chamada &#039;&#039;&#039;Valor nodal&#039;&#039;&#039;, ela representa a solução da equação naquele ponto (Variáveis nodais = incógnitas ou graus de liberdade do problema).&lt;br /&gt;
[[Arquivo:Slide7.png|400px|thumb|center|]]&lt;br /&gt;
&lt;br /&gt;
Já a grandeza contínua é aproximada em cada elemento por um &#039;&#039;&#039;polinômio&#039;&#039;&#039; que é definido usando os valores nodais da grandeza. Ou seja, nós iremos descobrir os valores nodais dos nós e entre eles,os valores da grandeza contínua serão dados por uma aproximação polinomial.&lt;br /&gt;
&lt;br /&gt;
Lembrando que os elementos são formados pelos nós e que os valores nodais estão associado aos nós e não ao elemento diretamente.&lt;br /&gt;
&lt;br /&gt;
Então, cada elemento terá um polinômio que descreve a grandeza contínua na região entre os nós que formam este elemento, no caso de uma matriz com elementos de primeira ordem, será uma reta entre os valores nodais. Os polinômios são escolhidos/deduzidos de forma que a continuidade seja mantida na fronteira entre os elementos, utilizando os métodos matemáticos adequados para isso.&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Este polinômio resulta de um ajuste dos valores nodais para que se tenha uma boa aproximação da grandeza real, este ajuste é feito através da minimização de alguma grandeza associada ao problema.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==== Interpolação ====&lt;br /&gt;
&lt;br /&gt;
Os valores nodais, que são nossas incógnitas, precisam ser isolados e deixados em função das coordenadas dos nós, que possuímos através da malha de elementos finitos já gerada.&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:Slide9.png|400px|thumb|center|]] &lt;br /&gt;
 &lt;br /&gt;
&amp;lt;math&amp;gt; V_1 e V_2 &amp;lt;/math&amp;gt; -&amp;gt; valores nodais&lt;br /&gt;
&amp;lt;math&amp;gt; x_1 e x_2 &amp;lt;/math&amp;gt; -&amp;gt; coordenadas dos nós&lt;br /&gt;
&amp;lt;math&amp;gt; L = x_2 - x_1 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aproximação polinomial no caso da malha de primeira ordem: &lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
V(x) = a_1 + a_2 x &lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As variáveis a1 e a2 são coeficientes da interpolação, porém não as temos e não queremos deixa-las no calculo, para isso:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
V_1 = a_1 + a_2 x_1 &lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
V_2 = a_1 + a_2 x_2&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
logo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 \begin{bmatrix}&lt;br /&gt;
 V_1 \\&lt;br /&gt;
 V_2 \\&lt;br /&gt;
 \end{bmatrix}&lt;br /&gt;
 = &lt;br /&gt;
 \begin{bmatrix}&lt;br /&gt;
 1 &amp;amp; x_1 \\&lt;br /&gt;
 1 &amp;amp; x_2 \\&lt;br /&gt;
 \end{bmatrix}&lt;br /&gt;
 \begin{bmatrix}&lt;br /&gt;
 a_1 \\&lt;br /&gt;
 a_2 \\&lt;br /&gt;
 \end{bmatrix}&lt;br /&gt;
 &amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Portanto:&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
a_1 = \frac{1}{L} (V_1 x_2 - V_2 x_2)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
a_2 = \frac{1}{L} (V_1 - V_2)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Substituindo os valores de &amp;lt;math&amp;gt; a_1 &amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt; a_2 &amp;lt;/math&amp;gt; na equação de interpolação anterior &amp;lt;math&amp;gt; V(x) = a_1 + a_2 x  &amp;lt;/math&amp;gt; ficaremos com:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
V(x) = \frac{1}{L} [V_1 x_2 - V_2 x_1 + (V_2 - V_1) x]&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ou, como é definido a aproximação nodal:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
V(x) = \frac{(x_2 - x)}{L} V_1 + \frac{(x - x_1)}{L} V_2&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Esta fica conhecida por aproximação nodal pois a grandeza &amp;lt;math&amp;gt; V(x) &amp;lt;/math&amp;gt; pode ser obtida em qualquer ponto do intervalo &amp;lt;math&amp;gt; [x_1, x_2] &amp;lt;/math&amp;gt; a partir dos valores &amp;lt;math&amp;gt; V_1 &amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt; V_2 &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===== Função Interpolação =====&lt;br /&gt;
&lt;br /&gt;
Esta aproximação nodal pode ainda ser reescrita como:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
V(x) = \phi_1{(x)}V_1 + \phi_2{(x)}V_2&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Com: &lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\phi_1{(x)} = \frac{x_2 - x}{L}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
e &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\phi_2{(x)} = \frac{x - x_1}{L}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
sendo &amp;lt;math&amp;gt; L = x_2 - x_1 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As funções &amp;lt;math&amp;gt;\phi_1{(x)}&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;\phi_2{(x)}&amp;lt;/math&amp;gt; são conhecidas como &#039;&#039;&#039;funções de interpolação&#039;&#039;&#039; e são responsáveis por fazer com que cada nó do elemento contribua com uma parte do valor resultante em qualquer ponto dentro do elemento.&lt;br /&gt;
&lt;br /&gt;
E devido a propriedade do  delta de Kronecker, vista abaixo, é garantido que as equações só terão valor entre os nós dentro do elemento que são definidos:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\phi_i{(x_j)} =\left\{\begin{array}{lc} 1, \quad \text{se}\quad i=j\\&lt;br /&gt;
0, \quad \text{se} \quad i \ne j \end{array}\right.&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Então, por exemplo, nossa equação para o elemento 1, no caso visto aqui de 1D, para um problema  de tensão, fica:&lt;br /&gt;
&lt;br /&gt;
Elemento 1:&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
V^{(1)} (x) = \phi_1^{(1)}(x) V_1 \phi_2^{(1)}(x) V_2&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Com:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\phi_1^{(1)}{(x)} = \frac{x_2 - x}{x_2 - x_1}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
e&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\phi_2^{(1)}{(x)} = \frac{x - x_1}{x_2 - x_1}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Fica fácil perceber que os valores nodais dos dois nós se interpolam e contribuem para os valores entre para o resultado.&lt;br /&gt;
&lt;br /&gt;
A notação geral da função interpolação fica:&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\phi_i^{(e)} (x)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Em que: &amp;lt;math&amp;gt; (e) = elemento &amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt; i = nó &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As funções são diferentes para cada elemento e elas são nulas fora do elemento a que pertencem.&lt;br /&gt;
&lt;br /&gt;
Também existem a função chapéu, que é outro tipo de interpolação.&lt;br /&gt;
&lt;br /&gt;
==== Solução Global ====&lt;br /&gt;
&lt;br /&gt;
Seguindo com o caso do problema de tensão elétrica, a solução global será dada pelo somatório das funções de interpolação de cada elemento.&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
V_ex (x) \cong V(x) - \sum_{e=1}^{N_{elem}} V^{(e)} (x)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Até aqui nós chegamos a essa equação partindo da premissa que temos os valores nodais, fizemos isso apenas para explicar como os valores nodas e suas interpolações se comportam na malha.&lt;br /&gt;
&lt;br /&gt;
Porém os valores nodais são as nossas incógnitas e são eles quem queremos descobrir, a interpolação será a predição dos valores entre os valores nodais.&lt;br /&gt;
&lt;br /&gt;
Como visto, no MEF cada elemento terá suas próprias equações baseadas nos seus valores nodais e nas coordenadas destes valores. Para de fato introduzir o problema físico precisamos da forma fraca dele, já que é a partir da forma fraca que chegaremos no sistema de equações que nos permite obter os valores nodais&lt;br /&gt;
&lt;br /&gt;
===== Forma Fraca =====&lt;br /&gt;
&lt;br /&gt;
Quando se tem uma problema envolvendo um operador diferencial, é possível usar o que se conhece por forma fraca do operador, que nada mais é que a representação integral do problema, a qual já engloba/explicita as condições de contorno e utiliza-se o método de resíduos ponderados para isso.&lt;br /&gt;
&lt;br /&gt;
Para a construção da forma fraca nós podemos escolher uma função arbitrária w(x) e multiplicá-la pela forma forte, que é a equação diferencial original que descreve o problema, e pela condição de contorno em x=0. Em sequência nós integramos ambas dentro do domínio onde elas foram definidas. Como w(x) é uma função arbitrária que pode ser qualquer função, ela força a solução, já que qualquer coisa multiplicada por ela tem que ser 0.&lt;br /&gt;
Para entender esse método, nós podemos olhar o problema de uma barra elástica carregada axialmente.&lt;br /&gt;
&lt;br /&gt;
IMAGEM&lt;br /&gt;
&lt;br /&gt;
Considerando que a barra está em equilíbrio, nós podemos representar a relação entre as forças internas p(x) e as externas b(x) por essa equação&lt;br /&gt;
&lt;br /&gt;
PRIMEIRA EQ DO SLIDE&lt;br /&gt;
&lt;br /&gt;
Reorganizando e tomando o limite quando DELTAX tende a 0 nós chegamos em uma equação diferencial para descrever esse problema.&lt;br /&gt;
&lt;br /&gt;
SEGUNDA EQ DO SLIDE&lt;br /&gt;
&lt;br /&gt;
No entanto, ela está em termos das forças internas, para reescrever isso, basta lembrar que a tensão é definida como a força pela área da seção transversal e, pela lei de tensão deformação para um material elástico linear, nós temos que&lt;br /&gt;
&lt;br /&gt;
SIGMA = E*EPSILON&lt;br /&gt;
&lt;br /&gt;
onde E é o módulo de young e épsilon é a deformação, definida como&lt;br /&gt;
&lt;br /&gt;
EPISLON = NANANA&lt;br /&gt;
&lt;br /&gt;
Então, eu posso reescrever a equação para esse problema como&lt;br /&gt;
&lt;br /&gt;
PRIMEIRA EQ SLIDE 2&lt;br /&gt;
&lt;br /&gt;
E, para resolver essa equação, precisamos das condições de contorno, as quais podemos tomar como sendo&lt;br /&gt;
&lt;br /&gt;
SEGUNDA EQ DO SLIDE 2&lt;br /&gt;
&lt;br /&gt;
relembrando que u(x) é a função que representa o deslocamento do corpo, ou seja, a deformação.&lt;br /&gt;
Agora, para obter a forma fraca, eu multiplico e integro a equação diferencial e a condição de contorno que diz respeito a tensão&lt;br /&gt;
&lt;br /&gt;
TERCEIRA EQ DO SLIDE&lt;br /&gt;
&lt;br /&gt;
Aqui vale notar que a integral da condição de contorno foi substituída pela multiplicação pela área, já que o domínio dessa condição de contorno é a área da seção transversal mas só em x=0, ou seja, ela age só em um ponto&lt;br /&gt;
Agora, utilizando a definição de integração por partes, eu consigo escrever&lt;br /&gt;
&lt;br /&gt;
QUARTA EQ DO SLIDE&lt;br /&gt;
&lt;br /&gt;
Olhando pra esse termo e para a equação da condição de contorno mostrada anteriormente e lembrando da definição de sigma, eu vejo que eu posso reescrever essa equação integral como&lt;br /&gt;
&lt;br /&gt;
QUINTA EQ DO SLIDE&lt;br /&gt;
&lt;br /&gt;
que é a forma fraca da equação diferencial que descreve o nosso problema&lt;br /&gt;
&lt;br /&gt;
Qualquer solução que satisfizer a forma fraca, com w(l)=0 e u(l)= UBARRA também será solução da equação diferencial original do nosso problema&lt;br /&gt;
&lt;br /&gt;
Alternativamente, podemos encontrar a forma fraca através da minimização de um funcional, um método chamado de Método Variacional, dentro de um espaço de funções válido para o nosso problema e suas condições de contorno. A obtenção desse funcional não é um processo trivial, mas quando se trata de problemas físicos, esse funcional coincide com a energia do sistema, sendo, por exemplo, a energia potencial elástica do sólido para problemas de mecânica dos sólidos e a energia eletrostática armazenada na região de cálculo para problemas eletrostáticos sem carga livre no domínio de estudo. A função que minimiza essa energia é a solução do problema original. Como discretizamos o problema, devemos minimizar o funcional com relação a cada nó. Se eu tenho 10 nós vou ter 10 equações (derivadas igualadas a 0) para minimizar o funcional nos 10 nós.&lt;br /&gt;
&lt;br /&gt;
Usando o problema eletrostático para exemplificar o Método Variacional:&lt;br /&gt;
&lt;br /&gt;
Obtém-se uma equação funcional associada à energia do sistema&lt;br /&gt;
A equação que rege o problema eletrostático é a equação de laplace, e em um problema 2D fica:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\frac{\partial^2 {V}}{\partial x^2} + \frac{\partial^2 {V}}{\partial y^2} = 0&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\nabla . \vec{D} = \rho&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\vec{E} = - \nabla V&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\vec{D} = \epsilon \vec{E}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\nabla ^2 V = - \frac{\rho}{\epsilon}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\nabla ^2 V = 0&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
F = \int_{\omega} \frac{1}{2} E^2 d\omega&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pelo método variacional, eu satisfaço a equação de laplace quando a energia armazenada no sistema, que é o meu funcional, for mínima. Como analisamos elemento por elemento, podemos dizer que o funcional vai ser constante dentro de um elemento, e tem que ser minimizado &lt;br /&gt;
dentro desse elemento, para tal, eu minimizo o funcional com relação a cada nó do elemento, o que me leva a um conjunto de equações que podemos organizar no que se conhece como matriz elementar, se eu tenho 3 nós em cada elemento vou ter uma matriz 3 por 3.&lt;br /&gt;
Podemos escrever a derivada total do funcional como a soma da derivada em cada elemento, onde F^E é o valor do funcional em cada elemento&lt;br /&gt;
&lt;br /&gt;
EQ 2 DO SLIDE&lt;br /&gt;
&lt;br /&gt;
onde,&lt;br /&gt;
&lt;br /&gt;
EQ 3 DO SLIDE&lt;br /&gt;
&lt;br /&gt;
Se consideramos a permissividade e o campo elétrico constante em cada elemento, eles podem sair da integral. A integral de ÔMEGA no elemento é a área do elemento, que é o determinante dividido por 2, com isso, obtemos que:&lt;br /&gt;
&lt;br /&gt;
EQ 4 DO SLIDE&lt;br /&gt;
&lt;br /&gt;
utilizando elementos triangulares e interpolação linear 2D, podemos escrever a derivada segunda do campo elétrico como:&lt;br /&gt;
&lt;br /&gt;
ÚLTIMA EQ DO SLIDE&lt;br /&gt;
 &lt;br /&gt;
Com isso, eu posso escrever a matriz elementar como:&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:Matriz elementar.png|400px|thumb|center|]] &lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
C_{ij} = \frac{\epsilon}{2Det} (q_i q_j + r_i r_j)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mas eu preciso minimizar o funcional em todos os elementos, então a contribuição de cada elemento deve ser inserida na matriz global - MXM - sendo M o número de nós. Na matriz global nós somamos os termos dos nós que se interseccionam em diferentes elementos. É preciso de duas condições de contorno (valores para 2 nós), substituindo elas na matriz global eu consigo calcular os valores para os nós que eu desconheço. Depois de resolver os valores para os nós, eu consigo determinar a solução em qualquer ponto do domínio.&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:Contribuição elemento.png|400px|thumb|center|]] &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Um exemplo de como ficaria a matriz global e seus elementos para uma determinada malha:&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:Matrizglobal.png|400px|thumb|center|]] &lt;br /&gt;
&lt;br /&gt;
Por fim tendo a matriz global determinada e com as condições de contorno aplicadas, sua resolução trará enfim a solução do problema pelo método de elementos finitos.&lt;br /&gt;
&lt;br /&gt;
=== Programas CAE ===&lt;br /&gt;
&lt;br /&gt;
Na engenharia este método é largamente aplicado, porém raramente utilizado desta forma, criando a matriz manualmente e os programas para solução do método. Existem programas que estão a décadas sendo aperfeiçoados, alguns proprietários como o CONSOL, e outros livres como OpenFOAM, Calcuix, ElmerFEM, entre outros.&lt;br /&gt;
&lt;br /&gt;
A implementação do MEF em projetos costuma seguir um workflow assim: &lt;br /&gt;
&lt;br /&gt;
# Desenho do modelo 3D que deseja estudar.&lt;br /&gt;
# Transformar este modelo em uma malha, no formato que os programas de elementos finitos reconhecem.&lt;br /&gt;
# Indicar o problema físico a ser estudado e suas condições iniciais aplicadas ao modelo 3D.&lt;br /&gt;
# Rodar o programa adequado para o problema.&lt;br /&gt;
# Utilizar de programas para examinar os resultados.&lt;br /&gt;
&lt;br /&gt;
Como pode-se ver no diagrama abaixo também:&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:FEM Workbench workflow.png|400px|thumb|center| Workflow no FreeCAD - https://wiki.freecadweb.org/FEM_Workbench]]&lt;/div&gt;</summary>
		<author><name>Renanrs</name></author>
	</entry>
	<entry>
		<id>http://fiscomp.if.ufrgs.br/index.php?title=M%C3%A9todo_de_Elementos_Finitos&amp;diff=6027</id>
		<title>Método de Elementos Finitos</title>
		<link rel="alternate" type="text/html" href="http://fiscomp.if.ufrgs.br/index.php?title=M%C3%A9todo_de_Elementos_Finitos&amp;diff=6027"/>
		<updated>2021-10-22T19:17:05Z</updated>

		<summary type="html">&lt;p&gt;Renanrs: /* Solução Global */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Em construção - as referencias e imagens ainda estão faltando&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Grupo: Antônio Carlan, Gabriela Pereira, Renan Soares e Victor Gandara&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Objetivo:&#039;&#039;&#039; Apresentar uma introdução do Método de Elementos Finitos, abordando seu funcionamento e demonstrando suas etapas através de um exemplo, demonstrando seu potencial e o que o diferencia de outros métodos estudados nas cadeiras de métodos computacionais até então vistos.&lt;br /&gt;
&lt;br /&gt;
= Introdução ao Método de Elementos Finitos(MEF) =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Aplicação ===&lt;br /&gt;
 &lt;br /&gt;
Este é um método numérico de resolução aproximada para problemas de valores sobre contorno em equações diferenciais. É largamente utilizado na industrial para o desenvolvimento de novas tecnologias e produtos, pode ser utilizado tanto no processo de desenvolvimento quanto de otimização, através da simulação da física de situações em que se espera que o projeto atue.&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:FAE visualization.jpg|400px|thumb|center| Simulação de deformação de um veiculo https://en.wikipedia.org/wiki/Finite_element_method]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
O que torna este método diferente é a forma com que ele discretiza e faz suas aproximações. Sua discretização é feita na geometria, ou seja, repartindo o objeto em diversos elementos menores. Desta forma é possível que se resolva problemas em geometrias complexas cuja solução analítica é desconhecida e que seriam muito difíceis com outros métodos. Também permite trabalhar de maneira simples com materiais compostos, ou de diferentes densidades em um objeto, uma vez que podemos definir tais propriedades individualmente para cada elemento.&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:Exemplo inicio .png|400px|thumb|center| Modelo normal e modelo discretizado e representado por uma malha e simulação de estresse sofrido no objeto.]]&lt;br /&gt;
&lt;br /&gt;
=== O Método ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;q&amp;gt; O conceito fundamental do MEF é a aproximação de uma quantidade continua(p. ex., tensão elétrica, temperatura, etc.) através de um modelo discreto composto por um conjunto de funções simples que são definidas em um número finito de subdomínios(elementos)&amp;lt;/q&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A resolução de um problema através do MEF envolve quatro etapas principais:&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;Discretização da região:&#039;&#039;&#039; Transformar o objeto de estudo em vários elementos menores que juntos formam o objeto original de forma aproximada e a isso chama-se &#039;&#039;&#039;Malha&#039;&#039;&#039;.&lt;br /&gt;
# &#039;&#039;&#039;Aproximação da solução:&#039;&#039;&#039; Obtenção das equações correspondentes de cada elemento, através de interpolação polinomial.&lt;br /&gt;
# &#039;&#039;&#039;Montagem do sistema global:&#039;&#039;&#039; Juntar os elementos e suas equações em uma matriz que fornecerá a solução global.&lt;br /&gt;
# &#039;&#039;&#039;Resolução do sistema:&#039;&#039;&#039; Resolver a matriz gerada para obter a solução aproximada do problema.&lt;br /&gt;
&lt;br /&gt;
==== Discretização: A Malha ====&lt;br /&gt;
&lt;br /&gt;
A malha define o domínio do problema, ela é a base do método. Porém não é parte do algoritmo em si. Normalmente é criada automaticamente por um programa especifico para isso, como GMSH e NetGen. Apenas sendo fornecida as especificações que se deseja para a malha, vão influenciar na quantidade de nós, na dimensão do domínio e na precisão da aproximação.&lt;br /&gt;
&lt;br /&gt;
Ela é composta por um conjunto de pontos interligados que descrevem o objeto. Estes pontos são chamados de &#039;&#039;&#039;nós&#039;&#039;&#039; e a união destes nós forma um elemento, e a união destes elementos formam o objeto que é nosso domínio.&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:Nos.png|400px|thumb|center| Malha composta por elementos que são compostos por nós.]]&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;Dimensão:&#039;&#039;&#039; A malha pode ser unidimensional, bidimensional ou tridimensional.&lt;br /&gt;
[[Arquivo:Print slide 5.png|400px|thumb|center| Malha composta por elementos que são compostos por nós.]]&lt;br /&gt;
# &#039;&#039;&#039;Ordem:&#039;&#039;&#039; Quanto maior a ordem da malha mais precisa será a aproximação dos resultados entre os nós, porém aumenta o consumo computacional.&lt;br /&gt;
# &#039;&#039;&#039;Densidade de elementos:&#039;&#039;&#039; Pode-se escolher por gerar uma malha mais ou menos detalhada, isso implica no consumo computacional. Quanto mais detalhada a malha, ou seja, quanto maior o numero de nós da malha, menor será o erro de aproximação do problema real.&lt;br /&gt;
[[Arquivo:Densidade de malha.png|400px|thumb|center| Discretização de uma área utilizando o software GMSH com diferentes padrões gerando duas malhas com diferentes densidades de nós.]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Funcionamento do método ===&lt;br /&gt;
&lt;br /&gt;
Cada nó desta malha terá atribuída uma variável do problema físico que esta sendo implementado(o valor da grandeza contínua para aquele ponto), como Tensão Elétrica, Dilatação, Temperatura, etc. Esta variável é chamada &#039;&#039;&#039;Valor nodal&#039;&#039;&#039;, ela representa a solução da equação naquele ponto (Variáveis nodais = incógnitas ou graus de liberdade do problema).&lt;br /&gt;
[[Arquivo:Slide7.png|400px|thumb|center|]]&lt;br /&gt;
&lt;br /&gt;
Já a grandeza contínua é aproximada em cada elemento por um &#039;&#039;&#039;polinômio&#039;&#039;&#039; que é definido usando os valores nodais da grandeza. Ou seja, nós iremos descobrir os valores nodais dos nós e entre eles,os valores da grandeza contínua serão dados por uma aproximação polinomial.&lt;br /&gt;
&lt;br /&gt;
Lembrando que os elementos são formados pelos nós e que os valores nodais estão associado aos nós e não ao elemento diretamente.&lt;br /&gt;
&lt;br /&gt;
Então, cada elemento terá um polinômio que descreve a grandeza contínua na região entre os nós que formam este elemento, no caso de uma matriz com elementos de primeira ordem, será uma reta entre os valores nodais. Os polinômios são escolhidos/deduzidos de forma que a continuidade seja mantida na fronteira entre os elementos, utilizando os métodos matemáticos adequados para isso.&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Este polinômio resulta de um ajuste dos valores nodais para que se tenha uma boa aproximação da grandeza real, este ajuste é feito através da minimização de alguma grandeza associada ao problema.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==== Interpolação ====&lt;br /&gt;
&lt;br /&gt;
Os valores nodais, que são nossas incógnitas, precisam ser isolados e deixados em função das coordenadas dos nós, que possuímos através da malha de elementos finitos já gerada.&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:Slide9.png|400px|thumb|center|]] &lt;br /&gt;
 &lt;br /&gt;
&amp;lt;math&amp;gt; V_1 e V_2 &amp;lt;/math&amp;gt; -&amp;gt; valores nodais&lt;br /&gt;
&amp;lt;math&amp;gt; x_1 e x_2 &amp;lt;/math&amp;gt; -&amp;gt; coordenadas dos nós&lt;br /&gt;
&amp;lt;math&amp;gt; L = x_2 - x_1 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aproximação polinomial no caso da malha de primeira ordem: &lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
V(x) = a_1 + a_2 x &lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As variáveis a1 e a2 são coeficientes da interpolação, porém não as temos e não queremos deixa-las no calculo, para isso:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
V_1 = a_1 + a_2 x_1 &lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
V_2 = a_1 + a_2 x_2&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
logo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 \begin{bmatrix}&lt;br /&gt;
 V_1 \\&lt;br /&gt;
 V_2 \\&lt;br /&gt;
 \end{bmatrix}&lt;br /&gt;
 = &lt;br /&gt;
 \begin{bmatrix}&lt;br /&gt;
 1 &amp;amp; x_1 \\&lt;br /&gt;
 1 &amp;amp; x_2 \\&lt;br /&gt;
 \end{bmatrix}&lt;br /&gt;
 \begin{bmatrix}&lt;br /&gt;
 a_1 \\&lt;br /&gt;
 a_2 \\&lt;br /&gt;
 \end{bmatrix}&lt;br /&gt;
 &amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Portanto:&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
a_1 = \frac{1}{L} (V_1 x_2 - V_2 x_2)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
a_2 = \frac{1}{L} (V_1 - V_2)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Substituindo os valores de &amp;lt;math&amp;gt; a_1 &amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt; a_2 &amp;lt;/math&amp;gt; na equação de interpolação anterior &amp;lt;math&amp;gt; V(x) = a_1 + a_2 x  &amp;lt;/math&amp;gt; ficaremos com:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
V(x) = \frac{1}{L} [V_1 x_2 - V_2 x_1 + (V_2 - V_1) x]&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ou, como é definido a aproximação nodal:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
V(x) = \frac{(x_2 - x)}{L} V_1 + \frac{(x - x_1)}{L} V_2&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Esta fica conhecida por aproximação nodal pois a grandeza &amp;lt;math&amp;gt; V(x) &amp;lt;/math&amp;gt; pode ser obtida em qualquer ponto do intervalo &amp;lt;math&amp;gt; [x_1, x_2] &amp;lt;/math&amp;gt; a partir dos valores &amp;lt;math&amp;gt; V_1 &amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt; V_2 &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===== Função Interpolação =====&lt;br /&gt;
&lt;br /&gt;
Esta aproximação nodal pode ainda ser reescrita como:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
V(x) = \phi_1{(x)}V_1 + \phi_2{(x)}V_2&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Com: &lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\phi_1{(x)} = \frac{x_2 - x}{L}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
e &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\phi_2{(x)} = \frac{x - x_1}{L}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
sendo &amp;lt;math&amp;gt; L = x_2 - x_1 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As funções &amp;lt;math&amp;gt;\phi_1{(x)}&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;\phi_2{(x)}&amp;lt;/math&amp;gt; são conhecidas como &#039;&#039;&#039;funções de interpolação&#039;&#039;&#039; e são responsáveis por fazer com que cada nó do elemento contribua com uma parte do valor resultante em qualquer ponto dentro do elemento.&lt;br /&gt;
&lt;br /&gt;
E devido a propriedade do  delta de Kronecker, vista abaixo, é garantido que as equações só terão valor entre os nós dentro do elemento que são definidos:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\phi_i{(x_j)} =\left\{\begin{array}{lc} 1, \quad \text{se}\quad i=j\\&lt;br /&gt;
0, \quad \text{se} \quad i \ne j \end{array}\right.&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Então, por exemplo, nossa equação para o elemento 1, no caso visto aqui de 1D, para um problema  de tensão, fica:&lt;br /&gt;
&lt;br /&gt;
Elemento 1:&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
V^{(1)} (x) = \phi_1^{(1)}(x) V_1 \phi_2^{(1)}(x) V_2&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Com:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\phi_1^{(1)}{(x)} = \frac{x_2 - x}{x_2 - x_1}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
e&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\phi_2^{(1)}{(x)} = \frac{x - x_1}{x_2 - x_1}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Fica fácil perceber que os valores nodais dos dois nós se interpolam e contribuem para os valores entre para o resultado.&lt;br /&gt;
&lt;br /&gt;
A notação geral da função interpolação fica:&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\phi_i^{(e)} (x)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Em que: &amp;lt;math&amp;gt; (e) = elemento &amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt; i = nó &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As funções são diferentes para cada elemento e elas são nulas fora do elemento a que pertencem.&lt;br /&gt;
&lt;br /&gt;
Também existem a função chapéu, que é outro tipo de interpolação.&lt;br /&gt;
&lt;br /&gt;
==== Solução Global ====&lt;br /&gt;
&lt;br /&gt;
Seguindo com o caso do problema de tensão elétrica, a solução global será dada pelo somatório das funções de interpolação de cada elemento.&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
V_ex (x) \cong V(x) - \sum_{e=1}^{N_{elem}} V^{(e)} (x)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Até aqui nós chegamos a essa equação partindo da premissa que temos os valores nodais, fizemos isso apenas para explicar como os valores nodas e suas interpolações se comportam na malha.&lt;br /&gt;
&lt;br /&gt;
Porém os valores nodais são as nossas incógnitas e são eles quem queremos descobrir, a interpolação será a predição dos valores entre os valores nodais.&lt;br /&gt;
&lt;br /&gt;
Como visto, no MEF cada elemento terá suas próprias equações baseadas nos seus valores nodais e nas coordenadas destes valores. Para de fato introduzir o problema físico precisamos da forma fraca dele, já que é a partir da forma fraca que chegaremos no sistema de equações que nos permite obter os valores nodais&lt;br /&gt;
&lt;br /&gt;
===== Forma Fraca =====&lt;br /&gt;
&lt;br /&gt;
Quando se tem uma problema envolvendo um operador diferencial, é possível usar o que se conhece por forma fraca do operador, que nada mais é que a representação integral do problema, a qual já engloba/explicita as condições de contorno e utiliza-se o método de resíduos ponderados para isso.&lt;br /&gt;
&lt;br /&gt;
Para a construção da forma fraca nós podemos escolher uma função arbitrária w(x) e multiplicá-la pela forma forte, que é a equação diferencial original que descreve o problema, e pela condição de contorno em x=0. Em sequência nós integramos ambas dentro do domínio onde elas foram definidas. Como w(x) é uma função arbitrária que pode ser qualquer função, ela força a solução, já que qualquer coisa multiplicada por ela tem que ser 0.&lt;br /&gt;
Para entender esse método, nós podemos olhar o problema de uma barra elástica carregada axialmente.&lt;br /&gt;
&lt;br /&gt;
IMAGEM&lt;br /&gt;
&lt;br /&gt;
Considerando que a barra está em equilíbrio, nós podemos representar a relação entre as forças internas p(x) e as externas b(x) por essa equação&lt;br /&gt;
&lt;br /&gt;
PRIMEIRA EQ DO SLIDE&lt;br /&gt;
&lt;br /&gt;
Reorganizando e tomando o limite quando DELTAX tende a 0 nós chegamos em uma equação diferencial para descrever esse problema.&lt;br /&gt;
&lt;br /&gt;
SEGUNDA EQ DO SLIDE&lt;br /&gt;
&lt;br /&gt;
No entanto, ela está em termos das forças internas, para reescrever isso, basta lembrar que a tensão é definida como a força pela área da seção transversal e, pela lei de tensão deformação para um material elástico linear, nós temos que&lt;br /&gt;
&lt;br /&gt;
SIGMA = E*EPSILON&lt;br /&gt;
&lt;br /&gt;
onde E é o módulo de young e épsilon é a deformação, definida como&lt;br /&gt;
&lt;br /&gt;
EPISLON = NANANA&lt;br /&gt;
&lt;br /&gt;
Então, eu posso reescrever a equação para esse problema como&lt;br /&gt;
&lt;br /&gt;
PRIMEIRA EQ SLIDE 2&lt;br /&gt;
&lt;br /&gt;
E, para resolver essa equação, precisamos das condições de contorno, as quais podemos tomar como sendo&lt;br /&gt;
&lt;br /&gt;
SEGUNDA EQ DO SLIDE 2&lt;br /&gt;
&lt;br /&gt;
relembrando que u(x) é a função que representa o deslocamento do corpo, ou seja, a deformação.&lt;br /&gt;
Agora, para obter a forma fraca, eu multiplico e integro a equação diferencial e a condição de contorno que diz respeito a tensão&lt;br /&gt;
&lt;br /&gt;
TERCEIRA EQ DO SLIDE&lt;br /&gt;
&lt;br /&gt;
Aqui vale notar que a integral da condição de contorno foi substituída pela multiplicação pela área, já que o domínio dessa condição de contorno é a área da seção transversal mas só em x=0, ou seja, ela age só em um ponto&lt;br /&gt;
Agora, utilizando a definição de integração por partes, eu consigo escrever&lt;br /&gt;
&lt;br /&gt;
QUARTA EQ DO SLIDE&lt;br /&gt;
&lt;br /&gt;
Olhando pra esse termo e para a equação da condição de contorno mostrada anteriormente e lembrando da definição de sigma, eu vejo que eu posso reescrever essa equação integral como&lt;br /&gt;
&lt;br /&gt;
QUINTA EQ DO SLIDE&lt;br /&gt;
&lt;br /&gt;
que é a forma fraca da equação diferencial que descreve o nosso problema&lt;br /&gt;
&lt;br /&gt;
Qualquer solução que satisfizer a forma fraca, com w(0)=0 e u(l)= UBARRA também será solução da equação diferencial original do nosso problema&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Alternativamente, podemos encontrar a forma fraca através da minimização de um funcional, um método chamado de Método Variacional, dentro de um espaço de funções válido para o nosso problema e suas condições de contorno. A obtenção desse funcional não é um processo trivial, mas quando se trata de problemas físicos, esse funcional coincide com a energia do sistema, sendo, por exemplo, a energia potencial elástica do sólido para problemas de mecânica dos sólidos e a energia eletrostática armazenada na região de cálculo para problemas eletrostáticos (eq de laplace). A função que minimiza essa energia é a solução do problema original. Como discretizamos o problema, devemos minimizar o funcional com relação a cada nó. Se eu tenho 10 nós vou ter 10 eq (derivadas igualadas a 0) para minimizar o funcional nos 10 nós.&lt;br /&gt;
&lt;br /&gt;
Usando o problema eletrostático para exemplificar o Método Variacional:&lt;br /&gt;
&lt;br /&gt;
Obtém-se uma equação funcional associada à energia do sistema&lt;br /&gt;
A equação que rege o problema eletrostático é a equação de laplace, e em um problema 2D fica:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\frac{\partial^2 {V}}{\partial x^2} + \frac{\partial^2 {V}}{\partial y^2} = 0&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\nabla . \vec{D} = \rho&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\vec{E} = - \nabla V&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\vec{D} = \epsilon \vec{E}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\nabla ^2 V = - \frac{\rho}{\epsilon}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\nabla ^2 V = 0&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
F = \int_{\omega} \frac{1}{2} E^2 d\omega&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Como analisamos elemento por elemento, podemos dizer que o funcional vai ser constante dentro de um elemento, e tem que ser minimizado &lt;br /&gt;
dentro desse elemento, para tal, eu minimizo o funcional com relação a cada nó do elemento, o que me leva a um conjunto de equações que podemos organizar no que se conhece como matriz elementar, se eu tenho 3 nós em cada elemento vou ter uma matriz 3 por 3. &lt;br /&gt;
&lt;br /&gt;
[[Arquivo:Matriz elementar.png|400px|thumb|center|]] &lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
C_{ij} = \frac{\epsilon}{2Det} (q_i q_j + r_i r_j)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mas eu preciso minimizar o funcional em todos os elementos, então a contribuição de cada elemento deve ser inserida na matriz global - MXM - sendo M o número de nós. Na matriz global nós somamos os termos dos nós que se interseccionam em diferentes elementos. É preciso de duas condições de contorno (valores para 2 nós), substituindo elas na matriz global eu consigo calcular os valores para os nós que eu desconheço. Depois de resolver os valores para os nós, eu consigo determinar a solução em qualquer ponto do domínio.&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:Contribuição elemento.png|400px|thumb|center|]] &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Um exemplo de como ficaria a matriz global e seus elementos para uma determinada malha:&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:Matrizglobal.png|400px|thumb|center|]] &lt;br /&gt;
&lt;br /&gt;
Por fim tendo a matriz global determinada e com as condições de contorno aplicadas, sua resolução trará enfim a solução do problema pelo método de elementos finitos.&lt;br /&gt;
&lt;br /&gt;
=== Programas CAE ===&lt;br /&gt;
&lt;br /&gt;
Na engenharia este método é largamente aplicado, porém raramente utilizado desta forma, criando a matriz manualmente e os programas para solução do método. Existem programas que estão a décadas sendo aperfeiçoados, alguns proprietários como o CONSOL, e outros livres como OpenFOAM, Calcuix, ElmerFEM, entre outros.&lt;br /&gt;
&lt;br /&gt;
A implementação do MEF em projetos costuma seguir um workflow assim: &lt;br /&gt;
&lt;br /&gt;
# Desenho do modelo 3D que deseja estudar.&lt;br /&gt;
# Transformar este modelo em uma malha, no formato que os programas de elementos finitos reconhecem.&lt;br /&gt;
# Indicar o problema físico a ser estudado e suas condições iniciais aplicadas ao modelo 3D.&lt;br /&gt;
# Rodar o programa adequado para o problema.&lt;br /&gt;
# Utilizar de programas para examinar os resultados.&lt;br /&gt;
&lt;br /&gt;
Como pode-se ver no diagrama abaixo também:&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:FEM Workbench workflow.png|400px|thumb|center| Workflow no FreeCAD - https://wiki.freecadweb.org/FEM_Workbench]]&lt;/div&gt;</summary>
		<author><name>Renanrs</name></author>
	</entry>
	<entry>
		<id>http://fiscomp.if.ufrgs.br/index.php?title=M%C3%A9todo_de_Elementos_Finitos&amp;diff=5905</id>
		<title>Método de Elementos Finitos</title>
		<link rel="alternate" type="text/html" href="http://fiscomp.if.ufrgs.br/index.php?title=M%C3%A9todo_de_Elementos_Finitos&amp;diff=5905"/>
		<updated>2021-10-15T17:55:33Z</updated>

		<summary type="html">&lt;p&gt;Renanrs: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Em construção - as referencias e imagens ainda estão faltando&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Grupo: Antônio Carlan, Gabriela Pereira, Renan Soares e Victor Gandara&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Objetivo:&#039;&#039;&#039; Apresentar uma introdução do Método de Elementos Finitos, abordando seu funcionamento e demonstrando suas etapas através de um exemplo, demonstrando seu potencial e o que o diferencia de outros métodos estudados nas cadeiras de métodos computacionais até então vistos.&lt;br /&gt;
&lt;br /&gt;
= Introdução ao Método de Elementos Finitos(MEF) =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Aplicação ===&lt;br /&gt;
 &lt;br /&gt;
Este é um método numérico de resolução aproximada para problemas de valores sobre contorno em equações diferenciais. É largamente utilizado na industrial para o desenvolvimento de novas tecnologias e produtos, pode ser utilizado tanto no processo de desenvolvimento quanto de otimização, através da simulação da física de situações em que se espera que o projeto atue.&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:FAE visualization.jpg|400px|thumb|center| Simulação de deformação de um veiculo https://en.wikipedia.org/wiki/Finite_element_method]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
O que torna este método diferente é a forma com que ele discretiza e faz suas aproximações. Sua discretização é feita na geometria, ou seja, repartindo o objeto em diversos elementos menores. Desta forma é possível que se resolva problemas em geometrias complexas cuja solução analítica é desconhecida e que seriam muito difíceis com outros métodos. Também permite trabalhar de maneira simples com materiais compostos, ou de diferentes densidades em um objeto, uma vez que podemos definir tais propriedades individualmente para cada elemento.&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:Exemplo inicio .png|400px|thumb|center| Modelo normal e modelo discretizado e representado por uma malha e simulação de estresse sofrido no objeto.]]&lt;br /&gt;
&lt;br /&gt;
=== O Método ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;q&amp;gt; O conceito fundamental do MEF é a aproximação de uma quantidade continua(p. ex., tensão elétrica, temperatura, etc.) através de um modelo discreto composto por um conjunto de funções simples que são definidas em um número finito de subdomínios(elementos)&amp;lt;/q&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A resolução de um problema através do MEF envolve quatro etapas principais:&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;Discretização da região:&#039;&#039;&#039; Transformar o objeto de estudo em vários elementos menores que juntos formam o objeto original de forma aproximada e a isso chama-se &#039;&#039;&#039;Malha&#039;&#039;&#039;.&lt;br /&gt;
# &#039;&#039;&#039;Aproximação da solução:&#039;&#039;&#039; Obtenção das equações correspondentes de cada elemento, através de interpolação polinomial.&lt;br /&gt;
# &#039;&#039;&#039;Montagem do sistema global:&#039;&#039;&#039; Juntar os elementos e suas equações em uma matriz que fornecerá a solução global.&lt;br /&gt;
# &#039;&#039;&#039;Resolução do sistema:&#039;&#039;&#039; Resolver a matriz gerada para obter a solução aproximada do problema.&lt;br /&gt;
&lt;br /&gt;
==== Discretização: A Malha ====&lt;br /&gt;
&lt;br /&gt;
A malha define o domínio do problema, ela é a base do método. Porém não é parte do algoritmo em si. Normalmente é criada automaticamente por um programa especifico para isso, como GMSH e NetGen. Apenas sendo fornecida as especificações que se deseja para a malha, vão influenciar na quantidade de nós, na dimensão do domínio e na precisão da aproximação.&lt;br /&gt;
&lt;br /&gt;
Ela é composta por um conjunto de pontos interligados que descrevem o objeto. Estes pontos são chamados de &#039;&#039;&#039;nós&#039;&#039;&#039; e a união destes nós forma um elemento, e a união destes elementos formam o objeto que é nosso domínio.&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:Nos.png|400px|thumb|center| Malha composta por elementos que são compostos por nós.]]&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;Dimensão:&#039;&#039;&#039; A malha pode ser unidimensional, bidimensional ou tridimensional.&lt;br /&gt;
[[Arquivo:Print slide 5.png|400px|thumb|center| Malha composta por elementos que são compostos por nós.]]&lt;br /&gt;
# &#039;&#039;&#039;Ordem:&#039;&#039;&#039; Quanto maior a ordem da malha mais precisa será a aproximação dos resultados entre os nós, porém aumenta o consumo computacional.&lt;br /&gt;
# &#039;&#039;&#039;Densidade de elementos:&#039;&#039;&#039; Pode-se escolher por gerar uma malha mais ou menos detalhada, isso implica no consumo computacional. Quanto mais detalhada a malha, ou seja, quanto maior o numero de nós da malha, menor será o erro de aproximação do problema real.&lt;br /&gt;
[[Arquivo:Densidade de malha.png|400px|thumb|center| Discretização de uma área utilizando o software GMSH com diferentes padrões gerando duas malhas com diferentes densidades de nós.]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Funcionamento do método ===&lt;br /&gt;
&lt;br /&gt;
Cada nó desta malha terá atribuída uma variável do problema físico que esta sendo implementado(o valor da grandeza contínua para aquele ponto), como Tensão Elétrica, Dilatação, Temperatura, etc. Esta variável é chamada &#039;&#039;&#039;Valor nodal&#039;&#039;&#039;, ela representa a solução da equação naquele ponto (Variáveis nodais = incógnitas ou graus de liberdade do problema).&lt;br /&gt;
[[Arquivo:Slide7.png|400px|thumb|center|]]&lt;br /&gt;
&lt;br /&gt;
Já a grandeza contínua é aproximada em cada elemento por um &#039;&#039;&#039;polinômio&#039;&#039;&#039; que é definido usando os valores nodais da grandeza. Ou seja, nós iremos descobrir os valores nodais dos nós e entre eles,os valores da grandeza contínua serão dados por uma aproximação polinomial.&lt;br /&gt;
&lt;br /&gt;
Lembrando que os elementos são formados pelos nós e que os valores nodais estão associado aos nós e não ao elemento diretamente.&lt;br /&gt;
&lt;br /&gt;
Então, cada elemento terá um polinômio que descreve a grandeza contínua na região entre os nós que formam este elemento, no caso de uma matriz com elementos de primeira ordem, será uma reta entre os valores nodais. Os polinômios são escolhidos/deduzidos de forma que a continuidade seja mantida na fronteira entre os elementos, utilizando os métodos matemáticos adequados para isso.&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Este polinômio resulta de um ajuste dos valores nodais para que se tenha uma boa aproximação da grandeza real, este ajuste é feito através da minimização de alguma grandeza associada ao problema.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==== Interpolação ====&lt;br /&gt;
&lt;br /&gt;
Os valores nodais, que são nossas incógnitas, precisam ser isolados e deixados em função das coordenadas dos nós, que possuímos através da malha de elementos finitos já gerada.&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:Slide9.png|400px|thumb|center|]] &lt;br /&gt;
 &lt;br /&gt;
&amp;lt;math&amp;gt; V_1 e V_2 &amp;lt;/math&amp;gt; -&amp;gt; valores nodais&lt;br /&gt;
&amp;lt;math&amp;gt; x_1 e x_2 &amp;lt;/math&amp;gt; -&amp;gt; coordenadas dos nós&lt;br /&gt;
&amp;lt;math&amp;gt; L = x_2 - x_1 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aproximação polinomial no caso da malha de primeira ordem: &lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
V(x) = a_1 + a_2 x &lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As variáveis a1 e a2 são coeficientes da interpolação, porém não as temos e não queremos deixa-las no calculo, para isso:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
V_1 = a_1 + a_2 x_1 &lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
V_2 = a_1 + a_2 x_2&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
logo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 \begin{bmatrix}&lt;br /&gt;
 V_1 \\&lt;br /&gt;
 V_2 \\&lt;br /&gt;
 \end{bmatrix}&lt;br /&gt;
 = &lt;br /&gt;
 \begin{bmatrix}&lt;br /&gt;
 1 &amp;amp; x_1 \\&lt;br /&gt;
 1 &amp;amp; x_2 \\&lt;br /&gt;
 \end{bmatrix}&lt;br /&gt;
 \begin{bmatrix}&lt;br /&gt;
 a_1 \\&lt;br /&gt;
 a_2 \\&lt;br /&gt;
 \end{bmatrix}&lt;br /&gt;
 &amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Portanto:&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
a_1 = \frac{1}{L} (V_1 x_2 - V_2 x_2)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
a_2 = \frac{1}{L} (V_1 - V_2)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Substituindo os valores de &amp;lt;math&amp;gt; a_1 &amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt; a_2 &amp;lt;/math&amp;gt; na equação de interpolação anterior &amp;lt;math&amp;gt; V(x) = a_1 + a_2 x  &amp;lt;/math&amp;gt; ficaremos com:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
V(x) = \frac{1}{L} [V_1 x_2 - V_2 x_1 + (V_2 - V_1) x]&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ou, como é definido a aproximação nodal:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
V(x) = \frac{(x_2 - x)}{L} V_1 + \frac{(x - x_1)}{L} V_2&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Esta fica conhecida por aproximação nodal pois a grandeza &amp;lt;math&amp;gt; V(x) &amp;lt;/math&amp;gt; pode ser obtida em qualquer ponto do intervalo &amp;lt;math&amp;gt; [x_1, x_2] &amp;lt;/math&amp;gt; a partir dos valores &amp;lt;math&amp;gt; V_1 &amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt; V_2 &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===== Função Interpolação =====&lt;br /&gt;
&lt;br /&gt;
Esta aproximação nodal pode ainda ser reescrita como:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
V(x) = \phi_1{(x)}V_1 + \phi_2{(x)}V_2&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Com: &lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\phi_1{(x)} = \frac{x_2 - x}{L}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
e &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\phi_2{(x)} = \frac{x - x_1}{L}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
sendo &amp;lt;math&amp;gt; L = x_2 - x_1 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As funções &amp;lt;math&amp;gt;\phi_1{(x)}&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;\phi_2{(x)}&amp;lt;/math&amp;gt; são conhecidas como &#039;&#039;&#039;funções de interpolação&#039;&#039;&#039; e são responsáveis por fazer com que cada nó do elemento contribua com uma parte do valor resultante em qualquer ponto dentro do elemento.&lt;br /&gt;
&lt;br /&gt;
E devido a propriedade do  delta de Kronecker, vista abaixo, é garantido que as equações só terão valor entre os nós dentro do elemento que são definidos:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\phi_i{(x_j)} =\left\{\begin{array}{lc} 1, \quad \text{se}\quad i=j\\&lt;br /&gt;
0, \quad \text{se} \quad i \ne j \end{array}\right.&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Então, por exemplo, nossa equação para o elemento 1, no caso visto aqui de 1D, para um problema  de tensão, fica:&lt;br /&gt;
&lt;br /&gt;
Elemento 1:&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
V^{(1)} (x) = \phi_1^{(1)}(x) V_1 \phi_2^{(1)}(x) V_2&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Com:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\phi_1^{(1)}{(x)} = \frac{x_2 - x}{x_2 - x_1}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
e&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\phi_2^{(1)}{(x)} = \frac{x - x_1}{x_2 - x_1}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Fica fácil perceber que os valores nodais dos dois nós se interpolam e contribuem para os valores entre para o resultado.&lt;br /&gt;
&lt;br /&gt;
A notação geral da função interpolação fica:&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\phi_i^{(e)} (x)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Em que: &amp;lt;math&amp;gt; (e) = elemento &amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt; i = nó &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As funções são diferentes para cada elemento e elas são nulas fora do elemento a que pertencem.&lt;br /&gt;
&lt;br /&gt;
Também existem a função chapéu, que é outro tipo de interpolação.&lt;br /&gt;
&lt;br /&gt;
==== Solução Global ====&lt;br /&gt;
&lt;br /&gt;
Seguindo com o caso do problema de tensão elétrica, a solução global será dada pelo somatório das funções de interpolação de cada elemento.&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
V_ex (x) \cong V(x) - \sum_{e=1}^{N_{elem}} V^{(e)} (x)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Até aqui nós chegamos a essa equação partindo da premissa que temos os valores nodais, fizemos isso apenas para explicar como os valores nodas e suas interpolações se comportam na malha.&lt;br /&gt;
&lt;br /&gt;
Porém os valores nodais são as nossas incógnitas e são eles quem queremos descobrir, a interpolação será a predição dos valores entre os valores nodais.&lt;br /&gt;
&lt;br /&gt;
Como visto, no MEF cada elemento terá suas próprias equações baseadas nos seus valores nodais e nas coordenadas destes valores. Para de fato introduzir o problema físico precisamos da forma fraca dele.&lt;br /&gt;
&lt;br /&gt;
===== Forma Fraca =====&lt;br /&gt;
&lt;br /&gt;
Quando se tem uma problema envolvendo um operador diferencial, é possível usar o que se conhece por forma fraca do operador, que nada mais é que a representação integral do problema, a qual já engloba/explicita as condições de contorno e utiliza-se o método de resíduos ponderados para isso.&lt;br /&gt;
&lt;br /&gt;
Para a construção da forma fraca nós podemos escolher uma função arbitrária w(x) e multiplicá-la pela forma forte, que é a equação diferencial original que descreve o problema, e pela condição de contorno em x=0. Em sequência nós integramos ambas dentro do domínio onde elas foram definidas. Como w(x) ´e uma função arbitrária que pode ser qualquer função, ela força a solução, já que qualquer coisa multiplicada por ela tem que ser 0.&lt;br /&gt;
&lt;br /&gt;
Alternativamente, podemos encontrar a forma fraca através da minimização de um funcional, um método chamado de Método Variacional, dentro de um espaço de funções válido para o nosso problema e suas condições de contorno. A obtenção desse funcional não é um processo trivial, mas quando se trata de problemas físicos, esse funcional coincide com a energia do sistema, sendo, por exemplo, a energia potencial elástica do sólido para problemas de mecânica dos sólidos e a energia eletrostática armazenada na região de cálculo para problemas eletrostáticos (eq de laplace). A função que minimiza essa energia é a solução do problema original. Como discretizamos o problema, devemos minimizar o funcional com relação a cada nó. Se eu tenho 10 nós vou ter 10 eq (derivadas igualadas a 0) para minimizar o funcional nos 10 nós.&lt;br /&gt;
&lt;br /&gt;
Usando o problema eletrostático para exemplificar o Método Variacional:&lt;br /&gt;
&lt;br /&gt;
Obtém-se uma equação funcional associada à energia do sistema&lt;br /&gt;
A equação que rege o problema eletrostático é a equação de laplace, e em um problema 2D fica:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\frac{\partial^2 {V}}{\partial x^2} + \frac{\partial^2 {V}}{\partial y^2} = 0&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\nabla . \vec{D} = \rho&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\vec{E} = - \nabla V&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\vec{D} = \epsilon \vec{E}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\nabla ^2 V = - \frac{\rho}{\epsilon}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\nabla ^2 V = 0&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
F = \int_{\omega} \frac{1}{2} E^2 d\omega&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Como analisamos elemento por elemento, podemos dizer que o funcional vai ser constante dentro de um elemento, e tem que ser minimizado &lt;br /&gt;
dentro desse elemento, para tal, eu minimizo o funcional com relação a cada nó do elemento, o que me leva a um conjunto de equações que podemos organizar no que se conhece como matriz elementar, se eu tenho 3 nós em cada elemento vou ter uma matriz 3 por 3. &lt;br /&gt;
&lt;br /&gt;
[[Arquivo:Matriz elementar.png|400px|thumb|center|]] &lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
C_{ij} = \frac{\epsilon}{2Det} (q_i q_j + r_i r_j)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mas eu preciso minimizar o funcional em todos os elementos, então a contribuição de cada elemento deve ser inserida na matriz global - MXM - sendo M o número de nós. Na matriz global nós somamos os termos dos nós que se interseccionam em diferentes elementos. É preciso de duas condições de contorno (valores para 2 nós), substituindo elas na matriz global eu consigo calcular os valores para os nós que eu desconheço. Depois de resolver os valores para os nós, eu consigo determinar a solução em qualquer ponto do domínio.&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:Contribuição elemento.png|400px|thumb|center|]] &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Um exemplo de como ficaria a matriz global e seus elementos para uma determinada malha:&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:Matrizglobal.png|400px|thumb|center|]] &lt;br /&gt;
&lt;br /&gt;
Por fim tendo a matriz global determinada e com as condições de contorno aplicadas, sua resolução trará enfim a solução do problema pelo método de elementos finitos.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Programas CAE ===&lt;br /&gt;
&lt;br /&gt;
Na engenharia este método é largamente aplicado, porém raramente utilizado desta forma, criando a matriz manualmente e os programas para solução do método. Existem programas que estão a décadas sendo aperfeiçoados, alguns proprietários como o CONSOL, e outros livres como OpenFOAM, Calcuix, ElmerFEM, entre outros.&lt;br /&gt;
&lt;br /&gt;
A implementação do MEF em projetos costuma seguir um workflow assim: &lt;br /&gt;
&lt;br /&gt;
# Desenho do modelo 3D que deseja estudar.&lt;br /&gt;
# Transformar este modelo em uma malha, no formato que os programas de elementos finitos reconhecem.&lt;br /&gt;
# Indicar o problema físico a ser estudado e suas condições iniciais aplicadas ao modelo 3D.&lt;br /&gt;
# Rodar o programa adequado para o problema.&lt;br /&gt;
# Utilizar de programas para examinar os resultados.&lt;br /&gt;
&lt;br /&gt;
Como pode-se ver no diagrama abaixo também:&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:FEM Workbench workflow.png|400px|thumb|center| Workflow no FreeCAD - https://wiki.freecadweb.org/FEM_Workbench]]&lt;/div&gt;</summary>
		<author><name>Renanrs</name></author>
	</entry>
	<entry>
		<id>http://fiscomp.if.ufrgs.br/index.php?title=M%C3%A9todo_de_Elementos_Finitos&amp;diff=5904</id>
		<title>Método de Elementos Finitos</title>
		<link rel="alternate" type="text/html" href="http://fiscomp.if.ufrgs.br/index.php?title=M%C3%A9todo_de_Elementos_Finitos&amp;diff=5904"/>
		<updated>2021-10-15T17:54:59Z</updated>

		<summary type="html">&lt;p&gt;Renanrs: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Em construção - as referencias e imagens ainda estão faltando&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Grupo: Antônio Carlan, Gabriela Pereira, Renan Soares e Victor Gandara&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Objetivo:&#039;&#039;&#039; Apresentar uma introdução do Método de Elementos Finitos, abordando seu funcionamento e demonstrando suas etapas através de um exemplo, demonstrando seu potencial e o que o diferencia de outros métodos estudados nas cadeiras de métodos computacionais até então vistos.&lt;br /&gt;
&lt;br /&gt;
= Introdução ao Método de Elementos Finitos(MEF) =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Aplicação ===&lt;br /&gt;
 &lt;br /&gt;
Este é um método numérico de resolução aproximada para problemas de valores sobre contorno em equações diferenciais. É largamente utilizado na industrial para o desenvolvimento de novas tecnologias e produtos, pode ser utilizado tanto no processo de desenvolvimento quanto de otimização, através da simulação da física de situações em que se espera que o projeto atue.&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:FAE visualization.jpg|400px|thumb|center| Simulação de deformação de um veiculo https://en.wikipedia.org/wiki/Finite_element_method]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
O que torna este método diferente é a forma com que ele discretiza e faz suas aproximações. Sua discretização é feita na geometria, ou seja, repartindo o objeto em diversos elementos menores. Desta forma é possível que se resolva problemas em geometrias complexas cuja solução analítica é desconhecida e que seriam muito difíceis com outros métodos. Também permite trabalhar de maneira simples com materiais compostos, ou de diferentes densidades em um objeto, uma vez que podemos definir tais propriedades individualmente para cada elemento.&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:Exemplo inicio .png|400px|thumb|center| Modelo normal e modelo discretizado e representado por uma malha e simulação de estresse sofrido no objeto.]]&lt;br /&gt;
&lt;br /&gt;
=== O Método ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;q&amp;gt; O conceito fundamental do MEF é a aproximação de uma quantidade continua(p. ex., tensão elétrica, temperatura, etc.) através de um modelo discreto composto por um conjunto de funções simples que são definidas em um número finito de subdomínios(elementos)&amp;lt;/q&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A resolução de um problema através do MEF envolve quatro etapas principais:&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;Discretização da região:&#039;&#039;&#039; Transformar o objeto de estudo em vários elementos menores que juntos formam o objeto original de forma aproximada e a isso chama-se &#039;&#039;&#039;Malha&#039;&#039;&#039;.&lt;br /&gt;
# &#039;&#039;&#039;Aproximação da solução:&#039;&#039;&#039; Obtenção das equações correspondentes de cada elemento, através de interpolação polinomial.&lt;br /&gt;
# &#039;&#039;&#039;Montagem do sistema global:&#039;&#039;&#039; Juntar os elementos e suas equações em uma matriz que fornecerá a solução global.&lt;br /&gt;
# &#039;&#039;&#039;Resolução do sistema:&#039;&#039;&#039; Resolver a matriz gerada para obter a solução aproximada do problema.&lt;br /&gt;
&lt;br /&gt;
==== Discretização: A Malha ====&lt;br /&gt;
&lt;br /&gt;
A malha define o domínio do problema, ela é a base do método. Porém não é parte do algoritmo em si. Normalmente é criada automaticamente por um programa especifico para isso, como GMSH e NetGen. Apenas sendo fornecida as especificações que se deseja para a malha, vão influenciar na quantidade de nós, na dimensão do domínio e na precisão da aproximação.&lt;br /&gt;
&lt;br /&gt;
Ela é composta por um conjunto de pontos interligados que descrevem o objeto. Estes pontos são chamados de &#039;&#039;&#039;nós&#039;&#039;&#039; e a união destes nós forma um elemento, e a união destes elementos formam o objeto que é nosso domínio.&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:Nos.png|400px|thumb|center| Malha composta por elementos que são compostos por nós.]]&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;Dimensão:&#039;&#039;&#039; A malha pode ser unidimensional, bidimensional ou tridimensional.&lt;br /&gt;
[[Arquivo:Print slide 5.png|400px|thumb|center| Malha composta por elementos que são compostos por nós.]]&lt;br /&gt;
# &#039;&#039;&#039;Ordem:&#039;&#039;&#039; Quanto maior a ordem da malha mais precisa será a aproximação dos resultados entre os nós, porém aumenta o consumo computacional.&lt;br /&gt;
# &#039;&#039;&#039;Densidade de elementos:&#039;&#039;&#039; Pode-se escolher por gerar uma malha mais ou menos detalhada, isso implica no consumo computacional. Quanto mais detalhada a malha, ou seja, quanto maior o numero de nós da malha, menor será o erro de aproximação do problema real.&lt;br /&gt;
[[Arquivo:Densidade de malha.png|400px|thumb|center| Discretização de uma área utilizando o software GMSH com diferentes padrões gerando duas malhas com diferentes densidades de nós.]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Funcionamento do método ===&lt;br /&gt;
&lt;br /&gt;
Cada nó desta malha terá atribuída uma variável do problema físico que esta sendo implementado(o valor da grandeza contínua para aquele ponto), como Tensão Elétrica, Dilatação, Temperatura, etc. Esta variável é chamada &#039;&#039;&#039;Valor nodal&#039;&#039;&#039;, ela representa a solução da equação naquele ponto (Variáveis nodais = incógnitas ou graus de liberdade do problema).&lt;br /&gt;
[[Arquivo:Slide7.png|400px|thumb|center|]]&lt;br /&gt;
&lt;br /&gt;
Já a grandeza contínua é aproximada em cada elemento por um &#039;&#039;&#039;polinômio&#039;&#039;&#039; que é definido usando os valores nodais da grandeza. Ou seja, nós iremos descobrir os valores nodais dos nós e entre eles,os valores da grandeza contínua serão dados por uma aproximação polinomial.&lt;br /&gt;
&lt;br /&gt;
Lembrando que os elementos são formados pelos nós e que os valores nodais estão associado aos nós e não ao elemento diretamente.&lt;br /&gt;
&lt;br /&gt;
Então, cada elemento terá um polinômio que descreve a grandeza contínua na região entre os nós que formam este elemento, no caso de uma matriz com elementos de primeira ordem, será uma reta entre os valores nodais. Os polinômios são escolhidos/deduzidos de forma que a continuidade seja mantida na fronteira entre os elementos, utilizando os métodos matemáticos adequados para isso.&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Este polinômio resulta de um ajuste dos valores nodais para que se tenha uma boa aproximação da grandeza real, este ajuste é feito através da minimização de alguma grandeza associada ao problema.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==== Interpolação ====&lt;br /&gt;
&lt;br /&gt;
Os valores nodais, que são nossas incógnitas, precisam ser isolados e deixados em função das coordenadas dos nós, que possuímos através da malha de elementos finitos já gerada.&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:Slide9.png|400px|thumb|center|]] &lt;br /&gt;
 &lt;br /&gt;
&amp;lt;math&amp;gt; V_1 e V_2 &amp;lt;/math&amp;gt; -&amp;gt; valores nodais&lt;br /&gt;
&amp;lt;math&amp;gt; x_1 e x_2 &amp;lt;/math&amp;gt; -&amp;gt; coordenadas dos nós&lt;br /&gt;
&amp;lt;math&amp;gt; L = x_2 - x_1 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aproximação polinomial no caso da malha de primeira ordem: &lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
V(x) = a_1 + a_2 x &lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As variáveis a1 e a2 são coeficientes da interpolação, porém não as temos e não queremos deixa-las no calculo, para isso:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
V_1 = a_1 + a_2 x_1 &lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
V_2 = a_1 + a_2 x_2&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
logo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 \begin{bmatrix}&lt;br /&gt;
 V_1 \\&lt;br /&gt;
 V_2 \\&lt;br /&gt;
 \end{bmatrix}&lt;br /&gt;
 = &lt;br /&gt;
 \begin{bmatrix}&lt;br /&gt;
 1 &amp;amp; x_1 \\&lt;br /&gt;
 1 &amp;amp; x_2 \\&lt;br /&gt;
 \end{bmatrix}&lt;br /&gt;
 \begin{bmatrix}&lt;br /&gt;
 a_1 \\&lt;br /&gt;
 a_2 \\&lt;br /&gt;
 \end{bmatrix}&lt;br /&gt;
 &amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Portanto:&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
a_1 = \frac{1}{L} (V_1 x_2 - V_2 x_2)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
a_2 = \frac{1}{L} (V_1 - V_2)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Substituindo os valores de &amp;lt;math&amp;gt; a_1 &amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt; a_2 &amp;lt;/math&amp;gt; na equação de interpolação anterior &amp;lt;math&amp;gt; V(x) = a_1 + a_2 x  &amp;lt;/math&amp;gt; ficaremos com:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
V(x) = \frac{1}{L} [V_1 x_2 - V_2 x_1 + (V_2 - V_1) x]&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ou, como é definido a aproximação nodal:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
V(x) = \frac{(x_2 - x)}{L} V_1 + \frac{(x - x_1)}{L} V_2&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Esta fica conhecida por aproximação nodal pois a grandeza &amp;lt;math&amp;gt; V(x) &amp;lt;/math&amp;gt; pode ser obtida em qualquer ponto do intervalo &amp;lt;math&amp;gt; [x_1, x_2] &amp;lt;/math&amp;gt; a partir dos valores &amp;lt;math&amp;gt; V_1 &amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt; V_2 &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===== Função Interpolação =====&lt;br /&gt;
&lt;br /&gt;
Esta aproximação nodal pode ainda ser reescrita como:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
V(x) = \phi_1{(x)}V_1 + \phi_2{(x)}V_2&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Com: &lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\phi_1{(x)} = \frac{x_2 - x}{L}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
e &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\phi_2{(x)} = \frac{x - x_1}{L}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
sendo &amp;lt;math&amp;gt; L = x_2 - x_1 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As funções &amp;lt;math&amp;gt;\phi_1{(x)}&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;\phi_2{(x)}&amp;lt;/math&amp;gt; são conhecidas como &#039;&#039;&#039;funções de interpolação&#039;&#039;&#039; e são responsáveis por fazer com que cada nó do elemento contribua com uma parte do valor resultante em qualquer ponto dentro do elemento.&lt;br /&gt;
&lt;br /&gt;
E devido a propriedade do  delta de Kronecker, vista abaixo, é garantido que as equações só terão valor entre os nós dentro do elemento que são definidos:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\phi_i{(x_j)} =\left\{\begin{array}{lc} 1, \quad \text{se}\quad i=j\\&lt;br /&gt;
0, \quad \text{se} \quad i \ne j \end{array}\right.&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Então, por exemplo, nossa equação para o elemento 1, no caso visto aqui de 1D, para um problema  de tensão, fica:&lt;br /&gt;
&lt;br /&gt;
Elemento 1:&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
V^{(1)} (x) = \phi_1^{(1)}(x) V_1 \phi_2^{(1)}(x) V_2&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Com:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\phi_1^{(1)}{(x)} = \frac{x_2 - x}{x_2 - x_1}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
e&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\phi_2^{(1)}{(x)} = \frac{x - x_1}{x_2 - x_1}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Fica fácil perceber que os valores nodais dos dois nós se interpolam e contribuem para os valores entre para o resultado.&lt;br /&gt;
&lt;br /&gt;
A notação geral da função interpolação fica:&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\phi_i^{(e)} (x)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Em que: &amp;lt;math&amp;gt; (e) = elemento &amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt; i = nó &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As funções são diferentes para cada elemento e elas são nulas fora do elemento a que pertencem.&lt;br /&gt;
&lt;br /&gt;
Também existem a função chapéu, que é outro tipo de interpolação.&lt;br /&gt;
&lt;br /&gt;
==== Solução Global ====&lt;br /&gt;
&lt;br /&gt;
Seguindo com o caso do problema de tensão elétrica, a solução global será dada pelo somatório das funções de interpolação de cada elemento.&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
V_ex (x) \cong V(x) - \sum_{e=1}^{N_{elem}} V^{(e)} (x)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Até aqui nós chegamos a essa equação partindo da premissa que temos os valores nodais, fizemos isso apenas para explicar como os valores nodas e suas interpolações se comportam na malha.&lt;br /&gt;
&lt;br /&gt;
Porém os valores nodais são as nossas incógnitas e são eles quem queremos descobrir, a interpolação será a predição dos valores entre os valores nodais.&lt;br /&gt;
&lt;br /&gt;
Como visto, no MEF cada elemento terá suas próprias equações baseadas nos seus valores nodais e nas coordenadas destes valores. Para de fato introduzir o problema físico precisamos da forma fraca dele.&lt;br /&gt;
&lt;br /&gt;
===== Forma Fraca =====&lt;br /&gt;
&lt;br /&gt;
Quando se tem uma problema envolvendo um operador diferencial, é possível usar o que se conhece por forma fraca do operador, que nada mais é que a representação integral do problema, a qual já engloba/explicita as condições de contorno e utiliza-se o método de resíduos ponderados para isso.&lt;br /&gt;
&lt;br /&gt;
Para a construção da forma fraca nós podemos escolher uma função arbitrária w(x) e multiplicá-la pela forma forte, que é a equação diferencial original que descreve o problema, e pela condição de contorno em x=0. Em sequência nós integramos ambas dentro do domínio onde elas foram definidas. Como w(x) ´e uma função arbitrária que pode ser qualquer função, ela força a solução, já que qualquer coisa multiplicada por ela tem que ser 0.&lt;br /&gt;
&lt;br /&gt;
Alternativamente, podemos encontrar a forma fraca através da minimização de um funcional, um método chamado de Método Variacional, dentro de um espaço de funções válido para o nosso problema e suas condições de contorno. A obtenção desse funcional não é um processo trivial, mas quando se trata de problemas físicos, esse funcional coincide com a energia do sistema, sendo, por exemplo, a energia potencial elástica do sólido para problemas de mecânica dos sólidos e a energia eletrostática armazenada na região de cálculo para problemas eletrostáticos (eq de laplace). A função que minimiza essa energia é a solução do problema original. Como discretizamos o problema, devemos minimizar o funcional com relação a cada nó. Se eu tenho 10 nós vou ter 10 eq (derivadas igualadas a 0) para minimizar o funcional nos 10 nós.&lt;br /&gt;
&lt;br /&gt;
Usando o problema eletrostático para exemplificar o Método Variacional:&lt;br /&gt;
&lt;br /&gt;
Obtém-se uma equação funcional associada à energia do sistema&lt;br /&gt;
A equação que rege o problema eletrostático é a equação de laplace, e em um problema 2D fica:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\frac{\partial^2 {V}}{\partial x^2} + \frac{\partial^2 {V}}{\partial y^2} = 0&lt;br /&gt;
&amp;lt;\math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\nabla . \vec{D} = \rho&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\vec{E} = - \nabla V&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\vec{D} = \epsilon \vec{E}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\nabla ^2 V = - \frac{\rho}{\epsilon}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\nabla ^2 V = 0&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
F = \int_{\omega} \frac{1}{2} E^2 d\omega&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Como analisamos elemento por elemento, podemos dizer que o funcional vai ser constante dentro de um elemento, e tem que ser minimizado &lt;br /&gt;
dentro desse elemento, para tal, eu minimizo o funcional com relação a cada nó do elemento, o que me leva a um conjunto de equações que podemos organizar no que se conhece como matriz elementar, se eu tenho 3 nós em cada elemento vou ter uma matriz 3 por 3. &lt;br /&gt;
&lt;br /&gt;
[[Arquivo:Matriz elementar.png|400px|thumb|center|]] &lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
C_{ij} = \frac{\epsilon}{2Det} (q_i q_j + r_i r_j)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mas eu preciso minimizar o funcional em todos os elementos, então a contribuição de cada elemento deve ser inserida na matriz global - MXM - sendo M o número de nós. Na matriz global nós somamos os termos dos nós que se interseccionam em diferentes elementos. É preciso de duas condições de contorno (valores para 2 nós), substituindo elas na matriz global eu consigo calcular os valores para os nós que eu desconheço. Depois de resolver os valores para os nós, eu consigo determinar a solução em qualquer ponto do domínio.&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:Contribuição elemento.png|400px|thumb|center|]] &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Um exemplo de como ficaria a matriz global e seus elementos para uma determinada malha:&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:Matrizglobal.png|400px|thumb|center|]] &lt;br /&gt;
&lt;br /&gt;
Por fim tendo a matriz global determinada e com as condições de contorno aplicadas, sua resolução trará enfim a solução do problema pelo método de elementos finitos.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Programas CAE ===&lt;br /&gt;
&lt;br /&gt;
Na engenharia este método é largamente aplicado, porém raramente utilizado desta forma, criando a matriz manualmente e os programas para solução do método. Existem programas que estão a décadas sendo aperfeiçoados, alguns proprietários como o CONSOL, e outros livres como OpenFOAM, Calcuix, ElmerFEM, entre outros.&lt;br /&gt;
&lt;br /&gt;
A implementação do MEF em projetos costuma seguir um workflow assim: &lt;br /&gt;
&lt;br /&gt;
# Desenho do modelo 3D que deseja estudar.&lt;br /&gt;
# Transformar este modelo em uma malha, no formato que os programas de elementos finitos reconhecem.&lt;br /&gt;
# Indicar o problema físico a ser estudado e suas condições iniciais aplicadas ao modelo 3D.&lt;br /&gt;
# Rodar o programa adequado para o problema.&lt;br /&gt;
# Utilizar de programas para examinar os resultados.&lt;br /&gt;
&lt;br /&gt;
Como pode-se ver no diagrama abaixo também:&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:FEM Workbench workflow.png|400px|thumb|center| Workflow no FreeCAD - https://wiki.freecadweb.org/FEM_Workbench]]&lt;/div&gt;</summary>
		<author><name>Renanrs</name></author>
	</entry>
	<entry>
		<id>http://fiscomp.if.ufrgs.br/index.php?title=M%C3%A9todo_de_Elementos_Finitos&amp;diff=5867</id>
		<title>Método de Elementos Finitos</title>
		<link rel="alternate" type="text/html" href="http://fiscomp.if.ufrgs.br/index.php?title=M%C3%A9todo_de_Elementos_Finitos&amp;diff=5867"/>
		<updated>2021-10-15T13:57:26Z</updated>

		<summary type="html">&lt;p&gt;Renanrs: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Em construção - as referencias e imagens ainda estão faltando&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Grupo: Antônio Carlan, Gabriela Pereira, Renan Soares e Victor Gandara&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Objetivo:&#039;&#039;&#039; Apresentar uma introdução do Método de Elementos Finitos, abordando seu funcionamento e demonstrando suas etapas através de um exemplo, demonstrando seu potencial e o que o diferencia de outros métodos estudados nas cadeiras de métodos computacionais até então vistos.&lt;br /&gt;
&lt;br /&gt;
= Introdução ao Método de Elementos Finitos(MEF) =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Aplicação ===&lt;br /&gt;
 &lt;br /&gt;
Este é um método numérico de resolução aproximada para problemas de valores sobre contorno em equações diferenciais. É largamente utilizado na industrial para o desenvolvimento de novas tecnologias e produtos, pode ser utilizado tanto no processo de desenvolvimento quanto de otimização, através da simulação da física de situações em que se espera que o projeto atue.&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:FAE visualization.jpg|400px|thumb|center| Simulação de deformação de um veiculo https://en.wikipedia.org/wiki/Finite_element_method]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
O que torna este método diferente é a forma com que ele discretiza e faz suas aproximações. Sua discretização é feita na geometria, ou seja, repartindo o objeto em diversos elementos menores. Desta forma é possível que se resolva problemas em geometrias complexas cuja solução analítica é desconhecida e que seriam muito difíceis com outros métodos. Também permite trabalhar de maneira simples com materiais compostos, ou de diferentes densidades em um objeto, uma vez que podemos definir tais propriedades individualmente para cada elemento.&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:Exemplo inicio .png|400px|thumb|center| Modelo normal e modelo discretizado e representado por uma malha e simulação de estresse sofrido no objeto.]]&lt;br /&gt;
&lt;br /&gt;
=== O Método ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;q&amp;gt; O conceito fundamental do MEF é a aproximação de uma quantidade continua(p. ex., tensão elétrica, temperatura, etc.) através de um modelo discreto composto por um conjunto de funções simples que são definidas em um número finito de subdomínios(elementos)&amp;lt;/q&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A resolução de um problema através do MEF envolve quatro etapas principais:&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;Discretização da região:&#039;&#039;&#039; Transformar o objeto de estudo em vários elementos menores que juntos formam o objeto original de forma aproximada e a isso chama-se &#039;&#039;&#039;Malha&#039;&#039;&#039;.&lt;br /&gt;
# &#039;&#039;&#039;Aproximação da solução:&#039;&#039;&#039; Obtenção das equações correspondentes de cada elemento, através de interpolação polinomial.&lt;br /&gt;
# &#039;&#039;&#039;Montagem do sistema global:&#039;&#039;&#039; Juntar os elementos e suas equações em uma matriz que fornecerá a solução global.&lt;br /&gt;
# &#039;&#039;&#039;Resolução do sistema:&#039;&#039;&#039; Resolver a matriz gerada para obter a solução aproximada do problema.&lt;br /&gt;
&lt;br /&gt;
==== Discretização: A Malha ====&lt;br /&gt;
&lt;br /&gt;
A malha define o domínio do problema, ela é a base do método. Porém não é parte do algoritmo em si. Normalmente é criada automaticamente por um programa especifico para isso, como GMSH e NetGen. Apenas sendo fornecida as especificações que se deseja para a malha, vão influenciar na quantidade de nós, na dimensão do domínio e na precisão da aproximação.&lt;br /&gt;
&lt;br /&gt;
Ela é composta por um conjunto de pontos interligados que descrevem o objeto. Estes pontos são chamados de &#039;&#039;&#039;nós&#039;&#039;&#039; e a união destes nós forma um elemento, e a união destes elementos formam o objeto que é nosso domínio.&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:Nos.png|400px|thumb|center| Malha composta por elementos que são compostos por nós.]]&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;Dimensão:&#039;&#039;&#039; A malha pode ser unidimensional, bidimensional ou tridimensional.&lt;br /&gt;
[[Arquivo:Print slide 5.png|400px|thumb|center| Malha composta por elementos que são compostos por nós.]]&lt;br /&gt;
# &#039;&#039;&#039;Ordem:&#039;&#039;&#039; Quanto maior a ordem da malha mais precisa será a aproximação dos resultados entre os nós, porém aumenta o consumo computacional.&lt;br /&gt;
# &#039;&#039;&#039;Densidade de elementos:&#039;&#039;&#039; Pode-se escolher por gerar uma malha mais ou menos detalhada, isso implica no consumo computacional. Quanto mais detalhada a malha, ou seja, quanto maior o numero de nós da malha, menor será o erro de aproximação do problema real.&lt;br /&gt;
[[Arquivo:Densidade de malha.png|400px|thumb|center| Discretização de uma área utilizando o software GMSH com diferentes padrões gerando duas malhas com diferentes densidades de nós.]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Funcionamento do método ===&lt;br /&gt;
&lt;br /&gt;
Cada nó desta malha terá atribuída uma variável do problema físico que esta sendo implementado(o valor da grandeza contínua para aquele ponto), como Tensão Elétrica, Dilatação, Temperatura, etc. Esta variável é chamada &#039;&#039;&#039;Valor nodal&#039;&#039;&#039;, ela representa a solução da equação naquele ponto (Variáveis nodais = incógnitas ou graus de liberdade do problema).&lt;br /&gt;
[[Arquivo:Slide7.png|400px|thumb|center|]]&lt;br /&gt;
&lt;br /&gt;
Já a grandeza contínua é aproximada em cada elemento por um &#039;&#039;&#039;polinômio&#039;&#039;&#039; que é definido usando os valores nodais da grandeza. Ou seja, nós iremos descobrir os valores nodais dos nós e entre eles,os valores da grandeza contínua serão dados por uma aproximação polinomial.&lt;br /&gt;
&lt;br /&gt;
Lembrando que os elementos são formados pelos nós e que os valores nodais estão associado aos nós e não ao elemento diretamente.&lt;br /&gt;
&lt;br /&gt;
Então, cada elemento terá um polinômio que descreve a grandeza contínua na região entre os nós que formam este elemento, no caso de uma matriz com elementos de primeira ordem, será uma reta entre os valores nodais. Os polinômios são escolhidos/deduzidos de forma que a continuidade seja mantida na fronteira entre os elementos, utilizando os métodos matemáticos adequados para isso.&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Este polinômio resulta de um ajuste dos valores nodais para que se tenha uma boa aproximação da grandeza real, este ajuste é feito através da minimização de alguma grandeza associada ao problema.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==== Interpolação ====&lt;br /&gt;
&lt;br /&gt;
Os valores nodais, que são nossas incógnitas, precisam ser isolados e deixados em função das coordenadas dos nós, que possuímos através da malha de elementos finitos já gerada.&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:Slide9.png|400px|thumb|center|]] &lt;br /&gt;
 &lt;br /&gt;
&amp;lt;math&amp;gt; V_1 e V_2 &amp;lt;/math&amp;gt; -&amp;gt; valores nodais&lt;br /&gt;
&amp;lt;math&amp;gt; x_1 e x_2 &amp;lt;/math&amp;gt; -&amp;gt; coordenadas dos nós&lt;br /&gt;
&amp;lt;math&amp;gt; L = x_2 - x_1 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aproximação polinomial no caso da malha de primeira ordem: &lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
V(x) = a_1 + a_2 x &lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As variáveis a1 e a2 são coeficientes da interpolação, porém não as temos e não queremos deixa-las no calculo, para isso:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
V_1 = a_1 + a_2 x_1 &lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
V_2 = a_1 + a_2 x_2&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
logo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 \begin{bmatrix}&lt;br /&gt;
 V_1 \\&lt;br /&gt;
 V_2 \\&lt;br /&gt;
 \end{bmatrix}&lt;br /&gt;
 = &lt;br /&gt;
 \begin{bmatrix}&lt;br /&gt;
 1 &amp;amp; x_1 \\&lt;br /&gt;
 1 &amp;amp; x_2 \\&lt;br /&gt;
 \end{bmatrix}&lt;br /&gt;
 \begin{bmatrix}&lt;br /&gt;
 a_1 \\&lt;br /&gt;
 a_2 \\&lt;br /&gt;
 \end{bmatrix}&lt;br /&gt;
 &amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Portanto:&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
a_1 = \frac{1}{L} (V_1 x_2 - V_2 x_2)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
a_2 = \frac{1}{L} (V_1 - V_2)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Substituindo os valores de &amp;lt;math&amp;gt; a_1 &amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt; a_2 &amp;lt;/math&amp;gt; na equação de interpolação anterior &amp;lt;math&amp;gt; V(x) = a_1 + a_2 x  &amp;lt;/math&amp;gt; ficaremos com:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
V(x) = \frac{1}{L} [V_1 x_2 - V_2 x_1 + (V_2 - V_1) x]&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ou, como é definido a aproximação nodal:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
V(x) = \frac{(x_2 - x)}{L} V_1 + \frac{(x - x_1)}{L} V_2&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Esta fica conhecida por aproximação nodal pois a grandeza &amp;lt;math&amp;gt; V(x) &amp;lt;/math&amp;gt; pode ser obtida em qualquer ponto do intervalo &amp;lt;math&amp;gt; [x_1, x_2] &amp;lt;/math&amp;gt; a partir dos valores &amp;lt;math&amp;gt; V_1 &amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt; V_2 &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===== Função Interpolação =====&lt;br /&gt;
&lt;br /&gt;
Esta aproximação nodal pode ainda ser reescrita como:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
V(x) = \phi_1{(x)}V_1 + \phi_2{(x)}V_2&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Com: &lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\phi_1{(x)} = \frac{x_2 - x}{L}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
e &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\phi_2{(x)} = \frac{x - x_1}{L}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
sendo &amp;lt;math&amp;gt; L = x_2 - x_1 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As funções &amp;lt;math&amp;gt;\phi_1{(x)}&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;\phi_2{(x)}&amp;lt;/math&amp;gt; são conhecidas como &#039;&#039;&#039;funções de interpolação&#039;&#039;&#039; e são responsáveis por fazer com que cada nó do elemento contribua com uma parte do valor resultante em qualquer ponto dentro do elemento.&lt;br /&gt;
&lt;br /&gt;
E devido a propriedade do  delta de Kronecker, vista abaixo, é garantido que as equações só terão valor entre os nós dentro do elemento que são definidos:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\phi_i{(x_j)} =\left\{\begin{array}{lc} 1, \quad \text{se}\quad i=j\\&lt;br /&gt;
0, \quad \text{se} \quad i \ne j \end{array}\right.&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Então, por exemplo, nossa equação para o elemento 1, no caso visto aqui de 1D, para um problema  de tensão, fica:&lt;br /&gt;
&lt;br /&gt;
Elemento 1:&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
V^{(1)} (x) = \phi_1^{(1)}(x) V_1 \phi_2^{(1)}(x) V_2&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Com:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\phi_1^{(1)}{(x)} = \frac{x_2 - x}{x_2 - x_1}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
e&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\phi_2^{(1)}{(x)} = \frac{x - x_1}{x_2 - x_1}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Fica fácil perceber que os valores nodais dos dois nós se interpolam e contribuem para os valores entre para o resultado.&lt;br /&gt;
&lt;br /&gt;
A notação geral da função interpolação fica:&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\phi_i^{(e)} (x)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Em que: &amp;lt;math&amp;gt; (e) = elemento &amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt; i = nó &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As funções são diferentes para cada elemento e elas são nulas fora do elemento a que pertencem.&lt;br /&gt;
&lt;br /&gt;
Também existem a função chapéu, que é outro tipo de interpolação.&lt;br /&gt;
&lt;br /&gt;
==== Solução Global ====&lt;br /&gt;
&lt;br /&gt;
Seguindo com o caso do problema de tensão elétrica, a solução global será dada pelo somatório das funções de interpolação de cada elemento.&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
V_ex (x) \cong V(x) - \sum_{e=1}^{N_{elem}} V^{(e)} (x)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Até aqui nós chegamos a essa equação partindo da premissa que temos os valores nodais, fizemos isso apenas para explicar como os valores nodas e suas interpolações se comportam na malha.&lt;br /&gt;
&lt;br /&gt;
Porém os valores nodais são as nossas incógnitas e são eles quem queremos descobrir, a interpolação será a predição dos valores entre os valores nodais.&lt;br /&gt;
&lt;br /&gt;
Como visto, no MEF cada elemento terá suas próprias equações baseadas nos seus valores nodais e nas coordenadas destes valores. Para de fato introduzir o problema físico precisamos da forma fraca dele.&lt;br /&gt;
&lt;br /&gt;
===== Forma Fraca =====&lt;br /&gt;
&lt;br /&gt;
Quando se tem uma problema envolvendo um operador diferencial, é possível usar o que se conhece por forma fraca do operador, que nada mais é que a representação integral do problema, a qual já engloba/explicita as condições de contorno e utiliza-se o método de resíduos ponderados para isso.&lt;br /&gt;
&lt;br /&gt;
Para a construção da forma fraca nós podemos escolher uma função arbitrária w(x) e multiplicá-la pela forma forte, que é a equação diferencial original que descreve o problema, e pela condição de contorno em x=0. Em sequência nós integramos ambas dentro do domínio onde elas foram definidas. Como w(x) ´e uma função arbitrária que pode ser qualquer função, ela força a solução, já que qualquer coisa multiplicada por ela tem que ser 0.&lt;br /&gt;
&lt;br /&gt;
Alternativamente, podemos encontrar a forma fraca através da minimização de um funcional, um método chamado de Método Variacional, dentro de um espaço de funções válido para o nosso problema e suas condições de contorno. A obtenção desse funcional não é um processo trivial, mas quando se trata de problemas físicos, esse funcional coincide com a energia do sistema, sendo, por exemplo, a energia potencial elástica do sólido para problemas de mecânica dos sólidos e a energia eletrostática armazenada na região de cálculo para problemas eletrostáticos (eq de laplace). A função que minimiza essa energia é a solução do problema original. Como discretizamos o problema, devemos minimizar o funcional com relação a cada nó. Se eu tenho 10 nós vou ter 10 eq (derivadas igualadas a 0) para minimizar o funcional nos 10 nós.&lt;br /&gt;
&lt;br /&gt;
Usando o problema eletrostático para exemplificar o Método Variacional:&lt;br /&gt;
&lt;br /&gt;
Obtém-se uma equação funcional associada à energia do sistema&lt;br /&gt;
A equação que rege o problema eletrostático é a equação de laplace, e em um problema 2D fica:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\frac{\partial^2 {V}}{\partial x^2} + \frac{\partial^2 {V}}{\partial y^2} = 0&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\nabla . \vec{D} = \rho&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\vec{E} = - \nabla V&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\vec{D} = \epsilon \vec{E}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\nabla ^2 V = - \frac{\rho}{\epsilon}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\nabla ^2 V = 0&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
F = \int_{\omega} \frac{1}{2} E^2 d\omega&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Como analisamos elemento por elemento, podemos dizer que o funcional vai ser constante dentro de um elemento, e tem que ser minimizado &lt;br /&gt;
dentro desse elemento, para tal, eu minimizo o funcional com relação a cada nó do elemento, o que me leva a um conjunto de equações que podemos organizar no que se conhece como matriz elementar, se eu tenho 3 nós em cada elemento vou ter uma matriz 3 por 3. &lt;br /&gt;
&lt;br /&gt;
[[Arquivo:Matriz elementar.png|400px|thumb|center|]] &lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
C_{ij} = \frac{\epsilon}{2Det} (q_i q_j + r_i r_j)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mas eu preciso minimizar o funcional em todos os elementos, então a contribuição de cada elemento deve ser inserida na matriz global - MXM - sendo M o número de nós. Na matriz global nós somamos os termos dos nós que se interseccionam em diferentes elementos. É preciso de duas condições de contorno (valores para 2 nós), substituindo elas na matriz global eu consigo calcular os valores para os nós que eu desconheço. Depois de resolver os valores para os nós, eu consigo determinar a solução em qualquer ponto do domínio.&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:Contribuição elemento.png|400px|thumb|center|]] &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Um exemplo de como ficaria a matriz global e seus elementos para uma determinada malha:&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:Matrizglobal.png|400px|thumb|center|]] &lt;br /&gt;
&lt;br /&gt;
Por fim tendo a matriz global determinada e com as condições de contorno aplicadas, sua resolução trará enfim a solução do problema pelo método de elementos finitos.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Programas CAE ===&lt;br /&gt;
&lt;br /&gt;
Na engenharia este método é largamente aplicado, porém raramente utilizado desta forma, criando a matriz manualmente e os programas para solução do método. Existem programas que estão a décadas sendo aperfeiçoados, alguns proprietários como o CONSOL, e outros livres como OpenFOAM, Calcuix, ElmerFEM, entre outros.&lt;br /&gt;
&lt;br /&gt;
A implementação do MEF em projetos costuma seguir um workflow assim: &lt;br /&gt;
&lt;br /&gt;
# Desenho do modelo 3D que deseja estudar.&lt;br /&gt;
# Transformar este modelo em uma malha, no formato que os programas de elementos finitos reconhecem.&lt;br /&gt;
# Indicar o problema físico a ser estudado e suas condições iniciais aplicadas ao modelo 3D.&lt;br /&gt;
# Rodar o programa adequado para o problema.&lt;br /&gt;
# Utilizar de programas para examinar os resultados.&lt;br /&gt;
&lt;br /&gt;
Como pode-se ver no diagrama abaixo também:&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:FEM Workbench workflow.png|400px|thumb|center| Workflow no FreeCAD - https://wiki.freecadweb.org/FEM_Workbench]]&lt;/div&gt;</summary>
		<author><name>Renanrs</name></author>
	</entry>
	<entry>
		<id>http://fiscomp.if.ufrgs.br/index.php?title=M%C3%A9todo_de_Elementos_Finitos&amp;diff=5866</id>
		<title>Método de Elementos Finitos</title>
		<link rel="alternate" type="text/html" href="http://fiscomp.if.ufrgs.br/index.php?title=M%C3%A9todo_de_Elementos_Finitos&amp;diff=5866"/>
		<updated>2021-10-15T13:56:09Z</updated>

		<summary type="html">&lt;p&gt;Renanrs: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Em construção - as referencias e imagens ainda estão faltando&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Grupo: Antônio Carlan, Gabriela Pereira, Renan Soares e Victor Gandara&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Objetivo:&#039;&#039;&#039; Apresentar uma introdução do Método de Elementos Finitos, abordando seu funcionamento e demonstrando suas etapas através de um exemplo, demonstrando seu potencial e o que o diferencia de outros métodos estudados nas cadeiras de métodos computacionais até então vistos.&lt;br /&gt;
&lt;br /&gt;
= Introdução ao Método de Elementos Finitos(MEF) =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Aplicação ===&lt;br /&gt;
 &lt;br /&gt;
Este é um método numérico de resolução aproximada para problemas de valores sobre contorno em equações diferenciais. É largamente utilizado na industrial para o desenvolvimento de novas tecnologias e produtos, pode ser utilizado tanto no processo de desenvolvimento quanto de otimização, através da simulação da física de situações em que se espera que o projeto atue.&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:FAE visualization.jpg|400px|thumb|center| Simulação de deformação de um veiculo https://en.wikipedia.org/wiki/Finite_element_method]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
O que torna este método diferente é a forma com que ele discretiza e faz suas aproximações. Sua discretização é feita na geometria, ou seja, repartindo o objeto em diversos elementos menores. Desta forma é possível que se resolva problemas em geometrias complexas cuja solução analítica é desconhecida e que seriam muito difíceis com outros métodos. Também permite trabalhar de maneira simples com materiais compostos, ou de diferentes densidades em um objeto, uma vez que podemos definir tais propriedades individualmente para cada elemento.&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:Exemplo inicio .png|400px|thumb|center| Modelo normal e modelo discretizado e representado por uma malha e simulação de estresse sofrido no objeto.]]&lt;br /&gt;
&lt;br /&gt;
=== O Método ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;q&amp;gt; O conceito fundamental do MEF é a aproximação de uma quantidade continua(p. ex., tensão elétrica, temperatura, etc.) através de um modelo discreto composto por um conjunto de funções simples que são definidas em um número finito de subdomínios(elementos)&amp;lt;/q&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A resolução de um problema através do MEF envolve quatro etapas principais:&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;Discretização da região:&#039;&#039;&#039; Transformar o objeto de estudo em vários elementos menores que juntos formam o objeto original de forma aproximada e a isso chama-se &#039;&#039;&#039;Malha&#039;&#039;&#039;.&lt;br /&gt;
# &#039;&#039;&#039;Aproximação da solução:&#039;&#039;&#039; Obtenção das equações correspondentes de cada elemento, através de interpolação polinomial.&lt;br /&gt;
# &#039;&#039;&#039;Montagem do sistema global:&#039;&#039;&#039; Juntar os elementos e suas equações em uma matriz que fornecerá a solução global.&lt;br /&gt;
# &#039;&#039;&#039;Resolução do sistema:&#039;&#039;&#039; Resolver a matriz gerada para obter a solução aproximada do problema.&lt;br /&gt;
&lt;br /&gt;
==== Discretização: A Malha ====&lt;br /&gt;
&lt;br /&gt;
A malha define o domínio do problema, ela é a base do método. Porém não é parte do algoritmo em si. Normalmente é criada automaticamente por um programa especifico para isso, como GMSH e NetGen. Apenas sendo fornecida as especificações que se deseja para a malha, vão influenciar na quantidade de nós, na dimensão do domínio e na precisão da aproximação.&lt;br /&gt;
&lt;br /&gt;
Ela é composta por um conjunto de pontos interligados que descrevem o objeto. Estes pontos são chamados de &#039;&#039;&#039;nós&#039;&#039;&#039; e a união destes nós forma um elemento, e a união destes elementos formam o objeto que é nosso domínio.&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:Nos.png|400px|thumb|center| Malha composta por elementos que são compostos por nós.]]&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;Dimensão:&#039;&#039;&#039; A malha pode ser unidimensional, bidimensional ou tridimensional.&lt;br /&gt;
[[Arquivo:Print slide 5.png|400px|thumb|center| Malha composta por elementos que são compostos por nós.]]&lt;br /&gt;
# &#039;&#039;&#039;Ordem:&#039;&#039;&#039; Quanto maior a ordem da malha mais precisa será a aproximação dos resultados entre os nós, porém aumenta o consumo computacional.&lt;br /&gt;
# &#039;&#039;&#039;Densidade de elementos:&#039;&#039;&#039; Pode-se escolher por gerar uma malha mais ou menos detalhada, isso implica no consumo computacional. Quanto mais detalhada a malha, ou seja, quanto maior o numero de nós da malha, menor será o erro de aproximação do problema real.&lt;br /&gt;
[[Arquivo:Densidade de malha.png|400px|thumb|center| Discretização de uma área utilizando o software GMSH com diferentes padrões gerando duas malhas com diferentes densidades de nós.]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Funcionamento do método ===&lt;br /&gt;
&lt;br /&gt;
Cada nó desta malha terá atribuída uma variável do problema físico que esta sendo implementado(o valor da grandeza contínua para aquele ponto), como Tensão Elétrica, Dilatação, Temperatura, etc. Esta variável é chamada &#039;&#039;&#039;Valor nodal&#039;&#039;&#039;, ela representa a solução da equação naquele ponto (Variáveis nodais = incógnitas ou graus de liberdade do problema).&lt;br /&gt;
[[Arquivo:Slide7.png|400px|thumb|center|]]&lt;br /&gt;
&lt;br /&gt;
Já a grandeza contínua é aproximada em cada elemento por um &#039;&#039;&#039;polinômio&#039;&#039;&#039; que é definido usando os valores nodais da grandeza. Ou seja, nós iremos descobrir os valores nodais dos nós e entre eles,os valores da grandeza contínua serão dados por uma aproximação polinomial.&lt;br /&gt;
&lt;br /&gt;
Lembrando que os elementos são formados pelos nós e que os valores nodais estão associado aos nós e não ao elemento diretamente.&lt;br /&gt;
&lt;br /&gt;
Então, cada elemento terá um polinômio que descreve a grandeza contínua na região entre os nós que formam este elemento, no caso de uma matriz com elementos de primeira ordem, será uma reta entre os valores nodais. Os polinômios são escolhidos/deduzidos de forma que a continuidade seja mantida na fronteira entre os elementos, utilizando os métodos matemáticos adequados para isso.&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Este polinômio resulta de um ajuste dos valores nodais para que se tenha uma boa aproximação da grandeza real, este ajuste é feito através da minimização de alguma grandeza associada ao problema.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==== Interpolação ====&lt;br /&gt;
&lt;br /&gt;
Os valores nodais, que são nossas incógnitas, precisam ser isolados e deixados em função das coordenadas dos nós, que possuímos através da malha de elementos finitos já gerada.&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:Slide9.png|400px|thumb|center|]] &lt;br /&gt;
 &lt;br /&gt;
&amp;lt;math&amp;gt; V_1 e V_2 &amp;lt;/math&amp;gt; -&amp;gt; valores nodais&lt;br /&gt;
&amp;lt;math&amp;gt; x_1 e x_2 &amp;lt;/math&amp;gt; -&amp;gt; coordenadas dos nós&lt;br /&gt;
&amp;lt;math&amp;gt; L = x_2 - x_1 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aproximação polinomial no caso da malha de primeira ordem: &lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
V(x) = a_1 + a_2 x &lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As variáveis a1 e a2 são coeficientes da interpolação, porém não as temos e não queremos deixa-las no calculo, para isso:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
V_1 = a_1 + a_2 x_1 &lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
V_2 = a_1 + a_2 x_2&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
logo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 \begin{bmatrix}&lt;br /&gt;
 V_1 \\&lt;br /&gt;
 V_2 \\&lt;br /&gt;
 \end{bmatrix}&lt;br /&gt;
 = &lt;br /&gt;
 \begin{bmatrix}&lt;br /&gt;
 1 &amp;amp; x_1 \\&lt;br /&gt;
 1 &amp;amp; x_2 \\&lt;br /&gt;
 \end{bmatrix}&lt;br /&gt;
 \begin{bmatrix}&lt;br /&gt;
 a_1 \\&lt;br /&gt;
 a_2 \\&lt;br /&gt;
 \end{bmatrix}&lt;br /&gt;
 &amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Portanto:&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
a_1 = \frac{1}{L} (V_1 x_2 - V_2 x_2)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
a_2 = \frac{1}{L} (V_1 - V_2)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Substituindo os valores de &amp;lt;math&amp;gt; a_1 &amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt; a_2 &amp;lt;/math&amp;gt; na equação de interpolação anterior &amp;lt;math&amp;gt; V(x) = a_1 + a_2 x  &amp;lt;/math&amp;gt; ficaremos com:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
V(x) = \frac{1}{L} [V_1 x_2 - V_2 x_1 + (V_2 - V_1) x]&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ou, como é definido a aproximação nodal:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
V(x) = \frac{(x_2 - x)}{L} V_1 + \frac{(x - x_1)}{L} V_2&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Esta fica conhecida por aproximação nodal pois a grandeza &amp;lt;math&amp;gt; V(x) &amp;lt;/math&amp;gt; pode ser obtida em qualquer ponto do intervalo &amp;lt;math&amp;gt; [x_1, x_2] &amp;lt;/math&amp;gt; a partir dos valores &amp;lt;math&amp;gt; V_1 &amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt; V_2 &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===== Função Interpolação =====&lt;br /&gt;
&lt;br /&gt;
Esta aproximação nodal pode ainda ser reescrita como:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
V(x) = \phi_1{(x)}V_1 + \phi_2{(x)}V_2&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Com: &lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\phi_1{(x)} = \frac{x_2 - x}{L}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
e &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\phi_2{(x)} = \frac{x - x_1}{L}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
sendo &amp;lt;math&amp;gt; L = x_2 - x_1 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As funções &amp;lt;math&amp;gt;\phi_1{(x)}&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;\phi_2{(x)}&amp;lt;/math&amp;gt; são conhecidas como &#039;&#039;&#039;funções de interpolação&#039;&#039;&#039; e são responsáveis por fazer com que cada nó do elemento contribua com uma parte do valor resultante em qualquer ponto dentro do elemento.&lt;br /&gt;
&lt;br /&gt;
E devido a propriedade do  delta de Kronecker, vista abaixo, é garantido que as equações só terão valor entre os nós dentro do elemento que são definidos:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\phi_i{(x_j)} =\left\{\begin{array}{lc} 1, \quad \text{se}\quad i=j\\&lt;br /&gt;
0, \quad \text{se} \quad i \ne j \end{array}\right.&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Então, por exemplo, nossa equação para o elemento 1, no caso visto aqui de 1D, para um problema  de tensão, fica:&lt;br /&gt;
&lt;br /&gt;
Elemento 1:&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
V^{(1)} (x) = \phi_1^{(1)}(x) V_1 \phi_2^{(1)}(x) V_2&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Com:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\phi_1^{(1)}{(x)} = \frac{x_2 - x}{x_2 - x_1}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
e&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\phi_2^{(1)}{(x)} = \frac{x - x_1}{x_2 - x_1}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Fica fácil perceber que os valores nodais dos dois nós se interpolam e contribuem para os valores entre para o resultado.&lt;br /&gt;
&lt;br /&gt;
A notação geral da função interpolação fica:&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\phi_i^{(e)} (x)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Em que: &amp;lt;math&amp;gt; (e) = elemento &amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt; i = nó &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As funções são diferentes para cada elemento e elas são nulas fora do elemento a que pertencem.&lt;br /&gt;
&lt;br /&gt;
Também existem a função chapéu, que é outro tipo de interpolação.&lt;br /&gt;
&lt;br /&gt;
==== Solução Global ====&lt;br /&gt;
&lt;br /&gt;
Seguindo com o caso do problema de tensão elétrica, a solução global será dada pelo somatório das funções de interpolação de cada elemento.&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
V_ex (x) \cong V(x) - \sum_{e=1}^{N_{elem}} V^{(e)} (x)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Até aqui nós chegamos a essa equação partindo da premissa que temos os valores nodais, fizemos isso apenas para explicar como os valores nodas e suas interpolações se comportam na malha.&lt;br /&gt;
&lt;br /&gt;
Porém os valores nodais são as nossas incógnitas e são eles quem queremos descobrir, a interpolação será a predição dos valores entre os valores nodais.&lt;br /&gt;
&lt;br /&gt;
Como visto, no MEF cada elemento terá suas próprias equações baseadas nos seus valores nodais e nas coordenadas destes valores. Para de fato introduzir o problema físico precisamos da forma fraca dele.&lt;br /&gt;
&lt;br /&gt;
===== Forma Fraca =====&lt;br /&gt;
&lt;br /&gt;
Quando se tem uma problema envolvendo um operador diferencial, é possível usar o que se conhece por forma fraca do operador, que nada mais é que a representação integral do problema, a qual já engloba/explicita as condições de contorno e utiliza-se o método de resíduos ponderados para isso.&lt;br /&gt;
&lt;br /&gt;
Para a construção da forma fraca nós podemos escolher uma função arbitrária w(x) e multiplicá-la pela forma forte, que é a equação diferencial original que descreve o problema, e pela condição de contorno em x=0. Em sequência nós integramos ambas dentro do domínio onde elas foram definidas. Como w(x) ´e uma função arbitrária que pode ser qualquer função, ela força a solução, já que qualquer coisa multiplicada por ela tem que ser 0.&lt;br /&gt;
&lt;br /&gt;
Alternativamente, podemos encontrar a forma fraca através da minimização de um funcional, um método chamado de Método Variacional, dentro de um espaço de funções válido para o nosso problema e suas condições de contorno. A obtenção desse funcional não é um processo trivial, mas quando se trata de problemas físicos, esse funcional coincide com a energia do sistema, sendo, por exemplo, a energia potencial elástica do sólido para problemas de mecânica dos sólidos e a energia eletrostática armazenada na região de cálculo para problemas eletrostáticos (eq de laplace). A função que minimiza essa energia é a solução do problema original. Como discretizamos o problema, devemos minimizar o funcional com relação a cada nó. Se eu tenho 10 nós vou ter 10 eq (derivadas igualadas a 0) para minimizar o funcional nos 10 nós.&lt;br /&gt;
&lt;br /&gt;
Usando o problema eletrostático para exemplificar o Método Variacional:&lt;br /&gt;
&lt;br /&gt;
Obtém-se uma equação funcional associada à energia do sistema&lt;br /&gt;
A equação que rege o problema eletrostático é a equação de laplace, e em um problema 2D fica:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\frac{\partial^2 {V}}{\partial x^2} + \frac{\partial^2 {V}}{\partial y^2} = 0&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\nabla . \vec{D} = \rho&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\vec{E} = - \nabla V&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\vec{D} = \epsilon \vec{E}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\nabla ^2 V = - \frac{\rho}{\epsilon}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\nabla ^2 V = 0&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
F = \int_{\omega} \frac{1}{2} E^2 d\omega&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Como analisamos elemento por elemento, podemos dizer que o funcional vai ser constante dentro de um elemento, e tem que ser minimizado &lt;br /&gt;
dentro desse elemento, para tal, eu minimizo o funcional com relação a cada nó do elemento, o que me leva a um conjunto de equações que podemos organizar no que se conhece como matriz elementar, se eu tenho 3 nós em cada elemento vou ter uma matriz 3 por 3. &lt;br /&gt;
&lt;br /&gt;
[[Arquivo:Matriz elementar.png|400px|thumb|center|]] &lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
C_{ij} = \frac{\epsilon}{2Det} (q_i q_j + r_i r_j)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mas eu preciso minimizar o funcional em todos os elementos, então a contribuição de cada elemento deve ser inserida na matriz global - MXM - sendo M o número de nós. Na matriz global nós somamos os termos dos nós que se interseccionam em diferentes elementos. É preciso de duas condições de contorno (valores para 2 nós), substituindo elas na matriz global eu consigo calcular os valores para os nós que eu desconheço. Depois de resolver os valores para os nós, eu consigo determinar a solução em qualquer ponto do domínio.&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:Contribuição elemento.png|400px|thumb|center|]] &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Um exemplo de como ficaria a matriz global e seus elementos para uma determinada malha:&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:Matrizglobal.png|400px|thumb|center|]] &lt;br /&gt;
&lt;br /&gt;
Por fim tendo a matriz global determinada e com as condições de contorno aplicadas, sua resolução trará enfim a solução do problema pelo método de elementos finitos.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Programas CAE ===&lt;br /&gt;
&lt;br /&gt;
Na engenharia este método é largamente aplicado, porém raramente utilizado desta forma, criando a matriz manualmente e os programas para solução do método. Existem programas que estão a décadas sendo aperfeiçoados, alguns proprietários como o CONSOL, e outros livres como OpenFOAM, Calcuix, ElmerFEM, entre outros.&lt;br /&gt;
&lt;br /&gt;
A implementação do MEF em projetos costuma seguir um workflow assim: &lt;br /&gt;
&lt;br /&gt;
# Desenho do modelo 3D que deseja estudar.&lt;br /&gt;
# Transformar este modelo em uma malha, no formato que os programas de elementos finitos reconhecem.&lt;br /&gt;
# Indicar o problema físico a ser estudado e suas condições iniciais aplicadas ao modelo 3D.&lt;br /&gt;
# Rodar o programa adequado para o problema.&lt;br /&gt;
# Utilizar de programas para examinar os resultados.&lt;br /&gt;
&lt;br /&gt;
Como pode-se ver no diagrama abaixo também:&lt;br /&gt;
&lt;br /&gt;
[imagem do workflow do freecad]&lt;/div&gt;</summary>
		<author><name>Renanrs</name></author>
	</entry>
	<entry>
		<id>http://fiscomp.if.ufrgs.br/index.php?title=M%C3%A9todo_de_Elementos_Finitos&amp;diff=5865</id>
		<title>Método de Elementos Finitos</title>
		<link rel="alternate" type="text/html" href="http://fiscomp.if.ufrgs.br/index.php?title=M%C3%A9todo_de_Elementos_Finitos&amp;diff=5865"/>
		<updated>2021-10-15T13:53:16Z</updated>

		<summary type="html">&lt;p&gt;Renanrs: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Em construção - as referencias e imagens ainda estão faltando&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Grupo: Antônio Carlan, Gabriela Pereira, Renan Soares e Victor Gandara&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Objetivo:&#039;&#039;&#039; Apresentar uma introdução do Método de Elementos Finitos, abordando seu funcionamento e demonstrando suas etapas através de um exemplo, demonstrando seu potencial e o que o diferencia de outros métodos estudados nas cadeiras de métodos computacionais até então vistos.&lt;br /&gt;
&lt;br /&gt;
= Introdução ao Método de Elementos Finitos(MEF) =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Aplicação ===&lt;br /&gt;
 &lt;br /&gt;
Este é um método numérico de resolução aproximada para problemas de valores sobre contorno em equações diferenciais. É largamente utilizado na industrial para o desenvolvimento de novas tecnologias e produtos, pode ser utilizado tanto no processo de desenvolvimento quanto de otimização, através da simulação da física de situações em que se espera que o projeto atue.&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:FAE visualization.jpg|400px|thumb|center| Simulação de deformação de um veiculo https://en.wikipedia.org/wiki/Finite_element_method]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
O que torna este método diferente é a forma com que ele discretiza e faz suas aproximações. Sua discretização é feita na geometria, ou seja, repartindo o objeto em diversos elementos menores. Desta forma é possível que se resolva problemas em geometrias complexas cuja solução analítica é desconhecida e que seriam muito difíceis com outros métodos. Também permite trabalhar de maneira simples com materiais compostos, ou de diferentes densidades em um objeto, uma vez que podemos definir tais propriedades individualmente para cada elemento.&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:Exemplo inicio .png|400px|thumb|center| Modelo normal e modelo discretizado e representado por uma malha e simulação de estresse sofrido no objeto.]]&lt;br /&gt;
&lt;br /&gt;
=== O Método ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;q&amp;gt; O conceito fundamental do MEF é a aproximação de uma quantidade continua(p. ex., tensão elétrica, temperatura, etc.) através de um modelo discreto composto por um conjunto de funções simples que são definidas em um número finito de subdomínios(elementos)&amp;lt;/q&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A resolução de um problema através do MEF envolve quatro etapas principais:&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;Discretização da região:&#039;&#039;&#039; Transformar o objeto de estudo em vários elementos menores que juntos formam o objeto original de forma aproximada e a isso chama-se &#039;&#039;&#039;Malha&#039;&#039;&#039;.&lt;br /&gt;
# &#039;&#039;&#039;Aproximação da solução:&#039;&#039;&#039; Obtenção das equações correspondentes de cada elemento, através de interpolação polinomial.&lt;br /&gt;
# &#039;&#039;&#039;Montagem do sistema global:&#039;&#039;&#039; Juntar os elementos e suas equações em uma matriz que fornecerá a solução global.&lt;br /&gt;
# &#039;&#039;&#039;Resolução do sistema:&#039;&#039;&#039; Resolver a matriz gerada para obter a solução aproximada do problema.&lt;br /&gt;
&lt;br /&gt;
==== Discretização: A Malha ====&lt;br /&gt;
&lt;br /&gt;
A malha define o domínio do problema, ela é a base do método. Porém não é parte do algoritmo em si. Normalmente é criada automaticamente por um programa especifico para isso, como GMSH e NetGen. Apenas sendo fornecida as especificações que se deseja para a malha, vão influenciar na quantidade de nós, na dimensão do domínio e na precisão da aproximação.&lt;br /&gt;
&lt;br /&gt;
Ela é composta por um conjunto de pontos interligados que descrevem o objeto. Estes pontos são chamados de &#039;&#039;&#039;nós&#039;&#039;&#039; e a união destes nós forma um elemento, e a união destes elementos formam o objeto que é nosso domínio.&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:Nos.png|400px|thumb|center| Malha composta por elementos que são compostos por nós.]]&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;Dimensão:&#039;&#039;&#039; A malha pode ser unidimensional, bidimensional ou tridimensional.&lt;br /&gt;
[[Arquivo:Print slide 5.png|400px|thumb|center| Malha composta por elementos que são compostos por nós.]]&lt;br /&gt;
# &#039;&#039;&#039;Ordem:&#039;&#039;&#039; Quanto maior a ordem da malha mais precisa será a aproximação dos resultados entre os nós, porém aumenta o consumo computacional.&lt;br /&gt;
# &#039;&#039;&#039;Densidade de elementos:&#039;&#039;&#039; Pode-se escolher por gerar uma malha mais ou menos detalhada, isso implica no consumo computacional. Quanto mais detalhada a malha, ou seja, quanto maior o numero de nós da malha, menor será o erro de aproximação do problema real.&lt;br /&gt;
[[Arquivo:Densidade de malha.png|400px|thumb|center| Discretização de uma área utilizando o software GMSH com diferentes padrões gerando duas malhas com diferentes densidades de nós.]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Funcionamento do método ===&lt;br /&gt;
&lt;br /&gt;
Cada nó desta malha terá atribuída uma variável do problema físico que esta sendo implementado(o valor da grandeza contínua para aquele ponto), como Tensão Elétrica, Dilatação, Temperatura, etc. Esta variável é chamada &#039;&#039;&#039;Valor nodal&#039;&#039;&#039;, ela representa a solução da equação naquele ponto (Variáveis nodais = incógnitas ou graus de liberdade do problema).&lt;br /&gt;
[[Arquivo:Slide7.png|400px|thumb|center|]]&lt;br /&gt;
&lt;br /&gt;
Já a grandeza contínua é aproximada em cada elemento por um &#039;&#039;&#039;polinômio&#039;&#039;&#039; que é definido usando os valores nodais da grandeza. Ou seja, nós iremos descobrir os valores nodais dos nós e entre eles,os valores da grandeza contínua serão dados por uma aproximação polinomial.&lt;br /&gt;
&lt;br /&gt;
Lembrando que os elementos são formados pelos nós e que os valores nodais estão associado aos nós e não ao elemento diretamente.&lt;br /&gt;
&lt;br /&gt;
Então, cada elemento terá um polinômio que descreve a grandeza contínua na região entre os nós que formam este elemento, no caso de uma matriz com elementos de primeira ordem, será uma reta entre os valores nodais. Os polinômios são escolhidos/deduzidos de forma que a continuidade seja mantida na fronteira entre os elementos, utilizando os métodos matemáticos adequados para isso.&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Este polinômio resulta de um ajuste dos valores nodais para que se tenha uma boa aproximação da grandeza real, este ajuste é feito através da minimização de alguma grandeza associada ao problema.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==== Interpolação ====&lt;br /&gt;
&lt;br /&gt;
Os valores nodais, que são nossas incógnitas, precisam ser isolados e deixados em função das coordenadas dos nós, que possuímos através da malha de elementos finitos já gerada.&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:Slide9.png|400px|thumb|center|]] &lt;br /&gt;
 &lt;br /&gt;
&amp;lt;math&amp;gt; V_1 e V_2 &amp;lt;/math&amp;gt; -&amp;gt; valores nodais&lt;br /&gt;
&amp;lt;math&amp;gt; x_1 e x_2 &amp;lt;/math&amp;gt; -&amp;gt; coordenadas dos nós&lt;br /&gt;
&amp;lt;math&amp;gt; L = x_2 - x_1 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aproximação polinomial no caso da malha de primeira ordem: &lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
V(x) = a_1 + a_2 x &lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As variáveis a1 e a2 são coeficientes da interpolação, porém não as temos e não queremos deixa-las no calculo, para isso:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
V_1 = a_1 + a_2 x_1 &lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
V_2 = a_1 + a_2 x_2&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
logo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 \begin{bmatrix}&lt;br /&gt;
 V_1 \\&lt;br /&gt;
 V_2 \\&lt;br /&gt;
 \end{bmatrix}&lt;br /&gt;
 = &lt;br /&gt;
 \begin{bmatrix}&lt;br /&gt;
 1 &amp;amp; x_1 \\&lt;br /&gt;
 1 &amp;amp; x_2 \\&lt;br /&gt;
 \end{bmatrix}&lt;br /&gt;
 \begin{bmatrix}&lt;br /&gt;
 a_1 \\&lt;br /&gt;
 a_2 \\&lt;br /&gt;
 \end{bmatrix}&lt;br /&gt;
 &amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Portanto:&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
a_1 = \frac{1}{L} (V_1 x_2 - V_2 x_2)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
a_2 = \frac{1}{L} (V_1 - V_2)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Substituindo os valores de &amp;lt;math&amp;gt; a_1 &amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt; a_2 &amp;lt;/math&amp;gt; na equação de interpolação anterior &amp;lt;math&amp;gt; V(x) = a_1 + a_2 x  &amp;lt;/math&amp;gt; ficaremos com:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
V(x) = \frac{1}{L} [V_1 x_2 - V_2 x_1 + (V_2 - V_1) x]&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ou, como é definido a aproximação nodal:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
V(x) = \frac{(x_2 - x)}{L} V_1 + \frac{(x - x_1)}{L} V_2&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Esta fica conhecida por aproximação nodal pois a grandeza &amp;lt;math&amp;gt; V(x) &amp;lt;/math&amp;gt; pode ser obtida em qualquer ponto do intervalo &amp;lt;math&amp;gt; [x_1, x_2] &amp;lt;/math&amp;gt; a partir dos valores &amp;lt;math&amp;gt; V_1 &amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt; V_2 &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===== Função Interpolação =====&lt;br /&gt;
&lt;br /&gt;
Esta aproximação nodal pode ainda ser reescrita como:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
V(x) = \phi_1{(x)}V_1 + \phi_2{(x)}V_2&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Com: &lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\phi_1{(x)} = \frac{x_2 - x}{L}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
e &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\phi_2{(x)} = \frac{x - x_1}{L}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
sendo &amp;lt;math&amp;gt; L = x_2 - x_1 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As funções &amp;lt;math&amp;gt;\phi_1{(x)}&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;\phi_2{(x)}&amp;lt;/math&amp;gt; são conhecidas como &#039;&#039;&#039;funções de interpolação&#039;&#039;&#039; e são responsáveis por fazer com que cada nó do elemento contribua com uma parte do valor resultante em qualquer ponto dentro do elemento.&lt;br /&gt;
&lt;br /&gt;
E devido a propriedade do  delta de Kronecker, vista abaixo, é garantido que as equações só terão valor entre os nós dentro do elemento que são definidos:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\phi_i{(x_j)} =\left\{\begin{array}{lc} 1, \quad \text{se}\quad i=j\\&lt;br /&gt;
0, \quad \text{se} \quad i \ne j \end{array}\right.&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[imagem gráfico interpolação aula 3 aos 10 min]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Então, por exemplo, nossa equação para o elemento 1, no caso visto aqui de 1D, para um problema  de tensão, fica:&lt;br /&gt;
&lt;br /&gt;
Elemento 1:&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
V^{(1)} (x) = \phi_1^{(1)}(x) V_1 \phi_2^{(1)}(x) V_2&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Com:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\phi_1^{(1)}{(x)} = \frac{x_2 - x}{x_2 - x_1}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
e&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\phi_2^{(1)}{(x)} = \frac{x - x_1}{x_2 - x_1}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Fica fácil perceber que os valores nodais dos dois nós se interpolam e contribuem para os valores entre para o resultado.&lt;br /&gt;
&lt;br /&gt;
A notação geral da função interpolação fica:&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\phi_i^{(e)} (x)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Em que: &amp;lt;math&amp;gt; (e) = elemento &amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt; i = nó &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As funções são diferentes para cada elemento e elas são nulas fora do elemento a que pertencem.&lt;br /&gt;
&lt;br /&gt;
Também existem a função chapéu, que é outro tipo de interpolação.&lt;br /&gt;
&lt;br /&gt;
==== Solução Global ====&lt;br /&gt;
&lt;br /&gt;
Seguindo com o caso do problema de tensão elétrica, a solução global será dada pelo somatório das funções de interpolação de cada elemento.&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
V_ex (x) \cong V(x) - \sum_{e=1}^{N_{elem}} V^{(e)} (x)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Até aqui nós chegamos a essa equação partindo da premissa que temos os valores nodais, fizemos isso apenas para explicar como os valores nodas e suas interpolações se comportam na malha.&lt;br /&gt;
&lt;br /&gt;
Porém os valores nodais são as nossas incógnitas e são eles quem queremos descobrir, a interpolação será a predição dos valores entre os valores nodais.&lt;br /&gt;
&lt;br /&gt;
Como visto, no MEF cada elemento terá suas próprias equações baseadas nos seus valores nodais e nas coordenadas destes valores. Para de fato introduzir o problema físico precisamos da forma fraca dele.&lt;br /&gt;
&lt;br /&gt;
===== Forma Fraca =====&lt;br /&gt;
&lt;br /&gt;
Quando se tem uma problema envolvendo um operador diferencial, é possível usar o que se conhece por forma fraca do operador, que nada mais é que a representação integral do problema, a qual já engloba/explicita as condições de contorno e utiliza-se o método de resíduos ponderados para isso.&lt;br /&gt;
&lt;br /&gt;
Para a construção da forma fraca nós podemos escolher uma função arbitrária w(x) e multiplicá-la pela forma forte, que é a equação diferencial original que descreve o problema, e pela condição de contorno em x=0. Em sequência nós integramos ambas dentro do domínio onde elas foram definidas. Como w(x) ´e uma função arbitrária que pode ser qualquer função, ela força a solução, já que qualquer coisa multiplicada por ela tem que ser 0.&lt;br /&gt;
&lt;br /&gt;
Alternativamente, podemos encontrar a forma fraca através da minimização de um funcional, um método chamado de Método Variacional, dentro de um espaço de funções válido para o nosso problema e suas condições de contorno. A obtenção desse funcional não é um processo trivial, mas quando se trata de problemas físicos, esse funcional coincide com a energia do sistema, sendo, por exemplo, a energia potencial elástica do sólido para problemas de mecânica dos sólidos e a energia eletrostática armazenada na região de cálculo para problemas eletrostáticos (eq de laplace). A função que minimiza essa energia é a solução do problema original. Como discretizamos o problema, devemos minimizar o funcional com relação a cada nó. Se eu tenho 10 nós vou ter 10 eq (derivadas igualadas a 0) para minimizar o funcional nos 10 nós.&lt;br /&gt;
&lt;br /&gt;
Usando o problema eletrostático para exemplificar o Método Variacional:&lt;br /&gt;
&lt;br /&gt;
Obtém-se uma equação funcional associada à energia do sistema&lt;br /&gt;
A equação que rege o problema eletrostático é a equação de laplace, e em um problema 2D fica:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\frac{\partial^2 {V}}{\partial x^2} + \frac{\partial^2 {V}}{\partial y^2} = 0&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\nabla . \vec{D} = \rho&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\vec{E} = - \nabla V&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\vec{D} = \epsilon \vec{E}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\nabla ^2 V = - \frac{\rho}{\epsilon}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\nabla ^2 V = 0&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
F = \int_{\omega} \frac{1}{2} E^2 d\omega&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Como analisamos elemento por elemento, podemos dizer que o funcional vai ser constante dentro de um elemento, e tem que ser minimizado &lt;br /&gt;
dentro desse elemento, para tal, eu minimizo o funcional com relação a cada nó do elemento, o que me leva a um conjunto de equações que podemos organizar no que se conhece como matriz elementar, se eu tenho 3 nós em cada elemento vou ter uma matriz 3 por 3. &lt;br /&gt;
&lt;br /&gt;
[foto da matriz elementar]&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
C_{ij} = \frac{\epsilon}{2Det} (q_i q_j + r_i r_j)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mas eu preciso minimizar o funcional em todos os elementos, então a contribuição de cada elemento deve ser inserida na matriz global - MXM - sendo M o número de nós. Na matriz global nós somamos os termos dos nós que se interseccionam em diferentes elementos. É preciso de duas condições de contorno (valores para 2 nós), substituindo elas na matriz global eu consigo calcular os valores para os nós que eu desconheço. Depois de resolver os valores para os nós, eu consigo determinar a solução em qualquer ponto do domínio.&lt;br /&gt;
&lt;br /&gt;
[imagem contribuição de um elemento na matriz global] &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Um exemplo de como ficaria a matriz global e seus elementos para uma determinada malha:&lt;br /&gt;
&lt;br /&gt;
[imagem da matriz global e seus elementos] &lt;br /&gt;
&lt;br /&gt;
Por fim tendo a matriz global determinada e com as condições de contorno aplicadas, sua resolução trará enfim a solução do problema pelo método de elementos finitos.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Programas CAE ===&lt;br /&gt;
&lt;br /&gt;
Na engenharia este método é largamente aplicado, porém raramente utilizado desta forma, criando a matriz manualmente e os programas para solução do método. Existem programas que estão a décadas sendo aperfeiçoados, alguns proprietários como o CONSOL, e outros livres como OpenFOAM, Calcuix, ElmerFEM, entre outros.&lt;br /&gt;
&lt;br /&gt;
A implementação do MEF em projetos costuma seguir um workflow assim: &lt;br /&gt;
&lt;br /&gt;
# Desenho do modelo 3D que deseja estudar.&lt;br /&gt;
# Transformar este modelo em uma malha, no formato que os programas de elementos finitos reconhecem.&lt;br /&gt;
# Indicar o problema físico a ser estudado e suas condições iniciais aplicadas ao modelo 3D.&lt;br /&gt;
# Rodar o programa adequado para o problema.&lt;br /&gt;
# Utilizar de programas para examinar os resultados.&lt;br /&gt;
&lt;br /&gt;
Como pode-se ver no diagrama abaixo também:&lt;br /&gt;
&lt;br /&gt;
[imagem do workflow do freecad]&lt;/div&gt;</summary>
		<author><name>Renanrs</name></author>
	</entry>
	<entry>
		<id>http://fiscomp.if.ufrgs.br/index.php?title=M%C3%A9todo_de_Elementos_Finitos&amp;diff=5864</id>
		<title>Método de Elementos Finitos</title>
		<link rel="alternate" type="text/html" href="http://fiscomp.if.ufrgs.br/index.php?title=M%C3%A9todo_de_Elementos_Finitos&amp;diff=5864"/>
		<updated>2021-10-15T13:52:34Z</updated>

		<summary type="html">&lt;p&gt;Renanrs: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Em construção - as referencias e imagens ainda estão faltando&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Grupo: Antônio Carlan, Gabriela Pereira, Renan Soares e Victor Gandara&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Objetivo:&#039;&#039;&#039; Apresentar uma introdução do Método de Elementos Finitos, abordando seu funcionamento e demonstrando suas etapas através de um exemplo, demonstrando seu potencial e o que o diferencia de outros métodos estudados nas cadeiras de métodos computacionais até então vistos.&lt;br /&gt;
&lt;br /&gt;
= Introdução ao Método de Elementos Finitos(MEF) =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Aplicação ===&lt;br /&gt;
 &lt;br /&gt;
Este é um método numérico de resolução aproximada para problemas de valores sobre contorno em equações diferenciais. É largamente utilizado na industrial para o desenvolvimento de novas tecnologias e produtos, pode ser utilizado tanto no processo de desenvolvimento quanto de otimização, através da simulação da física de situações em que se espera que o projeto atue.&lt;br /&gt;
&lt;br /&gt;
[Arquivo:FAE visualization.jpg|400px|thumb|left| Simulação de deformação de um veiculo https://en.wikipedia.org/wiki/Finite_element_method]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
O que torna este método diferente é a forma com que ele discretiza e faz suas aproximações. Sua discretização é feita na geometria, ou seja, repartindo o objeto em diversos elementos menores. Desta forma é possível que se resolva problemas em geometrias complexas cuja solução analítica é desconhecida e que seriam muito difíceis com outros métodos. Também permite trabalhar de maneira simples com materiais compostos, ou de diferentes densidades em um objeto, uma vez que podemos definir tais propriedades individualmente para cada elemento.&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:Exemplo inicio .png|400px|thumb|left| Modelo normal e modelo discretizado e representado por uma malha e simulação de estresse sofrido no objeto.]]&lt;br /&gt;
&lt;br /&gt;
=== O Método ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;q&amp;gt; O conceito fundamental do MEF é a aproximação de uma quantidade continua(p. ex., tensão elétrica, temperatura, etc.) através de um modelo discreto composto por um conjunto de funções simples que são definidas em um número finito de subdomínios(elementos)&amp;lt;/q&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A resolução de um problema através do MEF envolve quatro etapas principais:&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;Discretização da região:&#039;&#039;&#039; Transformar o objeto de estudo em vários elementos menores que juntos formam o objeto original de forma aproximada e a isso chama-se &#039;&#039;&#039;Malha&#039;&#039;&#039;.&lt;br /&gt;
# &#039;&#039;&#039;Aproximação da solução:&#039;&#039;&#039; Obtenção das equações correspondentes de cada elemento, através de interpolação polinomial.&lt;br /&gt;
# &#039;&#039;&#039;Montagem do sistema global:&#039;&#039;&#039; Juntar os elementos e suas equações em uma matriz que fornecerá a solução global.&lt;br /&gt;
# &#039;&#039;&#039;Resolução do sistema:&#039;&#039;&#039; Resolver a matriz gerada para obter a solução aproximada do problema.&lt;br /&gt;
&lt;br /&gt;
==== Discretização: A Malha ====&lt;br /&gt;
&lt;br /&gt;
A malha define o domínio do problema, ela é a base do método. Porém não é parte do algoritmo em si. Normalmente é criada automaticamente por um programa especifico para isso, como GMSH e NetGen. Apenas sendo fornecida as especificações que se deseja para a malha, vão influenciar na quantidade de nós, na dimensão do domínio e na precisão da aproximação.&lt;br /&gt;
&lt;br /&gt;
Ela é composta por um conjunto de pontos interligados que descrevem o objeto. Estes pontos são chamados de &#039;&#039;&#039;nós&#039;&#039;&#039; e a união destes nós forma um elemento, e a união destes elementos formam o objeto que é nosso domínio.&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:Nos.png|400px|thumb|left| Malha composta por elementos que são compostos por nós.]]&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;Dimensão:&#039;&#039;&#039; A malha pode ser unidimensional, bidimensional ou tridimensional.&lt;br /&gt;
[[Arquivo:Print slide 5.png|400px|thumb|left| Malha composta por elementos que são compostos por nós.]]&lt;br /&gt;
# &#039;&#039;&#039;Ordem:&#039;&#039;&#039; Quanto maior a ordem da malha mais precisa será a aproximação dos resultados entre os nós, porém aumenta o consumo computacional.&lt;br /&gt;
# &#039;&#039;&#039;Densidade de elementos:&#039;&#039;&#039; Pode-se escolher por gerar uma malha mais ou menos detalhada, isso implica no consumo computacional. Quanto mais detalhada a malha, ou seja, quanto maior o numero de nós da malha, menor será o erro de aproximação do problema real.&lt;br /&gt;
[[Arquivo:Densidade de malha.png|400px|thumb|left| Discretização de uma área utilizando o software GMSH com diferentes padrões gerando duas malhas com diferentes densidades de nós.]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Funcionamento do método ===&lt;br /&gt;
&lt;br /&gt;
Cada nó desta malha terá atribuída uma variável do problema físico que esta sendo implementado(o valor da grandeza contínua para aquele ponto), como Tensão Elétrica, Dilatação, Temperatura, etc. Esta variável é chamada &#039;&#039;&#039;Valor nodal&#039;&#039;&#039;, ela representa a solução da equação naquele ponto (Variáveis nodais = incógnitas ou graus de liberdade do problema).&lt;br /&gt;
[[Arquivo:Slide7.png|400px|thumb|left|]]&lt;br /&gt;
&lt;br /&gt;
Já a grandeza contínua é aproximada em cada elemento por um &#039;&#039;&#039;polinômio&#039;&#039;&#039; que é definido usando os valores nodais da grandeza. Ou seja, nós iremos descobrir os valores nodais dos nós e entre eles,os valores da grandeza contínua serão dados por uma aproximação polinomial.&lt;br /&gt;
&lt;br /&gt;
Lembrando que os elementos são formados pelos nós e que os valores nodais estão associado aos nós e não ao elemento diretamente.&lt;br /&gt;
&lt;br /&gt;
Então, cada elemento terá um polinômio que descreve a grandeza contínua na região entre os nós que formam este elemento, no caso de uma matriz com elementos de primeira ordem, será uma reta entre os valores nodais. Os polinômios são escolhidos/deduzidos de forma que a continuidade seja mantida na fronteira entre os elementos, utilizando os métodos matemáticos adequados para isso.&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Este polinômio resulta de um ajuste dos valores nodais para que se tenha uma boa aproximação da grandeza real, este ajuste é feito através da minimização de alguma grandeza associada ao problema.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==== Interpolação ====&lt;br /&gt;
&lt;br /&gt;
Os valores nodais, que são nossas incógnitas, precisam ser isolados e deixados em função das coordenadas dos nós, que possuímos através da malha de elementos finitos já gerada.&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:Slide9.png|400px|thumb|left|]] &lt;br /&gt;
 &lt;br /&gt;
&amp;lt;math&amp;gt; V_1 e V_2 &amp;lt;/math&amp;gt; -&amp;gt; valores nodais&lt;br /&gt;
&amp;lt;math&amp;gt; x_1 e x_2 &amp;lt;/math&amp;gt; -&amp;gt; coordenadas dos nós&lt;br /&gt;
&amp;lt;math&amp;gt; L = x_2 - x_1 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aproximação polinomial no caso da malha de primeira ordem: &lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
V(x) = a_1 + a_2 x &lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As variáveis a1 e a2 são coeficientes da interpolação, porém não as temos e não queremos deixa-las no calculo, para isso:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
V_1 = a_1 + a_2 x_1 &lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
V_2 = a_1 + a_2 x_2&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
logo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 \begin{bmatrix}&lt;br /&gt;
 V_1 \\&lt;br /&gt;
 V_2 \\&lt;br /&gt;
 \end{bmatrix}&lt;br /&gt;
 = &lt;br /&gt;
 \begin{bmatrix}&lt;br /&gt;
 1 &amp;amp; x_1 \\&lt;br /&gt;
 1 &amp;amp; x_2 \\&lt;br /&gt;
 \end{bmatrix}&lt;br /&gt;
 \begin{bmatrix}&lt;br /&gt;
 a_1 \\&lt;br /&gt;
 a_2 \\&lt;br /&gt;
 \end{bmatrix}&lt;br /&gt;
 &amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Portanto:&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
a_1 = \frac{1}{L} (V_1 x_2 - V_2 x_2)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
a_2 = \frac{1}{L} (V_1 - V_2)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Substituindo os valores de &amp;lt;math&amp;gt; a_1 &amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt; a_2 &amp;lt;/math&amp;gt; na equação de interpolação anterior &amp;lt;math&amp;gt; V(x) = a_1 + a_2 x  &amp;lt;/math&amp;gt; ficaremos com:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
V(x) = \frac{1}{L} [V_1 x_2 - V_2 x_1 + (V_2 - V_1) x]&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ou, como é definido a aproximação nodal:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
V(x) = \frac{(x_2 - x)}{L} V_1 + \frac{(x - x_1)}{L} V_2&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Esta fica conhecida por aproximação nodal pois a grandeza &amp;lt;math&amp;gt; V(x) &amp;lt;/math&amp;gt; pode ser obtida em qualquer ponto do intervalo &amp;lt;math&amp;gt; [x_1, x_2] &amp;lt;/math&amp;gt; a partir dos valores &amp;lt;math&amp;gt; V_1 &amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt; V_2 &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===== Função Interpolação =====&lt;br /&gt;
&lt;br /&gt;
Esta aproximação nodal pode ainda ser reescrita como:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
V(x) = \phi_1{(x)}V_1 + \phi_2{(x)}V_2&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Com: &lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\phi_1{(x)} = \frac{x_2 - x}{L}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
e &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\phi_2{(x)} = \frac{x - x_1}{L}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
sendo &amp;lt;math&amp;gt; L = x_2 - x_1 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As funções &amp;lt;math&amp;gt;\phi_1{(x)}&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;\phi_2{(x)}&amp;lt;/math&amp;gt; são conhecidas como &#039;&#039;&#039;funções de interpolação&#039;&#039;&#039; e são responsáveis por fazer com que cada nó do elemento contribua com uma parte do valor resultante em qualquer ponto dentro do elemento.&lt;br /&gt;
&lt;br /&gt;
E devido a propriedade do  delta de Kronecker, vista abaixo, é garantido que as equações só terão valor entre os nós dentro do elemento que são definidos:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\phi_i{(x_j)} =\left\{\begin{array}{lc} 1, \quad \text{se}\quad i=j\\&lt;br /&gt;
0, \quad \text{se} \quad i \ne j \end{array}\right.&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[imagem gráfico interpolação aula 3 aos 10 min]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Então, por exemplo, nossa equação para o elemento 1, no caso visto aqui de 1D, para um problema  de tensão, fica:&lt;br /&gt;
&lt;br /&gt;
Elemento 1:&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
V^{(1)} (x) = \phi_1^{(1)}(x) V_1 \phi_2^{(1)}(x) V_2&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Com:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\phi_1^{(1)}{(x)} = \frac{x_2 - x}{x_2 - x_1}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
e&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\phi_2^{(1)}{(x)} = \frac{x - x_1}{x_2 - x_1}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Fica fácil perceber que os valores nodais dos dois nós se interpolam e contribuem para os valores entre para o resultado.&lt;br /&gt;
&lt;br /&gt;
A notação geral da função interpolação fica:&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\phi_i^{(e)} (x)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Em que: &amp;lt;math&amp;gt; (e) = elemento &amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt; i = nó &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As funções são diferentes para cada elemento e elas são nulas fora do elemento a que pertencem.&lt;br /&gt;
&lt;br /&gt;
Também existem a função chapéu, que é outro tipo de interpolação.&lt;br /&gt;
&lt;br /&gt;
==== Solução Global ====&lt;br /&gt;
&lt;br /&gt;
Seguindo com o caso do problema de tensão elétrica, a solução global será dada pelo somatório das funções de interpolação de cada elemento.&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
V_ex (x) \cong V(x) - \sum_{e=1}^{N_{elem}} V^{(e)} (x)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Até aqui nós chegamos a essa equação partindo da premissa que temos os valores nodais, fizemos isso apenas para explicar como os valores nodas e suas interpolações se comportam na malha.&lt;br /&gt;
&lt;br /&gt;
Porém os valores nodais são as nossas incógnitas e são eles quem queremos descobrir, a interpolação será a predição dos valores entre os valores nodais.&lt;br /&gt;
&lt;br /&gt;
Como visto, no MEF cada elemento terá suas próprias equações baseadas nos seus valores nodais e nas coordenadas destes valores. Para de fato introduzir o problema físico precisamos da forma fraca dele.&lt;br /&gt;
&lt;br /&gt;
===== Forma Fraca =====&lt;br /&gt;
&lt;br /&gt;
Quando se tem uma problema envolvendo um operador diferencial, é possível usar o que se conhece por forma fraca do operador, que nada mais é que a representação integral do problema, a qual já engloba/explicita as condições de contorno e utiliza-se o método de resíduos ponderados para isso.&lt;br /&gt;
&lt;br /&gt;
Para a construção da forma fraca nós podemos escolher uma função arbitrária w(x) e multiplicá-la pela forma forte, que é a equação diferencial original que descreve o problema, e pela condição de contorno em x=0. Em sequência nós integramos ambas dentro do domínio onde elas foram definidas. Como w(x) ´e uma função arbitrária que pode ser qualquer função, ela força a solução, já que qualquer coisa multiplicada por ela tem que ser 0.&lt;br /&gt;
&lt;br /&gt;
Alternativamente, podemos encontrar a forma fraca através da minimização de um funcional, um método chamado de Método Variacional, dentro de um espaço de funções válido para o nosso problema e suas condições de contorno. A obtenção desse funcional não é um processo trivial, mas quando se trata de problemas físicos, esse funcional coincide com a energia do sistema, sendo, por exemplo, a energia potencial elástica do sólido para problemas de mecânica dos sólidos e a energia eletrostática armazenada na região de cálculo para problemas eletrostáticos (eq de laplace). A função que minimiza essa energia é a solução do problema original. Como discretizamos o problema, devemos minimizar o funcional com relação a cada nó. Se eu tenho 10 nós vou ter 10 eq (derivadas igualadas a 0) para minimizar o funcional nos 10 nós.&lt;br /&gt;
&lt;br /&gt;
Usando o problema eletrostático para exemplificar o Método Variacional:&lt;br /&gt;
&lt;br /&gt;
Obtém-se uma equação funcional associada à energia do sistema&lt;br /&gt;
A equação que rege o problema eletrostático é a equação de laplace, e em um problema 2D fica:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\frac{\partial^2 {V}}{\partial x^2} + \frac{\partial^2 {V}}{\partial y^2} = 0&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\nabla . \vec{D} = \rho&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\vec{E} = - \nabla V&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\vec{D} = \epsilon \vec{E}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\nabla ^2 V = - \frac{\rho}{\epsilon}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\nabla ^2 V = 0&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
F = \int_{\omega} \frac{1}{2} E^2 d\omega&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Como analisamos elemento por elemento, podemos dizer que o funcional vai ser constante dentro de um elemento, e tem que ser minimizado &lt;br /&gt;
dentro desse elemento, para tal, eu minimizo o funcional com relação a cada nó do elemento, o que me leva a um conjunto de equações que podemos organizar no que se conhece como matriz elementar, se eu tenho 3 nós em cada elemento vou ter uma matriz 3 por 3. &lt;br /&gt;
&lt;br /&gt;
[foto da matriz elementar]&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
C_{ij} = \frac{\epsilon}{2Det} (q_i q_j + r_i r_j)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mas eu preciso minimizar o funcional em todos os elementos, então a contribuição de cada elemento deve ser inserida na matriz global - MXM - sendo M o número de nós. Na matriz global nós somamos os termos dos nós que se interseccionam em diferentes elementos. É preciso de duas condições de contorno (valores para 2 nós), substituindo elas na matriz global eu consigo calcular os valores para os nós que eu desconheço. Depois de resolver os valores para os nós, eu consigo determinar a solução em qualquer ponto do domínio.&lt;br /&gt;
&lt;br /&gt;
[imagem contribuição de um elemento na matriz global] &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Um exemplo de como ficaria a matriz global e seus elementos para uma determinada malha:&lt;br /&gt;
&lt;br /&gt;
[imagem da matriz global e seus elementos] &lt;br /&gt;
&lt;br /&gt;
Por fim tendo a matriz global determinada e com as condições de contorno aplicadas, sua resolução trará enfim a solução do problema pelo método de elementos finitos.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Programas CAE ===&lt;br /&gt;
&lt;br /&gt;
Na engenharia este método é largamente aplicado, porém raramente utilizado desta forma, criando a matriz manualmente e os programas para solução do método. Existem programas que estão a décadas sendo aperfeiçoados, alguns proprietários como o CONSOL, e outros livres como OpenFOAM, Calcuix, ElmerFEM, entre outros.&lt;br /&gt;
&lt;br /&gt;
A implementação do MEF em projetos costuma seguir um workflow assim: &lt;br /&gt;
&lt;br /&gt;
# Desenho do modelo 3D que deseja estudar.&lt;br /&gt;
# Transformar este modelo em uma malha, no formato que os programas de elementos finitos reconhecem.&lt;br /&gt;
# Indicar o problema físico a ser estudado e suas condições iniciais aplicadas ao modelo 3D.&lt;br /&gt;
# Rodar o programa adequado para o problema.&lt;br /&gt;
# Utilizar de programas para examinar os resultados.&lt;br /&gt;
&lt;br /&gt;
Como pode-se ver no diagrama abaixo também:&lt;br /&gt;
&lt;br /&gt;
[imagem do workflow do freecad]&lt;/div&gt;</summary>
		<author><name>Renanrs</name></author>
	</entry>
	<entry>
		<id>http://fiscomp.if.ufrgs.br/index.php?title=M%C3%A9todo_de_Elementos_Finitos&amp;diff=5863</id>
		<title>Método de Elementos Finitos</title>
		<link rel="alternate" type="text/html" href="http://fiscomp.if.ufrgs.br/index.php?title=M%C3%A9todo_de_Elementos_Finitos&amp;diff=5863"/>
		<updated>2021-10-15T13:50:52Z</updated>

		<summary type="html">&lt;p&gt;Renanrs: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Em construção - as referencias e imagens ainda estão faltando&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Grupo: Antônio Carlan, Gabriela Pereira, Renan Soares e Victor Gandara&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Objetivo:&#039;&#039;&#039; Apresentar uma introdução do Método de Elementos Finitos, abordando seu funcionamento e demonstrando suas etapas através de um exemplo, demonstrando seu potencial e o que o diferencia de outros métodos estudados nas cadeiras de métodos computacionais até então vistos.&lt;br /&gt;
&lt;br /&gt;
= Introdução ao Método de Elementos Finitos(MEF) =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Aplicação ===&lt;br /&gt;
 &lt;br /&gt;
Este é um método numérico de resolução aproximada para problemas de valores sobre contorno em equações diferenciais. É largamente utilizado na industrial para o desenvolvimento de novas tecnologias e produtos, pode ser utilizado tanto no processo de desenvolvimento quanto de otimização, através da simulação da física de situações em que se espera que o projeto atue.&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:FAE visualization.jpg|400px|thumb|left| Simulação de deformação de um veiculo https://en.wikipedia.org/wiki/Finite_element_method]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
O que torna este método diferente é a forma com que ele discretiza e faz suas aproximações. Sua discretização é feita na geometria, ou seja, repartindo o objeto em diversos elementos menores. Desta forma é possível que se resolva problemas em geometrias complexas cuja solução analítica é desconhecida e que seriam muito difíceis com outros métodos. Também permite trabalhar de maneira simples com materiais compostos, ou de diferentes densidades em um objeto, uma vez que podemos definir tais propriedades individualmente para cada elemento.&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:Exemplo inicio .png|400px|thumb|left| Modelo normal e modelo discretizado e representado por uma malha e simulação de estresse sofrido no objeto.]]&lt;br /&gt;
&lt;br /&gt;
=== O Método ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;q&amp;gt; O conceito fundamental do MEF é a aproximação de uma quantidade continua(p. ex., tensão elétrica, temperatura, etc.) através de um modelo discreto composto por um conjunto de funções simples que são definidas em um número finito de subdomínios(elementos)&amp;lt;/q&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A resolução de um problema através do MEF envolve quatro etapas principais:&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;Discretização da região:&#039;&#039;&#039; Transformar o objeto de estudo em vários elementos menores que juntos formam o objeto original de forma aproximada e a isso chama-se &#039;&#039;&#039;Malha&#039;&#039;&#039;.&lt;br /&gt;
# &#039;&#039;&#039;Aproximação da solução:&#039;&#039;&#039; Obtenção das equações correspondentes de cada elemento, através de interpolação polinomial.&lt;br /&gt;
# &#039;&#039;&#039;Montagem do sistema global:&#039;&#039;&#039; Juntar os elementos e suas equações em uma matriz que fornecerá a solução global.&lt;br /&gt;
# &#039;&#039;&#039;Resolução do sistema:&#039;&#039;&#039; Resolver a matriz gerada para obter a solução aproximada do problema.&lt;br /&gt;
&lt;br /&gt;
==== Discretização: A Malha ====&lt;br /&gt;
&lt;br /&gt;
A malha define o domínio do problema, ela é a base do método. Porém não é parte do algoritmo em si. Normalmente é criada automaticamente por um programa especifico para isso, como GMSH e NetGen. Apenas sendo fornecida as especificações que se deseja para a malha, vão influenciar na quantidade de nós, na dimensão do domínio e na precisão da aproximação.&lt;br /&gt;
&lt;br /&gt;
Ela é composta por um conjunto de pontos interligados que descrevem o objeto. Estes pontos são chamados de &#039;&#039;&#039;nós&#039;&#039;&#039; e a união destes nós forma um elemento, e a união destes elementos formam o objeto que é nosso domínio.&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:Nos.png|400px|thumb|left| Malha composta por elementos que são compostos por nós.]]&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;Dimensão:&#039;&#039;&#039; A malha pode ser unidimensional, bidimensional ou tridimensional.&lt;br /&gt;
[[Arquivo:Print slide 5.png|400px|thumb|left| Malha composta por elementos que são compostos por nós.]]&lt;br /&gt;
# &#039;&#039;&#039;Ordem:&#039;&#039;&#039; Quanto maior a ordem da malha mais precisa será a aproximação dos resultados entre os nós, porém aumenta o consumo computacional.&lt;br /&gt;
# &#039;&#039;&#039;Densidade de elementos:&#039;&#039;&#039; Pode-se escolher por gerar uma malha mais ou menos detalhada, isso implica no consumo computacional. Quanto mais detalhada a malha, ou seja, quanto maior o numero de nós da malha, menor será o erro de aproximação do problema real.&lt;br /&gt;
[[Arquivo:Densidade de malha.png|400px|thumb|left| Discretização de uma área utilizando o software GMSH com diferentes padrões gerando duas malhas com diferentes densidades de nós.]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Funcionamento do método ===&lt;br /&gt;
&lt;br /&gt;
Cada nó desta malha terá atribuída uma variável do problema físico que esta sendo implementado(o valor da grandeza contínua para aquele ponto), como Tensão Elétrica, Dilatação, Temperatura, etc. Esta variável é chamada &#039;&#039;&#039;Valor nodal&#039;&#039;&#039;, ela representa a solução da equação naquele ponto (Variáveis nodais = incógnitas ou graus de liberdade do problema).&lt;br /&gt;
[[Arquivo:Slide7.png|400px|thumb|left|]]&lt;br /&gt;
&lt;br /&gt;
Já a grandeza contínua é aproximada em cada elemento por um &#039;&#039;&#039;polinômio&#039;&#039;&#039; que é definido usando os valores nodais da grandeza. Ou seja, nós iremos descobrir os valores nodais dos nós e entre eles,os valores da grandeza contínua serão dados por uma aproximação polinomial.&lt;br /&gt;
&lt;br /&gt;
Lembrando que os elementos são formados pelos nós e que os valores nodais estão associado aos nós e não ao elemento diretamente.&lt;br /&gt;
&lt;br /&gt;
Então, cada elemento terá um polinômio que descreve a grandeza contínua na região entre os nós que formam este elemento, no caso de uma matriz com elementos de primeira ordem, será uma reta entre os valores nodais. Os polinômios são escolhidos/deduzidos de forma que a continuidade seja mantida na fronteira entre os elementos, utilizando os métodos matemáticos adequados para isso.&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Este polinômio resulta de um ajuste dos valores nodais para que se tenha uma boa aproximação da grandeza real, este ajuste é feito através da minimização de alguma grandeza associada ao problema.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==== Interpolação ====&lt;br /&gt;
&lt;br /&gt;
Os valores nodais, que são nossas incógnitas, precisam ser isolados e deixados em função das coordenadas dos nós, que possuímos através da malha de elementos finitos já gerada.&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:Slide9.png|400px|thumb|left|]] &lt;br /&gt;
 &lt;br /&gt;
&amp;lt;math&amp;gt; V_1 e V_2 &amp;lt;/math&amp;gt; -&amp;gt; valores nodais&lt;br /&gt;
&amp;lt;math&amp;gt; x_1 e x_2 &amp;lt;/math&amp;gt; -&amp;gt; coordenadas dos nós&lt;br /&gt;
&amp;lt;math&amp;gt; L = x_2 - x_1 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aproximação polinomial no caso da malha de primeira ordem: &lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
V(x) = a_1 + a_2 x &lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As variáveis a1 e a2 são coeficientes da interpolação, porém não as temos e não queremos deixa-las no calculo, para isso:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
V_1 = a_1 + a_2 x_1 &lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
V_2 = a_1 + a_2 x_2&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
logo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 \begin{bmatrix}&lt;br /&gt;
 V_1 \\&lt;br /&gt;
 V_2 \\&lt;br /&gt;
 \end{bmatrix}&lt;br /&gt;
 = &lt;br /&gt;
 \begin{bmatrix}&lt;br /&gt;
 1 &amp;amp; x_1 \\&lt;br /&gt;
 1 &amp;amp; x_2 \\&lt;br /&gt;
 \end{bmatrix}&lt;br /&gt;
 \begin{bmatrix}&lt;br /&gt;
 a_1 \\&lt;br /&gt;
 a_2 \\&lt;br /&gt;
 \end{bmatrix}&lt;br /&gt;
 &amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Portanto:&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
a_1 = \frac{1}{L} (V_1 x_2 - V_2 x_2)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
a_2 = \frac{1}{L} (V_1 - V_2)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Substituindo os valores de &amp;lt;math&amp;gt; a_1 &amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt; a_2 &amp;lt;/math&amp;gt; na equação de interpolação anterior &amp;lt;math&amp;gt; V(x) = a_1 + a_2 x  &amp;lt;/math&amp;gt; ficaremos com:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
V(x) = \frac{1}{L} [V_1 x_2 - V_2 x_1 + (V_2 - V_1) x]&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ou, como é definido a aproximação nodal:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
V(x) = \frac{(x_2 - x)}{L} V_1 + \frac{(x - x_1)}{L} V_2&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Esta fica conhecida por aproximação nodal pois a grandeza &amp;lt;math&amp;gt; V(x) &amp;lt;/math&amp;gt; pode ser obtida em qualquer ponto do intervalo &amp;lt;math&amp;gt; [x_1, x_2] &amp;lt;/math&amp;gt; a partir dos valores &amp;lt;math&amp;gt; V_1 &amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt; V_2 &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===== Função Interpolação =====&lt;br /&gt;
&lt;br /&gt;
Esta aproximação nodal pode ainda ser reescrita como:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
V(x) = \phi_1{(x)}V_1 + \phi_2{(x)}V_2&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Com: &lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\phi_1{(x)} = \frac{x_2 - x}{L}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
e &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\phi_2{(x)} = \frac{x - x_1}{L}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
sendo &amp;lt;math&amp;gt; L = x_2 - x_1 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As funções &amp;lt;math&amp;gt;\phi_1{(x)}&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;\phi_2{(x)}&amp;lt;/math&amp;gt; são conhecidas como &#039;&#039;&#039;funções de interpolação&#039;&#039;&#039; e são responsáveis por fazer com que cada nó do elemento contribua com uma parte do valor resultante em qualquer ponto dentro do elemento.&lt;br /&gt;
&lt;br /&gt;
E devido a propriedade do  delta de Kronecker, vista abaixo, é garantido que as equações só terão valor entre os nós dentro do elemento que são definidos:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\phi_i{(x_j)} =\left\{\begin{array}{lc} 1, \quad \text{se}\quad i=j\\&lt;br /&gt;
0, \quad \text{se} \quad i \ne j \end{array}\right.&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[imagem gráfico interpolação aula 3 aos 10 min]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Então, por exemplo, nossa equação para o elemento 1, no caso visto aqui de 1D, para um problema  de tensão, fica:&lt;br /&gt;
&lt;br /&gt;
Elemento 1:&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
V^{(1)} (x) = \phi_1^{(1)}(x) V_1 \phi_2^{(1)}(x) V_2&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Com:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\phi_1^{(1)}{(x)} = \frac{x_2 - x}{x_2 - x_1}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
e&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\phi_2^{(1)}{(x)} = \frac{x - x_1}{x_2 - x_1}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Fica fácil perceber que os valores nodais dos dois nós se interpolam e contribuem para os valores entre para o resultado.&lt;br /&gt;
&lt;br /&gt;
A notação geral da função interpolação fica:&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\phi_i^{(e)} (x)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Em que: &amp;lt;math&amp;gt; (e) = elemento &amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt; i = nó &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As funções são diferentes para cada elemento e elas são nulas fora do elemento a que pertencem.&lt;br /&gt;
&lt;br /&gt;
Também existem a função chapéu, que é outro tipo de interpolação.&lt;br /&gt;
&lt;br /&gt;
==== Solução Global ====&lt;br /&gt;
&lt;br /&gt;
Seguindo com o caso do problema de tensão elétrica, a solução global será dada pelo somatório das funções de interpolação de cada elemento.&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
V_ex (x) \cong V(x) - \sum_{e=1}^{N_{elem}} V^{(e)} (x)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Até aqui nós chegamos a essa equação partindo da premissa que temos os valores nodais, fizemos isso apenas para explicar como os valores nodas e suas interpolações se comportam na malha.&lt;br /&gt;
&lt;br /&gt;
Porém os valores nodais são as nossas incógnitas e são eles quem queremos descobrir, a interpolação será a predição dos valores entre os valores nodais.&lt;br /&gt;
&lt;br /&gt;
Como visto, no MEF cada elemento terá suas próprias equações baseadas nos seus valores nodais e nas coordenadas destes valores. Para de fato introduzir o problema físico precisamos da forma fraca dele.&lt;br /&gt;
&lt;br /&gt;
===== Forma Fraca =====&lt;br /&gt;
&lt;br /&gt;
Quando se tem uma problema envolvendo um operador diferencial, é possível usar o que se conhece por forma fraca do operador, que nada mais é que a representação integral do problema, a qual já engloba/explicita as condições de contorno e utiliza-se o método de resíduos ponderados para isso.&lt;br /&gt;
&lt;br /&gt;
Para a construção da forma fraca nós podemos escolher uma função arbitrária w(x) e multiplicá-la pela forma forte, que é a equação diferencial original que descreve o problema, e pela condição de contorno em x=0. Em sequência nós integramos ambas dentro do domínio onde elas foram definidas. Como w(x) ´e uma função arbitrária que pode ser qualquer função, ela força a solução, já que qualquer coisa multiplicada por ela tem que ser 0.&lt;br /&gt;
&lt;br /&gt;
Alternativamente, podemos encontrar a forma fraca através da minimização de um funcional, um método chamado de Método Variacional, dentro de um espaço de funções válido para o nosso problema e suas condições de contorno. A obtenção desse funcional não é um processo trivial, mas quando se trata de problemas físicos, esse funcional coincide com a energia do sistema, sendo, por exemplo, a energia potencial elástica do sólido para problemas de mecânica dos sólidos e a energia eletrostática armazenada na região de cálculo para problemas eletrostáticos (eq de laplace). A função que minimiza essa energia é a solução do problema original. Como discretizamos o problema, devemos minimizar o funcional com relação a cada nó. Se eu tenho 10 nós vou ter 10 eq (derivadas igualadas a 0) para minimizar o funcional nos 10 nós.&lt;br /&gt;
&lt;br /&gt;
Usando o problema eletrostático para exemplificar o Método Variacional:&lt;br /&gt;
&lt;br /&gt;
Obtém-se uma equação funcional associada à energia do sistema&lt;br /&gt;
A equação que rege o problema eletrostático é a equação de laplace, e em um problema 2D fica:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\frac{\partial^2 {V}}{\partial x^2} + \frac{\partial^2 {V}}{\partial y^2} = 0&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\nabla . \vec{D} = \rho&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\vec{E} = - \nabla V&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\vec{D} = \epsilon \vec{E}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\nabla ^2 V = - \frac{\rho}{\epsilon}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\nabla ^2 V = 0&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
F = \int_{\omega} \frac{1}{2} E^2 d\omega&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Como analisamos elemento por elemento, podemos dizer que o funcional vai ser constante dentro de um elemento, e tem que ser minimizado &lt;br /&gt;
dentro desse elemento, para tal, eu minimizo o funcional com relação a cada nó do elemento, o que me leva a um conjunto de equações que podemos organizar no que se conhece como matriz elementar, se eu tenho 3 nós em cada elemento vou ter uma matriz 3 por 3. &lt;br /&gt;
&lt;br /&gt;
[foto da matriz elementar]&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
C_{ij} = \frac{\epsilon}{2Det} (q_i q_j + r_i r_j)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mas eu preciso minimizar o funcional em todos os elementos, então a contribuição de cada elemento deve ser inserida na matriz global - MXM - sendo M o número de nós. Na matriz global nós somamos os termos dos nós que se interseccionam em diferentes elementos. É preciso de duas condições de contorno (valores para 2 nós), substituindo elas na matriz global eu consigo calcular os valores para os nós que eu desconheço. Depois de resolver os valores para os nós, eu consigo determinar a solução em qualquer ponto do domínio.&lt;br /&gt;
&lt;br /&gt;
[imagem contribuição de um elemento na matriz global] &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Um exemplo de como ficaria a matriz global e seus elementos para uma determinada malha:&lt;br /&gt;
&lt;br /&gt;
[imagem da matriz global e seus elementos] &lt;br /&gt;
&lt;br /&gt;
Por fim tendo a matriz global determinada e com as condições de contorno aplicadas, sua resolução trará enfim a solução do problema pelo método de elementos finitos.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Programas CAE ===&lt;br /&gt;
&lt;br /&gt;
Na engenharia este método é largamente aplicado, porém raramente utilizado desta forma, criando a matriz manualmente e os programas para solução do método. Existem programas que estão a décadas sendo aperfeiçoados, alguns proprietários como o CONSOL, e outros livres como OpenFOAM, Calcuix, ElmerFEM, entre outros.&lt;br /&gt;
&lt;br /&gt;
A implementação do MEF em projetos costuma seguir um workflow assim: &lt;br /&gt;
&lt;br /&gt;
# Desenho do modelo 3D que deseja estudar.&lt;br /&gt;
# Transformar este modelo em uma malha, no formato que os programas de elementos finitos reconhecem.&lt;br /&gt;
# Indicar o problema físico a ser estudado e suas condições iniciais aplicadas ao modelo 3D.&lt;br /&gt;
# Rodar o programa adequado para o problema.&lt;br /&gt;
# Utilizar de programas para examinar os resultados.&lt;br /&gt;
&lt;br /&gt;
Como pode-se ver no diagrama abaixo também:&lt;br /&gt;
&lt;br /&gt;
[imagem do workflow do freecad]&lt;/div&gt;</summary>
		<author><name>Renanrs</name></author>
	</entry>
	<entry>
		<id>http://fiscomp.if.ufrgs.br/index.php?title=M%C3%A9todo_de_Elementos_Finitos&amp;diff=5862</id>
		<title>Método de Elementos Finitos</title>
		<link rel="alternate" type="text/html" href="http://fiscomp.if.ufrgs.br/index.php?title=M%C3%A9todo_de_Elementos_Finitos&amp;diff=5862"/>
		<updated>2021-10-15T13:43:29Z</updated>

		<summary type="html">&lt;p&gt;Renanrs: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Em construção - as referencias e imagens ainda estão faltando&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Grupo: Antônio Carlan, Gabriela Pereira, Renan Soares e Victor Gandara&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Objetivo:&#039;&#039;&#039; Apresentar uma introdução do Método de Elementos Finitos, abordando seu funcionamento e demonstrando suas etapas através de um exemplo, demonstrando seu potencial e o que o diferencia de outros métodos estudados nas cadeiras de métodos computacionais até então vistos.&lt;br /&gt;
&lt;br /&gt;
= Introdução ao Método de Elementos Finitos(MEF) =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Aplicação ===&lt;br /&gt;
 &lt;br /&gt;
Este é um método numérico de resolução aproximada para problemas de valores sobre contorno em equações diferenciais. É largamente utilizado na industrial para o desenvolvimento de novas tecnologias e produtos, pode ser utilizado tanto no processo de desenvolvimento quanto de otimização, através da simulação da física de situações em que se espera que o projeto atue.&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:FAE visualization.jpg|500px|thumb|center| Simulação de deformação de um veiculo https://en.wikipedia.org/wiki/Finite_element_method]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
O que torna este método diferente é a forma com que ele discretiza e faz suas aproximações. Sua discretização é feita na geometria, ou seja, repartindo o objeto em diversos elementos menores. Desta forma é possível que se resolva problemas em geometrias complexas cuja solução analítica é desconhecida e que seriam muito difíceis com outros métodos. Também permite trabalhar de maneira simples com materiais compostos, ou de diferentes densidades em um objeto, uma vez que podemos definir tais propriedades individualmente para cada elemento.&lt;br /&gt;
&lt;br /&gt;
[imagen2]&lt;br /&gt;
Modelo normal e modelo discretizado e representado por uma malha.&lt;br /&gt;
[imagem3]&lt;br /&gt;
Simulação de estresse sofrido no objeto.&lt;br /&gt;
&lt;br /&gt;
=== O Método ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;q&amp;gt; O conceito fundamental do MEF é a aproximação de uma quantidade continua(p. ex., tensão elétrica, temperatura, etc.) através de um modelo discreto composto por um conjunto de funções simples que são definidas em um número finito de subdomínios(elementos)&amp;lt;/q&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A resolução de um problema através do MEF envolve quatro etapas principais:&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;Discretização da região:&#039;&#039;&#039; Transformar o objeto de estudo em vários elementos menores que juntos formam o objeto original de forma aproximada e a isso chama-se &#039;&#039;&#039;Malha&#039;&#039;&#039;.&lt;br /&gt;
# &#039;&#039;&#039;Aproximação da solução:&#039;&#039;&#039; Obtenção das equações correspondentes de cada elemento, através de interpolação polinomial.&lt;br /&gt;
# &#039;&#039;&#039;Montagem do sistema global:&#039;&#039;&#039; Juntar os elementos e suas equações em uma matriz que fornecerá a solução global.&lt;br /&gt;
# &#039;&#039;&#039;Resolução do sistema:&#039;&#039;&#039; Resolver a matriz gerada para obter a solução aproximada do problema.&lt;br /&gt;
&lt;br /&gt;
==== Discretização: A Malha ====&lt;br /&gt;
&lt;br /&gt;
A malha define o domínio do problema, ela é a base do método. Porém não é parte do algoritmo em si. Normalmente é criada automaticamente por um programa especifico para isso, como GMSH e NetGen. Apenas sendo fornecida as especificações que se deseja para a malha, vão influenciar na quantidade de nós, na dimensão do domínio e na precisão da aproximação.&lt;br /&gt;
&lt;br /&gt;
Ela é composta por um conjunto de pontos interligados que descrevem o objeto. Estes pontos são chamados de &#039;&#039;&#039;nós&#039;&#039;&#039; e a união destes nós forma um elemento, e a união destes elementos formam o objeto que é nosso domínio.&lt;br /&gt;
&lt;br /&gt;
[imagem nos.png]&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;Dimensão:&#039;&#039;&#039; A malha pode ser unidimensional, bidimensional ou tridimensional.&lt;br /&gt;
[imagem dimensão print slide 5]&lt;br /&gt;
# &#039;&#039;&#039;Ordem:&#039;&#039;&#039; Quanto maior a ordem da malha mais precisa será a aproximação dos resultados entre os nós, porém aumenta o consumo computacional.&lt;br /&gt;
[imagem ordem print slide 5]&lt;br /&gt;
# &#039;&#039;&#039;Densidade de elementos:&#039;&#039;&#039; Pode-se escolher por gerar uma malha mais ou menos detalhada, isso implica no consumo computacional. Quanto mais detalhada a malha, ou seja, quanto maior o numero de nós da malha, menor será o erro de aproximação do problema real.&lt;br /&gt;
[imagem densidade de malhas]&lt;br /&gt;
&lt;br /&gt;
=== Funcionamento do método ===&lt;br /&gt;
&lt;br /&gt;
Cada nó desta malha terá atribuída uma variável do problema físico que esta sendo implementado(o valor da grandeza contínua para aquele ponto), como Tensão Elétrica, Dilatação, Temperatura, etc. Esta variável é chamada &#039;&#039;&#039;Valor nodal&#039;&#039;&#039;, ela representa a solução da equação naquele ponto (Variáveis nodais = incógnitas ou graus de liberdade do problema).&lt;br /&gt;
&lt;br /&gt;
[imagem print slide 7]&lt;br /&gt;
&lt;br /&gt;
Já a grandeza contínua é aproximada em cada elemento por um &#039;&#039;&#039;polinômio&#039;&#039;&#039; que é definido usando os valores nodais da grandeza. Ou seja, nós iremos descobrir os valores nodais dos nós e entre eles,os valores da grandeza contínua serão dados por uma aproximação polinomial.&lt;br /&gt;
&lt;br /&gt;
Lembrando que os elementos são formados pelos nós e que os valores nodais estão associado aos nós e não ao elemento diretamente.&lt;br /&gt;
&lt;br /&gt;
Então, cada elemento terá um polinômio que descreve a grandeza contínua na região entre os nós que formam este elemento, no caso de uma matriz com elementos de primeira ordem, será uma reta entre os valores nodais. Os polinômios são escolhidos/deduzidos de forma que a continuidade seja mantida na fronteira entre os elementos, utilizando os métodos matemáticos adequados para isso.&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Este polinômio resulta de um ajuste dos valores nodais para que se tenha uma boa aproximação da grandeza real, este ajuste é feito através da minimização de alguma grandeza associada ao problema.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==== Interpolação ====&lt;br /&gt;
&lt;br /&gt;
Os valores nodais, que são nossas incógnitas, precisam ser isolados e deixados em função das coordenadas dos nós, que possuímos através da malha de elementos finitos já gerada.&lt;br /&gt;
&lt;br /&gt;
[imagem gráfico slide 9]&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;math&amp;gt; V_1 e V_2 &amp;lt;/math&amp;gt; -&amp;gt; valores nodais&lt;br /&gt;
&amp;lt;math&amp;gt; x_1 e x_2 &amp;lt;/math&amp;gt; -&amp;gt; coordenadas dos nós&lt;br /&gt;
&amp;lt;math&amp;gt; L = x_2 - x_1 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aproximação polinomial no caso da malha de primeira ordem: &lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
V(x) = a_1 + a_2 x &lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As variáveis a1 e a2 são coeficientes da interpolação, porém não as temos e não queremos deixa-las no calculo, para isso:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
V_1 = a_1 + a_2 x_1 &lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
V_2 = a_1 + a_2 x_2&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
logo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 \begin{bmatrix}&lt;br /&gt;
 V_1 \\&lt;br /&gt;
 V_2 \\&lt;br /&gt;
 \end{bmatrix}&lt;br /&gt;
 = &lt;br /&gt;
 \begin{bmatrix}&lt;br /&gt;
 1 &amp;amp; x_1 \\&lt;br /&gt;
 1 &amp;amp; x_2 \\&lt;br /&gt;
 \end{bmatrix}&lt;br /&gt;
 \begin{bmatrix}&lt;br /&gt;
 a_1 \\&lt;br /&gt;
 a_2 \\&lt;br /&gt;
 \end{bmatrix}&lt;br /&gt;
 &amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Portanto:&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
a_1 = \frac{1}{L} (V_1 x_2 - V_2 x_2)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
a_2 = \frac{1}{L} (V_1 - V_2)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Substituindo os valores de &amp;lt;math&amp;gt; a_1 &amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt; a_2 &amp;lt;/math&amp;gt; na equação de interpolação anterior &amp;lt;math&amp;gt; V(x) = a_1 + a_2 x  &amp;lt;/math&amp;gt; ficaremos com:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
V(x) = \frac{1}{L} [V_1 x_2 - V_2 x_1 + (V_2 - V_1) x]&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ou, como é definido a aproximação nodal:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
V(x) = \frac{(x_2 - x)}{L} V_1 + \frac{(x - x_1)}{L} V_2&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Esta fica conhecida por aproximação nodal pois a grandeza &amp;lt;math&amp;gt; V(x) &amp;lt;/math&amp;gt; pode ser obtida em qualquer ponto do intervalo &amp;lt;math&amp;gt; [x_1, x_2] &amp;lt;/math&amp;gt; a partir dos valores &amp;lt;math&amp;gt; V_1 &amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt; V_2 &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===== Função Interpolação =====&lt;br /&gt;
&lt;br /&gt;
Esta aproximação nodal pode ainda ser reescrita como:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
V(x) = \phi_1{(x)}V_1 + \phi_2{(x)}V_2&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Com: &lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\phi_1{(x)} = \frac{x_2 - x}{L}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
e &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\phi_2{(x)} = \frac{x - x_1}{L}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
sendo &amp;lt;math&amp;gt; L = x_2 - x_1 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As funções &amp;lt;math&amp;gt;\phi_1{(x)}&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;\phi_2{(x)}&amp;lt;/math&amp;gt; são conhecidas como &#039;&#039;&#039;funções de interpolação&#039;&#039;&#039; e são responsáveis por fazer com que cada nó do elemento contribua com uma parte do valor resultante em qualquer ponto dentro do elemento.&lt;br /&gt;
&lt;br /&gt;
E devido a propriedade do  delta de Kronecker, vista abaixo, é garantido que as equações só terão valor entre os nós dentro do elemento que são definidos:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\phi_i{(x_j)} =\left\{\begin{array}{lc} 1, \quad \text{se}\quad i=j\\&lt;br /&gt;
0, \quad \text{se} \quad i \ne j \end{array}\right.&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[imagem gráfico interpolação aula 3 aos 10 min]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Então, por exemplo, nossa equação para o elemento 1, no caso visto aqui de 1D, para um problema  de tensão, fica:&lt;br /&gt;
&lt;br /&gt;
Elemento 1:&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
V^{(1)} (x) = \phi_1^{(1)}(x) V_1 \phi_2^{(1)}(x) V_2&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Com:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\phi_1^{(1)}{(x)} = \frac{x_2 - x}{x_2 - x_1}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
e&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\phi_2^{(1)}{(x)} = \frac{x - x_1}{x_2 - x_1}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Fica fácil perceber que os valores nodais dos dois nós se interpolam e contribuem para os valores entre para o resultado.&lt;br /&gt;
&lt;br /&gt;
A notação geral da função interpolação fica:&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\phi_i^{(e)} (x)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Em que: &amp;lt;math&amp;gt; (e) = elemento &amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt; i = nó &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As funções são diferentes para cada elemento e elas são nulas fora do elemento a que pertencem.&lt;br /&gt;
&lt;br /&gt;
Também existem a função chapéu, que é outro tipo de interpolação.&lt;br /&gt;
&lt;br /&gt;
==== Solução Global ====&lt;br /&gt;
&lt;br /&gt;
Seguindo com o caso do problema de tensão elétrica, a solução global será dada pelo somatório das funções de interpolação de cada elemento.&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
V_ex (x) \cong V(x) - \sum_{e=1}^{N_{elem}} V^{(e)} (x)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Até aqui nós chegamos a essa equação partindo da premissa que temos os valores nodais, fizemos isso apenas para explicar como os valores nodas e suas interpolações se comportam na malha.&lt;br /&gt;
&lt;br /&gt;
Porém os valores nodais são as nossas incógnitas e são eles quem queremos descobrir, a interpolação será a predição dos valores entre os valores nodais.&lt;br /&gt;
&lt;br /&gt;
Como visto, no MEF cada elemento terá suas próprias equações baseadas nos seus valores nodais e nas coordenadas destes valores. Para de fato introduzir o problema físico precisamos da forma fraca dele.&lt;br /&gt;
&lt;br /&gt;
===== Forma Fraca =====&lt;br /&gt;
&lt;br /&gt;
Quando se tem uma problema envolvendo um operador diferencial, é possível usar o que se conhece por forma fraca do operador, que nada mais é que a representação integral do problema, a qual já engloba/explicita as condições de contorno e utiliza-se o método de resíduos ponderados para isso.&lt;br /&gt;
&lt;br /&gt;
Para a construção da forma fraca nós podemos escolher uma função arbitrária w(x) e multiplicá-la pela forma forte, que é a equação diferencial original que descreve o problema, e pela condição de contorno em x=0. Em sequência nós integramos ambas dentro do domínio onde elas foram definidas. Como w(x) ´e uma função arbitrária que pode ser qualquer função, ela força a solução, já que qualquer coisa multiplicada por ela tem que ser 0.&lt;br /&gt;
&lt;br /&gt;
Alternativamente, podemos encontrar a forma fraca através da minimização de um funcional, um método chamado de Método Variacional, dentro de um espaço de funções válido para o nosso problema e suas condições de contorno. A obtenção desse funcional não é um processo trivial, mas quando se trata de problemas físicos, esse funcional coincide com a energia do sistema, sendo, por exemplo, a energia potencial elástica do sólido para problemas de mecânica dos sólidos e a energia eletrostática armazenada na região de cálculo para problemas eletrostáticos (eq de laplace). A função que minimiza essa energia é a solução do problema original. Como discretizamos o problema, devemos minimizar o funcional com relação a cada nó. Se eu tenho 10 nós vou ter 10 eq (derivadas igualadas a 0) para minimizar o funcional nos 10 nós.&lt;br /&gt;
&lt;br /&gt;
Usando o problema eletrostático para exemplificar o Método Variacional:&lt;br /&gt;
&lt;br /&gt;
Obtém-se uma equação funcional associada à energia do sistema&lt;br /&gt;
A equação que rege o problema eletrostático é a equação de laplace, e em um problema 2D fica:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\frac{\partial^2 {V}}{\partial x^2} + \frac{\partial^2 {V}}{\partial y^2} = 0&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\nabla . \vec{D} = \rho&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\vec{E} = - \nabla V&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\vec{D} = \epsilon \vec{E}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\nabla ^2 V = - \frac{\rho}{\epsilon}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\nabla ^2 V = 0&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
F = \int_{\omega} \frac{1}{2} E^2 d\omega&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Como analisamos elemento por elemento, podemos dizer que o funcional vai ser constante dentro de um elemento, e tem que ser minimizado &lt;br /&gt;
dentro desse elemento, para tal, eu minimizo o funcional com relação a cada nó do elemento, o que me leva a um conjunto de equações que podemos organizar no que se conhece como matriz elementar, se eu tenho 3 nós em cada elemento vou ter uma matriz 3 por 3. &lt;br /&gt;
&lt;br /&gt;
[foto da matriz elementar]&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
C_{ij} = \frac{\epsilon}{2Det} (q_i q_j + r_i r_j)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mas eu preciso minimizar o funcional em todos os elementos, então a contribuição de cada elemento deve ser inserida na matriz global - MXM - sendo M o número de nós. Na matriz global nós somamos os termos dos nós que se interseccionam em diferentes elementos. É preciso de duas condições de contorno (valores para 2 nós), substituindo elas na matriz global eu consigo calcular os valores para os nós que eu desconheço. Depois de resolver os valores para os nós, eu consigo determinar a solução em qualquer ponto do domínio.&lt;br /&gt;
&lt;br /&gt;
[imagem contribuição de um elemento na matriz global] &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Um exemplo de como ficaria a matriz global e seus elementos para uma determinada malha:&lt;br /&gt;
&lt;br /&gt;
[imagem da matriz global e seus elementos] &lt;br /&gt;
&lt;br /&gt;
Por fim tendo a matriz global determinada e com as condições de contorno aplicadas, sua resolução trará enfim a solução do problema pelo método de elementos finitos.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Programas CAE ===&lt;br /&gt;
&lt;br /&gt;
Na engenharia este método é largamente aplicado, porém raramente utilizado desta forma, criando a matriz manualmente e os programas para solução do método. Existem programas que estão a décadas sendo aperfeiçoados, alguns proprietários como o CONSOL, e outros livres como OpenFOAM, Calcuix, ElmerFEM, entre outros.&lt;br /&gt;
&lt;br /&gt;
A implementação do MEF em projetos costuma seguir um workflow assim: &lt;br /&gt;
&lt;br /&gt;
# Desenho do modelo 3D que deseja estudar.&lt;br /&gt;
# Transformar este modelo em uma malha, no formato que os programas de elementos finitos reconhecem.&lt;br /&gt;
# Indicar o problema físico a ser estudado e suas condições iniciais aplicadas ao modelo 3D.&lt;br /&gt;
# Rodar o programa adequado para o problema.&lt;br /&gt;
# Utilizar de programas para examinar os resultados.&lt;br /&gt;
&lt;br /&gt;
Como pode-se ver no diagrama abaixo também:&lt;br /&gt;
&lt;br /&gt;
[imagem do workflow do freecad]&lt;/div&gt;</summary>
		<author><name>Renanrs</name></author>
	</entry>
	<entry>
		<id>http://fiscomp.if.ufrgs.br/index.php?title=Arquivo:Exemplo_inicio_.png&amp;diff=5861</id>
		<title>Arquivo:Exemplo inicio .png</title>
		<link rel="alternate" type="text/html" href="http://fiscomp.if.ufrgs.br/index.php?title=Arquivo:Exemplo_inicio_.png&amp;diff=5861"/>
		<updated>2021-10-15T13:39:32Z</updated>

		<summary type="html">&lt;p&gt;Renanrs: trabalho elementos finitos 2021/02&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;trabalho elementos finitos 2021/02&lt;/div&gt;</summary>
		<author><name>Renanrs</name></author>
	</entry>
	<entry>
		<id>http://fiscomp.if.ufrgs.br/index.php?title=Arquivo:Densidade_de_malha.png&amp;diff=5860</id>
		<title>Arquivo:Densidade de malha.png</title>
		<link rel="alternate" type="text/html" href="http://fiscomp.if.ufrgs.br/index.php?title=Arquivo:Densidade_de_malha.png&amp;diff=5860"/>
		<updated>2021-10-15T13:39:12Z</updated>

		<summary type="html">&lt;p&gt;Renanrs: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Renanrs</name></author>
	</entry>
	<entry>
		<id>http://fiscomp.if.ufrgs.br/index.php?title=Arquivo:FAE_visualization.jpg&amp;diff=5859</id>
		<title>Arquivo:FAE visualization.jpg</title>
		<link rel="alternate" type="text/html" href="http://fiscomp.if.ufrgs.br/index.php?title=Arquivo:FAE_visualization.jpg&amp;diff=5859"/>
		<updated>2021-10-15T13:38:59Z</updated>

		<summary type="html">&lt;p&gt;Renanrs: trabalho elementos finitos 2021/2

fonte: https://en.wikipedia.org/wiki/Finite_element_method&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;trabalho elementos finitos 2021/2&lt;br /&gt;
&lt;br /&gt;
fonte: https://en.wikipedia.org/wiki/Finite_element_method&lt;/div&gt;</summary>
		<author><name>Renanrs</name></author>
	</entry>
	<entry>
		<id>http://fiscomp.if.ufrgs.br/index.php?title=Arquivo:Matrizglobal.png&amp;diff=5858</id>
		<title>Arquivo:Matrizglobal.png</title>
		<link rel="alternate" type="text/html" href="http://fiscomp.if.ufrgs.br/index.php?title=Arquivo:Matrizglobal.png&amp;diff=5858"/>
		<updated>2021-10-15T13:38:26Z</updated>

		<summary type="html">&lt;p&gt;Renanrs: trabalho elementos finitos 2021/2&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;trabalho elementos finitos 2021/2&lt;/div&gt;</summary>
		<author><name>Renanrs</name></author>
	</entry>
	<entry>
		<id>http://fiscomp.if.ufrgs.br/index.php?title=Arquivo:Nos.png&amp;diff=5857</id>
		<title>Arquivo:Nos.png</title>
		<link rel="alternate" type="text/html" href="http://fiscomp.if.ufrgs.br/index.php?title=Arquivo:Nos.png&amp;diff=5857"/>
		<updated>2021-10-15T13:38:16Z</updated>

		<summary type="html">&lt;p&gt;Renanrs: trabalho elementos finitos 2021/2&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;trabalho elementos finitos 2021/2&lt;/div&gt;</summary>
		<author><name>Renanrs</name></author>
	</entry>
	<entry>
		<id>http://fiscomp.if.ufrgs.br/index.php?title=Arquivo:Contribui%C3%A7%C3%A3o_elemento.png&amp;diff=5856</id>
		<title>Arquivo:Contribuição elemento.png</title>
		<link rel="alternate" type="text/html" href="http://fiscomp.if.ufrgs.br/index.php?title=Arquivo:Contribui%C3%A7%C3%A3o_elemento.png&amp;diff=5856"/>
		<updated>2021-10-15T13:37:55Z</updated>

		<summary type="html">&lt;p&gt;Renanrs: trabalho elementos finitos 2021/2&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;trabalho elementos finitos 2021/2&lt;/div&gt;</summary>
		<author><name>Renanrs</name></author>
	</entry>
</feed>