introducción al método de diferencias finitas y su implementación

60
Introducción al Método de Diferencias Finitas y su Implementación Computacional Antonio Carrillo Ledesma y Omar Mendoza Bernal Facultad de Ciencias, UNAM http://www.mmc.geofisica.unam.mx/acl/ Una copia de este trabajo se puede descargar de http://www.mmc.geofisica.unam.mx/acl/Textos/ Invierno 2015, Versión 1.0α

Upload: ledieu

Post on 03-Jan-2017

261 views

Category:

Documents


4 download

TRANSCRIPT

Page 1: Introducción al Método de Diferencias Finitas y su Implementación

Introducción al Método de Diferencias Finitas ysu Implementación Computacional

Antonio Carrillo Ledesma y Omar Mendoza BernalFacultad de Ciencias, UNAM

http://www.mmc.geofisica.unam.mx/acl/

Una copia de este trabajo se puede descargar dehttp://www.mmc.geofisica.unam.mx/acl/Textos/

Invierno 2015, Versión 1.0α

Page 2: Introducción al Método de Diferencias Finitas y su Implementación

Introducción al Método de Diferencias Finitas y su ImplementaciónComputacional

Índice

1 Expansión en Series de Taylor 21.1 Aproximación de la Primera Derivada . . . . . . . . . . . . . . . 2

1.1.1 Diferencias Progresivas . . . . . . . . . . . . . . . . . . . . 21.1.2 Diferencias Regresivas . . . . . . . . . . . . . . . . . . . . 31.1.3 Diferencias Centradas . . . . . . . . . . . . . . . . . . . . 3

1.2 Derivadas de Ordenes Mayores . . . . . . . . . . . . . . . . . . . 41.2.1 Derivada de Orden Dos . . . . . . . . . . . . . . . . . . . 51.2.2 Derivadas de Ordenes Mayores . . . . . . . . . . . . . . . 5

1.3 Derivadas en Dos Dimensiones . . . . . . . . . . . . . . . . . . . 61.4 Derivadas en Tres Dimensiones . . . . . . . . . . . . . . . . . . . 7

2 Método de Diferencias Finitas en Una Dimensión 102.1 Problema con Condiciones de Frontera Dirichlet . . . . . . . . . . 102.2 Problema con Condiciones de Frontera Neumann . . . . . . . . . 162.3 Problema con Condiciones de Frontera Robin . . . . . . . . . . . 172.4 Discretización del Tiempo . . . . . . . . . . . . . . . . . . . . . . 23

2.4.1 Ecuación con Primera Derivada Temporal . . . . . . . . . 232.4.2 Ecuación con Segunda Derivada Temporal . . . . . . . . . 27

2.5 Consistencia, Estabilidad, Convergencia y Error del Método deDiferencias Finitas . . . . . . . . . . . . . . . . . . . . . . . . . . 30

3 Consideraciones Sobre la Implementación de Métodos de Solu-ción de Grandes Sistemas de Ecuaciones Lineales 333.1 Métodos Directos . . . . . . . . . . . . . . . . . . . . . . . . . . . 33

3.1.1 Factorización LU . . . . . . . . . . . . . . . . . . . . . . . 333.1.2 Factorización Cholesky . . . . . . . . . . . . . . . . . . . . 353.1.3 Factorización LU para Matrices Tridiagonales . . . . . . . 35

3.2 Métodos Iterativos . . . . . . . . . . . . . . . . . . . . . . . . . . 363.2.1 Método de Gradiente Conjugado . . . . . . . . . . . . . . 383.2.2 Método Residual Mínimo Generalizado . . . . . . . . . . . 40

3.3 Estructura Óptima de las Matrices en su Implementación Com-putacional . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 413.3.1 Matrices Bandadas . . . . . . . . . . . . . . . . . . . . . . 433.3.2 Matrices Dispersas . . . . . . . . . . . . . . . . . . . . . . 443.3.3 Multiplicación Matriz-Vector . . . . . . . . . . . . . . . . 45

4 Implementación Computacional del Método de Diferencias Fini-tas para la Resolución de Ecuaciones Diferenciales Parciales 474.1 Implementación en SciLab . . . . . . . . . . . . . . . . . . . . . . 474.2 Implementación en Octave (MatLab) . . . . . . . . . . . . . . . . 494.3 Implementación en C++ . . . . . . . . . . . . . . . . . . . . . . . 514.4 Implementación en Python . . . . . . . . . . . . . . . . . . . . . 53

5 Bibliografía 56

[email protected] 1 Antonio Carrillo Ledesma

Page 3: Introducción al Método de Diferencias Finitas y su Implementación

Introducción al Método de Diferencias Finitas y su ImplementaciónComputacional

1 Expansión en Series de Taylor

Sea f(x) una función definida en (a, b) que tiene hasta la k−ésima derivada,entonces la expansión de f(x) usando series de Taylor alrededor del punto xicontenido en el intervalo (a, b) será

f(x) = f(xi)+(x− xi)

1!

df

dx

∣∣∣∣xi

+(x− xi)

2

2!

d2f

dx2

∣∣∣∣xi

+ ...+(x− xi)

k

k!

dkf

dxk

∣∣∣∣ε

(1.1)

donde ε = xi + θ(x− xi) y 0 < θ < 1.

1.1 Aproximación de la Primera Derivada

Existen distintas formas de generar la aproximación a la primera derivada, nosinteresa, una que nos de la mejor precisión posible con el menor esfuerzo com-putacional.

1.1.1 Diferencias Progresivas

Considerando la Ec.(1.1) con k = 2 y x = xi +∆x, tenemos

f(xi +∆x) = f(xi) +∆xdf

dx

∣∣∣∣xi

+∆x2

2!

d2f

dx2

∣∣∣∣εp

(1.2)

de esta ecuación obtenemos la siguiente expresión para aproximación de laprimera derivada

df

dx

∣∣∣∣xi

=f(xi +∆x)− f(xi)

∆x− ∆x2

2!

d2f

dx2

∣∣∣∣εp

(1.3)

en este caso la aproximación de f ′(x) mediante diferencias progresivas es deprimer orden, o sea O(∆x). Siendo Op(∆x) el error local de truncamiento,definido como

Op(∆x) = −∆x2

2!

d2f

dx2

∣∣∣∣εp

. (1.4)

Es común escribir la anterior expresión como

df

dx

∣∣∣∣xi

=f(xi +∆x)− f(xi)

∆x−Op(∆x) (1.5)

como

f ′(xi) =fi+1 − fi∆x

(1.6)

para simplificar notación.

[email protected] 2 Antonio Carrillo Ledesma

Page 4: Introducción al Método de Diferencias Finitas y su Implementación

Introducción al Método de Diferencias Finitas y su ImplementaciónComputacional

1.1.2 Diferencias Regresivas

Considerando la Ec.(1.1) con k = 2 y x = xi −∆x, tenemos

f(xi −∆x) = f(xi)−∆xdf

dx

∣∣∣∣xi

+∆x2

2!

d2f

dx2

∣∣∣∣εr

(1.7)

de esta ecuación obtenemos la siguiente expresión para aproximación de laprimera derivada

df

dx

∣∣∣∣xi

=f(xi)− f(xi −∆x)

∆x− ∆x2

2!

d2f

dx2

∣∣∣∣εr

(1.8)

en este caso la aproximación de f ′(x) mediante diferencias regresivas es deprimer orden, o sea O(∆x). Siendo Or(∆x) el error local de truncamiento,definido como

Or(∆x) =∆x2

2!

d2f

dx2

∣∣∣∣εr

. (1.9)

Es común escribir la anterior expresión como

df

dx

∣∣∣∣xi

=f(xi)− f(xi −∆x)

∆x+Or(∆x) (1.10)

como

f ′(xi) =fi − fi−1∆x

(1.11)

para simplificar notación.

1.1.3 Diferencias Centradas

Considerando la Ec.(1.1) con k = 3 y escribiendo f(x) en x = xi + ∆x yx = xi −∆x, tenemos

f(xi +∆x) = f(xi) +∆xdf

dx

∣∣∣∣xi

+∆x2

2!

d2f

dx2

∣∣∣∣xi

+∆x3

3!

d3f

dx3

∣∣∣∣εp

(1.12)

y

f(xi −∆x) = f(xi)−∆xdf

dx

∣∣∣∣xi

+∆x2

2!

d2f

dx2

∣∣∣∣xi

− ∆x3

3!

d3f

dx3

∣∣∣∣εr

(1.13)

restando la Ec.(1.12) de la Ec.(1.13), se tiene

f(xi +∆x)− f(xi −∆x) = 2∆xdf

dx

∣∣∣∣xi

+∆x3

3!

[d3f

dx3

∣∣∣∣εp

+d3f

dx3

∣∣∣∣εr

]

(1.14)

esta última expresión lleva a la siguiente aproximación de la primera derivadamediante diferencias centradas

df

dx

∣∣∣∣xi

=f(xi +∆x)− f(xi −∆x)

2∆x+Oc(∆x2) (1.15)

[email protected] 3 Antonio Carrillo Ledesma

Page 5: Introducción al Método de Diferencias Finitas y su Implementación

Introducción al Método de Diferencias Finitas y su ImplementaciónComputacional

con un error local de truncamiento de segundo orden Oc(∆x2), es decir

Oc(∆x2) =∆x2

3!

[d3f

dx3

∣∣∣∣εp

+d3f

dx3

∣∣∣∣εr

]

(1.16)

comparado el error local de truncamiento de la aproximación anterior Oc(∆x2),con los obtenidos previamente para diferencias progresivas y regresivas Op(∆x)y Or(∆x), se tiene que

lim∆x→0

Oc(∆x2) < lim∆x→0

Op(∆x). (1.17)

Es común encontrar expresada la derivada1

df

dx

∣∣∣∣xi

=f(xi +∆x)− f(xi −∆x)

2∆x(1.18)

como

f ′(xi) =fi+1 − fi−12∆x

(1.19)

para simplificar notación.

Derivadas Usando Más Puntos Utilizando el valor de la función en máspuntos se construyen fórmulas más precisas para las derivadas2 , algunos ejem-plos son

f ′ (xi) =−3fi + 4fi+1 − fi+2

2∆x+O(∆x2) (1.20)

f ′(xi) =3fi − 4fi−1 + fi−2

2∆x+O(∆x2)

f ′(xi) =2fi+1 + 3fi − 6fi−1 + fi−2

6∆x+O(∆x3)

f ′(xi) =fi−2 − 8fi−1 + 8fi+1 − fi+2

12∆x+O(∆x4)

f ′(xi) =−25fi + 48fi+1 − 36fi+2 + 16fi+3 − 3fi+4

12∆x+O(∆x4)

1.2 Derivadas de Ordenes Mayores

De forma análoga se construyen aproximaciones en diferencias finitas de ordenmayor, aquí desarrollaremos la forma de calcular la derivada de orden dos endiferencias centradas.

1En el caso de que la derivada sea usada en una malla no homogénea, es necesario incluiren la derivada a que ∆x se refiere, por ejemplo en cada punto i, tenemos la ∆xi− (por la

izquierda) y la ∆xi+ (por la derecha), i.e. df

dx

∣∣∣xi

=f(xi+∆xi−)−f(xi−∆xi+)

(∆xi−)+(∆xi+).

2Al usar estas derivadas en el método de diferencias finitas mostrado en la sección (2) lasmatrices generadas no serán tridiagonales.

[email protected] 4 Antonio Carrillo Ledesma

Page 6: Introducción al Método de Diferencias Finitas y su Implementación

Introducción al Método de Diferencias Finitas y su ImplementaciónComputacional

1.2.1 Derivada de Orden Dos

Partiendo del desarrollo de Taylor

f(xi+∆x) = f(xi)+∆xf ′(xi)+∆x2

2!f ′′(xi)+

∆x3

3!f ′′′(xi)+

∆x4

4!f(4)(ξp) (1.21)

y

f(xi−∆x) = f(xi)−∆xf ′(xi)+∆x2

2!f ′′(xi)−

∆x3

3!f ′′′(xi)+

∆x4

4!f (4)(ξr) (1.22)

y eliminado las derivadas primeras, sumando las ecuaciones anteriores y despe-jando se encuentra que

f ′′(xi) =f(xi −∆x)− 2f(xi) + f(xi +∆x)

∆x2− ∆x2

12f (4)(ξc) (1.23)

así, la aproximación a la segunda derivada usando diferencias centradas con unerror de truncamiento Oc(∆x2) es

f ′′(xi) =f(xi −∆x)− 2f(xi) + f(xi +∆x)

∆x2(1.24)

Es común escribir la anterior expresión como

f ′′(xi) =fi−1 − 2fi + fi+1

∆x2

para simplificar notación.

Derivadas Usando Más Puntos Utilizando el valor de la función en máspuntos se construyen fórmulas más precisas para las derivadas, algunos ejemplosson

f ′′(xi) =fi+2 − 2fi+1 + fi

∆x2+O(∆x) (1.25)

f ′′(xi) =−fi+3 + 4fi+2 − 5fi+1 + 2fi

∆x2+O(∆x2)

f ′′(xi) =−fi+2 + 16fi+1 − 30fi + 16fi−1 − fi−2

12∆x2+O(∆x4)

1.2.2 Derivadas de Ordenes Mayores

De forma análoga se construyen derivadas de ordenes mayores utilizando el valorde la función en más puntos, algunos ejemplos para derivadas terceras son

f ′′′(xi) =fi+3 − 3fi+2 + 3fi+1 − fi

∆x3+O(∆x) (1.26)

f ′′′(xi) =fi+2 − 2fi+1 + 2fi−1 − fi−2

2∆x3+O(∆x2)

f ′′′(xi) =fi−3 − 8fi−2 + 13fi−1 − 13fi+1 + 8fi+2 − fi+3

8∆x3+O(∆x4)

[email protected] 5 Antonio Carrillo Ledesma

Page 7: Introducción al Método de Diferencias Finitas y su Implementación

Introducción al Método de Diferencias Finitas y su ImplementaciónComputacional

Algunos ejemplos para derivadas cuartas son

f ′′′′(xi) =fi+4 − 4fi+3 + 6fi+2 − 4fi+1 + fi

∆x4+O(∆x) (1.27)

f ′′′′(xi) =fi+2 − 4fi+1 + 6fi − 4fi−1 + fi−2

∆x4+O(∆x2)

f ′′′′(xi) =−fi+3 + 12fi+2 − 39fi+1 + 56fi − 39fi−1 + 12fi−2 − fi−3

6∆x4+O(∆x4)

1.3 Derivadas en Dos Dimensiones

De forma análoga se construyen aproximaciones en diferencias finitas de primer ysegundo orden en dos dimensiones. Usando el teorema de Teylor para funcionesen dos variables x y y, es posible escribir de forma exacta para el punto xi y yj

f(xi +∆x, yj) = f(xi, yj) +∆x∂f (xi, yj)

∂x+∆x

2

∂2f (xi + θ1∆x, yj)

∂x2

(1.28)

f(xi, yj +∆y) = f(xi, yj) +∆y∂f (xi, yj)

∂y+∆y

2

∂2f (xi, yj + θ2∆y)

∂y2.

Así, la aproximación en diferencias hacia delante de ∂f/∂x y ∂f/∂y es

∂f (xi, yj)

∂x≃ f (xi +∆x, yj)− f (xi, yj)

∆x(1.29)

∂f (xi, yj)

∂y≃ f (xi, yj +∆y)− f (xi, yj)

∆y

o en su forma simplificada (para simplificar la notación, asociamos ∆x = h y∆y = k), tenemos

∂f (xi, yj)

∂x≃ fi+1,j − fi,j

h(1.30)

∂f (xi, yj)

∂y≃ fi,j+1 − fi,j

k.

La aproximación en diferencias hacia atrás de ∂f/∂x y ∂f/∂y es

∂f (xi, yj)

∂x≃ f (xi, yj)− f (xi −∆x, yj)

∆x(1.31)

∂f (xi, yj)

∂y≃ f (xi, yj)− f (xi, yj −∆y)

∆y

o en su forma simplificada, tenemos

∂f (xi, yj)

∂x≃ fi,j − fi−1,j

h(1.32)

∂f (xi, yj)

∂y≃ fi,j − fi,j−1

k.

[email protected] 6 Antonio Carrillo Ledesma

Page 8: Introducción al Método de Diferencias Finitas y su Implementación

Introducción al Método de Diferencias Finitas y su ImplementaciónComputacional

La aproximación en diferencias centradas de ∂f/∂x y ∂f/∂y es

∂f (xi, yj)

∂x≃ f (xi +∆x, yj)− f (xi −∆x, yj)

2∆x(1.33)

∂f (xi, yj)

∂y≃ f (xi, yj +∆y)− f (xi, yj −∆y)

2∆y

o en su forma simplificada, tenemos

∂f (xi, yj)

∂x≃ fi+1,j − fi−1,j

2h(1.34)

∂f (xi, yj)

∂y≃ fi,j+1 − fi,j−1

2k.

Por otro lado, la aproximación en diferencias centradas de ∂2f/∂x2 y ∂2f/∂y2

es

∂2f (xi, yj)

∂x2≃ f (xi +∆x, yj)− 2f (xi, yj) + f (xi −∆x, yj)

∆x2(1.35)

∂2f (xi, yj)

∂y2≃ f (xi, yj +∆y)− f (xi, yj) + f (xi, yj −∆y)

∆y2

o en su forma simplificada, tenemos

∂2f (xi, yj)

∂x2≃ fi+1,j − 2fi,j + fi−1,j

h2(1.36)

∂2f (xi, yj)

∂y2≃ fi,j+1 − 2fi,j + fi,j−1

k2.

1.4 Derivadas en Tres Dimensiones

De forma análoga se construyen aproximaciones en diferencias finitas de primer ysegundo orden en tres dimensiones. Usando el teorema de Teylor para funcionesde tres variables x, y y z, es posible escribir de forma exacta para el punto xi, yjy zk

f(xi +∆x, yj , zk) = f(xi, yj , zk) +∆x∂f (xi, yj , zk)

∂x+∆x

2

∂2f (xi + θ1∆x, yj , zk)

∂x2

(1.37)

f(xi, yj +∆y, zk) = f(xi, yj , zk) +∆y∂f (xi, yj , zk)

∂y+∆y

2

∂2f (xi, yj + θ2∆y, zk)

∂y2

f(xi, yj , zk +∆z) = f(xi, yj , zk) +∆z∂f (xi, yj , zk)

∂z+∆z

2

∂2f (xi, yj , zk + θ3∆z)

∂z2

Así, la aproximación en diferencias hacia delante de ∂f/∂x, ∂f/∂y y ∂f/∂z

[email protected] 7 Antonio Carrillo Ledesma

Page 9: Introducción al Método de Diferencias Finitas y su Implementación

Introducción al Método de Diferencias Finitas y su ImplementaciónComputacional

es

∂f (xi, yj, zk)

∂x≃ f (xi +∆x, yj , zk)− f (xi, yj , zk)

∆x(1.38)

∂f (xi, yj, zk)

∂y≃ f (xi, yj +∆y, zk)− f (xi, yj , zk)

∆y

∂f (xi, yj, zk)

∂z≃ f (xi, yj , zk +∆z)− f (xi, yj , zk)

∆z

o en su forma simplificada (para simplificar la notación, asociamos∆x = h,∆y =l y ∆z =m), tenemos

∂f (xi, yj , zk)

∂x≃ fi+1,j,k − fi,j,k

h(1.39)

∂f (xi, yj , zk)

∂y≃ fi,j+1,k − fi,j,k

l

∂f (xi, yj , zk)

∂z≃ fi,j,k+1 − fi,j,k

m.

La aproximación en diferencias hacia atrás de ∂f/∂x, ∂f/∂y y ∂f/∂z es

∂f (xi, yj, zk)

∂x≃ f (xi, yj , zk)− f (xi −∆x, yj , zk)

∆x(1.40)

∂f (xi, yj, zk)

∂y≃ f (xi, yj , zk)− f (xi, yj −∆y, zk)

∆y

∂f (xi, yj, zk)

∂z≃ f (xi, yj , zk)− f (xi, yj , zk −∆z)

∆z

o en su forma simplificada, tenemos

∂f (xi, yj , zk)

∂x≃ fi,j,k − fi−1,j,k

h(1.41)

∂f (xi, yj , zk)

∂y≃ fi,j,k − fi,j−1,k

l

∂f (xi, yj , zk)

∂z≃ fi,j,k − fi,j,k−1

m.

La aproximación en diferencias centradas de ∂f/∂x, ∂f/∂y y ∂f/∂z es

∂f (xi, yj , zk)

∂x≃ f (xi +∆x, yj , zk)− f (xi −∆x, yj , zk)

2∆x(1.42)

∂f (xi, yj , zk)

∂y≃ f (xi, yj +∆y, zk)− f (xi, yj −∆y, zk)

2∆y

∂f (xi, yj , zk)

∂z≃ f (xi, yj , zk +∆z)− f (xi, yj , zk −∆z)

2∆z

[email protected] 8 Antonio Carrillo Ledesma

Page 10: Introducción al Método de Diferencias Finitas y su Implementación

Introducción al Método de Diferencias Finitas y su ImplementaciónComputacional

o en su forma simplificada, tenemos

∂f (xi, yj , zk)

∂x≃ fi+1,j,k − fi−1,j,k

2h(1.43)

∂f (xi, yj , zk)

∂y≃ fi,j+1,k − fi,j−1,k

2l

∂f (xi, yj , zk)

∂z≃ fi,j,k+1 − fi,j,k−1

2m.

Por otro lado, la aproximación en diferencias centradas de ∂2f/∂x2, ∂2f/∂y2

y ∂2f/∂z2 es

∂2f (xi, yj , zk)

∂x2≃ f (xi +∆x, yj , zk)− 2f (xi, yj , zk) + f (xi −∆x, yj , zk)

∆x2

(1.44)

∂2f (xi, yj , zk)

∂y2≃ f (xi, yj +∆y, zk)− f (xi, yj , zk) + f (xi, yj −∆y, zk)

∆y2

∂2f (xi, yj , zk)

∂z2≃ f (xi, yj , zk +∆z)− f (xi, yj , zk) + f (xi, yj , zk −∆z)

∆z2

o en su forma simplificada, tenemos

∂2f (xi, yj , zk)

∂x2≃ fi+1,j,k − 2fi,j,k + fi−1,j,k

h2(1.45)

∂2f (xi, yj , zk)

∂y2≃ fi,j+1,k − 2fi,j,k + fi,j−1,k

l2

∂2f (xi, yj , zk)

∂z2≃ fi,j,k+1 − 2fi,j,k + fi,j,k−1

m2.

[email protected] 9 Antonio Carrillo Ledesma

Page 11: Introducción al Método de Diferencias Finitas y su Implementación

Introducción al Método de Diferencias Finitas y su ImplementaciónComputacional

2 Método de Diferencias Finitas en Una Dimen-sión

Consideremos la ecuación diferencial parcial

(p (x)u′ (x))′+ q (x)u′ (x)− r (x)u (x) = f (x) (2.1)

en a ≤ x ≤ b donde: u (a) = uα y u (b) = uβ

con condiciones de frontera Dirichlet o cualquier otro tipo de condiciones defrontera. Para usar el procedimiento general de solución numérica mediante elmétodo de diferencias finitas, debemos de hacer:

1. Generar una malla del dominio, i.e. una malla es un conjunto finito depuntos en los cuales buscaremos la solución aproximada a la ecuacióndiferencial parcial.

2. Sustituir las derivadas correspondiente con alguna de las formulas de difer-encias finitas centradas (véase secciones 1.1 y 1.2), en cada punto donde lasolución es desconocida para obtener un sistema algebraico de ecuacionesAu = f .

3. Resolver el sistema de ecuaciones (véase capítulo 3), y así obtener la solu-ción aproximada en cada punto de la malla.

2.1 Problema con Condiciones de Frontera Dirichlet

Consideremos un caso particular de la Ec.(2.1) definido por la ecuación

u′′(x) = f(x), 0 ≤ x ≤ 1, u(0) = uα, u(1) = uβ (2.2)

con condiciones de frontera Dirichlet. Para usar el procedimiento general desolución numérica mediante el método de diferencias finitas, debemos de hacer:

1. Generamos una malla homogénea del dominio3

xi = ih, i = 0, 1, ..., n, h =1

n= ∆x (2.3)

2. Sustituimos la derivada con Ec.(1.24) en cada punto donde la solución esdesconocida para obtener un sistema algebraico de ecuaciones. Así, encada punto xi de la malla aproximamos la ecuación diferencial por4

u′′(xi) ≈u(xi − h)− 2u(x) + u(xi + h)

h2(2.4)

3En el caso de que la malla no sea homogénea, es necesario incluir en la derivada a queh se refiere, por ejemplo en cada punto i, tenemos la hi− (por la izquierda) y la hi+ (por la

derecha), i.e. u′′(xi) ≈u(xi−hi−)−2u(x)+u(xi+hi+)

(hi−)(hi+).

4Notemos que en cada punto de la malla, la aproximación por diferencias finitas suponela solución de tres puntos de la malla xi−1, xi y xi+1. Al conjunto de estos tres puntos de lamalla son comúnmente llamados el esténcil de diferencias finitas.

[email protected] 10 Antonio Carrillo Ledesma

Page 12: Introducción al Método de Diferencias Finitas y su Implementación

Introducción al Método de Diferencias Finitas y su ImplementaciónComputacional

o en su forma simplificada

u′′(xi) ≈ui−1 − 2ui + ui+1

h2(2.5)

definiendo la solución aproximada de u(x) en xi como ui como la solucióndel siguiente sistema lineal de ecuaciones

uα − 2u1 + u2h2

= f(x1)

u1 − 2u2 + u3h2

= f(x2)

...ui−1 − 2ui + ui+1

h2= f(xi) (2.6)

...un−3 − 2un−2 + un−1

h2= f(xn−2)

un−2 − 2un−1 + uβh2

= f(xn−1).

Este sistema de ecuaciones se puede escribir como un matriz A y los vec-tores u y fde la forma

− 2h2

1h2

1h2

− 2h2

1h2

1h2

− 2h2

1h2

. . .. . .

. . .1h2

− 2h2

1h2

1h2

− 2h2

u1u2u3...

un−2un−1

=

f(x1)− uαh2

f(x2)f(x3)...

f(xn−2)f(xn−1)− uβ

h2

.

factorizando 1/h2 del sistema lineal Au = f , tenemos

1

h2

−2 11 −2 1

1 −2 1. . .

. . .. . .

1 −2 11 −2

u1u2u3...

un−2un−1

=

f(x1)− uαh2

f(x2)f(x3)...

f(xn−2)f(xn−1)− uβ

h2

.

esta última forma de expresar el sistema lineal algebraico asociado espreferible para evitar problemas numéricos al momento de resolver elsistema lineal por métodos iterativos (véase capítulo 3.2) principalmentecuando h→ 0.

[email protected] 11 Antonio Carrillo Ledesma

Page 13: Introducción al Método de Diferencias Finitas y su Implementación

Introducción al Método de Diferencias Finitas y su ImplementaciónComputacional

3. Resolviendo el sistema de ecuaciones (véase capítulo 3), obtenemos la solu-ción aproximada en cada punto interior de la malla. La solución completaal problema la obtenemos al formar el vector

[uα u1 u2 u3 · · · un−2 un−1 uβ

].

Para el problema general dado por la Ec.(2.1)

(p (x)u′ (x))′+ q (x)u′ (x)− r (x)u (x) = f (x) (2.7)

en a ≤ x ≤ b donde: u (a) = uα y u (b) = uβ

el término q (x)u′ (x) algunas veces es llamado el término advectivo5 si u es lavelocidad. Existen dos diferentes técnicas de discretización que se detallan acontinuación:

• Si las funciones p(x), q(x) y r(x) son constantes, el esquema de diferenciasfinitas centradas para todas las derivadas, este está dado por el esténcil

piui−1 − 2ui + ui+1

h2+ qi

ui+1 − ui−12h

− riui = fi i = 1, 2, ..., n. (2.8)

donde la ventaja de esta discretización, es que el método es de segundoorden de exactitud. La desventaja es que los coeficientes de la matrizgenerada pueden no ser diagonal dominante si r (x) > 0 y p (x) > 0.Cuando la advección |p (x)| es grande, la ecuación se comporta como laecuación de onda.

• Tomando las funciones p(x, t), q(x, t) y r(x, t) más generales posibles, esnecesario hacer una discretización que garantice que el método es de se-gundo orden de exactitud, esto se logra mediante la siguiente discretizaciónpara (p (x, t)u′ (x, t))′ mediante

∂x

(p∂u

∂x

)(x, t) ≃

[p

(x+

∆x

2, t

)u (x+∆x, t)− u (x, t)

∆x(2.9)

− p

(x− ∆x

2, t

)u (x, t)− u (x−∆x, t)

∆x

]/∆x

entonces se tiene que

p(ui+1, t)ui+1+ui

h− p (ui−1,t)

ui−ui−1h

h+ qi

ui+1 − ui−12h

− riui = fi (2.10)

para i = 1, 2, ..., n, (véase [51] pág. 78 y 79).

5Cuando la advección es fuerte, esto es cuando |q (x)| es grande, la ecuación se comportacomo si fuera una ecuación de onda.

[email protected] 12 Antonio Carrillo Ledesma

Page 14: Introducción al Método de Diferencias Finitas y su Implementación

Introducción al Método de Diferencias Finitas y su ImplementaciónComputacional

• El esquema mixto, en donde se usa el esquema de diferencias finitas cen-tradas para el término de difusión y el esquema upwind para el términode advección

piui−1 − 2ui + ui+1

h2+ qi

ui+1 − ui−1h

− riui = fi, si qi ≥ 0(2.11)

piui−1 − 2ui + ui+1

h2+ qi

ui − ui−1h

− riui = fi, si qi < 0

el propósito es incrementar el dominio de la diagonal. Este esquema es deorden uno de exactitud y es altamente recomendable su uso si |q (x)| ∼1/h, en caso de no usarse, se observará que la solución numérica oscilaalrededor del cero.

Veamos unos ejemplos desarrollados en SCILAB6

Ejemplo 1 Sea

−u′′(x) + u (x) = 0, 0 ≤ x ≤ 1, u(0) = 0, u(1) = 1

entonces el programa queda implementado como:a=0; // Inicio dominioc=1; // Fin dominioM=50; // ParticiónN=M-2; // Nodos interioresh=(c-a)/(M-1); // Incremento en la mallaY0=0; // Condición inicial en el inicio del dominioY1=1; // Condición inicial en el fin del dominioA=zeros(N,N); // Matriz Ab=zeros(N); // Vector b

P=2/(h^2);Q=-1/(h^2)+1/(2*h);R=-1/(h^2)-1/(2*h);

// Primer renglon de la matriz A y vector bA(1,1)=P;A(1,2)=Q;b(1)=-Y0*R;// Renglones intermedios de la matriz A y vector bfor i=2:N-1

6Scilab es un programa open source para el cálculo numérico el cual provee un poderosoambiente de cálculo para aplicaciones Científicas y de Ingeniería [http://www.scilab.org].

[email protected] 13 Antonio Carrillo Ledesma

Page 15: Introducción al Método de Diferencias Finitas y su Implementación

Introducción al Método de Diferencias Finitas y su ImplementaciónComputacional

A(i,i-1)=R;A(i,i)=P;A(i,i+1)=Q;end// Relglon final de la matriz A y vector bA(N,N-1)=R;A(N,N)=P;b(N)=-Y1*Q;

// Resuleve el sistema lineal Ax=bx=inv(A)*b;

// Prepara la graficaciónxx=zeros(M,1);for i=1:Mxx(i)=a+h*(i-1);endyy=zeros(M,1);yy(1)=Y0; // Condición inicialfor i=1:Nyy(i+1)=x(i);endyy(M)=Y1; // Condición inicial// Grafica la solución de la Ecuación Diferencial Parcial en 1Dplot2d(xx,yy)

Ejemplo 2 Sea

u′′(x) = π2 cos (πx) , 0 ≤ x ≤ 1, u(0) = 1, u(1) = −1

entonces el programa queda implementado como:function y=LadoDerecho(x)y=-%pi*%pi*cos(%pi*x);endfunction

function y=SolucionAnalitica(x)y=cos(%pi*x);endfunction

a=-1; // Inicio dominioc=2; // Fin dominioM=100; // ParticiónN=M-2; // Nodos interioresh=(c-a)/(M-1); // Incremento en la mallaY0=-1; // Condición inicial en el inicio del dominio

[email protected] 14 Antonio Carrillo Ledesma

Page 16: Introducción al Método de Diferencias Finitas y su Implementación

Introducción al Método de Diferencias Finitas y su ImplementaciónComputacional

Y1=1; // Condición inicial en el fin del dominio

A=zeros(N,N); // Matriz Ab=zeros(N); // Vector bR=1/(h^2);P=-2/(h^2);Q=1/(h^2);// Primer renglon de la matriz A y vector bA(1,1)=P;A(1,2)=Q;b(1)=LadoDerecho(a)-Y0*R;// Renglones intermedios de la matriz A y vector bfor i=2:N-1A(i,i-1)=R;A(i,i)=P;A(i,i+1)=Q;b(i)=LadoDerecho(a+h*(i-1));end// Relglon final de la matriz A y vector bA(N,N-1)=R;A(N,N)=P;b(N)=LadoDerecho(a+h*N)-Y1*Q;

// Resuleve el sistema lineal Ax=bx=inv(A)*b;

// Prepara la graficaciónxx=zeros(M,1);zz=zeros(M,1);for i=1:Mxx(i)=a+h*(i-1);zz(i)=SolucionAnalitica(xx(i));endyy=zeros(M,1);yy(1)=Y0; // Condición inicialfor i=1:Nyy(i+1)=x(i);endyy(M)=Y1; // Condición inicial// Grafica la solución de la Ecuación Diferencial Parcial en 1Dplot2d(xx,[yy,zz])

[email protected] 15 Antonio Carrillo Ledesma

Page 17: Introducción al Método de Diferencias Finitas y su Implementación

Introducción al Método de Diferencias Finitas y su ImplementaciónComputacional

2.2 Problema con Condiciones de Frontera Neumann

Consideremos el problema

u′′(x) = f(x), 0 ≤ x ≤ 1 (2.12)

con condiciones de frontera Neumann

du

dx= cte1 en u(0) y

du

dx= cte2 en u(1)

para usar el procedimiento general de solución numérica mediante el métodode diferencias finitas, primeramente debemos de discretizar las condiciones defrontera, una manera seria usar para la primera condición de frontera una aprox-imación usando diferencias progresivas Ec.(1.5)

du

dx

∣∣∣∣xi

=u(xi + h)− u(xi)

h

quedandou1 − u0

h= cte1 (2.13)

para la segunda condición de frontera una aproximación usando diferencias re-gresivas Ec.(1.10)

du

dx

∣∣∣∣xi

=u(xi)− u(xi − h)

h

quedandoun − un−1

h= cte2 (2.14)

pero el orden de aproximación no seria el adecuado pues estamos aproximando eldominio con diferencias centradas con un error local de truncamiento de segundoorden Oc(∆x2), en lugar de ello usaremos diferencias centradas Ec.(1.15) paratener todo el dominio con el mismo error local de truncamiento.

Para usar diferencias centradas Ec.(1.15)

du

dx

∣∣∣∣xi

=u(xi + h)− u(xi − h)

2h

en el primer nodo necesitamos introducir un punto de la malla ficticio x−1 =(x0 −∆x) con un valor asociado a u−1, entonces

u1 − u−12h

= cte1 (2.15)

así también, en el último nodo necesitamos introducir un punto de la mallaficticio xn+1 = (xn +∆x) con un valor asociado a un+1, obteniendo

un+1 − un−12h

= cte2. (2.16)

Estos valores no tienen significado físico alguno, dado que esos puntos se en-cuentran fuera del dominio del problema. Entonces debemos de hacer:

[email protected] 16 Antonio Carrillo Ledesma

Page 18: Introducción al Método de Diferencias Finitas y su Implementación

Introducción al Método de Diferencias Finitas y su ImplementaciónComputacional

1. Generamos una malla homogénea del dominio

xi = ih, i = 0, 1, ..., n, h =1

n= ∆x. (2.17)

2. Sustituimos la derivada con Ec.(1.24) en cada punto donde la solución esdesconocida para obtener un sistema algebraico de ecuaciones. Así, encada punto xi de la malla aproximamos la ecuación diferencial por

u′′(xi) ≈u(xi − h)− 2u(x) + u(xi + h)

h2(2.18)

definiendo la solución aproximada de u(x) en xi como ui como la solucióndel siguiente sistema lineal de ecuaciones

u1 − u−12h

= cte1

u0 − 2u1 + u2h2

= f(x1)

...ui−1 − 2ui + ui+1

h2= f(xi) (2.19)

...un−2 − 2un−1 + un

h2= f(xn−1)

un+1 − un−12h

= cte2.

3. Resolviendo el sistema de ecuaciones (véase capítulo 3), obtenemos lasolución aproximada en cada punto de la malla.

2.3 Problema con Condiciones de Frontera Robin

El método de un punto de la malla ficticio es usado para el manejo de lascondiciones de frontera mixtas, también conocidas como condiciones de fronteraRobin. Sin perdida de generalidad, supongamos que en x = a, tenemos

αu′ (a) + βu (b) = γ

donde α �= 0. Entonces usando el punto de la malla ficticio, tenemos que

αu1 − u−12h

+ βun = γ

o

u−1 = u1 +2β

αun −

2hγ

α

[email protected] 17 Antonio Carrillo Ledesma

Page 19: Introducción al Método de Diferencias Finitas y su Implementación

Introducción al Método de Diferencias Finitas y su ImplementaciónComputacional

introduciendo esto en términos de diferencias finitas centradas, en x = x0,entonces se tiene que

(− 2

h2+2β

αh

)un +

2

h2u1 = f0 +

αh

o (− 1

h2+

β

αh

)un +

1

h2u1 =

f02+

γ

αh

lo que genera coeficientes simétricos en la matriz.

Consideremos el problema

u′′(x) = f(x), 0 ≤ x ≤ 1 (2.20)

con condiciones de frontera Dirichlet y Neumman

u(0) = uα ydu

dx= cte1 en u(1).

respectivamente. Para usar el procedimiento general de solución numérica me-diante el método de diferencias finitas, primeramente debemos de expresar lacondición de frontera Neumann mediante diferencias centradas Ec.(1.15)

du

dx

∣∣∣∣xi

=u(xi + h)− u(xi − h)

2h

en el último nodo necesitamos introducir un punto de la malla ficticio xn+1 =(xn +∆x) con un valor asociado a un+1 quedando

un+1 − un−12h

= cte2. (2.21)

Este valor no tiene significado físico alguno, dado que este punto se encuentrafuera del dominio del problema.

Entonces debemos de hacer:

1. Generamos una malla homogénea del dominio

xi = ih, i = 0, 1, ..., n, h =1

n= ∆x. (2.22)

2. Sustituimos la derivada con Ec.(1.24) en cada punto donde la solución esdesconocida para obtener un sistema algebraico de ecuaciones. Así, encada punto xi de la malla aproximamos la ecuación diferencial por

u′′(xi) ≈u(xi − h)− 2u(x) + u(xi + h)

h2(2.23)

[email protected] 18 Antonio Carrillo Ledesma

Page 20: Introducción al Método de Diferencias Finitas y su Implementación

Introducción al Método de Diferencias Finitas y su ImplementaciónComputacional

definiendo la solución aproximada de u(x) en xi como ui como la solucióndel siguiente sistema lineal de ecuaciones

uα − 2u1 + u2h2

= f(x1)

u1 − 2u2 + u3h2

= f(x2)

...ui−1 − 2ui + ui+1

h2= f(xi) (2.24)

...un−2 − 2un−1 + un

h2= f(xn−1)

un+1 − un−12h

= cte1.

3. Resolviendo el sistema de ecuaciones (véase capítulo 3), obtenemos lasolución aproximada en cada punto de la malla. La solución completaal problema la obtenemos al formar el vector

[uα u1 u2 u3 · · · un−2 un−1 un

].

Veamos unos ejemplos desarrollados en SCILAB7

Ejemplo 3 Sea

u′′(x) = −π2 cos (πx) , 0 ≤ x ≤ 0.5, u(0) = 1, u′(0.5) = −π

entonces el programa queda implementado como:function y=LadoDerecho(x)y=-%pi*%pi*cos(%pi*x);endfunction

function y=SolucionAnalitica(x)y=cos(%pi*x);endfunction

a=0; // Inicio dominioc=0.5; // Fin dominioM=40; // ParticiónN=M-1; // Nodos interioresh=(c-a)/(M-1); // Incremento en la mallaY0=1; // Condición Dirchlet inicial en el inicio del dominio

7Scilab es un programa open source para el cálculo numérico el cual provee un poderosoambiente de cálculo para aplicaciones Científicas y de Ingeniería [http://www.scilab.org].

[email protected] 19 Antonio Carrillo Ledesma

Page 21: Introducción al Método de Diferencias Finitas y su Implementación

Introducción al Método de Diferencias Finitas y su ImplementaciónComputacional

Y1=-%pi; // Condición Neumann inicial en el fin del dominioA=zeros(N,N); // Matriz Ab=zeros(N); // Vector b

R=1/(h^2);P=-2/(h^2);Q=1/(h^2);

// Primer renglon de la matriz A y vector bA(1,1)=P;A(1,2)=Q;b(1)=LadoDerecho(a)-Y0*R; // Frontera Dirichlet// Renglones intermedios de la matriz A y vector bfor i=2:N-1A(i,i-1)=R;A(i,i)=P;A(i,i+1)=Q;b(i)=LadoDerecho(a+h*(i-1));end// Relglon final de la matriz A y vector bA(N,N-1)=-1/(h^2);A(N,N)=-1/(h^2);b(N)=Y1/h; // Frontera Neumann

// Resuleve el sistema lineal Ax=bx=inv(A)*b;

// Prepara la graficaciónxx=zeros(M,1);zz=zeros(M,1);for i=1:Mxx(i)=a+h*(i-1);zz(i)=SolucionAnalitica(xx(i));endyy=zeros(M,1);yy(1)=Y0; // Condición inicialfor i=1:Nyy(i+1)=x(i);end// Grafica la solución de la Ecuación Diferencial Parcial en 1Dplot2d(xx,[yy,zz])

[email protected] 20 Antonio Carrillo Ledesma

Page 22: Introducción al Método de Diferencias Finitas y su Implementación

Introducción al Método de Diferencias Finitas y su ImplementaciónComputacional

Ejemplo 4 Sea

−u′′(x)− k2u(x) = 0, 0 ≤ x ≤ 1, u(0) = 1, u′(1) = iku(1)

con k = 150, entonces el programa queda implementado como8:TEST = 1; // (0) Diferencias finitas, (1) Diferencias finitas exactas segun

Yau Shu Wong y Guangrui Li

function y=LadoDerecho(x)y=0.0;endfunction

function y=SolucionAnalitica(x, k)//y=cos(k*x)+%i*sin(k*x);y=exp(%i*k*x);endfunction

K = 150;KK = K*K;a=0; // Inicio dominioc=1; // Fin dominioM=300; // ParticiónN=M-1; // Nodos interioresh=(c-a)/(M-1); // Incremento en la mallaY0=1; // Condición Dirchlet inicial en el inicio del dominioY1=%i*K; // Condición Neumann inicial en el fin del dominio

A=zeros(N,N); // Matriz Ab=zeros(N); // Vector b

if TEST = 0 thenR=-1/(h^2);P=2/(h^2)-KK;Q=-1/(h^2);elseR=-1/(h^2);P=(2*cos(K*h)+(K*h)^2)/(h^2) - KK;Q=-1/(h^2);end

8

Esta ecuación se conoce como la ecuación de Helmholtz la cual es dificil deresolver si r (x) ≤ 0 y |r (x)| es grande, i.e. r (x) ∼ 1/h2. Para resolver dichaecuación, se usa diferencias finitas y diferencias finitas exactas, procedimientodesarrollado en: Exact Finite Difference Schemes for Solving Helmholtz equationat any wavenumber, Yau Shu Wong and Guangrui Lim International Journal ofNumerical Analysis and Modeling, Volumen 2, Number 1, Pages 91-108, 2011.

[email protected] 21 Antonio Carrillo Ledesma

Page 23: Introducción al Método de Diferencias Finitas y su Implementación

Introducción al Método de Diferencias Finitas y su ImplementaciónComputacional

// Primer renglon de la matriz A y vector bA(1,1)=P;A(1,2)=Q;b(1)=LadoDerecho(a)-Y0*R; // Frontera dirichlet// Renglones intermedios de la matriz A y vector bfor i=2:N-1A(i,i-1)=R;A(i,i)=P;A(i,i+1)=Q;b(i)=LadoDerecho(a+h*(i-1));end// Relglon final de la matriz A y vector bif TEST = 0 thenA(N,N-1)=1/(h^2);A(N,N)=-1/(h^2)+ Y1/h;b(N)=LadoDerecho(c)/2;elseA(N,N-1)=1/(h^2);A(N,N)=-1/(h^2)+ %i*sin(K*h)/(h^2);b(N)=LadoDerecho(c)/2;end

// Resuleve el sistema lineal Ax=bx=inv(A)*b;

ESC = 5;xxx=zeros(M*ESC,1);zzz=zeros(M*ESC,1);for i=1:M*ESCxxx(i)=a+h/ESC*(i-1);zzz(i)=SolucionAnalitica(xxx(i),K);end// Prepara la graficaciónxx=zeros(M,1);zz=zeros(M,1);for i=1:Mxx(i)=a+h*(i-1);zz(i)=SolucionAnalitica(xx(i),K);endyy=zeros(M,1);yy(1)=Y0; // Condición inicialfor i=1:Nyy(i+1)=x(i);end// Gráfica la solución de la Ecuación Diferencial Parcial en 1Dplot2d(xx,yy,15)

[email protected] 22 Antonio Carrillo Ledesma

Page 24: Introducción al Método de Diferencias Finitas y su Implementación

Introducción al Método de Diferencias Finitas y su ImplementaciónComputacional

plot2d(xxx,zzz)

2.4 Discretización del Tiempo

Hasta ahora se ha visto como discretizar la parte espacial de las ecuacionesdiferenciales parciales, lo cual nos permite encontrar la solución estática de losproblemas del tipo elíptico. Sin embargo, para ecuaciones del tipo parabólico ehiperbólico dependen del tiempo, se necesita introducir una discretización a lasderivadas con respecto del tiempo. Al igual que con las discretizaciones espa-ciales, podemos utilizar algún esquema de diferencias finitas en la discretizacióndel tiempo.

2.4.1 Ecuación con Primera Derivada Temporal

Para la solución de la ecuaciones diferenciales con derivada temporal (ut), seemplean diferentes esquemas en diferencias finitas para la discretización deltiempo. Estos esquemas se conocen de manera general como esquemas theta(θ).

Definiendo la ecuación diferencial parcial general de segundo orden como

ut = Lu (2.25)

dondeLu = (p (x)u′ (x))′ + q (x)u′ (x)− r (x)u (x)− f (x) (2.26)

aquí, los coeficientes p, q y r pueden depender del espacio y del tiempo. Entoncesel esquema theta está dado por

ut = (1− θ) (Lu)j + θ (Lu)j+1 . (2.27)

Existen diferentes casos del esquema theta a saber:

• Para θ = 0, se obtiene un esquema de diferencias finitas hacia delanteen el tiempo, conocido como esquema completamente explicito, ya que elpaso n+ 1 se obtiene de los términos del paso anterior n. Es un esquemasencillo, el cual es condicionalmente estable cuando ∆t ≤ ∆x2

2 .

• Para θ = 1, se obtiene el esquema de diferencias finitas hacia atrás enel tiempo, conocido como esquema completamente implícito, el cual esincondicionalmente estable.

• Para θ = 12 , se obtiene un esquema de diferencias finitas centradas en el

tiempo, conocido como esquema Crank-Nicolson, este esquema es tambiénincondicionalmente estable y es más usado por tal razón.

Para la implementación del esquema Crank-Nicolson se toma una diferenciaprogresiva para el tiempo y se promedian las diferencias progresivas y regresivas

[email protected] 23 Antonio Carrillo Ledesma

Page 25: Introducción al Método de Diferencias Finitas y su Implementación

Introducción al Método de Diferencias Finitas y su ImplementaciónComputacional

en el tiempo para las derivadas espaciales. Entonces si tenemos la Ec. (2.26),las discretizaciones correspondientes son:

ut ≃uj+1i − uji

∆t(2.28)

(p (x)u′ (x))′ ≃ p

2

[uji−1 − 2uji + uji+1

∆x2+

uj+1i−1 − 2uj+1i + uj+1i+1

∆x2

]

(2.29)

q (x)u′ (x) ≃ q

2

[uji−1 + uji+1

2∆x+

uj+1i−1 + uj+1i+1

2∆x

]

(2.30)

además de r(x)uji y f ji .Entonces, una vez que se sustituyen las derivadas por su forma en diferencias

finitas, lo siguiente es formar el sistema

Auj+1 = Buj + fj (2.31)

esto se logra, colocando del lado izquierdo la igualdad de los términos que con-tengan el paso del tiempo correspondiente a j + 1 y del lado derecho a loscorrespondientes términos de j.

A continuación, veamos un ejemplo del esquema Crank-Nicolson desarrolla-dos en SCILAB9

Ejemplo 5 Sea

ut − a(x)u′′(x)− b(x)u′(x) + c(x)u = f, l0 ≤ x ≤ l, 0 < t < T

entonces el programa queda implementado como:// Crank-Nicolson// Para una EDP de segundo orden// u_t + a(x)u_xx + b(x)u_x +c(x)u = f// Dominio// l0<x<l// 0<t<T// Condiciones de frontera Dirichlet// u(0,t) = u(l,t) = constante 0 < t < T cond de frontera// Condicion inicial// u(x,0) = g(x) l0 <= x <= l// Datos de entrada// intrevalo [l0, l]// entero m>=3// entero N>=1// Salida// aproximaciones w_ij a u(x_i,t_j)

9Scilab es un programa open source para el cálculo numérico el cual provee un poderosoambiente de cálculo para aplicaciones Científicas y de Ingeniería [http://www.scilab.org].

[email protected] 24 Antonio Carrillo Ledesma

Page 26: Introducción al Método de Diferencias Finitas y su Implementación

Introducción al Método de Diferencias Finitas y su ImplementaciónComputacional

// Funciones de los coeficientesfunction y = a(x)y = -1;endfunctionfunction y = b(x)y = 0;endfunctionfunction y = c(x)y = 0;endfunctionfunction y = f(x)y = 0;endfunction// funcion de la condicion inicialfunction y = condicion_inicial(x)y = sin(x * %pi);endfunction// Condiciones de frontera// Solo Dirichletcond_izq = 0;cond_der = 0;// Datos de entradal0 = 0;l = 1; // intervalo [0,1]m = 11; // Numero de nodosM = m - 2; // Nodos interiores// Division del espacio y del tiempoh = (l - l0)/(m-1);k = 0.025; // Paso del tiempoN = 50; // Numero de iteraciones// Aw^(j+1) = Bw^j + f^j// creo el vector w donde se guradara la solucion para cada tiempo// A matriz del lado izquierdo// B matriz del lado derecho// B_prima para guardar el resultado de Bw^j// ff que es el vector de los valores de f en cada nodow = zeros(M,1);ff = zeros(M,1)A = zeros(M,M);B = zeros(M,M);//B_prima = zeros(M,1);w_sol = zeros(m,m)// Se crea el espacio de la solucion o mallaespacio = zeros(M,1)for i = 1:mxx = l0 + (i-1)*h;espacio(i) = xx;

[email protected] 25 Antonio Carrillo Ledesma

Page 27: Introducción al Método de Diferencias Finitas y su Implementación

Introducción al Método de Diferencias Finitas y su ImplementaciónComputacional

enddisp(espacio, "Espacio")// Condicion inicialfor i=1:Mw(i) = condicion_inicial(espacio(i+1));endw_sol(1) = cond_izq;for kk = 1:Mw_sol(kk + 1) = w(kk);endw_sol(m) = cond_izq;plot(espacio, w_sol);disp(w, "Condiciones iniciales")// primer renglon de cada matrizA(1,1) = 1/k - a(l0 + h)/(h*h);A(1,2) = a(l0 + h)/(2*h*h) + b(l0 + h)/(4*h) ;B(1,1) = 1/k + a(l0 + h)/(h*h) - c(l0 + h);B(1,2) = - a(l0 + h)/(2*h*h) - b(l0 + h)/(4*h);ff(1) = f(l0 + h) - cond_izq;// se completa las matrices desde el renglon 2 hasta el m-2for i = 2:M-1A(i, i-1) = a(l0 + i*h)/(2*h*h) - b(l0 + i*h)/(4*h) ;A(i,i) = 1/k - a(l0 + i*h)/(h*h);A(i,i+1) = a(l0 + i*h)/(2*h*h) + b(l0 + i*h)/(4*h) ;B(i, i-1) = - a(l0 + i*h)/(2*h*h) + b(l0 + i*h)/(4*h);B(i,i) = 1/k + a(l0 + i*h)/(h*h) - c(l0 + i*h);B(i,i+1) = - a(l0 + i*h)/(2*h*h) - b(l0 + i*h)/(4*h);end// Ultimo renglon de cada matrizA(M,M-1) = a(l - h)/(2*h*h) - b(l-h)/(4*h) ;A(M,M) = 1/k - a(l - h)/(h*h);B(M,M-1) = - a(l-h)/(2*h*h) + b(l-h)/(4*h);B(M,M) = 1/k + a(l-h)/(h*h) - c(l-h);ff(M) = f(l - h) - cond_der;// Resolvemos el sistema iterativamentefor j=1:21t = j*k;B_prima = B * w + ff;w = inv(A) * B_prima;disp(t, "tiempo")disp(w, "Sol")w_sol(1) = cond_izq;for kk = 1:Mw_sol(kk + 1) = w(kk);

endw_sol(m) = cond_izq;

[email protected] 26 Antonio Carrillo Ledesma

Page 28: Introducción al Método de Diferencias Finitas y su Implementación

Introducción al Método de Diferencias Finitas y su ImplementaciónComputacional

plot(espacio, w_sol);end

2.4.2 Ecuación con Segunda Derivada Temporal

Para el caso de ecuaciones con segunda derivada temporal, esta se aproximapor diferencias finitas centradas en el tiempo, partiendo de la Ec. (2.26), lasdiscretizaciones correspondientes son:

utt ≃uj−1i − 2uji + uj+1i

∆t2(2.32)

(p (x)u′ (x))′ ≃ p

[uji−1 − 2uji + uji+1

∆x2

]

(2.33)

q (x)u′ (x) ≃ q

[uji−1 + uji+1

2∆x

]

(2.34)

además de r(x)uji y f ji .Entonces, una vez que se sustituyen las derivadas por su forma en diferencias

finitas, lo siguiente es formar el sistema

uj+1i = 2uji − uj−1i + (∆t)2Buj (2.35)

esto se logra, colocando del lado izquierdo la igualdad de los términos que con-tengan el paso del tiempo correspondiente a j + 1 y del lado derecho a loscorrespondientes términos de j y j − 1. Para calcular uj+1i es necesario conocerui−1, ui, ui+1 en los dos instantes inmediatos anteriores, i.e. tj y tj−1.

En particular para calcular u1i es necesario conocer u0i y u−1i , si consideramos

uj+1i = 2uji − uj−1i + (∆t)2 Luj (2.36)

para j = 0, entoncesu1i = 2u

0i − u−1i + (∆t)2 Lu0 (2.37)

de donde tenemos u0i es la condición inicial y u1i−u−1i2∆t es la primer derivada de

la condición inicial, así tenemos que para el primer tiempo tenemos

u1i = u(xi, 0) +∆tu′

(xi, 0) + (∆t)2 Lu0 (2.38)

lo cual permite calcular u1i a partir de las condiciones iniciales.

La derivación del método parte de

utt = Luj (2.39)

uj−1i − 2uji + uj+1i

(∆t)2= Luj

uj+1i = 2uji − uj−1i + (∆t)2 Luj

donde el error intrínseco a la discretización es de orden cuadrático, pues se hausado diferencias centradas, tanto para el espacio como para el tiempo.

[email protected] 27 Antonio Carrillo Ledesma

Page 29: Introducción al Método de Diferencias Finitas y su Implementación

Introducción al Método de Diferencias Finitas y su ImplementaciónComputacional

Ejemplo 6 Sea

utt − 4u′′(x) = 0, 0 ≤ x ≤ l, 0 < t < T

sujeta a

u(0, t) = u(1, t) = 0, u(x, 0) = sin(πx), ut(x, 0) = 0

con solución analítica

u(x, t) = sen(πx) ∗ cos(2πt)

entonces el programa queda implementado como:// Dominioa_ = 0b_ = 1// Particion en xm = 101; // numero de nodosh = (b_ - a_)/(m-1)dt = 0.001 // salto del tiempo// Para que sea estable se debe cumplir que// sqrt(a) <= h/dt// Coeficientefunction y = a(x)y = -4;endfunction// Condicion inicialfunction y = inicial(x)y = sin(%pi * x)endfunctionfunction y = u_t(x)y = 0;endfunction// Solucion analiticafunction y = analitica(x,t)y = sin(%pi * x) * cos(2* %pi * t)endfunction////////////////////////////////////// Aw^(j+1) = Bw^j// creo el vector w donde se guradaria la solucion para cada tiempo// A matriz del lado izquierdo// B matriz del lado derecho// B_prima para guardar el resultado de Bw^jw_sol = zeros(m,1);w_sol_temp = zeros(m,1);w_temp = zeros(m,1);w = zeros(m,1);

[email protected] 28 Antonio Carrillo Ledesma

Page 30: Introducción al Método de Diferencias Finitas y su Implementación

Introducción al Método de Diferencias Finitas y su ImplementaciónComputacional

w_ = zeros(m,1);A = eye(m,m);B = zeros(m,m);B_prima = zeros(m,1);espacio = zeros(m,1)sol = zeros(m,1);// primer renglon de cada matrizB(1,1) = 2*a(a_)*dt*dt/(h*h)B(1,2) = -a(a_)*dt*dt/(h*h)// se completa las matrices desde el renglon 2 hasta el m-1for i = 2:m-1B(i, i-1) = -a(i*h)*dt*dt/(h*h)B(i,i) = 2*a(i*h)*dt*dt/(h*h)B(i,i+1) = -a(i*h)*dt*dt/(h*h)end// Ultimo renglon de cada matrizB(m,m-1) = -a(b_)*dt*dt/(h*h)B(m,m) = 2*a(b_)*dt*dt/(h*h)// muestro la matriz//printf("Matriz B\n");//disp(B);for i=1:mxx = (i-1)*h;espacio(i) = a_ + xx;w(i) = inicial(espacio(i)); // Condiciones inicialesw_(i) = inicial(espacio(i)) + u_t(espacio(i)) * dtend////disp(espacio)//disp(w)//////////////Para t = 0B_prima = B * w;for i = 1:mw_sol(i) = w_(i) + B_prima(i);end////////////printf("w para t = 0\n");disp(w_sol);for i = 1:msol(i) = analitica(espacio(i), 0)endprintf("Solucion analitica para t = 0\n")disp(sol)plot(espacio,w_sol)//plot(espacio,sol,’r’)

[email protected] 29 Antonio Carrillo Ledesma

Page 31: Introducción al Método de Diferencias Finitas y su Implementación

Introducción al Método de Diferencias Finitas y su ImplementaciónComputacional

w_sol_temp = w_sol;w_temp = wfor i=1:500t = i*dtB_prima = B * w_sol_temp;w_ = 2 * w_sol_temp - w_tempw_sol = w_ + B_prima;////// for j = 1:m// sol(j) = analitica(espacio(j), t)// end//// printf("Sol analitica dt = %f", t)// disp(sol)// printf("Sol metodo dt = %f", t)// disp(w_sol)w_temp = w_sol_tempw_sol_temp = w_solif i == 5 | i == 50 | i == 100 | i == 150 | i == 200 | i == 250 | i ==

300 | i== 350 | i == 400 | i == 450 | i == 500 thenplot(espacio,w_sol)end//plot(espacio,sol,’r’)end

2.5 Consistencia, Estabilidad, Convergencia y Error delMétodo de Diferencias Finitas

Cuando se usa algún método para la resolución de ecuaciones diferenciales, senecesita conocer cuan exacta es la aproximación obtenida en comparación conla solución analítica (en caso de existir).

Error Global Sea U = [U1, U2, ..., Un]T el vector solución obtenido al uti-

lizar el método de diferencias finitas y u = [u (x1) , u (xn) , ..., u (xn)] la soluciónexacta de los puntos de la malla. El vector de error global se define comoE = U − u. lo que se desea es que el valor máximo sea pequeño. Usualmente seutilizan distintas normas para encontrar el error.

• La norma infinito, definida como ‖E‖∞ = max |ei|

• La norma-1, definida como ‖E‖1 =n∑

i=1

|ei|

• La norma-2, definida como ‖E‖2 =(

n∑

i=1

e2i

)12

[email protected] 30 Antonio Carrillo Ledesma

Page 32: Introducción al Método de Diferencias Finitas y su Implementación

Introducción al Método de Diferencias Finitas y su ImplementaciónComputacional

La norma infinito ‖E‖∞ es en general, la más apropiada para calcular loserrores relativos a la discretización.

Definición 7 Si ‖E‖ ≤ Chp, p > 0, decimos que el método de diferencias finitases de orden-p de precisión.

Definición 8 Un método de diferencias finitas es llamado convergente si

limh→0

‖E‖ = 0. (2.40)

Error de Truncamiento Local Sea el operador diferencia Lu, definimos eloperador en diferencias finitas Lh, por ejemplo para la ecuación de segundoorden u′′(x) = f(x), una de los operadores de diferencias finitas puede ser

Lhu(x) =u(x− h)− 2u(x) + u(x+ h)

h2. (2.41)

Definición 9 El error de truncamiento local es definido como

T (x) = Lu−Lhu. (2.42)

Para la ecuación diferencial u′′(x) = f(x) y el esquema de diferencias cen-tradas usando tres puntos u(x−h)−2u(x)+u(x+h)

h2, el error de truncamiento local

es

T (x) = Lu−Lhu = u′′

(x)− u(x− h)− 2u(x) + u(x+ h)

h2(2.43)

= f(x)− u(x− h)− 2u(x) + u(x+ h)

h2.

Note que el error de truncamiento local sólo depende de la solución delesténcil en diferencias finitas (en el ejemplo es usando tres puntos) pero nodepende de la solución global, es por ello que se denomina error de truncamientolocal. Este es una medida de que tanto la discretización en diferencias finitas seaproxima a la ecuación diferencial.

Definición 10 Un esquema de diferencias finitas es llamado consistente si

limh→0

T (x) = limh→0

(Lu−Lhu) = 0. (2.44)

Si T (x) = Chp, p > 0, entonces se dice que la discretización es de orden−pde precisión, donde C es una constante independiente de h pero puede dependerde la solución de u(x). Para conocer cuando un esquema de diferencias finitas esconsistente o no, se usa la expansión de Taylor. Por ejemplo, para el esquemade diferencias finitas centradas usando tres puntos para la ecuación diferencialu′′(x) = f(x), tenemos que

T (x) = u′′

(x)− u(x− h)− 2u(x) + u(x+ h)

h2= −h2

12u(4)(x)+ ... = Ch2 (2.45)

[email protected] 31 Antonio Carrillo Ledesma

Page 33: Introducción al Método de Diferencias Finitas y su Implementación

Introducción al Método de Diferencias Finitas y su ImplementaciónComputacional

donde C = 112u

(4)(x). Por lo tanto, este esquema de diferencias finitas es con-sistente y la discretización es de segundo orden de precisión.

La consistencia no puede garantizar un esquema de diferencias finitas tra-baje. Para ello, necesitamos determinar otra condición para ver si converge ono. Tal condición es llamada la estabilidad de un método de diferencias finitas.Para el problema modelo, tenemos que

Au = F + T, AU = F, A (u− U) = T = −AE (2.46)

donde A son los coeficientes de la matriz de las ecuaciones en diferencias finitas,F son los términos modificados por la condición de frontera, y T es el vectorlocal de truncamiento en los puntos de la malla.

Si la matriz A es no singular, entonces ‖E‖ =∥∥A−1T

∥∥ ≤∥∥A−1

∥∥ ‖T‖ . Parael esquema de diferencias finitas centradas, tenemos que ‖E‖ =

∥∥A−1∥∥h2. Tal

que el error global depende del error de truncamiento local y∥∥A−1

∥∥ .

Definición 11 Un método de diferencias finitas para la ecuación diferencialelíptica es estable si A es invertible y

∥∥A−1∥∥ ≤ C, para todo h ≤ h0 (2.47)

donde C y h0 son constantes.

Teorema 12 Si el método de diferencias finitas es estable y consistente, en-tonces es convergente.

[email protected] 32 Antonio Carrillo Ledesma

Page 34: Introducción al Método de Diferencias Finitas y su Implementación

Introducción al Método de Diferencias Finitas y su ImplementaciónComputacional

3 Consideraciones Sobre la Implementación deMétodos de Solución de Grandes Sistemas deEcuaciones Lineales

Los modelos matemáticos de muchos sistemas en Ciencia e Ingeniería y en par-ticular una gran cantidad de sistemas continuos geofísicos requieren el proce-samiento de sistemas algebraicos de gran escala. En este trabajo se muestracomo proceder, para transformar un problema de ecuaciones diferenciales par-ciales en un sistema algebraico de ecuaciones lineales; y así, poder hallar lasolución a dicho problema al resolver el sistema lineal, estos sistemas linealesson expresados en la forma matricial siguiente

Au = f (3.1)

donde la matriz A es de tamaño n × n y generalmente bandada, cuyo tamañode banda es b.

Los métodos de resolución del sistema algebraico de ecuaciones Au = f seclasifican en dos grandes grupos (véase [14]): los métodos directos y los métodositerativos. En los métodos directos la solución u se obtiene en un número fijode pasos y sólo están sujetos a los errores de redondeo. En los métodos itera-tivos, se realizan iteraciones para aproximarse a la solución u aprovechando lascaracterísticas propias de la matriz A, tratando de usar un menor número depasos que en un método directo (véase [10], [11], [12] y [14]).

Por lo general, es conveniente usar librerías10 para implementar de formaeficiente a los vectores, matrices –bandadas y dispersas– y resolver los sistemaslineales.

3.1 Métodos Directos

En los métodos directos (véase [10] y [13]), la solución u se obtiene en un númerofijo de pasos y sólo están sujetos a errores de redondeo. Entre los métodos másimportantes se puede considerar: Factorización LU –para matrices simétricasy no simétricas– y Factorización Cholesky –para matrices simétricas–. Entodos los casos la matriz original A es modificada y en caso de usar la Facto-rización LU el tamaño de la banda b crece a 2b+ 1 si la factorización se realizaen la misma matriz.

3.1.1 Factorización LU

Sea U una matriz triangular superior obtenida de A por eliminación bandada.Entonces U = L−1A, donde L es una matriz triangular inferior con unos en la

10Algunas de las librerías más usadas para resolver sistemas lineales usando matrices ban-dadas y dispersar son PETCs, HYPRE, ATLAS, LAPACK++, LAPACK, EISPACK, LIN-PACK, BLAS, entre muchas otras alternativas, tanto para implementaciones secuencialescomo paralelas y más recientemente para hacer uso de los procesadores CUDA en las GPU denVidia.

[email protected] 33 Antonio Carrillo Ledesma

Page 35: Introducción al Método de Diferencias Finitas y su Implementación

Introducción al Método de Diferencias Finitas y su ImplementaciónComputacional

diagonal. Las entradas de L−1 pueden obtenerse de los coeficientes Lijy pueden

ser almacenados estrictamente en las entradas de la diagonal inferior de A yaque estas ya fueron eliminadas. Esto proporciona una Factorización LU de Aen la misma matriz A ahorrando espacio de memoria, donde el ancho de bandacambia de b a 2b+ 1.

En el algoritmo de Factorización LU, se toma como datos de entrada delsistema Au = f , a la matriz A, la cual será factorizada en la misma matriz,esta contendrá a las matrices L y U producto de la factorización, quedando elmétodo numérico esquemáticamente como:

Para i = 1, 2, ..., n {Para j = 1, 2, ..., n {

Aji = Aji/AiiPara k = i+ 1, ..., n {

Ajk = Ajk −AjiAik}

}}

(3.2)

El problema original Au = f se escribe como LUu = f , donde la búsqueda dela solución u se reduce a la solución sucesiva de los sistemas lineales triangulares

Ly = f y Uu = y. (3.3)

Pero recordando que la matriz A contiene a las matrices L y U entonces se tieneque

Ly = f ⇔

y1 = f1/A11

yi =

fi −i−1∑

j=1

Aijyj

para toda i = 2, ..., n(3.4)

y

Uu = y ⇔

xn = yn/Ann

ui =1Aii

yi −n∑

j=i+1

Aijxj

para toda i = n− 1, ..., 1 .(3.5)

La descomposición LU requiere11 n3/3 − n/3 multiplicaciones/divisiones yn3/3− n2/2 + n/6 sumas/restas –del orden O(N3/3) operaciones aritméticas

11Notemos que el método de eliminación gaussiana de una matriz A de tamaño n×n requieren3/3+n2 − n/3 multiplicaciones/divisiones además de n3/3+ n2/2− 5n/6 sumas/restas. Elmétodo de Gauss-Jordan requiere n3/2 + n2 − n/2 multiplicaciones/divisiones además den3/2 + n/2 sumas/restas.

[email protected] 34 Antonio Carrillo Ledesma

Page 36: Introducción al Método de Diferencias Finitas y su Implementación

Introducción al Método de Diferencias Finitas y su ImplementaciónComputacional

para la matriz llena pero sólo del orden O(Nb2) operaciones aritméticas parala matriz con un ancho de banda de b–. La solución de los sistemas Ly = f

y Uu = y requieren n2/2− n/2 operaciones aritméticas cada uno (véase [10] y[13]).

3.1.2 Factorización Cholesky

Cuando la matriz es simétrica y definida positiva, se obtiene la descomposiciónLU de la matriz A = LDU = LDLT donde D = diag(U) es la diagonal conentradas positivas.

En el algoritmo de Factorización Cholesky, se toma como datos de entradadel sistema Au = f , a la matriz A, la cual será factorizada en la misma matriz ycontendrá a la matrz L, mientras LT no se calcula, quedando el método numéricoesquemáticamente como:

Aii =√A11

Para j = 2, ..., n calcule Aj1 = Aj1/A11Para i = 2, ..., n {

Aii =

√√√√Aii −i−1∑

k=1

A2ik

Para j = i+ 1, ..., n

Aji =

(

Aji −i−1∑

k=1

AjkAik

)

/Aii

}

Ann =

√√√√Ann −n−1∑

k=1

(Ank)2

(3.6)

El problema original Au = f se escribe como LLTu = b, donde la búsquedade la solución u se reduce a la solución sucesiva de los sistemas lineales triangu-lares

Ly = f y LTu = y (3.7)

usando la formulación equivalente dada por las Ec.(3.4) y (3.5) para la descom-posición LU.

La descomposición LDLT requiere de n3/6+n2−7n/6multiplicaciones/divisi-ones además de n3/6 − n/6 sumas/restas mientras que para la factorizaciónCholesky se requieren n3/6 + n2/2 − 2n/3 multiplicaciones/divisiones ademásde n3/6− n/6 sumas/restas, adicionalmente se requiere del cálculo de n raícescuadradas (véase [10] y [13]).

3.1.3 Factorización LU para Matrices Tridiagonales

Como un caso particular de la Factorización LU, está el método de Crout oThomas y este es aplicable cuando la matriz sólo tiene tres bandas –la diagonal

[email protected] 35 Antonio Carrillo Ledesma

Page 37: Introducción al Método de Diferencias Finitas y su Implementación

Introducción al Método de Diferencias Finitas y su ImplementaciónComputacional

principal, una antes y una después de la diagonal principal– la FactorizaciónLU se simplifica considerablemente, en este caso las matrices L y U tambiénse dejan en la matriz A y después de la factorización, se resuelven los sistemasLy = f y Uu = y, quedando el método numérico esquemáticamente como:

A12 = A12/A11y1 = A1,n+1/A11Para i = 2, ..., n− 1 {

Aii = Aii −Ai,i−1Ai−1,iAi,i+1 = Ai,i+1/Aiiyi = (Ai,n+1 −Ai,i−1yi−1) /Aii

}Ann = Ann −An,n−1An−1,nyn = (An,n+1 −An,n−1yn−1) /Annun = ynPara i = n− 1, ..., 1 tome ui = yi −Ai,i+1ui+1

(3.8)

Esta factorización y la resolución del sistema Au = f requiere sólo (5n− 4)multiplicaciones/divisiones y (3n− 3) sumas/restas, en contraste con la descom-posición LU que requiere n3/3−n/3 multiplicaciones/divisiones y n3/3−n2/2+n/6 sumas/restas.

3.2 Métodos Iterativos

En los métodos iterativos, se realizan iteraciones para aproximarse a la soluciónu aprovechando las características propias de la matriz A, tratando de usar unmenor número de pasos que en un método directo (véase [10] y [13]).

En los métodos iterativos tales como Jacobi, Gauss-Seidel y de RelajaciónSucesiva (SOR) en el cual se resuelve el sistema lineal

Au = f (3.9)

comienza con una aproximación inicial u0 a la solución u y genera una sucesiónde vectores

{uk}∞k=1

que converge a u. Los métodos iterativos traen consigoun proceso que convierte el sistema Au = f en otro equivalente mediante laiteración de punto fijo de la forma u = Tu + c para alguna matriz fija T y unvector c. Luego de seleccionar el vector inicial u0 la sucesión de los vectores dela solución aproximada se genera calculando

uk = Tuk−1 + c ∀k = 1, 2, 3, ... (3.10)

La convergencia a la solución la garantiza el siguiente teorema (véase [14]).

Teorema 13 Si∥∥T

∥∥ < 1, entonces el sistema lineal u = Tu+c tiene una solu-

ción única u∗ y las iteraciones uk definidas por la fórmula uk = Tuk−1+c ∀k =1, 2, 3, ... convergen hacia la solución exacta u∗ para cualquier aproximación ini-cial u0.

[email protected] 36 Antonio Carrillo Ledesma

Page 38: Introducción al Método de Diferencias Finitas y su Implementación

Introducción al Método de Diferencias Finitas y su ImplementaciónComputacional

Nótese que, mientras menor sea la norma de la matriz T , más rápida es laconvergencia, en el caso cuando

∥∥T∥∥ es menor que uno, pero cercano a uno, la

convergencia es lenta y el número de iteraciones necesario para disminuir el errordepende significativamente del error inicial. En este caso, es deseable proponeral vector inicial u0 de forma tal que sea mínimo el error inicial. Sin embargo,la elección de dicho vector no tiene importancia si la

∥∥T∥∥ es pequeña, ya que la

convergencia es rápida.Como es conocido, la velocidad de convergencia de los métodos iterativos

dependen de las propiedades espectrales de la matriz de coeficientes del sistemade ecuaciones, cuando el operador diferencial L de la ecuación del problema aresolver es auto-adjunto se obtiene una matriz simétrica y positivo definida y elnúmero de condicionamiento de la matriz A, es por definición

cond(A) =λmaxλmin

≥ 1 (3.11)

donde λmax y λmin es el máximo y mínimo de los eigen-valores de la matrizA. Si el número de condicionamiento es cercano a 1 los métodos numéricosal solucionar el problema convergerá en pocas iteraciones, en caso contrario serequerirán muchas iteraciones.

Frecuentemente al usar el método de Elemento Finito, Diferencias Finitas,entre otros, se tiene una velocidad de convergencia de O

(1h2

)y en el caso de

métodos de descomposición de dominio sin precondicionar se tiene una velocidadde convergencia de O

(1h

), donde h es la máxima distancia de separación entre

nodos continuos de la partición, es decir, que poseen una pobre velocidad deconvergencia cuando h→ 0 (véase [8], [9], [10] y [14]).

Los métodos Jacobi y Gauss-Seidel son usualmente menos eficientes que losmétodos discutidos en el resto de esta sección basados en el espacio de Krylov(véase [41] y [13]). Para un ejemplo de este hecho, tomemos el sistema lineal

4 3 03 4 −10 −1 4

x1x2x3

=

2430−24

cuya solución es x1 = 3, x2 = 4, x3 = −5 ; para el método Gauss-Seidel serequirieron 50 iteraciones, Jacobi requirieron 108 iteraciones y Gradiente Con-jugado sólo 3 iteraciones.

Los métodos basados en el espacio de Krylov, minimizan en la k-ésima ite-ración alguna medida de error sobre el espacio afín x0 + Kk, donde x0 es laiteración inicial y Kk es el k-ésimo subespacio de Krylov

Kk = Generado{r0,Ar0, ..., A

k−1r0}

para k ≥ 1. (3.12)

El residual es r = b−Ax, tal{rk}k≥0 denota la sucesión de residuales

rk = b−Axk. (3.13)

[email protected] 37 Antonio Carrillo Ledesma

Page 39: Introducción al Método de Diferencias Finitas y su Implementación

Introducción al Método de Diferencias Finitas y su ImplementaciónComputacional

Entre los métodos más usados definidos en el espacio de Krylov para el tipode problemas tratados en el presente trabajo se puede considerar: Método deGradiente Conjugado –para matrices simétricas– y GMRES –para matricesno simétricas–.

3.2.1 Método de Gradiente Conjugado

Si la matriz generada por la discretización es simétrica –A = AT– y definidapositiva –uTAu > 0 para todo u �= 0–, entonces es aplicable el método de Gra-diente Conjugado –Conjugate Gradient Method (CGM)–. La idea básica enque descansa el método del Gradiente Conjugado consiste en construir una basede vectores ortogonales espacio de Krylov Kn

(A, vn

)y utilizarla para realizar

la búsqueda de la solución en forma lo más eficiente posible.Tal forma de proceder generalmente no sería aconsejable porqué la construc-

ción de una base ortogonal utilizando el procedimiento de Gramm-Schmidt re-quiere, al seleccionar cada nuevo elemento de la base, asegurar su ortogonalidadcon respecto a cada uno de los vectores construidos previamente. La gran ven-taja del método de Gradiente Conjugado radica en que cuando se utiliza esteprocedimiento, basta con asegurar la ortogonalidad de un nuevo miembro conrespecto al último que se ha construido, para que automáticamente esta condi-ción se cumpla con respecto a todos los anteriores.

En el algoritmo de Gradiente Conjugado, se toma a la matriz A comosimétrica y positiva definida, y como datos de entrada del sistema Au = f,

el vector de búsqueda inicial u0 y se calcula r0 = f − Au0, p0 = r0, quedandoel método numérico esquemáticamente como:

αn =〈pn,pn〉〈pn,Apn〉

un+1 = un + αnpn

rn+1 = rn − αnApn

Prueba de convergencia

βn =〈rn+1,rn+1〉〈rn,rn〉

pn+1 = rn+1 + βnpn

n = n+ 1

(3.14)

donde 〈·, ·〉 = (·, ·) será el producto interior adecuado al sistema lineal en par-ticular, la solución aproximada será un+1 y el vector residual será rn+1.

En la implementación numérica y computacional del método es necesariorealizar la menor cantidad de operaciones posibles por iteración, en particularen Apn, una manera de hacerlo queda esquemáticamente como:

Dado el vector de búsqueda inicial u, calcula r = f −Au, p = r y µ = r · r.

Para n = 1, 2, ...,Mientras (µ < ε) {v = Apα = µ

p·vu = u+ αp

[email protected] 38 Antonio Carrillo Ledesma

Page 40: Introducción al Método de Diferencias Finitas y su Implementación

Introducción al Método de Diferencias Finitas y su ImplementaciónComputacional

r = r − αvµ′ = r · rβ = µ′

µ

p = r + βpµ = µ′

}

La solución aproximada será u y el vector residual será r.

Si se denota con {λi, Vi}Ni=1 las eigen-soluciones de A, i.e. AVi = λiVi,i = 0, 1, 2, ..., N. Ya que la matriz A es simétrica, los eigen-valores son reales yse pueden ordenar λ1 ≤ λ2 ≤ ... ≤ λN . Se define el número de condición porCond(A) = λN/λ1 y la norma de la energía asociada a A por ‖u‖2A = u · Au

entonces

∥∥u− uk∥∥A≤∥∥u− u0

∥∥A

1−

√Cond(A)

1 +√

Cond(A)

2k

. (3.15)

El siguiente teorema da idea del espectro de convergencia del sistema Au = bpara el método de Gradiente Conjugado.

Teorema 14 Sea κ = cond(A) = λmaxλmin

≥ 1, entonces el método de GradienteConjugado satisface la A−norma del error dado por

‖en‖‖e0‖ ≤

2[(√κ+1√κ−1

)n+(√

κ+1√κ−1

)−n] ≤ 2(√

κ− 1√κ+ 1

)n(3.16)

donde em = u− um del sistema Au = b.

Nótese que para κ grande se tiene que√κ− 1√κ+ 1

≃ 1− 2√κ

(3.17)

tal que

‖en‖A ≃∥∥e0

∥∥Aexp

(−2 n√

κ

)(3.18)

de lo anterior se puede esperar un espectro de convergencia del orden de O(√κ)

iteraciones (véase [14] y [41]).

Definición 15 Un método iterativo para la solución de un sistema lineal es lla-mado óptimo, si la razón de convergencia a la solución exacta es independientedel tamaño del sistema lineal.

Definición 16 Un método para la solución del sistema lineal generado pormétodos de descomposición de dominio es llamado escalable, si la razón de con-vergencia no se deteriora cuando el número de subdominios crece.

[email protected] 39 Antonio Carrillo Ledesma

Page 41: Introducción al Método de Diferencias Finitas y su Implementación

Introducción al Método de Diferencias Finitas y su ImplementaciónComputacional

3.2.2 Método Residual Mínimo Generalizado

Si la matriz generada por la discretización es no simétrica, entonces una opción,es el método Residual Mínimo Generalizado –Generalized Minimum ResidualMethod (GMRES)–, este representa una formulación iterativa común satisfa-ciendo una condición de optimización. La idea básica detrás del método se basaen construir una base ortonormal

{v1, v2, ..., vn

}(3.19)

para el espacio de Krylov Kn(A, vn

). Para hacer vn+1 ortogonal a Kn

(A, vn

),

es necesario usar todos los vectores previamente construidos{vn+1j

}nj=1

–enla práctica sólo se guardan algunos vectores anteriores– en los cálculos. Y elalgoritmo se basa en una modificación del método de Gram-Schmidt para lageneración de una base ortonormal. Sea V

n=[v1, v2, ..., vn

]la cual denota la

matriz conteniendo vj en la j-ésima columna, para j = 1, 2, ..., n, y sea Hn=

[hi,j ] , 1 ≤ i, j ≤ n, donde las entradas de Hnno especificadas en el algoritmo

son cero. Entonces, Hnes una matriz superior de Hessenberg. i.e. hij = 0 para

j < i− 1, y

AVn

= VnHn+ hn+1,n

[0, ..., 0, vn+1

](3.20)

Hn

= HT

nAV

n.

En el algoritmo del método Residual Mínimo Generalizado, la matriz A estomada como no simétrica, y como datos de entrada del sistema

Au = f (3.21)

el vector de búsqueda inicial u0 y se calcula r0 = f − Au0, β0 =∥∥r0

∥∥ , v1 =r0/β0, quedando el método esquemáticamente como:

Para n = 1, 2, ...,Mientras βn < τβ0 {wn+10 = Avn

Para l = 1 hasta n {hl,n =

⟨wn+1l , vl

wn+1l+1 = wn+1l − hl,nvl

}hn+1,n =

∥∥wn+1n+1

∥∥vn+1 = wn+1n+1/hn+1,n

Calcular yn tal que βn =∥∥∥β0e1 − H

nyn∥∥∥ es mínima

}

(3.22)

donde Hn= [hij ]1≤i≤n+1,1≤j≤n, la solución aproximada será un = u0 + V

nyn,

y el vector residual será

rn = r0 −AVnyn = V

n+1

(β0e1 − H

nyn). (3.23)

[email protected] 40 Antonio Carrillo Ledesma

Page 42: Introducción al Método de Diferencias Finitas y su Implementación

Introducción al Método de Diferencias Finitas y su ImplementaciónComputacional

Teorema 17 Sea uk la iteración generada después de k iteraciones de GMRES,con residual rk. Si la matriz A es diagonalizable, i.e. A = V ΛV −1 donde Λ esuna matriz diagonal de eigen-valores de A, y V es la matriz cuyas columnas sonlos eigen-vectores, entonces

∥∥rk∥∥

‖r0‖ ≤ κ (V ) minpκ∈Πκ,pk(0)=1

max |pκ (λj)|λj

(3.24)

donde κ (V ) =‖V ‖‖V−1‖ es el número de condicionamiento de V .

3.3 Estructura Óptima de las Matrices en su ImplementaciónComputacional

Una parte fundamental de la implementación computacional de los métodosnuméricos de resolución de sistemas algebraicos, es utilizar una forma óptimade almacenar12 , recuperar y operar las matrices, tal que, facilite los cálculos queinvolucra la resolución de grandes sistemas de ecuaciones lineales cuya imple-mentación puede ser secuencial o paralela (véase [13]).

El sistema lineal puede ser expresado en la forma matricial Au = f , donde lamatriz A –que puede ser real o virtual– es de tamaño n×n con banda b, peroel número total de datos almacenados en ella es a los más n∗b números de dobleprecisión, en el caso de ser simétrica la matriz, el número de datos almacenadoses menor a (n ∗ b)/2. Además si el problema que la originó es de coeficientesconstantes el número de valores almacenados se reduce drásticamente a sólo eltamaño de la banda b.

En el caso de que el método para la resolución del sistema lineal a usarsea del tipo Factorización LU o Cholesky, la estructura de la matriz cambia,ampliándose el tamaño de la banda de b a 2∗ b+1 en la factorización, en el casode usar métodos iterativos tipo CGM o GMRES la matriz se mantiene intactacon una banda b.

Para la resolución del sistema lineal virtual asociada a los métodos de difer-encias finitas, la operación básica que se realiza de manera reiterada, es lamultiplicación de una matriz por un vector v = Cu, la cual es necesario realizarde la forma más eficiente posible.

Un factor determinante en la implementación computacional, para que estaresulte eficiente, es la forma de almacenar, recuperar y realizar las operacionesque involucren matrices y vectores, de tal forma que la multiplicación se realiceen la menor cantidad de operaciones y que los valores necesarios para realizardichas operaciones queden en la medida de lo posible contiguos para ser alma-cenados en el Cache13 del procesador.

12En el caso de los ejemplos de la sección (4) de MatLab y C++ se usan matrices queminimizan la memoria usada en el almacenamiento de las matrices y maximizan la eficienciade los métodos numéricos de solución del sistema lineal asociado.

13Nótese que la velocidad de acceso a la memoria principal (RAM) es relativamente lentacon respecto al Cache, este generalmente está dividido en sub-Caches L1 –de menor tamaño y

[email protected] 41 Antonio Carrillo Ledesma

Page 43: Introducción al Método de Diferencias Finitas y su Implementación

Introducción al Método de Diferencias Finitas y su ImplementaciónComputacional

Dado que la multiplicación de una matriz C por un vector u, dejando elresultado en v se realiza mediante el algoritmo

for (i=0; i<ren; i++){

s = 0.0;for (j=0; j < col; j++){

s += C[i][j]*u[j];}v[i] = s;

}

Para lograr una eficiente implementación del algoritmo anterior, es necesarioque el gran volumen de datos desplazados de la memoria al Cache y viceversasea mínimo. Por ello, los datos se deben agrupar para que la operación másusada –en este caso multiplicación matriz por vector– se realice con la menorsolicitud de datos a la memoria principal, si los datos usados –renglón de lamatriz– se ponen contiguos minimizará los accesos a la memoria principal, pueses más probable que estos estarán contiguos en el Cache al momento de realizarla multiplicación.

Por ejemplo, en el caso de matrices bandadas de tamaño de banda b, elalgoritmo anterior se simplifica a

for (i=0; i<ren; i++){

s= 0.0;for (k=0; k < ban; k++){

if ((Ind[k] + i) >= 0 && (Ind[k]+i) < ren)s += Dat[i][k]*u[Ind[k]+i];

}v[i]=s;

}

Si, la solicitud de memoria para Dat[i] se hace de tal forma que los datos delrenglón estén continuos –son b números de punto flotante–, esto minimizarálos accesos a la memoria principal en cada una de las operaciones involucradasen el producto, como se explica en las siguientes secciones.

el más rápido–, L2 y hasta L3 –el más lento y de mayor tamaño– los cuales son de tamañomuy reducido con respecto a la RAM.Por ello, cada vez que las unidades funcionales de la Unidad de Aritmética y Lógica requieren

un conjunto de datos para implementar una determinada operación en los registros, solicitanlos datos primeramente a los Caches, estos consumen diversa cantidad de ciclos de reloj paraentregar el dato si lo tienen –pero siempre el tiempo es menor que solicitarle el dato a lamemoria principal–; en caso de no tenerlo, se solicitan a la RAM para ser cargados a loscaches y poder implementar la operación solicitada.

[email protected] 42 Antonio Carrillo Ledesma

Page 44: Introducción al Método de Diferencias Finitas y su Implementación

Introducción al Método de Diferencias Finitas y su ImplementaciónComputacional

3.3.1 Matrices Bandadas

En el caso de las matrices bandadas de banda b –sin pérdida de generalidad ypara propósitos de ejemplificación se supone pentadiagonal– típicamente tienela siguiente forma

A =

a1 b1 c1d2 a2 b2 c2

d3 a3 b3 c3d4 a4 b4 c4

e5 d5 a5 b5 c5e6 d6 a6 b6

e7 d7 a7 b7e8 d8 a8 b8

e9 d9 a9

(3.25)

la cual puede ser almacenada usando el algoritmo (véase [13]) Compressed Dia-gonal Storage (CDS), optimizado para ser usado en C++, para su almace-namiento y posterior recuperación. Para este ejemplo en particular, se hará usode un vector de índices

Ind = [−5,−1, 0,+1,+5] (3.26)

y los datos serán almacenados usando la estructura

Dat =

0 0 a1 b1 c10 d2 a2 b2 c20 d3 a3 b3 c30 d4 a4 b4 c4e5 d5 a5 b5 c5e6 d6 a6 b6 0e7 d7 a7 b7 0e8 d8 a8 b8 0e9 d9 a9 0 0

(3.27)

de tal forma que la matriz A puede ser reconstruida de forma eficiente. Paraobtener el valor Ai,j , calculo ind = j − i, si el valor ind esta en la lista deíndices Ind –supóngase en la columna k–, entonces Ai,j = Datik, en otro casoAi,j = 0.

Casos Particulares de la Matriz Bandada A Básicamente dos casos par-ticulares surgen en el tratamiento de ecuaciones diferenciales parciales: El primercaso es cuando el operador diferencial parcial es simétrico y el otro, en el quelos coeficientes del operador sean constantes.

Para el primer caso, al ser la matriz simétrica, sólo es necesario almacenarla parte con índices mayores o iguales a cero, de tal forma que se buscara elíndice que satisfaga ind = |j − i| , reduciendo el tamaño de la banda a b/2 en lamatriz A.

[email protected] 43 Antonio Carrillo Ledesma

Page 45: Introducción al Método de Diferencias Finitas y su Implementación

Introducción al Método de Diferencias Finitas y su ImplementaciónComputacional

Para el segundo caso, al tener coeficientes constantes el operador diferencial,los valores de los renglones dentro de cada columna de la matriz son iguales, ysólo es necesario almacenarlos una sola vez, reduciendo drásticamente el tamañode la matriz de datos.

3.3.2 Matrices Dispersas

Las matrices dispersas de a lo más b valores distintos por renglón –sin pérdidade generalidad y para propósitos de ejemplificación se supone b = 3–que surgenen métodos de descomposición de dominio para almacenar algunas matrices,típicamente tienen la siguiente forma

A =

a1 b1 c1a2 b2 c2

a3 b3 c3a4 b4

a5 b5 c5a6 b6 c6

a7 b7 c7a8 b8 c8

a9 b9

(3.28)

la cual puede ser almacenada usando el algoritmo (véase [13]) Jagged Diago-nal Storage (JDC), optimizado para ser usado en C++. Para este ejemplo enparticular, se hará uso de una matriz de índices

Ind =

1 6 92 5 85 8 91 4 03 6 91 2 37 8 94 7 87 8 0

(3.29)

y los datos serán almacenados usando la estructura

Dat =

a1 b1 c1a2 b2 c2a3 b3 c3a4 b4 0a5 b5 c5a6 b6 c6a7 b7 c7a8 b8 c8a9 b9 0

(3.30)

[email protected] 44 Antonio Carrillo Ledesma

Page 46: Introducción al Método de Diferencias Finitas y su Implementación

Introducción al Método de Diferencias Finitas y su ImplementaciónComputacional

de tal forma que la matriz A puede ser reconstruida de forma eficiente. Paraobtener el obtener el valor Ai,j , busco el valor j en la lista de índices Ind dentrodel renglón i, si lo encuentro en la posición k, entonces Ai,j = Datik, en otrocaso Ai,j = 0.

Casos Particulares de la Matriz Dispersa A Si la matriz A, que al seralmacenada, se observa que existen a lo más r diferentes renglones con valoresdistintos de los n con que cuenta la matriz y si r << n, entonces es posible sóloguardar los r renglones distintos y llevar un arreglo que contenga la referenciaal renglón almacenado.

3.3.3 Multiplicación Matriz-Vector

Los métodos de descomposición de dominio requieren por un lado la resoluciónde al menos un sistema lineal y por el otro lado requieren realizar la operaciónde multiplicación de matriz por vector, i.e. Cu de la forma más eficiente posible,por ello los datos se almacenan de tal forma que la multiplicación se realice enla menor cantidad de operaciones.

Dado que la multiplicación de una matriz C por un vector u, dejando elresultado en v se realiza mediante el algoritmo:

for (i=0; i<ren; i++){

s = 0.0;for (j=0; j < col; j++){

s += C[i][j]*u[j];}v[i] = s;

}

En el caso de matrices bandadas, se simplifica a:

for (i=0; i<ren; i++){

s= 0.0;for (k=0; k < ban; k++){

if ((Ind[k] + i) >= 0 && (Ind[k]+i) < ren)s += Dat[i][k]*u[Ind[k]+i];

}v[i]=s;

}

De forma similar, en el caso de matrices dispersas, se simplifica a:

[email protected] 45 Antonio Carrillo Ledesma

Page 47: Introducción al Método de Diferencias Finitas y su Implementación

Introducción al Método de Diferencias Finitas y su ImplementaciónComputacional

for (i=0; i<ren; i++){

s = 0.0, k = 0while (Ind[i][k] != -1){

s += Dat[i][k]*u[Ind[i][k]];k++;if (k >= b) break;

}v[i] = s;

}

De esta forma, al tomar en cuenta la operación de multiplicación de unamatriz por un vector, donde el renglón de la matriz involucrado en la multipli-cación queda generalmente en una región contigua del Cache, se hace óptima laoperación de multiplicación de matriz por vector.

[email protected] 46 Antonio Carrillo Ledesma

Page 48: Introducción al Método de Diferencias Finitas y su Implementación

Introducción al Método de Diferencias Finitas y su ImplementaciónComputacional

4 Implementación Computacional del Métodode Diferencias Finitas para la Resolución deEcuaciones Diferenciales Parciales

Existen diferentes paquetes y lenguajes de programación en los cuales se puedeimplementar eficientemente la solución numérica de ecuaciones diferenciales par-ciales mediante el método de diferencias Finitas, en este capítulo se describe laimplementación14 en los paquetes de cómputo SciLab y Octave (MatLab) y enel lenguaje de programación C++ y Python.

4.1 Implementación en SciLab

Scilab15 es un paquete de cómputo open source para el cálculo numérico elcual provee un poderoso ambiente de cálculo para aplicaciones Científicas y deIngeniería.

Ejemplo 18 Sea

u′′(x) = −π2 cos (πx) , 0 ≤ x ≤ 0.5, u(0) = 1, u′(0.5) = −π

entonces el programa queda implementado como:function y=LadoDerecho(x)y=-%pi*%pi*cos(%pi*x);endfunction

function y=SolucionAnalitica(x)y=cos(%pi*x);endfunction

a=0; // Inicio dominioc=0.5; // Fin dominioM=40; // ParticiónN=M-1; // Nodos interioresh=(c-a)/(M-1); // Incremento en la mallaY0=1; // Condición Dirchlet inicial en el inicio del dominioY1=-%pi; // Condición Neumann inicial en el fin del dominioA=zeros(N,N); // Matriz Ab=zeros(N); // Vector b

R=1/(h^2);P=-2/(h^2);Q=1/(h^2);

14En el caso de los ejemplos de MatLab, C++ y Python se usan matrices que minimizan lamemoria usada en el almacenamiento de las matrices y maximizan la eficiencia de los métodosnuméricos de solución del sistema lineal asociado.

15Scilab [http://www.scilab.org]

[email protected] 47 Antonio Carrillo Ledesma

Page 49: Introducción al Método de Diferencias Finitas y su Implementación

Introducción al Método de Diferencias Finitas y su ImplementaciónComputacional

// Primer renglon de la matriz A y vector bA(1,1)=P;A(1,2)=Q;b(1)=LadoDerecho(a)-Y0*R; // Frontera Dirichlet// Renglones intermedios de la matriz A y vector bfor i=2:N-1A(i,i-1)=R;A(i,i)=P;A(i,i+1)=Q;b(i)=LadoDerecho(a+h*(i-1));end// Relglon final de la matriz A y vector bA(N,N-1)=-1/(h^2);A(N,N)=-1/(h^2);b(N)=Y1/h; // Frontera Neumann

// Resuleve el sistema lineal Ax=bx=inv(A)*b;

// Prepara la graficaciónxx=zeros(M,1);zz=zeros(M,1);for i=1:Mxx(i)=a+h*(i-1);zz(i)=SolucionAnalitica(xx(i));endyy=zeros(M,1);yy(1)=Y0; // Condición inicialfor i=1:Nyy(i+1)=x(i);end// Grafica la solución de la Ecuación Diferencial Parcial en 1Dplot2d(xx,[yy,zz])

[email protected] 48 Antonio Carrillo Ledesma

Page 50: Introducción al Método de Diferencias Finitas y su Implementación

Introducción al Método de Diferencias Finitas y su ImplementaciónComputacional

4.2 Implementación en Octave (MatLab)

GNU Octave16 es un paquete de cómputo open source para el cálculo numérico–muy parecido a MatLab17 pero sin costo alguno para el usuario– el cualprovee un poderoso ambiente de cálculo para aplicaciones Científicas y de Inge-niería.

Ejemplo 19 Sea

−u′′(x) = −π2 cos(πx), 0 ≤ x ≤ 1, u(0) = 1, u(1) = −1

entonces el programa queda implementado como:% Método de diferencias Finitas una Dimensiónfunction [x,U] = fdm1d(a,b,ua,ub,n)h = (b-a)/n;h1= h*h;A = sparse(n-1,n-1)F= zeros(n-1,1)for i=1:n-2,A(i,i) = -2/h1;A(i+1,i) = 1/h1;A(i,i+1) = 1/h1;endA(n-1,n-1) = -2/h1;for i=1:n-1,x(i) = a + i*h;F(i) = f(x(i));endF(1) = F(1) - ua/h1;F(n-1) = F(n-1) - ub/h1;

% Soluciona el sistemaU = A\F;

% Graficar la solución numéricaplot(x,U,’o’); hold% Graficar la solución análiticau = zeros(n-1,1);for i=1: n-1,u(i) = cos(pi*x(i));endplot(x,u)

% Grafica el errorfigure(2);

16GNU Octave [http://www.gnu.org/software/octave/]17MatLab [http://www.mathworks.com/products/matlab/]

[email protected] 49 Antonio Carrillo Ledesma

Page 51: Introducción al Método de Diferencias Finitas y su Implementación

Introducción al Método de Diferencias Finitas y su ImplementaciónComputacional

plot(x,U-u);return

% Lado derechofunction y = f(x)y = -pi*pi*cos(pi*x);return

Para hacer uso del programa, escribir en la consola

[x,U] = fdm1d(0,1,1,-1,40);

[email protected] 50 Antonio Carrillo Ledesma

Page 52: Introducción al Método de Diferencias Finitas y su Implementación

Introducción al Método de Diferencias Finitas y su ImplementaciónComputacional

4.3 Implementación en C++

GMM++18 es una librería para C++ que permite definir diversos tipos dematrices y vectores además operaciones básicas de algebra lineal. La facilidadde uso y la gran cantidad de opciones hacen que GMM++ sea una buena opciónpara trabajar con operaciones elementales de algebra lineal.

Se instala en Debian Linux y/o Ubuntu como:# apt-get install libgmm++-dev

Para compilar el ejemplo usar:$ g++ ejemplito.cpp

Para ejecutar usar:$ ./a.out

Ejemplo 20 Sea

−u′′(x) + u(x) = 0, 0 ≤ x ≤ 1, u(0) = 0, u(1) = 1

entonces el programa queda implementado como:#include <gmm/gmm.h>int main(void){int i;double a=0; // Inicio dominiodouble c=1; // Fin dominioint M=20; // Particiónint N=M-2; // Nodos interioresdouble h=(c-a)/(M-1); // Incremento en la malladouble Y0=0.0; // Condicion inicial en el inicio del dominiodouble Y1=1.0; // Condicion inicial en el fin del dominio

// Matriz densagmm::dense_matrix<double> AA(N, N);

// Matriz dispersagmm::row_matrix< gmm::rsvector<double> > A(N, N);

// Vectoresstd::vector<double> x(N), b(N);

double P=2/(h*h);double Q=-1/(h*h)+1/(2*h);double R=-1/(h*h)-1/(2*h);// Primer renglon de la matriz A y vector bA(0,0)=P;A(0,1)=Q;

18GMM++ [http://download.gna.org/getfem/html/homepage/gmm/]

[email protected] 51 Antonio Carrillo Ledesma

Page 53: Introducción al Método de Diferencias Finitas y su Implementación

Introducción al Método de Diferencias Finitas y su ImplementaciónComputacional

b[0]=-Y0*R;// Renglones intermedios de la matriz A y vector bfor(i=1;i <N-1;i++){A(i,i-1)=R;A(i,i)=P;A(i,i+1)=Q;}// Relglon final de la matriz A y vector bA(N-1,N-2)=R;A(N-1,N-1)=P;b[N-1]=-Y1*Q;

gmm::copy(A,AA);// LU para matrices densagmm::lu_solve(AA, x, b);std::cout << "LU"<< x << gmm::endl;

gmm::identity_matrix PS; // Optional scalar product for cggmm::identity_matrix PR; // Optional preconditionergmm::iteration iter(10E-6);// Iteration object with the max residusize_t restart = 50; // restart parameter for GMRESgmm::cg(A, x, b, PS, PR, iter); // Conjugate gradient

std::cout << "CGM"<< x << std::endl;gmm::bicgstab(A, x, b, PR, iter); // BICGSTAB BiConjugate Gradient Sta-

bilized

std::cout << "BICGSTAB"<< x << std::endl;gmm::gmres(A, x, b, PR, restart, iter); // GMRES generalized minimum

residual

std::cout << "GMRES"<< x << std::endl;gmm::qmr(A, x, b, PR, iter); // Quasi-Minimal Residual method.std::cout << "Quasi-Minimal"<< x << std::endl;

// computation of a preconditioner (ILUT)gmm::ilut_precond< gmm::row_matrix< gmm::rsvector<double> > > Pre(A,

10, 1e-4);gmm::gmres(A, x, b, Pre, restart, iter); // execute the GMRES algorithmstd::cout << "GMRES preconditiones ILUT"<< x << std::endl;return 0;}

[email protected] 52 Antonio Carrillo Ledesma

Page 54: Introducción al Método de Diferencias Finitas y su Implementación

Introducción al Método de Diferencias Finitas y su ImplementaciónComputacional

4.4 Implementación en Python

Python es un lenguaje de programación interpretado multiparadigma cuya filosofíahace hincapie en una sintaxis que favoresca un código legible, que corre en mul-tiplataforma y posee una licencia de código abierto, el cual provee un poderosoambiente de cálculo para aplicaciones Científicas y de Ingeniería.

Ejemplo 21 Seaut + au(x) = 0, −2 ≤ x ≤ 8

mediante el esquema Upwind, entonces el programa queda implementado como:# -*- coding: utf-8 -*-"""@author: omar jonathan mendoza bernalUpwind scheme foru_t + a(x) u_x = 0Ejemplou_t + a u_x = 0Si u(x,0) = f(x) es la condición inicialla solución analitica esu(x,t) = f(x-at)"""from math import expfrom scipy import sparseimport numpy as npimport matplotlib.pyplot as plt# Ecuación# u_t + 2 u_x = 0coef_a = 2def condicion_inicial (x):"""Condición inicial de la ecuación"""y = exp (-(x - 0.2)*(x - 0.02))return ydef sol_analitica (x, t):"""Solución analítica de la ecuación"""y = exp(-(x-2*t)*(x-2*t))return y############# Dominio############a = -2.0b = 8.0# Partición del dominio

[email protected] 53 Antonio Carrillo Ledesma

Page 55: Introducción al Método de Diferencias Finitas y su Implementación

Introducción al Método de Diferencias Finitas y su ImplementaciónComputacional

nNodos = 401h = (b - a)/(nNodos - 1)# Intervalo de tiempodt = 0.012# creo el vector w donde se guradará la solución para cada tiempo# B matriz del lado derechow = np.zeros((nNodos,1))B = np.zeros((nNodos, nNodos))B = np.matrix(B)espacio = np.zeros((nNodos,1))for i in xrange(nNodos):xx_ = a + i*hespacio[i] = xx_w[i] = condicion_inicial(xx_)print "Espacio"print espacioprint "Condición Inicial"print wmu = coef_a * dt / hif mu <= 1:print "mu ", muprint "Buena aproximación"else:print "mu ", muprint "Mala aproximación"if coef_a >= 0:B[0,0] = 1 - mufor i in xrange (1, nNodos):B[i,i-1] = muB[i,i] = 1 - muelse:B[0,0] = 1 + mu;B[0,1] = -mu;# se completa las matrices desde el renglon 2 hasta el m-2for i in xrange(1, nNodos-1):B[i,i] = 1 + mu;B[i, i+1] = -mu;B[nNodos-1,nNodos-1] = 1 + mu# para guardar la soulción analiticaxx = np.zeros((nNodos,1));iteraciones = 201# Matriz sparse csrBs = sparse.csr_matrix(B);# Resolvemos el sistema iterativamentefor j in xrange (1, iteraciones):t = j*dt;

[email protected] 54 Antonio Carrillo Ledesma

Page 56: Introducción al Método de Diferencias Finitas y su Implementación

Introducción al Método de Diferencias Finitas y su ImplementaciónComputacional

w = Bs*w;# Imprimir cada 20 iteraciones

if j%20 == 0:print "t", tprint "w", wplt.plot(espacio, w)

[email protected] 55 Antonio Carrillo Ledesma

Page 57: Introducción al Método de Diferencias Finitas y su Implementación

Introducción al Método de Diferencias Finitas y su ImplementaciónComputacional

5 Bibliografía

Referencias

[1] K. Hutter y K Jöhnk, Continuum Methods of Physical Modeling, Springer-Verlag Berlin Heidelberg New York, 2004.

[2] J. L. Lions y E. Magenes, Non-Homogeneous Bounduary Value Problemsand Applicarions Vol. I, Springer-Verlag Berlin Heidelberg New York, 1972.

[3] A. Quarteroni y A. Valli, Domain Decomposition Methods for Partial Dif-ferential Equations. Clarendon Press Oxford, 1999.

[4] A. Quarteroni y A. Valli; Numerical Approximation of Partial DiferentialEquations. Springer, 1994.

[5] B. Dietrich, Finite Elements: Theory, Fast Solvers, and Applications inSolid Mechanics, Cambridge University, 2001.

[6] B. F. Smith, P. E. Bj∅rstad, W. D. Gropp; Domain Decomposition, ParallelMultilevel Methods for Elliptic Partial Differential Equations. CambridgeUniversity Press, 1996.

[7] Fuzhen Zhang, The Schur Complement and its Aplications, Springer, Nu-merical Methods and Algorithms, Vol. 4, 2005.

[8] B. I. Wohlmuth; Discretization Methods and Iterative Solvers Based onDomain Decomposition. Springer, 2003.

[9] L. F. Pavarino, A. Toselli; Recent Developments in Domain DecompositionMethods. Springer, 2003.

[10] M.B. Allen III, I. Herrera & G. F. Pinder; Numerical Modeling in ScienceAnd Engineering. John Wiley & Sons, Inc . 1988.

[11] R. L. Burden y J. D. Faires; Análisis Numérico. Math Learning, 7 ed. 2004.

[12] S. Friedberg, A. Insel, and L. Spence; Linear Algebra, 4th Edition, PrenticeHall, Inc. 2003.

[13] Y. Saad; Iterative Methods for Sparse Linear Systems. SIAM, 2 ed. 2000.

[14] Y. Skiba; Métodos y Esquemas Numéricos, un Análisis Computacional.UNAM, 2005.

[15] W. Gropp, E. Lusk, A. Skjellem, Using MPI, Portable Parallel Program-ming Whit the Message Passing Interface. Scientific and Engineering Com-putation Series, 2ed, 1999.

[16] I. Foster; Designing and Building Parallel Programs. Addison-Wesley Inc.,Argonne National Laboratory, and the NSF, 2004.

[email protected] 56 Antonio Carrillo Ledesma

Page 58: Introducción al Método de Diferencias Finitas y su Implementación

Introducción al Método de Diferencias Finitas y su ImplementaciónComputacional

[17] Jorge L. Ortega-Arjona, Patterns for Parallel Software Design, Wiley seriesin Software Design Patterns, 2010.

[18] DDM Organization, Proceedings of International Conferences on DomainDecomposition Methods, 1988-2012.

http://www.ddm.org and http://www.domain-decomposition.com

[19] Toselli, A., and Widlund O. Domain decomposition methods- Algorithmsand theory, Springer Series in Computational Mathematics, Springer-Verlag, Berlin, 2005, 450p.

[20] Farhat, C. and Roux, F. X. A Method of Finite Element Tearing and In-terconnecting and its Parallel Solution Algorithm. Int. J. Numer. Meth.Engng., 32:1205-1227, 1991.

[21] Mandel J. & Tezaur R. Convergence of a Substructuring Method with La-grange Multipliers, Numer. Math. 73 (1996) 473-487.

[22] Farhat C., Lesoinne M. Le Tallec P., Pierson K. & Rixen D. FETI-DP aDual-Primal Unified FETI method, Part 1: A Faster Alternative to thetwo-level FETI Method, Int. J. Numer. Methods Engrg. 50 (2001) 1523-1544.

[23] Farhat C., Lesoinne M., Pierson K. A Scalable Dual-Primal Domain De-composition Method, Numer. Linear Algebra Appl. 7 (2000) 687-714.

[24] Mandel J. & Tezaur R. On the Convergence of a Dual-Primal Substructu-ring Method, Numer. Math. 88(2001), pp. 5443-558.

[25] Mandel, J. Balancing Domain Decomposition. Comm. Numer. Meth. En-grg., 9:233-241, 1993.

[26] Mandel J., & Brezina M., Balancing Domain Decomposition for Problemswith Large Jumps in Coefficients, Math. Comput. 65 (1996) 1387-1401.

[27] Dohrmann C., A Preconditioner for Substructuring Based on ConstrainedEnergy Minimization. SIAM J. Sci. Comput. 25 (2003) 246-258.

[28] Mandel J. & Dohrmann C., Convergence of a Balancing Domain Decom-position by Constraints and Energy Minimization. Numer. Linear AlgebraAppl. 10 (2003) 639-659.

[29] Da Conceição, D. T. Jr., Balancing Domain Decomposition Preconditio-ners for Non-symetric Problems, Instituto Nacional de Matemática pura eAplicada, Agencia Nacional do Petróleo PRH-32, Rio de Janeiro, May. 9,2006.

[30] J. Li and O. Widlund, FETI-DP, BDDC and block Cholesky Methods, Int.J. Numer. Methods Engrg. 66, 250-271, 2005.

[email protected] 57 Antonio Carrillo Ledesma

Page 59: Introducción al Método de Diferencias Finitas y su Implementación

Introducción al Método de Diferencias Finitas y su ImplementaciónComputacional

[31] Farhat Ch., Lesoinne M., Le Tallec P., Pierson K. and Rixen D. FETI-DP:A Dual-Primal Unified FETI Method-Part I: A Faster Alternative to theTwo Level FETI Method. Internal. J. Numer. Methods Engrg., 50:1523-1544, 2001.

[32] Rixen, D. and Farhat Ch. A Simple and Efficient Extension of a Class ofSubstructure Based Preconditioners to Heterogeneous Structural MechanicsProblems. Internal. J. Numer. Methods Engrg., 44:489-516, 1999.

[33] J. Mandel, C. R. Dohrmann, and R. Tezaur, An Algebraic Theory for Pri-mal and Dual Substructuring Methods by Constraints, Appl. Numer. Math.,54 (2005), pp. 167-193.

[34] A. Klawonn, O. B. Widlund, and M. Dryja, Dual-primal FETI Methodsfor Three-Dimensional Elliptic Problems with Heterogeneous Coefficients,SIAM J. Numer. Anal., 40 (2002), pp. 159-179.

[35] Alberto Rosas Medina, Métodos de Estabilización para Problemas deAdvección-Difusión, Trabajo de Investigación para Sustentar el Examende Candidaura al Doctorado, Postgrado en Ciencias de la Tierra, UNAM,2011.

[36] Klawonn A. and Widlund O.B., FETI and Neumann-Neumann IterativeSubstructuring Methods: Connections and New Results. Comm. Pure andAppl. Math. 54(1): 57-90, 2001.

[37] Tezaur R., Analysis of Lagrange Multipliers Based Domain Decomposition.P.H. D. Thesis, University of Colorado, Denver, 1998.

[38] Herrera I. & Rubio E., Unified Theory of Differential Operators Actingon Discontinuos Functions and of Matrices Acting on Discontinuous Vec-tors, 19th International Conference on Domain Decomposition Methods,Zhangjiajie, China 2009. (Oral presentation). Internal report #5, GMMC-UNAM, 2011.

[39] Valeri I. Agoshkov, Poincaré-Steklov Operators and Domain DecompositionMethods in Finite Dimensional Spaces. First International Symposium onDomain Decomposition Methods for Partial Differential Equations, pages73-112, Philadelphia, PA, 1988. SIAM. Paris, France, Junuary 7-9, 1987.

[40] Toselli, A., FETI Domain Decomposition Methods for Escalar Advection-Diffusion Problems. Compututational Methods Appl. Mech. Engrg. 190.(2001), 5759-5776.

[41] C.T. Keller, Iterative Methods for Linear and Nonlinear Equations, Societefor Industrial and Applied Mathematics, 1995.

[42] Manoj Bhardwaj, David Day, Charbel Farhat, Michel Lesoinne, KendallPierson, and Daniel Rixen. Application of the PETI Method to ASCI Pro-blems: Scalability Results on One Thousand Processors and Discussion

[email protected] 58 Antonio Carrillo Ledesma

Page 60: Introducción al Método de Diferencias Finitas y su Implementación

Introducción al Método de Diferencias Finitas y su ImplementaciónComputacional

of Highly Heterogeneous Problems. Intemat. J. Numer. Methods Engrg.,47:513-535, 2000.

[43] Zdengk Dostdl and David Hordk. Scalability and FETI Based Algorithmfor Large Discretized Variational Inequalities. Math. Comput. Simulation,61(3-6): 347-357, 2003. MODELLING 2001 (Pilsen).

[44] Charbel Farhat, Michel Lesoinne, and Kendall Pierson. A Scalable Dual-Primal Domain Decomposition Method. Numer. Linear Algebra Appl., 7(7-8):687-714, 2000.

[45] Yannis Fragakis and Manolis Papadrakakis, The Mosaic of High Perfor-mance Domain Decomposition Methods for Structural Mechanics: Formu-lation, Interrelation and Numerical Efficiency of Primal and Dual Methods.Comput. Methods Appl. Mech. Engrg, 192(35-36):3799-3830, 2003.

[46] Kendall H. Pierson, A family of Domain Decomposition Methods for theMassively Parallel Solution of Computational Mechanics Problems. PhDthesis, University of Colorado at Boulder, Aerospace Engineering, 2000.

[47] Manoj Bhardwaj, Kendall H. Pierson, Garth Reese, TimWalsh, David Day,Ken Alvin, James Peery, Charbel Farhat, and Michel Lesoinne. Salinas, AScalable Software for High Performance Structural and Mechanics Simula-tion. In ACM/IEEE Proceedings of SC02: High Performance Networkingand Computing. Gordon Bell Award, pages 1-19, 2002.

[48] Klawonn, A.; Rheinbach, O., Highly Scalable Parallel Domain Decompo-sition Methods with an Application to Biomechanics, Journal of AppliedMathematics and Mechanics 90 (1): 5-32, doi:10.1002/zamm.200900329.

[49] Petter E. Bj∅rstad and Morten Skogen. Domain Decomposition Algorithmsof Schwarz Type, Designed for Massively Parallel Computers. In David E.Keyes, Tony F. Chan, Gerard A. Meurant, Jeffrey S. Scroggs, and Robert G.Voigt, editors. Fifth International Symposium on Domain DecompositionMethods for Partial Differential Equations, pages 362-375, Philadelphia,PA, 1992. SIAM. Norfolk, Virgina, May 6-8, 1991.

[50] Yau Shu Wong and Guangrui Li. Exact Finite Difference Schemes for Sol-ving Helmholtz Equation at any Wavenumber. International Journal of Nu-merical Analysis and Modeling, Series B, Volume 2, Number 1, Pages 91-108, 2011.

[51] Zhangxin Chen, Guanren Huan and Yuanle Ma. Computational Methodsfor Multiphase Flow in Porous Media, SIAM, 2006.

[email protected] 59 Antonio Carrillo Ledesma