Eu tenho um ODE:
u ( 0 ) = - 1
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:
É 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?
Em geral, quando o ODE é rígido, como determino um timestap "pequeno o suficiente"?
ode
stiffness
time-integration
Paulo
fonte
fonte
Respostas:
Para responder suas perguntas:
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.
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.
fonte
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.
fonte
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 τ
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 .
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 é
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.
É 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).
fonte