¿Cómo se mejora la precisión de un método de diferencia finita para encontrar el sistema propio de una ODE lineal singular?

11

Estoy intentando resolver una ecuación del tipo:

(2x2f(x))ψ(x)=λψ(x)

Donde f(x) tiene un polo simple en 0 , para los valores propios y vectores propios más pequeños N. Las condiciones de contorno son: ψ(0)=0 y ψ(R)=0 , y solo estoy mirando la función sobre (0,R] .

Sin embargo, si hago un método de diferencia finita muy simple y uniformemente espaciado, el valor propio más pequeño es muy inexacto (a veces hay un valor propio "falso" que es varios órdenes de magnitud más negativo que el que sé que debería estar allí, el verdadero "primer valor propio" se convierte en el segundo, pero sigue siendo pobre).

¿Qué afecta la precisión de un esquema de diferencias tan finitas? Supongo que la singularidad es lo que está causando el problema, y ​​que una cuadrícula desigualmente espaciada mejoraría las cosas significativamente, ¿hay algún documento que pueda apuntarme hacia un buen método de diferencia finita no uniforme? ¿Pero quizás un esquema de diferencia de orden superior lo mejoraría más? ¿Cómo se decide (o es simplemente "probar ambos y ver")

nota: mi esquema de diferencias finitas es simétrico tridiagonal donde las 3 diagonales son:

(12Δ2,1Δ2f(x),12Δ2)

Δ

Andrew Spott
fuente
1Δ2f(x)

Respuestas:

6

Si desea aumentar la precisión de un esquema de diferencia finita, siempre puede intentar aumentar el grado de su plantilla. Sin embargo, en puntos equidistantes, esto puede conducir a inestabilidades numéricas. Para evitar estos problemas y aún así obtener una alta precisión, sugeriría usar métodos espectrales .

Si su problema tiene polos fijos, puede intentar sortearlos dividiendo su dominio y resolviendo dos problemas acoplados.

chebguif(x)

chebguiu(x)u(x)x=λu[1,1]

Usando <code> chebgui </code> para calcular los valores propios y los modos propios de una ecuación diferencial de segundo orden simple.

Actualizar

Si desea resolver este problema sin entrar demasiado en Chebfun, todos los detalles deben estar en el Capítulo 9 del libro de Nick Trefethen " Métodos espectrales en Matlab ".

Pedro
fuente
Edité mi publicación original para dejar en claro que en realidad no estoy mirando el poste, solo muy cerca de él. Gracias por la información, tendré que revisar chebfun.
Andrew Spott
3
Votado abajo sin comentario? Por favor, en beneficio de todos, ¿podría señalar cómo podría mejorarse esta respuesta?
Pedro
0

Una forma de mejorar rápidamente las cosas (aunque probablemente no mucho mejor) es considerar la similitud entre los métodos de diferencia finita de orden más bajo que usa y el método de elementos finitos de orden más bajo. Si calcula la matriz tri-diagonal que obtiene al usar funciones de forma lineal de elementos finitos en 1d, entonces la discretización de las segundas derivadas se verá exactamente igual (hasta un factor pero obtendrá un término diferente para qué sale . No sé cómo se ve en su caso, pero donde ahora usa , en cambio será algo así como dondeΔxf(x)ψ(x)f(x)f(xi)xi1xi+1f(x)φi(x)φi(x)es la función hat que alcanza su punto máximo en . Si es suficientemente simple, entonces puede calcular esta integral exactamente, y proporcionará una matriz más precisa de la cual debe encontrar el valor propio.xif(x)

Por supuesto, si ya hace elementos finitos, también podría invertir en el uso de elementos de orden superior que tampoco son mucho más difíciles en 1d.

Wolfgang Bangerth
fuente