¿Puedo usar un esquema de pasos de tiempo explícito para determinar numéricamente si un ODE es rígido?


10

Tengo una EDO:

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

Sé que este ODE particular es rígido, analíticamente. También sé que si usamos un método de paso de tiempo explícito (hacia adelante) (Euler, Runge-Kutta, Adams, etc.), el método debería devolver errores muy grandes si el paso de tiempo es demasiado grande. Entonces, tengo dos preguntas:

  1. ¿Es así como se determinan las EDO rígidas, en general, cuando una expresión analítica para el término de error no está disponible o es derivable?

  2. En general, cuando el ODE es rígido, ¿cómo determino un paso de tiempo "suficientemente pequeño"?


Existen métodos estándar para detectar la rigidez utilizando métodos explícitos. Estoy colocando este comentario aquí porque puede ser difícil encontrar mi respuesta más detallada a continuación.
David Ketcheson

Respuestas:


6

Para responder tu pregunta:

  1. Hasta donde sé, en la práctica, si los métodos explícitos requieren pasos de tiempo extraordinariamente pequeños en relación con su escala de tiempo de interés (vea las respuestas a esta pregunta sobre lo que significa que una EDO sea rígida ) para obtener resultados precisos, entonces para A todos los efectos, su problema es rígido. Para determinar los requisitos sobre el tamaño del paso, confíe en una de las muchas bibliotecas escritas por expertos (la suite MATLAB es un ejemplo, también SUNDIALS, VODE, DASPK, DASSL, LSODE, etc.), que tienen heurística de paso de tiempo adaptativo. El manual SUNDIALS explica las reglas de decisión que usan para determinar el tamaño de los pasos de tiempo que toma el paquete, para darle un ejemplo de las reglas que se usan en la práctica.

  2. Nuevamente, usaría una biblioteca con tiempo de adaptación progresivo en la práctica, porque es más eficiente hacerlo. Sin embargo, si estaba codificando un método por su cuenta, utilizando tamaños de paso fijos, si notaba grandes oscilaciones o si su solución "explotaba", sospecharía que su paso de tiempo era demasiado grande y lo reduciría. Repita hasta que obtenga una solución numérica razonablemente bien comportada. Los libros de texto como Ascher y Petzold y Hairer y Wanner tienen buenos ejemplos de este fenómeno.


9

Una mejor manera de verlo es que para un problema rígido, cualquier cálculo explícito estable conduce a un error que es mucho más pequeño que la tolerancia de error requerida .

Hay muchos buenos métodos para detectar automáticamente la rigidez utilizando esquemas explícitos, especialmente pares de Runge-Kutta integrados. Ver por ejemplo:

En el segundo ejemplo de faleichik, a medida que se reduce el tamaño del paso, se vería una disminución dramática repentina en el error a niveles muy por debajo de una tolerancia deseada típica a medida que se cruza el umbral de tiempo estable. Por lo tanto, un buen estimador de errores revelaría la rigidez del problema. En el primer problema, el error obtenido con un tamaño de paso estable estaría en el rango de la tolerancia deseada típica, lo que indica no rigidez.

Tenga en cuenta como consecuencia que cualquier problema se vuelve no rígido si se requiere una tolerancia a errores suficientemente estricta.


2
Esos eran documentos que estaba a punto de vincular antes de ver su respuesta. +1, por supuesto. :) Permítanme también agregar esto , esto y finalmente esto . Este es definitivamente un problema bien estudiado ...
JM

9

1. ¿Podemos detectar numéricamente la rigidez simplemente aplicando métodos explícitos?

  • [0 0,10]τ=1 τ

    ingrese la descripción de la imagen aquí

    τ=0.1ingrese la descripción de la imagen aquí

    τ=0.1[0 0,10]

    Entonces, ¿el problema es rígido? La respuesta es NO ! Aquí se requiere un pequeño tamaño de paso para reproducir correctamente las oscilaciones de la solución .

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

  • τ=1

    ingrese la descripción de la imagen aquí

    τ=0.1

    ingrese la descripción de la imagen aquí

    τ=0.1[0 0,10]

    ¿Es este problema rígido? SI ! Hemos hecho pasos muy pequeños para reproducir la solución que está cambiando muy lentamente. Esto es irracional! La magnitud del paso de tiempo aquí está limitada por las propiedades de estabilidad de Euler explícito .

    Este problema es

    y(t)=-2y(t)+pecadot/ /2,y(0 0)=1)


Conclusión: la información sobre los pasos de tiempo y los errores correspondientes no es suficiente para detectar la rigidez. También debe mirar la solución obtenida. Si varía lentamente y el tamaño de los pasos es muy pequeño, lo más probable es que el problema sea rígido. Si la solución oscila rápidamente y confía en su técnica de estimación de errores, entonces este problema no es rígido.


2. ¿Cómo determinar el tamaño máximo de pasos que permite integrar un problema rígido con un método explícito?

Si utiliza algún solucionador explícito de recuadro negro con control automático de pasos, entonces no necesita hacer nada: el software tomará los pasos necesarios de forma adaptativa.

[Λ,0 0]Λ=-1000

[-2,0 0]τΛτ

τ2El |ΛEl |.

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

Por supuesto, dicho análisis es principalmente aplicable a problemas lineales con espectro conocido. Para problemas más prácticos, debemos confiar en métodos numéricos de detección de rigidez (ver referencias y comentarios en otras respuestas).


Como se menciona en algunos de los documentos a los que David se relacionó, el método de poder para encontrar valores propios dominantes (modificados adecuadamente) es una opción habitual para los detectores de rigidez basados ​​en Jacobian.
JM
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.