2011-09-08 13 views
7

Estoy tratando de usar NDSolve para resolver una ecuaciones de onda para verificar si es más fácil y/o más rápido usarla en lugar de mis antiguas características eq. implementación del métodoInestabilidad mientras NDSolvera una ecuación de onda

Me estoy poniendo muy inestable que no entiendo con el método de las características, y dado que estas son ecuaciones simples, me pregunto qué está mal ... (con suerte, no es el aspecto físico del problema ... .)

ans = [email protected][{ 
u[t, x]*D[d[t, x], x] + d[t, x]*D[u[t, x], x] + D[d[t, x], t] == 0, 
D[d[t, x], x] + u[t, x]/9.8*D[u[t, x], x] + 
1/9.8*D[u[t, x], t] + 0.0001 u[t, x]*Abs[u[t, x]] == 0, 
u[0, x] == 0, 
d[0, x] == 3 + x/1000*1, 
u[t, 0] == 0, 
u[t, 1000] == 0 
}, 
d, {t, 0, 1000}, {x, 0, 1000}, DependentVariables -> {u, d} 
] 

Animate[Plot[(d /. ans)[t, x], {x, 0, 1000}, 
     PlotRange -> {{0, 1000}, {0, 6}}], {t, 0, 1000} 
] 

enter image description here

alguien me puede ayudar?

EDIT:

He colocado la solución NDSolve (después de la edición de JxB,) con mi solución de características, juntos en la misma animación. Se emparejan lo suficientemente cerca, con la excepción de las oscilaciones rápidas iniciales. Con el tiempo, tienden a comenzar a desincronizarse, pero creo que esto se debe probablemente a una pequeña simplificación que debemos admitir al deducir las características.

simulation

Rojo: NDsolve; Azul: método de las características "manuales";

presione F5 (actualice su navegador), para reiniciar la animación desde t=0.

(escala xx es el número de puntos que se utiliza con mi método "manual", donde cada punto representa 20 unidades de la escala NDSolve/físico)

Jugando con NDSolve muestreo de cuadrícula, hace completamente diferentes efectos de oscilación. ¿Alguien tiene o conoce una técnica para garantizar una integración adecuada?

+0

Creo que obtendrías más respuestas preguntando en el sitio de matemáticas: http://math.stackexchange.com/ –

+0

@dario Gracias por la sugerencia (lo intentaré). Pero ya que estas ecuaciones deberían ser estables, pensé que esto era más un problema de Mathematica, aunque no soy un experto en el tema ... –

+0

Si sospechas que, como nunca utilicé Mathematica, todo lo que puedo sugerir es actualizarlo a la última versión. Eso podría solucionar tu problema si es causado por un error en Mathematica –

Respuesta

4

Al cambiar sus coeficientes de precisión infinita (por ejemplo, 1/9.8-> 10/98), y el establecimiento de WorkingPrecision->5 (un valor de 6 es demasiado alto), ya no recibo el mensaje de error:

ans = [email protected] 
    NDSolve[{D[u[t, x] d[t, x], x] + D[d[t, x], t] == 0, 
    D[d[t, x], x] + u[t, x] 10/98*D[u[t, x], x] + 
     10/98*D[u[t, x], t] + 1/10000 u[t, x]*Abs[u[t, x]] == 0, 
    u[0, x] == 0, d[0, x] == 3 + x/1000, u[t, 0] == 0, 
    u[t, 1000] == 0}, d, {t, 0, 1000}, {x, 0, 1000}, 
    DependentVariables -> {u, d}, WorkingPrecision -> 5] 

Animate[ 
Plot[(d /. ans)[t, x], {x, 0, 1000}, 
    PlotRange -> {{0, 1000}, {0, 6}}], {t, 0, 1000}] 

No conozco esta ecuación, por lo que no creo en la solución: las oscilaciones a pequeña escala crecen inicialmente, luego se amortiguan.

+0

Lo está haciendo mucho mejor, y hasta cierto punto creo que esto prueba que el alto efecto oscilatorio es algún tipo de anomalía numérica del NDSolve. Esto debería ser una ola de agua. Las condiciones de contorno se establecieron para simular el agua dentro de una "piscina" cerrada, rebotando entre las paredes, después de que el agua se ha caído de un estado no horizontal. Entonces, tampoco creo en las oscilaciones de pequeña escala ... también porque mi método de características "manuales" no muestra este comportamiento (simplemente muestran la onda lenta larga). Si agrega el Relleno -> Parte inferior, se vuelve más claro lo que se simula ... –

+0

@JxB Sería bueno si explicara por qué WorkingPrecision debería ser bajo (y por qué 6 es demasiado alto). –

Cuestiones relacionadas