Posso usar um esquema de tempo explícito para determinar numericamente se um ODE é rígido?

10

Eu tenho um ODE:

u ( 0 ) = - 1u=1000u+sin(t)
u(0)=11000001

Eu sei que esse ODE em particular é rígido, analiticamente. Sei também que, se usarmos um método explícito de avanço de tempo (Euler, Runge-Kutta, Adams, etc.), o método deverá retornar erros muito grandes se o tempo for muito grande. Então, eu tenho duas perguntas:

  1. É assim que as EDOs rígidas são determinadas, em geral, quando uma expressão analítica para o termo do erro não está disponível ou é derivada?

  2. Em geral, quando o ODE é rígido, como determino um timestap "pequeno o suficiente"?

Paulo
fonte
Existem métodos padrão para detectar rigidez usando métodos explícitos. Estou colocando este comentário aqui, porque pode ser difícil encontrar minha resposta mais detalhada bem abaixo.
David Ketcheson

Respostas:

6

Para responder suas perguntas:

  1. Até onde eu sei, na prática, se métodos explícitos exigirem extraordinariamente pequenos intervalos de tempo em relação à sua escala de interesse (consulte as respostas a esta pergunta sobre o que significa uma ODE mais rígida ) para obter resultados precisos, em seguida, para todas as intenções e propósitos, seu problema é rígido. Para determinar os requisitos do tamanho da etapa, conte com uma das muitas bibliotecas escritas por especialistas (a suíte MATLAB é um exemplo, também SUNDIALS, VODE, DASPK, DASSL, LSODE etc.), que possuem heurísticas de etapa de tempo adaptáveis. O manual SUNDIALS explica as regras de decisão que eles usam para determinar o tamanho do tempo que o pacote leva, para dar um exemplo de regras usadas na prática.

  2. Novamente, eu usaria uma biblioteca com tempo adaptável, na prática, porque é mais eficiente fazer isso. No entanto, se você estivesse codificando um método sozinho, usando tamanhos de etapa fixos, se notasse grandes oscilações ou sua solução "explodindo", suspeitaria que seu intervalo de tempo era muito grande e o reduziria. Repita até obter uma solução numérica razoavelmente bem comportada. Livros didáticos como Ascher e Petzold e Hairer e Wanner têm bons exemplos desse fenômeno.

Geoff Oxberry
fonte
9

Uma maneira melhor de analisar é que, para um problema rígido, qualquer cálculo explícito estável leva a um erro muito menor que a tolerância a erros necessária .

Existem muitos métodos bons para detectar automaticamente a rigidez usando esquemas explícitos, especialmente pares Runge-Kutta incorporados. Veja por exemplo:

No segundo exemplo de faleichik, à medida que o tamanho da etapa é reduzido, seria observada uma repentina queda dramática no erro para níveis muito abaixo da tolerância desejada típica à medida que o limiar de timestap estável é ultrapassado. Portanto, um bom estimador de erros realmente revelaria a rigidez do problema. No primeiro problema, o erro obtido com um tamanho de passo estável estaria na faixa da tolerância típica desejada, indicando não rigidez.

Observe como conseqüência que qualquer problema se torna não rígido se for necessária uma tolerância a erros suficientemente estrita.

David Ketcheson
fonte
2
Esses eram documentos que eu estava prestes a vincular antes de ver sua resposta. +1, é claro. :) Deixe-me também adicionar isso , isso e, finalmente, isso . Este é definitivamente um problema bem estudado ...
JM
9

1. Podemos detectar numericamente a rigidez apenas aplicando métodos explícitos?

  • Suponha que você tenha um problema de valor inicial para algum ODE em . Você adota um tamanho de passo consideravelmente grande τ = 1 e um método explícito de Euler, faz seus cálculos com tamanho de passo constante τ e obtém os seguintes pontos:[0,10]τ=1 τ

    insira a descrição da imagem aqui

    τ=0.1insira a descrição da imagem aqui

    τ=0.1[0,10]

    Então, o problema é rígido? A resposta é NÃO ! É necessário um pequeno tamanho de etapa aqui para reproduzir corretamente as oscilações da solução .

    y(t)=2cosπt,y(0)=1.

  • τ=1

    insira a descrição da imagem aqui

    τ=0.1

    insira a descrição da imagem aqui

    τ=0.1[0,10]

    Esse problema é rígido? SIM ! Demos pequenos passos para reproduzir a solução que está mudando muito lentamente. Isso é irracional! A magnitude do intervalo de tempo aqui é limitada pelas propriedades de estabilidade de Euler explícito .

    Esse problema é

    y(t)=2y(t)+sint/2,y(0)=1.


Conclusão: as informações sobre timesteps e erros correspondentes não são suficientes para detectar rigidez. Você também deve olhar para a solução obtida. Se variar lentamente e o tamanho da etapa for muito pequeno, é mais provável que o problema seja rígido. Se a solução oscilar rapidamente e você confiar na sua técnica de estimativa de erros, esse problema não será rígido.


2. Como determinar o tamanho máximo de uma etapa que permite integrar um problema rígido a um método explícito?

Se você usar algum solucionador explícito de caixa preta com controle automático de etapas, não precisará fazer nada: o software terá o tamanho da etapa necessário de forma adaptativa.

[Λ,0]Λ=1000

[2,0]τΛτ

τ2|Λ|.

τ1|Λ|,
1/|Λ|<τ2/|Λ|

É claro que essa análise é principalmente aplicável a problemas lineares com espectro conhecido. Para problemas mais práticos, devemos confiar em métodos numéricos de detecção de rigidez (consulte referências e comentários em outras respostas).

faleichik
fonte
Como mencionado em alguns dos documentos aos quais David vinculou, o método de poder para encontrar valores próprios dominantes (adequadamente modificados) é uma escolha usual para detectores de rigidez baseados em jacobinos.
JM