Estoy tratando de encontrar algunos recursos para ayudar a explicar cómo elegir las condiciones de contorno cuando se utilizan métodos de diferencias finitas para resolver PDE.
Todos los libros y notas a los que tengo acceso actualmente dicen cosas similares:
Las reglas generales que gobiernan la estabilidad en presencia de límites son demasiado complicadas para un texto introductorio; requieren maquinaria matemática sofisticada
(A. Iserles Un primer curso en el análisis numérico de ecuaciones diferenciales)
Por ejemplo, cuando intente implementar el método de salto de 2 pasos para la ecuación de advección:
usando MATLAB
M = 100; N = 100;
mu = 0.5;
c = [mu 0 -mu];
f = @(x)(exp(-100*(x-0.5).^2));
u = zeros (M, N);
x = 1/(M+1) * (1:M);
u(:,1) = f(x);
u(:,2) = f(x + mu/(M+1));
for i = 3:N
hold off;
u(:,i) = conv(u(:,i-1),c,'same') + u(:,i-2);
plot(x, u(:,i));
axis( [ 0 1 0 2] )
drawnow;
end
La solución se comporta bien hasta que alcanza el límite, cuando de repente comienza a comportarse mal.
¿Dónde puedo aprender a manejar condiciones límite como esta?
fuente
Respuesta general
Su problema es que no establece (ni siquiera especifica) las condiciones de contorno, su problema numérico está mal definido.
En general, hay dos formas posibles de especificar las condiciones de contorno:
El camino que tomes depende en gran medida de la física de tu problema. Para los problemas de tipo de ecuación de onda, generalmente se determinan los valores propios del flujo jacobiano para decidir si se necesitan condiciones de contorno externas o si se debe utilizar la solución interior (este método se denomina comúnmente 'viento ascendente').
Puede encontrar una versión modificada de su código fuente a continuación:
fuente
N = 1000
y ejecuta el código un poco más, encontrará que no se comporta como se esperaba.Así que he analizado esto con más detalle, y parece que esto (al menos en los casos básicos que estoy manejando) depende de la velocidad de grupo del método.
El método leapfrog (por ejemplo) es:
Ahora necesitamos descubrir la velocidad del grupo de las condiciones de contorno:
Podemos calcular la velocidad del grupo de límites de la siguiente manera:
así que para encontrar algunas velocidades de grupo que permiten los límites, necesitamos encontrar:
Todavía tengo bastante más que leer sobre esto antes de entenderlo completamente. Creo que las palabras clave que estoy buscando son la teoría GKS.
Fuente de todo esto Notas de A Iserles Parte III
Puede encontrar un cálculo más claro de lo que he hecho aquí: http://people.maths.ox.ac.uk/trefethen/publication/PDF/1983_7.pdf
fuente
Chicos, soy muy nuevo en este sitio. Quizás este no sea el lugar para preguntar, pero por favor perdóname porque soy muy nuevo aquí :) Tengo un problema extremadamente similar, la única diferencia es la función de inicio que, en mi caso, es una onda cosenoidal. Mi código es este: borrar todo; clc; cierra todo;
M = 1000; N = 2100;
mu = 0,5;
c = [mu 0 -mu]; f = @ (x) 1- cos (20 * pi * x-0.025). ^ 2; u = ceros (M, N); x = 0: (1 / M): 0,05; u (1: longitud (x), 1) = f (x); u (1: longitud (x), 2) = f (x - mu / (M)); x = espacio interior (0,1, M);
para i = 3: N espera;
plot (x, u (:, i)); eje ([0 1.5 -0.5 2]) dibujado hacia abajo; % pausa final
Ya existe este código aquí, pero por alguna razón, probablemente relacionada con la onda cosenoidal, mi código falla: / cualquier ayuda sería apreciada :) ¡gracias!
fuente