You are on page 1of 24

Metodo de Diferencias Finitas para la Solucion de

Ecuaciones en Derivadas Parciales


Jhon Jairo Ramrez R.
Carlos Andres Vanegas G.
Andres Mauricio Villegas R.
Universidad Eat, Medelln, Colombia
1. Introduccion
La teora de Ecuaciones en Derivadas Parciales (EDP) se ha convertido en
uno de los campos de estudio mas importantes en matematicas, debido a su
frecuente aplicacion en diferentes areas de la fsica, ingeniera y otras ciencias.
Entre las EDP mas representativas se encuentran la Ecuacion de Laplace, la
Ecuacion de Onda y la Ecuacion de Calor.
La Ecuacion de Laplace modela la distribucion de temperatura en estado
estacionario para una region. Si u(x, y, z) representa la temperatura en un punto
(x, y, z) en la region, la distribucion se obtiene al solucionar la ecuacion

2
u = 0
Esta ecuacion aparece en muchos otros problemas de la fsica como: Potenciales
Electrostaticos, Potenciales en Hidrodinamica y Potenciales Armonicos en la
Teora de la Elasticidad.
La Ecuacion de Calor constituye una herramienta de gran utilidad para dar
solucion a problemas de ujo de calor en cuerpos determinados. Si u(x, y, z, t)
es la temperatura en el punto (x, y, z), en un instante t, la ecuacion es
u
t
= k
2
u
Esta ecuacion aparece tambien en una gran variedad de problemas de la
fsica matematica: por ejemplo, la concentracion de material en difusion, la
propagacion de olas en canales de gran longitud, y la transmision en cables
electricos [4]. En la termodinamica, la ecuacion de calor puede ser aplicada en
tres situaciones: cuerpos solidos (tres dimensiones), placas (dos dimensiones), y
barras (una dimension).
La Ecuacion de Onda surge al describir fenomenos relativos a la propagacion
de ondas en un medio continuo. Los estudios de ondas ac usticas, ondas de agua,
1
ondas electromagneticas y vibraciones mecanicas estan basados en esta ecuacion
[5]. Si u(x, y, t) representa la altura del punto (x, y) en el instante t, la ecuacion
es
u
tt
= c
2
(u
xx
+ u
yy
)
La deduccion desde la fsica de las tres ecuaciones puede ser consultada en
[4]. Las soluciones de estas tres ecuaciones pueden calcularse mediante metodos
analticos o aproximarse mediante metodos numericos. Es el proposito de este
proyecto ilustrar el metodo numerico de diferencias nitas para el calculo de
la solucion de las Ecuaciones de Calor y de Onda para el caso unidimensional,
y comparar los resultados obtenidos mediante este metodo con los resultados
analticos, para un caso particular.
2. Planteamiento del Problema
La ecuacion de calor unidimensional u
t
= ku
xx
aplicara, por ejemplo, para
el caso de una barra metalica larga y delgada, con aislamiento, ya que la tempe-
ratura de cualquier seccion transversal sera constante, debido a que el tiempo
que tarda la temperatura en equilibrarse en distancias cortas se asume como
despreciable.
En este caso, si asumimos que la barra tiene una longitud l, una temperatura
inicial f(x), y que los extremos se mantienen a temperatura cero, la distribucion
de temperatura en la barra esta dada por la solucion del problema de valores
iniciales y en la frontera:
u
t
= ku
xx
0 < x < l t > 0 (1)
u(0, t) = 0 (2)
u(l, t) = 0 (3)
u(x, 0) = f(x) 0 x l (4)
Este problema puede resolverse por medio del metodo analtico de separacion
de variables, que se explica en [4]. La solucion es:
u(x, t) =

n=1

2
l

l
0
f() sin
n
l
d

e
(
n
l
)
2
kt
sin
nx
l
En el caso de la Ecuacion de Onda, se supondra que la ecuacion representa
el movimiento de una cuerda elastica de longitud a sujeta por los extremos,
eligiendo el eje x para representar la posicion original de la cuerda. Se supone
que dicha cuerda se pone en movimiento mediante alguna fuerza externa, de
forma que empieza a vibrar en el plano horizontal, donde u = u(x, t) representa
el desplazamiento vertical en el punto x y en el instante t, siendo la ecuacion
que verica tal desplazamiento
2

2
u
t
2
= c
2

2
u
x
2
, 0 < x < a y 0 < t < b
Para obtener una solucion unica de esta ecuacion es preciso a nadir tambien
unas condiciones iniciales y de contorno apropiadas, que representaran distintos
tipos de fenomenos oscilatorios. Las condiciones de contorno deben reejar que
los extremos de la cuerda son jos, por lo que seran de la forma
u(0, t) = 0 = u(a, t) 0 < t < b
Como en la ecuacion de onda aparece una derivada de segundo orden respecto
a t, hay que imponer dos condiciones iniciales respecto a ella. Estas pueden
consistir en jar la posicion y la velocidad inicial de los puntos de la cuerda,
expresandose
u(x, 0) = f(x) 0 x a
u
t
(x, 0) = g(x) 0 < x < a
Con el metodo de separacon de variables se obtiene la siguiente solucion analtica
a la ecuacion de onda
u(x, t) =

n=1

A
n
cos
nc
a
t + B
n
sin
nc
a
t

sin
nx
a
donde
A
n
=
2
a

a
0
f(x) sin
nx
a
dx
y
B
n
=
2
nc

a
0
g(x) sin
nx
a
dx
3. Justicacion del uso de Metodos Numericos
en la Solucion de EDP
Los metodos de aproximacion analtica a la solucion de EDP, proporcionan
frecuentemente informacion util acerca del comportamiento de la solucion en
valores crticos de la variable dependiente, pero tienden a ser mas difciles de
aplicar que los metodos numericos. Entre las consideraciones que justican el
uso de metodos numericos para solucionar ciertos tipos de ecuaciones diferen-
ciales ordinarias y en derivadas parciales se encuentran: 1) Los datos de los
problemas reales presentan siempre errores de medicion, y el trabajo aritmetico
para la solucion esta limitado a un n umero nito de cifras signicativas que
resultan en errores de redondeo. Por lo tanto, incluso los metodos analticos
proporcionan resultados que son aproximaciones numericas; 2) La evaluacion
3
numerica de las soluciones analticas es a menudo una tarea laboriosa y com-
putacionalmente ineciente, mientras que los metodos numericos generalmente
proporcionan soluciones numericas adecuadas, de manera mas simple y eciente
[6]. De los metodos de aproximacion numerica disponibles para resolver ecua-
ciones diferenciales, los mas utilizados son el metodo de diferencias nitas y el
metodo de elementos nitos. En este proyecto solo se trabajo con el metodo de
diferencias nitas.
4. Metodo de Diferencias Finitas
S u es una funcion de x con derivadas nitas y continuas, entonces por el
teorema de Taylor se tiene que:
u(x + h) = u(x) + hU

(x) +
1
2
h
2
u

(x) +
1
6
h
3
u

(x) + . . . (5)
y
u(x h) = u(x) hU

(x) +
1
2
h
2
u

(x)
1
6
h
3
u

(x) + . . . (6)
Al sumar estas expansiones se obtiene:
u(x + h) + u(x h) = 2u(x) + h
2
u

(x) + o(h)
4
(7)
donde o(h
4
) denota los terminos que contienen potencias de h de orden 4 o
mayor. Asumiendo que estos terminos son peque nos en relacion con las potencias
menores de h, se sigue que:
u

(x)
1
h
2
{u(x + h) 2u(x) + u(x h)} (8)
con un error de orden h
2
. Al restar la ecuacion (6) de la ecuacion (5), y despreciar
los terminos de orden h
3
se obtiene:
u

(x)
1
2h
{u(x + h) u(x h)} (9)
con un error de orden h
2
.
La ecuacion (9) aproxima la pendiente de la tangente en el punto (x, u(x))
mediante la pendiente de la recta que pasa por los puntos (x h, u(x h)) y
(x+h, u(x+h)). Esta aproximacion se conoce como aproximacion por diferencia
central. Tambien se puede aproximar la pendiente de la tangente en (x, u(x))
por la pendiente de la recta que pasa por los puntos (x, u(x)) y (x+h, u(x+h)).,
obteniendo la aproximacion por diferencias regresivas
u

(x)
1
h
{u(x) u(x h)} (10)
o por la pendiente de la recta que pasa por los puntos (x h, u(x h)) y
(x, u(x))., obteniendo la aproximacion por diferencias progresivas
u

(x)
1
h
{u(x + h) u(x)} (11)
4
Ahora, tomemos una funci on u de las variables x y t. Subdividamos el plano
x t en un conjunto de rectangulos iguales de lados x = h y t = k mediante
lneas igualmente espaciadas y paralelas al eje t, denidas por x
i
= ih, i =
0, 1, 2, . . . y lneas igualmente espaciadas y paralelas al eje x denidas por
y
j
= jk, j = 0, 1, 2, . . . ,. Denotemos el valor de u en un punto P(ih, jk) de
la malla como:
u
P
= u
ih,jk
= u
i,j
Entonces, por la ecuacion (8)

2
u
x
2

P
=

2
u
x
2

i,j

u{(i + h)h, jk} 2u{ih, jk} + u{(i 1)h, jk}


h
2
que equivale a

2
u
x
2

i,j

u
i+1,j
2u
i,j
+ u
i1,j
h
2
(12)
De manera similar,

2
u
t
2

i,j

u
i,j+1
2u
i,j
+ u
i,j1
k
2
(13)
De las ecuaciones (10) y (11) se sigue que dos aproximaciones para u/t en P
son
u
t

u
i,j+1
u
i,j
k
2
(diferencias progresivas) (14)
u
t

u
i,j
u
i,j1
k
2
(diferencias regresivas) (15)
5. Soluciones propuestas al Problema
Para la Ecuacion de Calor se plantean tres variantes del metodo de diferen-
cias nitas: Diferencias Progresivas, Diferencias Regresivas y Metodo de Crank-
Nicolson. Para la Ecuacion de Onda se emplea un metodo iterativo generado a
partir de diferencias nitas.
5.1. Diferencias Finitas para la Ecuacion de Calor
Consideremos el problema planteado en las ecuaciones (2)-(4). De las ecua-
ciones (14) y (12) se sigue que una aproximacion por diferencias nitas a
u
t
=
2

2
u
x
2
es
u
i,j+1
u
i,j
k
=
2
u
i+1,j
2u
i,j
+ u
i1,j
h
2
(16)
5
donde u es la solucion exacta a las ecuaciones aproximadas, x
i
= ih, (i =
0, 1, 2, m 1 . . .), t
i
= jk, (j = 0, 1, 2, . . .) y m = l/h. La ecuacion (16) puede
ser reescrita como
u
i,j+1
= u
i1,j
+ (1 2)u
i,j
+ u
i+1,j
(17)
donde =
2
(k/h
2
). Dado que la condicion inicial u(x, 0) = f(x), para todo
0 x l, implica que u
i,0
= f(x
i
), para toda i = 0, 1, 2, . . . , m, podemos
usar estos valores en la ecuacion (17) para calcular el valor de u
i,1
para toda
i = 1, 2, . . . , m 1. Las condiciones iniciales u(0, t) = 0 y u(l, t) = 0 implican
que u
0,1
= u
m,1
= 0 y, por tanto, podemos determinar todos los elementos de
la forma u
i,1
. Ya conocidas todas las aproximaciones u
i,1
se pueden obtener,
siguiendo un procedimiento semejante, los valores u
i,2
, u
i,3
, . . .
Si hacemos u
(0)
= (f(x
1
), f(x
2
), . . . , f(x
m1
))
t
y u
(j)
= (u
1j
, u
2j
, . . . , u
m1,j
)
t
,
para todo j = 1, 2, . . . , se puede plantear matricialmente este metodo de solucion
como:
u
(j)
= Au
(j1)
, para todo j = 1, 2, . . .
donde A es la siguiente matriz tridiagonal
A =

(1 2) 0 . . . . . . . . . . . . . 0
(1 2)
.
.
.
.
.
.
0
.
.
.
.
.
.
.
.
.
.
.
. 0
.
.
.
.
.
. (1 2)
0 . . . . . . . . . . . . . 0 (1 2)

w
(j)
se obtiene para w
(j1)
por una multiplicacion simple de matrices. A
esto se le conoce con el nombre de metodo de diferencias progresivas. A pesar
de la simplicidad para obtener soluciones, el metodo es inestable para > 1/2.
Por tanto se propone un segundo metodo. Una discusion mas amplia sobre el
problema de estabilidad se presenta en [1].
Si en la ecuacion (16) reemplazamos el lado izquierdo por (15) se obtiene la
siguiente aproximacion en diferencias nitas a la ecuacion de calor
u
i,j
u
i,j1
k
=
2
u
i+1,j
2u
i,j
+ u
i1,j
h
2
(18)
Que se puede reescribir como
(1 + 2)u
i,j
u
i+1,j
u
i1,j
= u
i,j1
(19)
Aplicando el hecho de que w
i,0
= f(x
i
) para toda i = 1, 2, . . . , m1 y w
m,j
=
w
0,j
= 0 para toda j = 1, 2, . . ., este metodo de diferencias tiene la repre-
6
sentacion matricial:

(1 + 2) 0 . . . . . . . . . . . . . 0
(1 + 2)
.
.
.
.
.
.
0
.
.
.
.
.
.
.
.
.
.
.
. 0
.
.
.
.
.
. (1 + 2)
0 . . . . . . . . . . . . . 0 (1 + 2)

w
1,j
w
2,j
.
.
.
w
m1,j

w
1,j1
w
2,j1
.
.
.
w
m1,j1

(20)
o Aw
(j)
= w
(j+1)
para toda j = 1, 2, . . .
As debemos resolver ahora un sistema lineal para obtener w
(j)
a partir de
w
(j1)
. Este metodo se conoce como el metodo de diferencias regresivas, y es
estable para cualquier .
Dado que > 0, la matriz A es denida positiva y estrictamente dominante
en forma diagonal, ademas de ser tridiagonal. Para resolver este sistema, pode-
mos emplear la factorizacion LU de Crout para sistemas lineales tridiagonales.
En este algoritmo suponemos, para propositos de detencion o paro, que se da
una cota para t [1].
Con el metodo de diferencias regresivas se soluciono el problema de estabi-
lidad. Sin embargo, para evitar la falta de precision, generada por el error de
truncamiento, se requiere que los intervalos de tiempo sean mucho mas peque nos
que los de espacio (h >> k), y esto reduce su eciencia. Por tanto, se hace nece-
sario un metodo que permita tomar valores similares para h y k, y que ademas
sea estable para todo . Este metodo se puede obtener al promediar el metodo
de diferencias progresivas en el j-esimo paso en t,
u
i,j+1
u
i,j
k
=
2
u
i+1,j
2u
i,j
+ u
i1,j
h
2
y el metodo de diferencias regresivas en el (j + 1)-esimo paso en t
u
i,j+1
u
i,j
k
=
2
u
i+1,j+1
2u
i,j+1
+ u
i1,j+1
h
2
Entonces se tiene que una aproximacion por diferencias para la ecuacion de calor
es
u
i,j+1
u
i,j
k
=

2
2

u
i+1,j
2u
i,j
+ u
i1,j
h
2
+
u
i+1,j+1
2u
i,j+1
+ u
i1,j+1
h
2

que puede ser reescrito como

2
u
i1,j+1
+ (1 + )u
i,j+1


2
u
i+1,j+1
=

2
u
i1,j
+ (1 )u
i,j
+

2
u
i+1,j
7
Al metodo generado por esta aproximacion se le llama metodo de Crank-
Nicolson y esta representado de forma matricial como
Aw
(j+1)
= Bw
(j)
(21)
donde
A =

(1 + )

2
0 . . . . . . . . . . . . 0

2
(1 + )

2
.
.
.
.
.
.
0
.
.
.
.
.
.
.
.
.
.
.
. 0
.
.
.
.
.
.

2
(1 + )

2
0 . . . . . . . . . . . . 0

2
(1 + )

y
B =

(1 )

2
0 . . . . . . . . . . . . 0

2
(1 )

2
.
.
.
.
.
.
0
.
.
.
.
.
.
.
.
.
.
.
. 0
.
.
.
.
.
.

2
(1 )

2
0 . . . . . . . . . . . . 0

2
(1 )

Para obtener w
j+1
a partir de w
j+1
, se debe resolver el sistema planteado
en (21).La matriz A es denida positiva, estrictamente dominante en forma
diagonal y tridiagonal. Para resolver este sistema, se puede usar la factorizacion
LU de Crout para sistemas lineales tridiagonales. Al igual que en el metodo de
diferencias regresivas, en este algoritmo se supone, para propositos de detencion
o paro, que se da una cota para t.
5.2. Diferencias Finitas para la Ecuacion de Onda
El dominio de la ecuacion diferencial parcial de onda esta dado por el
rectangulo R = {(x, t) : 0 x a, 0 t b}, a partir del cual se inducira una
particion, generando as una malla que consta de n 1 por m 1 rectangulos
de lados x = h y t = k.
Denido el tama no de la malla, se establece la siguiente notacion
u(x, t) = u
i,j
u(x + h, t) = u
i+1,j
u(x h, t)) = u
i1,j
u(x, t + k)) = u
i,j+1
u(x, t k)) = u
i,j1
8
Se usara la ecuacion en diferencias para calcular los valores sucesivos que se
aproximen a la solucion exacta, que en los puntos de la malla es u(x
i
, t
j
). Para
cada j = 2, 3, ..., m se calculara
{u
i,j
u(x
i
, t
j
) : i = 1, 2, ..., n}.
Teniendo en cuenta la notacion establecida anteriormente, y las expresiones (12)
y (13) se construye la ecuacion en diferencias
u
i,j+1
2u
i,j
+ u
i,j1
k
2
= c
2
u
i+1,j
2u
i,j
+ u
i1,j
h
2
(22)
Al hacer =
ck
h
en (22), se obtiene
u
i,j+1
2u
i,j
+ u
i,j1
=
2
(u
i+1,j
2u
i,j
+ u
i1,j
) (23)
Al resolver para u
i,j+1
, o sea, la aproximacion mas avanzada del paso del tiempo,
y reordenar los terminos, se tiene
u
i,j+1
= (2 2
2
)u
i,j
+
2
(u
i+1,j
+ u
i1,j
) u
i,j1
(24)
La ecuacion (24) es aplicable para i = 2, 3, ..., n 1 y j = 2, 3, ..., m 1. Esta
expresion sigiere que el (j + 1)-esimo paso de tiempo requiere de los j-esimo y
los (j 1)-esimo pasos. Los valores del (j 1)-esimo paso vienen dados por las
condiciones iniciales u
i,1
= f(x
i
). sin embargo, los valores del j-esimo paso no
se suelen proporcionar, por lo que se usa g(x) para conseguir los valores de este
paso.
Un algoritmo es estable si el error cometido en una etapa no se ampla en las
etapas posteriores. para garantizar la estabilidad de este metodo es necesario
que =
ck
h
1.
Se desarrolla el polinomio de taylor de orden uno para u(x, t) alrededor de
(x
i
, 0).
u(x
i
, k) = u(x
i
, 0) + u
t
(x
i
, 0)k + O(k
2
) (25)
Se aplica el hecho de que u(x
i
, 0) = f(x
i
) = f
i
y u
t
(x
i
, 0) = g(x
i
) = g
i
en (22),
para obtener aproximacioines numericas en el j-esimo paso (se sabe que t
2
= k)
u
i,2
= f
i
+ kg
i
para i = 2, 3, . . . , n 1 (26)
Ya que la formula (26) es una aproximacion lineal a los valores del j-esimo paso,
el error de truncamiento introducido al usarla es signicativo. Por lo tanto,
para evitar que los valores u
i,2
calculados con la formula (23) introduzcan en el
proceso un error considerable, se debe elegir un tama no de paso k peque no en
comparacion con h.
En el caso de que f(x) sea dos veces derivable en el intervalo 0 x a, se
podra obtener una mejor aproximacion a u
i,2
. Se sabe que u
xx
(x, 0) = f

(x),
igualdad que permite desarrollar la formula de Taylor de orden dos para obtener
9
una aproximacion mejorada de los valores del j-esimo paso. Si se toma como
x = x
i
y t = 0 en la ecuacion diferencial parcial de onda, se obtiene
u
tt
(x
i
, 0) = c
2
u
xx
(x
i
, 0) = c
2
f

(x
i
) = c
2
f
i+1
2f
i
+ f
i1
h
2
+ O(h
2
) (27)
En la formula anterior se uso el hecho de que f

(x
i
) =
f
i+1
2f
i
+ f
i1
h
2
, lo
cual podra ser sustentado en el desarrollo de la formula (7). Ahora se desarrolla
el polinomio de Taylor de grado dos
u(x, k) = u(x, 0) + u
t
(x, 0)k +
1
2
u
tt
(x, 0)k
2
+ O(k
3
) (28)
Al hacer x = x
i
en (28) y al aplicar las expresiones (26) y (27) en esta misma
u(x
i
, k) = f
i
+ kg
i
+
c
2
k
2
2h
2
(f
i+1
2f
i
+ f
i
1) + O(h
2
)O(k
2
) + O(k
3
) (29)
Ya que =
ck
h
, la formula (29) se puede simplicar, a n de obtener aproxima-
ciones mejoradas para el j-esimo paso.
u
i,2
= (1
2
)f
i
+ kg
i
+

2
2
(f
i+1
+ f
i1
) para i = 2, 3, ..., n 1. (30)
A partir de estos resultados, se puede desarrollar un algoritmo iterativo en el que
un paso subsiguiente se resuelve a partir de los dos inmediatamente anteriores.
5.3. Algoritmos
A continuacion se presentan los pseudocodigos de las tres variantes del meto-
do de Diferencias Finitas para la ecuacion de calor, y del metodo de Diferencias
Finitas para la ecuacion de onda. Se anexa a este trabajo la implementacion de
estos pseudocodigos en MATLABr .
10
Algoritmo 1 Metodo de diferencias progresivas
Entrada: extremo l; tiempo maximo T; constante ; enteros m >= 3, n >= 1.
Salida: aproximaciones u
i,j
a u(x
i
, t
j
) para toda i = 1, . . . , m 1 y j =
1, . . . , N.
1: h = l/m, k = T/N, =
2
k/h
2
, u
m
, j = 0 Para j = 0, . . . , N, v
m
= 0
2: Para i = 1, . . . , m1 Haga
3: u
i,0
= f(ih) (Calculo de valores iniciales)
4: Fin
5: Para j = 1, . . . , N Haga
6: t = jk
7: u
1.j
= (1 2)v
1
+ v
2
8: Para i = 2, . . . , m1 Haga
9: u
i,j
= (1 2)v
i
+ (v
i+1
+ v
i1
)
10: Fin
11: Para i = 1, . . . , m1 Haga
12: v
i
= u
i,j
13: Fin
14: Fin
15: Muestre u
Algoritmo 2 Metodo de las diferencias regresivas
Entrada: extremo l; tiempo maximo T; constante ; enteros m >= 3, n >= 1.
Salida: aproximaciones u
i,j
a u(x
i
, t
j
) para toda i = 1, . . . , m 1 y j =
1, . . . , N.
1: h = l/m; k = T/N; =
2
k/h
2
.
2: Para i = 1, . . . , m1 Haga
3: u
i,0
= f(ih) (Calculo de valores iniciales)
4: Fin
5: L
i
= 1+2, U
1
= /L
1
(Los pasos 5-20 solucionan el sistema tridiagonal)
6: Para i = 2, . . . , m2 Haga
7: L
i
= 1 + 2 + U
i1
8: U
i
= /L
i
9: Fin
10: l
m1
= 1 + 2 + U
m2
11: Para j = 1, . . . , N Haga
12: t = jk, z
1
= u
1,j1
/L
1
13: Para i = 2, . . . , m1 Haga
14: z
i
= (u
i,j1
+ z
i1
)/L
i
15: Fin
16: u
m1,j
= z
m1
17: Para i = m2, . . . , 1 Haga
18: u
i,j
= z
i
U
i
u
i+1,j
19: Fin
20: Fin
21: Muestre u
11
Algoritmo 3 Metodo de Crank-Nicolson
Entrada: extremo l; tiempo maximo T; constante ; enteros m >= 3, n >= 1.
Salida: aproximaciones u
i,j
a u(x
i
, t
j
) para toda i = 1, . . . , m 1 y j =
1, . . . , N.
1: h = l/m, k = T/N, =
2
k/h
2
, u
m
, j = 0 Para j = 0, . . . , N
2: Para i = 1, . . . , m1 Haga
3: u
i,0
= f(ih) (Calculo de valores iniciales)
4: Fin
5: L
i
= 1+, U
1
= /(2L
1
) (Los pasos 5-21 solucionan el sistema tridiagonal)
6: Para i = 2, . . . , m2 Haga
7: L
i
= 1 + + U
i1
/2
8: U
i
= /(2L
i
)
9: Fin
10: l
m1
= 1 + + U
m2
/2
11: Para j = 1, . . . , N Haga
12: t = jk
13: z
1
=

(1 )u
1,j1
+

2
u
2,j1

/L
1
14: Para i = 2, . . . , m1 Haga
15: z
i
=

(1 )u
i,j1
+

2
(u
i+1,j1
+ u
i1,j1
+ z
i1
)

16: Fin
17: u
m1,j
= z
m1
18: Para i = m2, . . . , 1 Haga
19: u
i,j
= z
i
U
i
u
i+1,j
20: Fin
21: Fin
22: Muestre u
Algoritmo 4 Metodo de diferencias nitas para la ecuacion de calor
Entrada: u(x, 0) = f(x), u
t
(x, 0) = g(x), a, b, c, n, m.
Salida: U, matriz con la solucion n umerica.
1: h = a/(n 1),k = b/(m1), = ck/h, U
i,j
= 0 Para todo i, j
2: Para i = 2, 3, . . . , n 1 Haga
3: U
i,1
= f(h(i 1))
4: U
i,2
= (1
2
)f(h(i 1)) + kg(h(i 1)) +

2
2
(f(hi) + f(h(i 2)))
5: Fin
6: Para j = 3, 4, . . . , m Haga
7: Para i = 2, 3, . . . , n 1 Haga
8: U
i,j
= (2 2
2
)U
i,j1
+
2
(U
i1,j1
+ U
i+1,j1
) U
i,j2
9: Fin
10: Fin
12
6. Ejemplos
Se presentan dos ejemplos con el proposito de comparar los resultados analticos
con los resultados obtenidos con el metodo de diferencias nitas.
6.1. Ejemplo Ecuacion de Calor
Presentamos los resultados de la ecuacion de calor para unas condiciones
iniciales y de frontera determinadas, obtenidos mediante cuatro metodos dife-
rentes: analtico, diferencias progresivas, diferencias regresivas y Crank Nicolson.
Supongamos que se quiere determinar la distribucion de temperatura en
cualquier instante t de una barra de cobre ( 1) con l = 1, que presenta una
funcion de temperatura inicial dada por f(x) = sin( x). Mediante un proce-
dimiento matematico puede vericarse que la solucion analtica a este problema
esta dada por
u(x, t) = e

2
t
sin(x)
Para calcular las soluciones utilizando los tres metodos numericos menciona-
dos, se establecieron los valores de las constantes que intervienen en los algorit-
mos que se presentaron anteriormente: m = 10, N = 100, T = 10, y se ejecutaron
las rutinas escritas en MATLAB para cada uno de los metodos. En las tablas se
presentan los valores de la distribucion de temperatura de la barra en t = 0,25,
calculados por los metodos de diferencias regresivas, diferencias progresivas y
Crank-Nicolson respectivamente.
Notese que el porcentaje de error en Crank-Nicolson es de 1.8 % mientras
que el de diferencias regresivas es de 14.2 %, y que el metodo de diferencias pro-
gresivas no converge para el valor de lambda utilizado ( = 1). Estos resultados
son coherentes con lo que se esperaba. En la tabla 2 se presentan los valores
calculados con el metodo de diferencias progresivas con = 0,1, que se obtuvo
al disminuir diez veces el valor de k. Si recordamos que k es el paso para t,
podemos ver que lo que se hizo fue renar el calculo de los valores en el tiempo.
13
Diferencias Progresivas Error relativo
x
i
u(x
i
, 0,25) 10
2
up
i,500
10
2
|up u|/u 10
2
0.0 0 0
0.1 2.621 2.658 1.432
0.2 4.985 5.056 1.432
0.3 6.861 6.959 1.432
0.4 8.065 8.181 1.432
0.5 8.480 8.602 1.432
0.6 8.065 8.181 1.432
0.7 6.861 6.959 1.432
0.8 4.985 5.056 1.432
0.9 2.621 2.658 1.432
1.0 0 0
Tabla 1: Valores de la distribucion de temperatura de la barra en t = 0,25
calculados por el metodo de sustitucion progresiva(h = 0,1, k = 0,0005, = 0,05
Diferencias Progresivas Error relativo
x
i
u(x
i
, 0,33) 10
2
up
i,33
10
2
|up u|/u 10
2
0.0 0 0
0.1 1.190 -1.581 232.8
0.2 2.263 6.900 204.9
0.3 3.115 -4.025 229.2
0.4 3.662 0.980 199.8
0.5 3.850 -4.748 223.3
0.6 3.662 0.753 193.6
0.7 3.115 -3.657 217.4
0.8 2.263 6.531 188.6
0.9 1.190 -1.353 213.7
1.0 0 0
Tabla 2: Valores de la distribucion de temperatura de la barra en t = 0,33
calculados por el metodo de sustitucion progresiva(h = 0,1, k = 0,01, =
14
Diferencias Regresivas Error relativo
x
i
u(x
i
, 0,25) 10
2
ur
i,25
10
2
|ur u|/u 10
2
0.0 0 0
0.1 2.621 2.993 14.19
0.2 4.985 5.692 14.18
0.3 6.861 7.835 14.20
0.4 8.065 9.210 14.20
0.5 8.480 9.684 14.20
0.6 8.065 9.210 14.20
0.7 6.861 7.835 14.20
0.8 4.985 5.692 14.18
0.9 2.621 2.993 14.19
1.0 0 0
Tabla 3: Valores de la distribucion de temperatura de la barra en t = 0,25
calculados por el metodo de sustitucion regresiva (h = 0,1, k = 0,01, = 1)
Crank-Nicolson Error relativo
x
i
u(x
i
, 0,25) 10
2
uc
i,25
10
2
|uc u|/u 10
2
0.0 0 0
0.1 2.621 2.669 1.844
0.2 4.985 5.077 1.844
0.3 6.861 6.987 1.844
0.4 8.065 8.214 1.844
0.5 8.480 8.637 1.844
0.6 8.065 8.214 1.844
0.7 6.861 6.987 1.844
0.8 4.985 5.077 1.844
0.9 2.621 2.669 1.844
1.0 0 0
Tabla 4: Valores de la distribucion de temperatura de la barra en t = 0,25
calculados por el metodo de Crank-Nicolson(h = 0,1, k = 0,01, = 1)
15
x
i
u
i,21
E
0.0 0 0
0.1 0.3090169944 5.55e-017
0.2 0.5877852523 2.22e-016
0.3 0.8090169944 0.0000000
0.4 0.9510565163 3.33e-016
0.5 1.0000000000 0.0000000
0.6 0.9510565163 1.11e-016
0.7 0.8090169944 0.0000000
0.8 0.5877852523 0.0000000
0.9 0.3090169943 5.55e-017
1.0 0 0
Tabla 5: Valores de la altura de la cuerda en t = 1 calculados por el metodo de
diferencias nitas(h = 0,1, k = 0,05)
6.2. Ejemplo Ecuacion de Onda
Se ha dicho que el metodo descrito genera soluciones conables cuando
= ck/h 1. Una forma de evaluar el metodo es simplemente comparando, en
un caso especico, la solucion aproximada con la verdadera.
Considerese la ecuacion

2
u
t
2
= 4

2
u
x
2
, 0 < x < 1 y 0 < t < 1
con las condiciones de frontera
u(0, t) = 0 = u(1, t), 0 < t < 1
y con las condiciones iniciales
u(x, 0) = sen(x), 0 x 1 y u
t
(x, 0) = 0, 0 x 1
La ecuacion de onda cuenta con procedimientos analticos que permiten ha-
llar su solucion, por lo que sera facil vericar que la solucion a este problema
es
u(x, t) = sen(x)cos(2t)
se emplea el algoritmo desarrollado en la seccion anterior con n = 11, m = 21,
lo cual signica que h = 0,1, k = 0,05 y = 1. En la tabla 5 se comparan
los resultados obtenidos con la solucion numerica y la analtica para t = 1, y
se muestra el error absoluto que nos indica el n umero de cifras correctas halla-
das con la aproximacion numerica. En el peor de los casos, se entrego dieciseis
decimales corectos.
16
7. Conclusion y Trabajo Posterior
Las Ecuaciones en Derivadas Parciales constituyen uno de los principales
campos de estudio en matematicas, debido a su creciente aplicacion en fsica,
ingeniera y otras ciencias. Se ha visto que por lo general la solucion de una EDP
no es expresable en terminos de funciones elementales, lo que diculta el calcu-
lo de las soluciones analiticas. Por lo tanto es recomendable emplear metodos
numericos para resolver EDP cuando, para nes practicos, basta generar solu-
ciones aproximadas, pero de manera eciente. El Metodo de Diferencias Finitas
es una herramienta util para calcular aproximaciones a las soluciones de algunas
EDP, en particular la Ecuacion de Calor y la Ecuacion de Onda.
Para el caso de la ecuacion de Calor se observo que generalmente el metodo
mas adecuado es el de Crank Nicolson, debido a que presento el menor error
relativo para los ejemplos desarrollados, y a que su convergencia no depende del
valor de utilizado. En el caso de la ecuacion de Onda, el metodo de diferencias
nitas desarrollado presenta convergencia siempre que 1.
Como trabajo posterior para el tema aqu desarrollado, se propone la ex-
pansion de las variantes del metodo de Diferencias Finitas al caso dos y tres
dimensional para la ecuaci on de calor, y dos dimensional para la ecuacion de
onda. La implementacion del metodo para estos casos ampliara su aplicabilidad
a problemas como el ujo de calor en laminas y solidos, y la vibracion de una
membrana elastica. Por otra parte, se propone el uso del metodo de elementos
nitos como metodo alternativo que permita, entre otras cosas, aplicar las ecua-
ciones de Calor y Onda a membranas y solidos con formas irregulares, como los
que generalmente se encuentran en aplicaciones industriales.
Referencias
[1] Burden, R. and Faires, J. Analisis N umerico. Thomson Learning, Mexico,
D.F. 2002
[2] Harrel, E. and Herod, J. Linear Methods of Applied Mathematics. 1996.
Tomado de: http://www.mathphysics.com/pde/HEderiv.html
[3] Mathews, J. and Fink, K. Metodos numericos con Matlab. Prentice Hall.
Madrid. 1999.
[4] Myint-U, T. Partial dierential equations o mathematical physics. Elservier
North-Holland, New York. 1978.
[5] Serway, R. and Beichner, F

ISICA para ciencias e ingeniera I. Mc Graw


Hill. Mexico. 2001.
[6] Smith, G. Numerical Solution of Partial Dierential Equations: Finite Dif-
ference Methods. Oxford University Press, New York.1999.
17
Anexos (Codigos en Matlab)
Metodo de diferencias progresivas
%Metodo de diferencias progresivas
%La matriz W contiene los resultados del metodo. Las columnas corresponden
%a la variacion en el tiempo, y las filas a la variacion en x.
clear
close all
clc
%Entrada de datos
Preguntas={Longitud de la barra:
Limite de Tiempo
Numero de particiones en el tiempo
Numero de particiones en x
Coeficiente alfa
Funcion de temperatura inicial};
Titulo = Entrada de Datos (Metodo de diferencias progresivas);
Defecto = {1, 0.40 , 40 , 10 , 1 , sin(pi*x)};
datos=inputdlg(Preguntas, Titulo, 1, Defecto);
L=str2num(datos{1});
T=str2num(datos{2});
N=str2num(datos{3});
m=str2num(datos{4});
alfa=str2num(datos{5});
f=datos{6};
%Incializacion
h=L/m;
k=T/N;
lambda=alfa^2*k/h^2;
v(m,1)=0;
w(m,1)=0;
W=[];
x=sym(x);
%Obtencion de la solucion
%Obtencion de los resultados
for(i=1:m-1)
x=i*h;
v(i,1)=eval(f);
end
W=[W;v];
for j=1:N
t=j*k;
w(1,1)=((1-2*lambda)*v(1,1)+lambda*v(2,1));
for i=2:m-1
w(i,1)=(1-2*lambda)*v(i,1)+lambda*(v(i+1,1)+v(i-1,1));
18
end
v=w;
W=[W;v];
end
%Graficacion de los resultados
num_rows=size(W,1);
zeros_col=zeros(num_rows,1);
W=[zeros_col W];
plot(W(1,:));
limites=axis;
maximo=limites(4);
for(a=2:size(W,1))
plot(W(a,:))
limites=[1 m+1 0 maximo];
axis(limites);
pause(0.01)
end
title(Temperatura vs. x)
ylabel(u(x))
xlabel(x)
figure
surf(W)
title(Superficie de Distribucion de Temperatura)
ylabel(t)
xlabel(x)
zlabel(u(x,t))
shading interp
Metodo de diferencias regresivas
%Metodo de diferencias regresivas. W contiene la matriz con la solucion
%La matriz W contiene los resultados del metodo. Las columnas corresponden
%a la variacion en el tiempo, y las filas a la variacion en x.
close all
clear all
clc
%Entrada de datos
Preguntas={Longitud de la barra:
Limite de Tiempo
Numero de particiones en el tiempo
Numero de particiones en x
Coeficiente alfa
Funcion de temperatura inicial};
Titulo = Entrada de Datos (Metodo de diferencias progresivas);
Defecto = {1, 0.40 , 40 , 10 , 1 , sin(pi*x)};
datos=inputdlg(Preguntas, Titulo, 1, Defecto);
19
l=str2num(datos{1});
T=str2num(datos{2});
N=str2num(datos{3});
m=str2num(datos{4});
alpha=str2num(datos{5});
f=datos{6};
x=sym(x);
%Inicializacion
h=l/m;
k=T/N;
lambda=((alpha^2)*k)/h^2;
W=[];
w=[];
%Obtencion de la solucion
for(i=1:m-1)
x=i*h;
w(1,i)=eval(f);
end
W=[W;w];
L=[];
u=[];
L(1)=1+2*lambda;
u(1)=-lambda/L(1);
for(i=2:m-2)
L(i)=1 + 2*lambda + lambda*u(i-1);
u(i)=-lambda/L(i);
end
L(m-1)=1 + 2*lambda + lambda*u(m-2);
for(j=1:N)
t=j*k;
z=[];
z(1)=w(1)/L(1);
for(i=2:m-1)
z(i)=(w(i) + lambda*z(i-1))/L(i);
end
w(m-1)=z(m-1);
for(i=m-2:-1:1)
w(i)=z(i) - u(i)*w(i+1);
end
W=[W;w];
end
%Grafica da la solucion
num_rows=size(W,1);
zeros_col=zeros(num_rows,1);
W=[zeros_col W zeros_col];
plot(W(1,:));
20
limites=axis;
maximo=limites(4);
for(a=2:size(W,1))
plot(W(a,:))
limites=[1 m+1 0 maximo];
axis(limites);
pause(0.01)
end
title(Temperatura vs. x)
ylabel(u(x))
xlabel(x)
figure
surf(W)
title(Superficie de Distribucion de Temperatura)
ylabel(t)
xlabel(x)
zlabel(u(x,t))
shading interp
Metodo de Crank-Nicolson
%Metodo de crank-nicoloson
%La matriz W contiene los resultados del metodo. Las columnas corresponden
%a la variacion en el tiempo, y las filas a la variacion en x.
clear
close all
clc
%Entrada de datos
Preguntas={Longitud de la barra:
Limite de Tiempo
Numero de particiones en el tiempo
Numero de particiones en x
Coeficiente alfa
Funcion de temperatura inicial};
Titulo = Entrada de Datos (Metodo de diferencias progresivas);
Defecto = {1, 0.40 , 40 , 10 , 1 , sin(pi*x)};
datos=inputdlg(Preguntas, Titulo, 1, Defecto);
L=str2num(datos{1});
T=str2num(datos{2});
N=str2num(datos{3});
m=str2num(datos{4});
alfa=str2num(datos{5});
f=datos{6};
%Incializacion
h=L/m;
k=T/N;
21
lambda=alfa^2*k/h^2;
v(m,1)=0;
W=[];
x=sym(x);
%Obtencion de los resultados
for(i=1:m-1)
x=i*h;
v(i,1)=eval(f);
end
%v(1:m-1,1)=(subs(f,(1:m-1)*h));
W=[W;v];
l(1,1)=1+lambda;
u(1,1)=-lambda/(2*l(1,1));
for i=2:m-2
l(i,1)=1+lambda+lambda*u(i-1,1)/2;
u(i,1)=-lambda/(2*l(i,1));
end
l(m-1,1)=1+lambda+lambda*u(m-2,1)/2;
for j=1:N
t=j*k;
z(1,1)=((1-lambda)*v(1,1)+lambda/2*v(2,1))/l(1,1);
for i=2:m-1
z(i,1)=((1-lambda)*v(i,1)+lambda/2*(v(i+1,1)+v(i-1,1)+z(i-1,1)))/l(i,1);
end
v(m-1,1)=z(m-1,1);
for i=m-2:-1:1
v(i,1)=z(i,1)-u(i,1)*v(i+1,1);
end
W=[W;v];
end
%Graficacion de la solucion
num_rows=size(W,1);
zeros_col=zeros(num_rows,1);
W=[zeros_col W];
plot(W(1,:));
limites=axis
maximo=limites(4);
for(a=2:size(W,1))
plot(W(a,:))
limites=[1 m+1 0 maximo];
axis(limites);
pause(0.01)
end
title(Temperatura vs. x)
ylabel(u(x))
xlabel(x)
22
figure
surf(W)
title(Superficie de Distribucion de Temperatura)
ylabel(t)
xlabel(x)
zlabel(u(x,t))
shading interp
Metodo de diferencias nitas para la ecuacion de onda
function U = onda (f,g,a,b,c,n,m)
%sin(pi*x)+sin(2*pi*x),0,1,0.5,2,11,21
%Datos
% - f=u(x,0) se entra como una cadena de carcteres.
% - g=ut(x,0) se ingresa como una cadena de caracteres.
% - a y b son los extremos superiores de los intervalos [0,a] y [0,b]
% - c es la constante de la ecuacion de onda.
% - n y m es el numero de nodos en [0,a] y [0,b]
%Resultado
% - U es la matriz con los respectivos resultados.
format long g;
close all;
h=a/(n-1);
k=b/(m-1);
alfa=c*k/h;
alfa2=alfa^2;
alfa22=(alfa2)/2;
s1=1-alfa2;
s2=2*s1;
U=zeros(n,m);
%se calculan las primeras filas (j-esimo y (j-1)-esimo paso)
for i=2:n-1
x=h*(i-1);
U(i,1)=eval(f); %f esta en funcion de x
x=h*i;
evaluar1=eval(f);
x=h*(i-2);
evaluar2=eval(f);
x=h*(i-1);
U(i,2)=s1*eval(f)+k*eval(g)+alfa22*(evaluar1+evaluar2);
end
%Calculos de las otras filas
for j=3:m
for i=2:(n-1)
U(i,j)=s2*U(i,j-1)+alfa2*(U(i-1,j-1)+U(i+1,j-1))-U(i,j-2);
end
23
end
U=U;
figure(2),surf(U),title(Grafica de U=f(x,t)),xlabel(x),ylabel(t),zlabel(u)
24

You might also like