Por que RK4 é melhor que a integração com Euler? [fechadas]

20

Ao final desses ótimos slides , o autor compara todos os diferentes integradores apresentados. De um jeito ou de outro, todos ficam aquém, exceto a Integração Euler Aprimorada e a Integração Runge Kutta 4 , que passam em todos os testes.

Suponho que devo mencionar que estou trabalhando em um jogo 2D que não exige muita física. Estou curioso para saber onde a Integração Euler Aprovada ficaria aquém e o RK4 teria que ser usado.

Meu jogo consiste principalmente de gravidade simples (pulando e caindo), movimento ao longo dos eixos X e Y e colisão de caixas delimitadoras. Vale a pena implementar o RK4 ou o Euler melhorado seria suficiente? Vejo muitas discussões em que os usuários da Euler Integration são castigados, mas pelo que posso ver, o Euler melhorado é quivalente em simples assuntos 2D. Eu imagino que também seria mais rápido.

John Tyler
fonte
offtopic, mas essas áreas são ótimos slides, muito claros com os exemplos e tudo. Obrigado por esse link!
Roy T.
Se este é realmente um tópico fora de tópico aqui, provavelmente seria um bom ajuste na Ciência da Computação .
David Z
Além disso: integração de verlet corrigida no tempo - é semelhante ao Euler aprimorado: com preguiça de descobrir se é exatamente o mesmo. O TCV é excelente porque você pode ser tolerante com sua etapa de tempo fixo (outros integradores desejam uma etapa de tempo fixo garantida).
Jonathan Dickinson
11
Não consigo editar: vejo que ele menciona. Não tenho certeza se sua implementação está com problemas nos termos do requisito de condições iniciais, conforme descrito no artigo: mas nunca vi esse problema de gravidade com minha implementação do TCV se calcular corretamente as condições iniciais.
Jonathan Dickinson

Respostas:

15

Pessoalmente, prefiro o Velocity Verlet para a maioria das simulações. Na minha experiência com esse método, é bastante adequado para equações bastante rígidas. Parece que esse método "Euler aprimorado" é bastante semelhante ao do Velocity Verlet e se baseia em uma classe de métodos de integração conhecida como preditor-corretor . Hoje em dia, você pode ler muitas coisas sobre esses métodos, começando pelos "Grandes passos na simulação de tecidos" de David Baraff, onde o poder dos métodos implícitos realmente brilha. A queda deles é que você:

  1. tem que aproximar jacobianos ou hessianos e depois tem que,
  2. calcular uma boa quantidade de inversos de matriz por quadro.

Portanto, se você não é um guru de matemática, pode ficar com os dedos presos. Apenas experimente o método que você deseja e escolha o que parece ter melhor desempenho para você. Simples nem sempre é melhor, mas para taxas de quadros interativas, só conheço uma palavra: compromisso.

Alguns recursos adicionais que você pode querer considerar:

Jakobsen é um tipo de gênio por ter uma idéia tão simples para problemas pretensiosos (sua especialidade é criptografia, se não estiver enganada, mas conseguiu provar a equivalência matemática de seu método a uma classe de algoritmo iterativo de Gauss-Seidel, que é convergente ) Por uma questão de simplicidade, faça isso primeiro antes de se aprofundar em métodos implícitos.

EDIÇÃO MAIS TARDE : Recentemente, recebi um artigo sobre esta questão do uso de integradores explícitos para simulação de corpos moles ou semi-rígidos e qual é o impacto no desempenho e na qualidade deles. Este documento deve servir como um guia para a escolha de um determinado integrador, dependendo do cenário.

teodron
fonte
11
+1 Essa foi realmente uma resposta de boa qualidade em termos de conteúdo: mas foi um pouco difícil de digerir (parede de texto). Descobri que uma boa formatação sempre ajuda a obter votos positivos. Eu a melhorei e espero que você receba os votos que merece.
Jonathan Dickinson
Obrigado Jonathan, eu fiz isso às pressas, desconsiderando o procedimento "de fácil leitura", mas tive que mencionar essas poucas fontes, pois elas são realmente muito usadas até hoje).
Teodron 14/03/12
10

P: Por que usar o avançado Runge Kutta?
A: Porque é muito exato.

Q: por que não
R: Como você está fazendo um jogo e um mecanismo de física muito exato não importa, ele deve ser bom o suficiente para enganar o jogador.

A propósito, se você tiver um forte amortecimento em colisão, como a maioria das plataformas, um Euler simples é bom.

Eu recomendo fortemente que você diferentemente do código da apresentação use a física de etapas fixas, o que poupa algumas falhas em potencial e permite que você resolva o problema da bola ganhar ou perder energia de uma maneira muito simples. Basta ir para o meio termo entre integração explícita e implícita:

velocity += 0.5 * acceleration;
position += velocity;
velocity += 0.5 * acceleration;

O que a apresentação não mostra é como lidar com colisões para que os objetos não pareçam ir além dos limites. A solução simples para esse problema é usar uma alta frequência de atualização. Uma solução mais complexa, mas potencialmente com melhor desempenho, é mover objetos de volta no momento da colisão; a implementação exata depende do comportamento físico desejado.

aaaaaaaaaaaa
fonte
11
+1 por "enganar o jogador" - mas eu pessoalmente tive sistemas 'muito simples' explodindo por causa da integração de euler.
Jonathan Dickinson
@ JonathanDickinson, eu diria que não é por causa da integração do Euler, mas sim por uma mistura de circunstâncias, sendo a integração do Euler apenas uma delas. Se você tem um exemplo, tenho certeza de que posso encontrar uma maneira de evitar a explosão de sistemas.
Aaaaaaaaaaaa
Ah, é sobre algumas coisas realmente antigas do VB6 (quando eu tinha literalmente 14 anos) antes de aprender sobre o RK / Verlet - eu nem tenho mais o código: o que dá grande credibilidade ao fato de que poderia ter sido outra coisa na mistura :).
Jonathan Dickinson
11
Acho que devo acrescentar que, assim que você começa a mexer com a atração entre objetos, em vez de apenas com a simples gravidade, parece-me razoável intensificar o método de integração, pode não ser estritamente necessário, mas se você tiver o poder de processamento, única desvantagem é um código um pouco mais complexo.
Aaaaaaaaaaaa
1

A apresentação tem erro. O método referido pelo apresentador como "Euler melhorado" é na verdade o método Velocity Verlet!

Veja aqui uma fonte mais autorizada: http://www.physics.udel.edu/~bnikolic/teaching/phys660/numerical_ode/node5.html

Também as mesmas equações estão na Wikipedia .

Uma melhoria imediata comum sobre o método de Euler é o método Midpoint, que o apresentador provavelmente tinha em mente, mas acabou confundindo o Velocity Verlet como Euler aprimorado. A única diferença entre o método do ponto médio e o Velocity Verlet é que a velocidade é média da última e da próxima aceleração, em vez de depender apenas da última aceleração.

Shital Shah
fonte