Uploaded by jfalmachi1

ACTIVIDAD DE APRENDIZAJE Taller 3

advertisement
Taller 3. Método de Diferencias Finitas
Curso: Matemática Superior
Integrantes:
Nota:
/10
1. Introducción
El método de diferencias finitas se basa en aproximaciones que permiten reemplazar ecuaciones
diferenciales por ecuaciones de diferencias finitas. Estas aproximaciones de diferencias finitas
son de naturaleza algebraica; relacionan el valor de la variable dependiente en un punto de la
región de solución con los valores en algunos puntos vecinos. Así, una solución por diferencias
finitas involucra básicamente tres pasos:
Dividir la región de solución en una cuadrícula de nodos.
Aproximar la ecuación diferencial dada mediante un equivalente de diferencias finitas que
relaciona la variable dependiente en un punto de la región de solución con sus valores en
los puntos vecinos.
Resolver las ecuaciones de diferencias, sujetas a las condiciones de frontera y/o condiciones
iniciales prescritas.
1.1. Esquemas de diferencias finitas
Figura 1. Partición para la aproximación de derivadas
1.2 Diferencias Finitas para la ecuación de difusión en dos dimensiones
2
Antes de encontrar la solución por diferencias finitas para la ecuación de difusión, analicemos
como se estiman las derivadas numéricamente. Considere la partición de la Figura 1, podemos
aproximar la pendiente de la tangente en x0 , utilizando la pendiente de rectas secantes, de las
siguientes formas:
1. Fórmula de diferencias hacia adelante:
f ′ (x0 ) ≈
f (x0 + ∆x) − f (x0 )
∆x
2. Fórmula de diferencias hacia atrás:
f ′ (x0 ) ≈
f (x0 ) − f (x0 − ∆x)
∆x
3. Fórmula de diferencias centradas:
f ′ (x0 ) ≈
f (x0 + ∆x) − f (x0 − ∆x)
2∆x
También podemos estimar la segunda derivada, de la siguiente forma:
f ′ (x0 ) ≈
Ejercicio
f (x0 + ∆x) − 2f (x0 ) + f (x0 − ∆x)
(∆x)2
(1)
1
(1 punto) Consulta y muestra la deducción de la última fórmula, a partir de la expansión
de Taylor para f (x + ∆x) y f (x − ∆x).
1.2. Diferencias Finitas para la ecuación de difusión en dos dimensiones
Consideremos la siguiente ecuación de difusión en dos dimensiones:
( 2
)
∂ u ∂ 2u
∂u
−D
+
=0
∂t
∂x2 ∂y 2
En un dominio rectangular, que vamos a dividir en una cuadrícula, como se muestra en la
Figura 2, (notar que también hemos discretizado el tiempo, utilizando una partición con pasos
de tamaño ∆t):
2
1.3 Implementación
3
Figura 2. (Izquierda) Partición 2d para la aproximación de derivadas. (Derecha) Stencil en
espacio.
Además, vamos a considerar un esquema explícito, de modo que para garantizar estabilidad
2
.
requerimos: ∆t ≤ ∆x
4D
Ejercicio
2
(1 punto) Consulta y elabora un breve resumen de las ventajas y desventajas de utilizar
esquemas implícitos y explícitos para la aproximación numérica de EDOs.
Así, usando diferencias finitas hacia adelante, la ecuación (1) y el ”stencil”de la figura 2 (derecha), tenemos el siguiente esquema numérico:
( k
)
k
uk+1
ui+1,j − 2uki,j + uki−1,j uki,j+1 − 2uki,j + uki,j−1
i,j − ui,j
−D
+
=0
∆t
∆x2
∆y 2
Donde los subíndices (i, j), se refieren a la partición en espacio, en las direcciones x y y respectivamente, y el superíndice k a la partición en tiempo.
2
, y reordenamos los términos de
Finalmente, por facilidad, tomamos ∆x = ∆y, y D∆t = (∆x)
2D
la ecuación anterior para obtener:
(
uk+1
i,j
=
uki,j
uki+1,j − 2uki,j + uki−1,j uki,j+1 − 2uki,j + uki,j−1
+
+ ∆t
∆x2
∆y 2
)
(2)
1.3. Implementación
Ejercicio
3
(3 puntos) Implementa un script de Matlab/Octave para el esquema de la ecuación (2),
utilizando la guía que se presenta a continuación. (Adjunta el archivo del script además
del pdf del taller).
Vamos a implementar el esquema anterior, para el problema de valores iniciales y de frontera:
3
1.3 Implementación
4
( 2
)
∂u
∂ u ∂ 2u
=0
−D
+
∂t
∂x2 ∂y 2
u(x, 0, t) = u(0, y, t) = u(5, y, t) = 0
u(x, 5, t) = 100
u(x, y, 0) = 0
para 0 ≤ x ≤ 5, 0 ≤ y ≤ 5, t > 0
1. Primero definimos los datos del problema y nuestro dominio, para eso vamos a almacenar
50 celdas por lado en una matriz cuadrada, inicializada a cero:
D = 5; % Difusividad termica
DX = DY = 0.1;
% paso espacial
DT = DX ^2/(2* D); % paso temporal
N = 51;
U (1:N ,1: N) = 0; % estado inicial
2. Añadimos la condición de borde:
U(N ,1: N) = 100;
3. Ahora vamos a implementar tres iteraciones anidadas: Una temporal, que por facilidad la
vamos a fijar en 2000 pasos, y dos espaciales donde los índices i, j, recorrerán de 2 a N − 1
(no se actualizan los bordes, para conservar las condiciones de frontera). Comenzamos
inicializando algunos contadores que nos serán útiles para generar una animación de la
simulación:
fram =0;
pasos =0;
Dentro de la iteración temporal y antes de comenzar las iteraciones espaciales, asignamos
el valor de uk :
U_k = U;
Al interior de la doble iteración espacial (en x y y), calculamos la temperatura uk+1 ,
actualizada según la ecuación (2)
U(i ,j)=U(i ,j)+( DT *(( U_k (i+1 ,j) -2* U_k (i,j)+ U_k (i -1 ,j))/DX ^2 ...
+ ( U_k (i,j +1) -2* U_k (i,j)+ U_k (i,j -1) )/DY ^2) );
Al salir de las iteraciones espaciales, vamos a guardar los datos cada 50 pasos para generar
la animación final. En Matlab podemos utilizar el siguiente código:
pasos = pasos +1;
if ( mod ( pasos ,50) ==0) % guardamos un frame cada 50 pasos
fram = fram +1;
contour (U);
axis ([1 N 1 N ])
h= gca ;
fh = figure (1) ;
set (fh , 'color ', 'white ');
4
REFERENCIAS
5
F= getframe ;
end
4. Terminada la iteración temporal, visualizamos el resultado final llamando a
movie (F,fram ,1)
Ejercicio
4
(2 puntos) Toma tres capturas a tiempos diferentes de la simulación con el script anterior.
Cambia el tipo de gráfico de contorno contour(U); a uno de superficie surf(u);, y
presenta tres capturas más.
Ejercicio
5
(3 puntos) Ahora genera un nuevo script, donde utilices una condición Dirichlet homogénea en todos los bordes (u = 0), y en su lugar añade una condición inicial: un cuadrado
(elige un tamaño de entre 5 a 10 nodos) en el centro que está a temperatura u = 1000.
Presenta tres capturas a diferentes tiempos de este nuevo escenario.
Referencias
[1] Kong, Siauw, Bayen, Python Programming and Numerical Methods - A Guide for Engineers and Scientists, Primera ed, 2020.
[2] G Nervadof, Solving 2D Heat Equation Numerically using Python, 2020.
5
Download