Problema de Fermi-Pasta-Ulam: mudanças entre as edições

De Física Computacional
Ir para navegação Ir para pesquisar
Sem resumo de edição
Sem resumo de edição
 
(27 revisões intermediárias por 2 usuários não estão sendo mostradas)
Linha 8: Linha 8:


<center><div><ul>  
<center><div><ul>  
<li style="display: inline-block;"> [[Arquivo:Springs.png|thumb|437px|Figura 1. Problema de Fermi-Pasta-Ulam, molas acopladas.]] </li>
<li style="display: inline-block;"> [[Arquivo:Springs.png|thumb|437px|Figura 1. Problema de Fermi-Pasta-Ulam, molas acopladas<ref name= FPU>https://www.respondeai.com.br/conteudo/fisica/mhs-e-mha/oscilacoes-acopladas/951</ref>.]] </li>
</li>
</li>
</ul></div></center>
</ul></div></center>
Linha 14: Linha 14:
A lei de forças que rege o comportamento deste sistema é:
A lei de forças que rege o comportamento deste sistema é:


<math> F = -k \Delta x - \alpha k \Delta x^2 - \beta k \Delta x^3 </math>.
<math> F_{i} = -k \Delta x - \alpha k \Delta x^2 - \beta k \Delta x^3 </math>.


Onde <math> \Delta x </math> e a deformação a cada 2 massas acopladas (<math> x_{i+1} - x_i </math>), <math> k </math> é a constante elástica da mola, <math> \alpha </math> é um parâmetro de deformação arbitrário que controla a correção não linear quadrática e <math> \beta </math> é o parâmetro que controla a correção cúbica. Importante ressaltar que se <math> \alpha </math> é possuir assumir um valor não nulo, real, <math> \beta </math> é igual a zero no nosso sistema, ou vice-versa. Não estamos analisando correções quadráticas somadas com correções cúbicas neste trabalho.
Onde <math> \Delta x </math> e a deformação a cada 2 massas acopladas (<math> x_{i+1} - x_i </math>), <math> k </math> é a constante elástica da mola (aqui considerado, <math> \alpha </math> é um parâmetro de deformação arbitrário que controla a correção não linear quadrática e <math> \beta </math> é o parâmetro que controla a correção cúbica. Importante ressaltar que se <math> \alpha </math> assumir um valor não nulo, real, <math> \beta </math> é igual a zero no nosso sistema, ou vice-versa. Não estamos analisando correções quadráticas somadas com correções cúbicas neste trabalho.


=== Motivação: O que era esperado e o paradoxo XXX ===
=== Motivação ===


'''(wiki)''' In 1966, Izrailev and Chirikov proposed that the system will thermalize, if a sufficient amount of initial energy is provided.[4] The idea here is that the non-linearity changes the dispersion relation, allowing resonant interactions to take place that will bleed energy from one mode to another. A review of such models can be found in Livi et al.[5] Yet, in 1970, Ford and Lunsford insist that mixing can be observed even with arbitrarily small initial energies.[6] There is a long and complex history of approaches to the problem, see Dauxois (2008) for a (partial) survey.[7]
'''O paradoxo Enrico Fermi, John R. Pasta, Stanislaw M. Ulam e Mary Tsingou'''<ref name= FPUT1> https://www.scielo.br/j/rbef/a/SkRCy5fdnGbhfxNjpx5BkRD/?format=pdf&lang=pt - O problema Fermi-Pasta-Ulam-Tsingou: Equiparticão de
energia vista através de simulações computacionais </ref>


'''(wiki)''' In the summer of 1953 Enrico Fermi, John Pasta, Stanislaw Ulam, and Mary Tsingou conducted numerical experiments (i.e. computer simulations) of a vibrating string that included a non-linear term (quadratic in one test, cubic in another, and a piecewise linear approximation to a cubic in a third). They found that the behavior of the system was quite different from what intuition would have led them to expect. Fermi thought that after many iterations, the system would exhibit thermalization, an ergodic behavior in which the influence of the initial modes of vibration fade and the system becomes more or less random with all modes excited more or less equally. Instead, the system exhibited a very complicated quasi-periodic behavior. They published their results in a Los Alamos technical report in 1955. (Enrico Fermi died in 1954, and so this technical report was published after Fermi's death.)
A premissa inicial do paradoxo de FPUT consiste no Teorema da Equipartição de Energia. O sistema consistia em uma corrente de partículas, com as extremidades fixas, que interagiam entre seus vizinhos somente com forças elásticas (as forças teriam um termo linear como a Força de Hooke e mais um termo não-linear, podendo ser quadrático ou cúbico). Era esperado que a energia total fosse distribuída igualmente entre as partículas. No caso em questão, a distribuição de energia entre as partículas pode ser descrita através dos seus modos normais de vibração.  


A análise do problema gerou um paradoxo que começaria a ser respondido somente 10 anos depois, o que ajudou no desenvolvimento das teorias de sólitons e do caos. Pretendia-se observar a distribuição uniforme de energia entre os diversos modos normais de vibração com o passar do tempo (ao longo das iterações da simulação computacional). Isso significaria que o sistema alcançou um equilíbrio térmico e seria uma exemplificação computacional do Teorema de Equipartição de Energia.  Caso as forças entre as partículas fossem estritamente lineares, isso não ocorreria, pois a energia alocada em cada modo não conseguiria acessar outros modos. Imaginava-se que uma componente não-linear na força tornaria acessível qualquer modo de vibração, porém não foi o observado.
A princípio, foi observada a tendência do sistema de distribuir a energia. O primeiro modo de vibração antes estimulado, perdeu energia ao longo do tempo, a qual começou a se alocar nos modos de energia mais baixos. Entretanto, por um descuido, deixaram a simulação decorrer por um tempo maior do que era planejado. Ao retornar ao laboratório para corrigir tal erro, se depararam com um resultado inesperado. A energia, que supostamente deveria estar igualmente partilhada entre os modos de vibração, estava quase completamente alocada no primeiro modo de vibração. De fato, somente 3% da energia não estava presente no primeiro modo. Devido a esta observação, deixaram a simulação correr por ainda mais tempo. Notaram, então, que existia
um ciclo, no qual a energia saía do primeiro modo de vibração, começava a se distribuir nos modos mais baixos, para, por fim, voltar quase que inteiramente para o primeiro modo de vibração. Contudo, em 2015, relatou-se que o sistema FPUT poderia atingir equipartição de energia pelo menos entre modos normais livres (interação entre três fônons).


== Discretização ==  
== Discretização ==  
Linha 29: Linha 34:
A discretização deste problema gira em torno de abrir a equação das forças, e com o termo de aceleração, iterar o movimento das partículas a partir disso <ref name=wiki>https://en.wikipedia.org/wiki/Fermi%E2%80%93Pasta%E2%80%93Ulam%E2%80%93Tsingou_problem</ref>. Partimos do problema com correção quadrática, ou seja, <math> \beta = 0 </math>. Partindo de:
A discretização deste problema gira em torno de abrir a equação das forças, e com o termo de aceleração, iterar o movimento das partículas a partir disso <ref name=wiki>https://en.wikipedia.org/wiki/Fermi%E2%80%93Pasta%E2%80%93Ulam%E2%80%93Tsingou_problem</ref>. Partimos do problema com correção quadrática, ou seja, <math> \beta = 0 </math>. Partindo de:


<math> F = -k \Delta x - \alpha k \Delta x^2 </math>,  
<math> F_{i} = -k \Delta x - \alpha k \Delta x^2 </math>,  


subtituímos pelas variáveis discretas:
substituímos pelas variáveis discretas:


<math> m \ddot{x_j} = -k \left( (x_{j+1} - x_j) - (x_j - x_{j-1}) \right)  - \alpha k \left( (x_{j+1} - x_j) - (x_j - x_{j-1}) \right) </math>,  
<math> m \ddot{x_j} = -k \left( (x_{j+1} - x_j) - (x_j - x_{j-1}) \right)  - \alpha k \left( (x_{j+1} - x_j)^2 - (x_j - x_{j-1})^2 \right) </math>,  


Chegamos em:
Sendo que as partículas de índice zero e N estão fixas, Chegamos em:


<math> m \ddot{x_j} = k \left( x_{j+1} - 2x_{j} + x_{j-1} \right) \left[ 1 + \alpha \left( x_{j+1} - x_{j-1} \right) \right]  </math>
<math> m \ddot{x_j} = k \left( x_{j+1} - 2x_{j} + x_{j-1} \right) \left[ 1 + \alpha \left( x_{j+1} - x_{j-1} \right) \right]  </math>,


Em que <math> \ddot{x_j} </math> é a aceleração da j-ésima partícula, com ela conseguimos integrar o movimento das partículas.
Em que <math> \ddot{x_j} </math> é a aceleração da j-ésima partícula, com ela conseguimos integrar o movimento das partículas.


'''[TEM QUE ESCREVER AQUI]''' A Energia do sistema pode ser calculada para cada oscilação, porém para obtermos algum resultado e comparar com o estudo de fermi pasta ulam, calculamos a energia dos primeiros modos de vibração da corda para demontrar o comportamento visívelmente períodico destas energias.
A Energia do sistema é calculada para cada ciclo de oscilação, porém para obtermos os resultados dos modos de oscilação e compararmos com os estudos atuais e o original de de FPUT, calculamos a energia dos primeiros modos de vibração da corda para demonstrar o comportamento visivelmente periódico destas energias. É possível calcular a energia dos modos de vibração através da equação:
 
[[Arquivo:Eq1.PNG|350px]]
 
em que <math> a</math> é o vetor das posições projetado num vetor de um seno com a frequência do modo que queremos plotar:


<center><div><ul>
[[Arquivo:Eq2.PNG|120px]]
<li style="display: inline-block;"> [[Arquivo:Energias.PNG|thumb|437px|Figura 1. Problema de Fermi-Pasta-Ulam, molas acopladas.]] </li>
 
</li>
e:
</ul></div></center>
 
[[Arquivo:Eq3.PNG|150px]]
 
<math>N</math> é o número de partículas e <math>\omega_i = \sqrt{\frac{k}{m}} </math>


== Resultados ==
== Resultados ==


NOSSO GIF DEU MAIS DE 7 MEGA -----------------> VER COMO REDUZIR O GIF JÁ NO CÓDIGO!!!! ELE TA BEM RUIM ASSIM
O sistema foi iniciado com o modo normal de oscilação 1 (seno com frequência <math>\omega = \sqrt{\frac{k}{m}}</math>), com velocidades iniciais igual a zero de cada partícula. O movimento começa apenas pelas forças já presentes entre cada partículas, pelas equações apresentadas acima.  
 
[[Arquivo:Trab2.gif|center|thumb|500px|legenda.]]


[[Arquivo:Estado inicial das particulas.png|center|thumb|500px|legenda.]]
[[Arquivo:Estado inicial das particulas.png|center|thumb|500px|legenda.]]


'''TEM QUE MUDAR AS FIGURAS DE BAIXO:'''
Segue abaixo a evolução do sistema ao longo do tempo, apenas para gerar o .gif considerando:  


<center><div><ul>
<li style="display: inline-block;"> [[Arquivo:Energias vibracao3.png|thumb|500px|legenda.]] </li>
<li style="display: inline-block;"> [[Arquivo:Energias vibracao2.png|thumb|500px|legenda.]] </li>
</ul></div></center>
CASO PRECISE:
<math>
<math>
\begin{cases}
\begin{cases}
X(x = 0,y) = X{0} = ..... \\
 
Y(x = L,y) = Y(x,y = 0) = Y(x,y = L) = .....\\
\alpha = 1,2 \\
k = 0,95 \\
m = 1,05 \\
N = 30  \\
t_{max} = 4000 \\
 
\end{cases}
\end{cases}
</math>
</math>
[[Arquivo:Corda final.gif|center|thumb|500px|Simulação FPU para o problema proposto.]]
Já os resultados das energias, consideramos todas constantes iguais à 1, mais de 100 partículas e o número de iterações está em cada imagem. Procedemos de duas formas: calculamos a porcentagem de cada modo normal de oscilação pela Transformada de Fourier (para selecionar as frequências que estavam presentes na oscilação, sem calcular as energias), o que apresentou um comportamento muito similar às energias calculadas pela soma de energias cinética e potencial:
[[Arquivo:Energias fft.jpeg|thumb|700px|center|Porcentagem de cada modo vibracional ao longo do tempo. A escala do tempo foi reduzida em 20 vezes para melhor apresentação do gráfico.]]
E também calculamos pela equação de energia citada acima, obtivemos os seguintes comportamentos:
<center><div><ul>
<li style="display: inline-block;"> [[Arquivo:Energias certo1.jpeg|500px|thumb|Energias por modo de oscilação. A escala do tempo está aumentada em 2 vezes.]]</li>
<li style="display: inline-block;"> [[Arquivo:Energias certo2.jpg|520px|thumb|Energias por modo de oscilação com fft. A escala do tempo está aumentada em 5 vezes.]]</li>
</ul></div></center>
A expressão utilizada para calcular estas energias foi a memsa citada anteriormente:
[[Arquivo:Eq1.PNG|center|350px]]


== Discussões ==
== Discussões ==


Como o intuito era replicar os resultados através da simulação com dinâmica molecular obtivemos resultados muito parecidos comparando estudos já realizados sobre este problema ('''Citar estes artigos''')
Como o intuito era replicar os resultados e o comportamento das energias através da simulação com dinâmica molecular, obtivemos resultados muito parecidos comparando estudos já realizados sobre este problema <ref name=FPUT1></ref>.
 
A questão de simular a energia usando a porcentagens dos senos também faz sentido pensando ''quanta contribuição'' o modo normal de oscilação tem no movimento atual, como pudemos ver que o comportamento foi bem similar ao das energias calculadas.


== Implementação ==
== Implementação ==


Usamos XX partículas, com modo de oscilação YY
Implementamos a iteração do movimento das partículas por Velocity-Verlet.
 
A questão de variar os parâmetros do problema, como já mencionado previamente nesta wiki, e também apresentado nos gráficos e no gif, vimos que não interferia muito no caráter dos resultados (e o quanto isso poderia influenciar no paradoxo de equipartição de energia), porém o fizemos para gerar imagens melhores e o gif com menos de 2 MB.


<source lang="haskell" line='line'>
<source lang="haskell" line='line'>
Linha 98: Linha 128:


def posicao(pos, velo, dt):
def posicao(pos, velo, dt):
     size = len(posY)
     size = len(pos)
     new_posY = [0.0 for i in range(size)]
     new_posY = [0.0 for i in range(size)]
     for i in range(size):
     for i in range(size):
         new_posY[i] = posY[i] + new_veloY[i]*dt
         new_pos[i] = pos[i] + new_velo[i]*dt
     return new_posY
     return new_pos


N = número de partículas
N = número de partículas
Linha 115: Linha 145:
     velo = velocidade(veloY, new_aceY,dt)
     velo = velocidade(veloY, new_aceY,dt)
     pos  = posicao(posY_old, veloY, dt)
     pos  = posicao(posY_old, veloY, dt)
    calcula_energias(pos)
    
    
   pos_old = pos.copy()  #sem ".copy()" o python usa o mesmo endereço de memória para 2 variáveis
   pos_old = pos.copy()  #sem ".copy()" o python usa o mesmo endereço de memória para 2 variáveis
Linha 121: Linha 152:
gera_gif()
gera_gif()
</source>
</source>
'''Falar um pouco mais da implementação?'''


== Link para Códigos ==
== Link para Códigos ==


Fizemos no ambiente Colab em ''.ipynb'', segue link do github:[https://github.com/padovanih/equacao-de-laplace]  
Fizemos no ambiente Colab em ''.ipynb'', segue link do github:[https://github.com/padovanih/Fermi-Pasta-Ulam]


== Referências ==  
== Referências ==  


<references/>
<references/>

Edição atual tal como às 23h27min de 28 de maio de 2021

Grupo: Augusto M Giani e Henrique Padovani

O objetivo deste trabalho é replicar os resultados do problema proposto por Fermi-Pasta-Ulam em 1953 [1] sobre sistemas dinâmicos não lineares. As análises serão sobre a solução dos modos de vibração comparados à solução analítica para poucas massas e também sobre a energia do sistema para os modos de oscilação, enquanto o sistema evolui no tempo.

O Problema

O Problema proposto constitui-se de simulações em uma rede de partículas ligadas entre si através de molas que obedecem a Lei de Hooke com uma correção não-linear quadrática ou cúbica [2]

  • Figura 1. Problema de Fermi-Pasta-Ulam, molas acopladas[2].

A lei de forças que rege o comportamento deste sistema é:

.

Onde e a deformação a cada 2 massas acopladas (), é a constante elástica da mola (aqui considerado, é um parâmetro de deformação arbitrário que controla a correção não linear quadrática e é o parâmetro que controla a correção cúbica. Importante ressaltar que se assumir um valor não nulo, real, é igual a zero no nosso sistema, ou vice-versa. Não estamos analisando correções quadráticas somadas com correções cúbicas neste trabalho.

Motivação

O paradoxo Enrico Fermi, John R. Pasta, Stanislaw M. Ulam e Mary Tsingou[3]

A premissa inicial do paradoxo de FPUT consiste no Teorema da Equipartição de Energia. O sistema consistia em uma corrente de partículas, com as extremidades fixas, que interagiam entre seus vizinhos somente com forças elásticas (as forças teriam um termo linear como a Força de Hooke e mais um termo não-linear, podendo ser quadrático ou cúbico). Era esperado que a energia total fosse distribuída igualmente entre as partículas. No caso em questão, a distribuição de energia entre as partículas pode ser descrita através dos seus modos normais de vibração.

A análise do problema gerou um paradoxo que começaria a ser respondido somente 10 anos depois, o que ajudou no desenvolvimento das teorias de sólitons e do caos. Pretendia-se observar a distribuição uniforme de energia entre os diversos modos normais de vibração com o passar do tempo (ao longo das iterações da simulação computacional). Isso significaria que o sistema alcançou um equilíbrio térmico e seria uma exemplificação computacional do Teorema de Equipartição de Energia. Caso as forças entre as partículas fossem estritamente lineares, isso não ocorreria, pois a energia alocada em cada modo não conseguiria acessar outros modos. Imaginava-se que uma componente não-linear na força tornaria acessível qualquer modo de vibração, porém não foi o observado.

A princípio, foi observada a tendência do sistema de distribuir a energia. O primeiro modo de vibração antes estimulado, perdeu energia ao longo do tempo, a qual começou a se alocar nos modos de energia mais baixos. Entretanto, por um descuido, deixaram a simulação decorrer por um tempo maior do que era planejado. Ao retornar ao laboratório para corrigir tal erro, se depararam com um resultado inesperado. A energia, que supostamente deveria estar igualmente partilhada entre os modos de vibração, estava quase completamente alocada no primeiro modo de vibração. De fato, somente 3% da energia não estava presente no primeiro modo. Devido a esta observação, deixaram a simulação correr por ainda mais tempo. Notaram, então, que existia um ciclo, no qual a energia saía do primeiro modo de vibração, começava a se distribuir nos modos mais baixos, para, por fim, voltar quase que inteiramente para o primeiro modo de vibração. Contudo, em 2015, relatou-se que o sistema FPUT poderia atingir equipartição de energia pelo menos entre modos normais livres (interação entre três fônons).

Discretização

A discretização deste problema gira em torno de abrir a equação das forças, e com o termo de aceleração, iterar o movimento das partículas a partir disso [4]. Partimos do problema com correção quadrática, ou seja, . Partindo de:

,

substituímos pelas variáveis discretas:

,

Sendo que as partículas de índice zero e N estão fixas, Chegamos em:

,

Em que é a aceleração da j-ésima partícula, com ela conseguimos integrar o movimento das partículas.

A Energia do sistema é calculada para cada ciclo de oscilação, porém para obtermos os resultados dos modos de oscilação e compararmos com os estudos atuais e o original de de FPUT, calculamos a energia dos primeiros modos de vibração da corda para demonstrar o comportamento visivelmente periódico destas energias. É possível calcular a energia dos modos de vibração através da equação:

Eq1.PNG

em que é o vetor das posições projetado num vetor de um seno com a frequência do modo que queremos plotar:

Eq2.PNG

e:

Eq3.PNG

é o número de partículas e

Resultados

O sistema foi iniciado com o modo normal de oscilação 1 (seno com frequência ), com velocidades iniciais igual a zero de cada partícula. O movimento começa apenas pelas forças já presentes entre cada partículas, pelas equações apresentadas acima.

legenda.

Segue abaixo a evolução do sistema ao longo do tempo, apenas para gerar o .gif considerando:

Simulação FPU para o problema proposto.

Já os resultados das energias, consideramos todas constantes iguais à 1, mais de 100 partículas e o número de iterações está em cada imagem. Procedemos de duas formas: calculamos a porcentagem de cada modo normal de oscilação pela Transformada de Fourier (para selecionar as frequências que estavam presentes na oscilação, sem calcular as energias), o que apresentou um comportamento muito similar às energias calculadas pela soma de energias cinética e potencial:

Porcentagem de cada modo vibracional ao longo do tempo. A escala do tempo foi reduzida em 20 vezes para melhor apresentação do gráfico.

E também calculamos pela equação de energia citada acima, obtivemos os seguintes comportamentos:

  • Energias por modo de oscilação. A escala do tempo está aumentada em 2 vezes.
  • Energias por modo de oscilação com fft. A escala do tempo está aumentada em 5 vezes.

A expressão utilizada para calcular estas energias foi a memsa citada anteriormente:

Eq1.PNG

Discussões

Como o intuito era replicar os resultados e o comportamento das energias através da simulação com dinâmica molecular, obtivemos resultados muito parecidos comparando estudos já realizados sobre este problema [3].

A questão de simular a energia usando a porcentagens dos senos também faz sentido pensando quanta contribuição o modo normal de oscilação tem no movimento atual, como pudemos ver que o comportamento foi bem similar ao das energias calculadas.

Implementação

Implementamos a iteração do movimento das partículas por Velocity-Verlet.

A questão de variar os parâmetros do problema, como já mencionado previamente nesta wiki, e também apresentado nos gráficos e no gif, vimos que não interferia muito no caráter dos resultados (e o quanto isso poderia influenciar no paradoxo de equipartição de energia), porém o fizemos para gerar imagens melhores e o gif com menos de 2 MB.

### Exemplo da iteração do movimento utilizando forcacom correção quadrática ###
### código em python

def aceleracao(pos,alpha,k,massa):
    size = len(pos)
    acel = [0.0 for i in range(size)]
    for i in range(1,size-1):
        acel[i] = (k/massa) * ((pos[i+1] + pos[i-1] - 2*pos[i]) * ( 1.0 + alpha*(pos[i+1]-pos[i-1]) ) )
    return acel

def velocidade(velo, acel, dt):
    size = len(velo)
    new_velo = [0.0 for i in range(size)]
    for i in range(size):
        new_velo[i] = velo[i] + 0.5*acel[i]*dt
    return new_velo

def posicao(pos, velo, dt):
    size = len(pos)
    new_posY = [0.0 for i in range(size)]
    for i in range(size):
        new_pos[i] = pos[i] + new_velo[i]*dt
    return new_pos

N = número de partículas
dt = 0.2
x = np.linspace(0, x_final, dt)
pos = np.sin( 2*x*pi / (N*dt))

while t < tmax: # Loop temporal
     
    plt.scatter(x,pos) # plotagem dos gráficos
    acel = aceleracao(pos_old,alpha,k,massa)
    velo = velocidade(veloY, new_aceY,dt)
    pos  = posicao(posY_old, veloY, dt)
    calcula_energias(pos)
  
  pos_old = pos.copy()  #sem ".copy()" o python usa o mesmo endereço de memória para 2 variáveis
  t = t + td

gera_gif()

Link para Códigos

Fizemos no ambiente Colab em .ipynb, segue link do github:[1]

Referências

  1. ANDRADE, D. X.; ANJOS, P. H. R.; ASSIS, P. E. G.. Sobre a conexão entre alguns modelos físicos não-lineares. Rev. Bras. Ensino Fís., São Paulo , v. 39, n. 1, e1307, 2017 . Disponível em <http://www.scielo.br/scielo.php?script=sci_arttext&pid=S1806-11172017000100407&lng=pt&nrm=iso>. http://dx.doi.org/10.1590/1806-9126-rbef-2016-0083.
  2. 2,0 2,1 http://www.physics.utah.edu/~detar/phys6720/handouts/fpu/FermiCollectedPapers1965.pdf - Fermi, Pasta, Ulam, Studies of non linear problems Erro de citação: Etiqueta inválida <ref>; Nome "FPU" definido várias vezes com conteúdo diferente
  3. 3,0 3,1 https://www.scielo.br/j/rbef/a/SkRCy5fdnGbhfxNjpx5BkRD/?format=pdf&lang=pt - O problema Fermi-Pasta-Ulam-Tsingou: Equiparticão de energia vista através de simulações computacionais
  4. https://en.wikipedia.org/wiki/Fermi%E2%80%93Pasta%E2%80%93Ulam%E2%80%93Tsingou_problem