APLICACIÓN DEL MDF Y DEL MEF A PROBLEMAS DE CONTROL

Comentarios

Transcripción

APLICACIÓN DEL MDF Y DEL MEF A PROBLEMAS DE CONTROL
APLICACIÓN DEL MDF Y DEL MEF A
PROBLEMAS DE CONTROL
Proyecto de fin de carrera
Departamento de Ingeniería de Sistemas y Automática
Escuela Técnica Superior de Ingeniería
Universidad de Sevilla
Autor: Pablo Casanovas Espinar
Tutor: José Ángel Acosta Rodríguez
Este documento constituye el proyecto de fin de carrera llamado “Aplicación del MDF y del
MEF a problemas de control”, realizado por Pablo Casanovas Espinar para la titulación de
Ingeniería Industrial (plan 98). El proyecto depende del Departamento de Ingeniería de
Sistemas y Automática de la Universidad de Sevilla. Este proyecto fue tutelado por D. José
Ángel Acosta Rodríguez.
El documento fue redactado utilizando Microsoft Word, Microsoft Excel y el programa gráfico
Graph.
Las fuentes utiliazadas son Calibri con tamaño 11 para el texto, y Cambria Math con tamaño 11
para las expresiones matemáticas.
Sevilla, 24 de Junio de 2014
Agradecimientos
A mi padre, mi madre y mi hermana.
A Steffi.
A mi tutor, José Ángel.
Resumen
Este proyecto consiste en la aplicación dos métodos numéricos diferentes para la
aproximación de ecuaciones diferenciales en derivadas parciales.
En primer lugar se aplicó un caso particular del método de las diferencias finitas, que fue
implementado en Matlab, y en segundo lugar el método de los elementos finitos a través de la
aplicación informática Freefem.
Ambos métodos fueron programados para su posterior aplicación a un problema práctico de
control de un péndulo invertido.
Finalmente se utilizó el Simulink para la simulación del sistema mecánico usando las
aproximaciones aportadas por los métodos anteriores.
Capítulo 1 Motivación y objetivos ............................................................................................... 1
1.1 Introducción ........................................................................................................................ 1
Capítulo 2 Ecuaciones Diferenciales Parciales y sistema mecánico del péndulo invertido ....... 2
2.1 Introducción a las EDP ......................................................................................................... 2
2.1.1 Ecuaciones Diferenciales Ordinarias ............................................................................ 2
2.1.2 Ecuaciones diferenciales en derivadas parciales ......................................................... 4
2.1.2.1 Definición .............................................................................................................. 4
2.1.2.2 Condiciones de contorno ...................................................................................... 5
2.1.2.3 EDP de orden dos y dos variables independientes. Tipos y ejemplos .................. 6
2.1.2.4 EDP de orden dos con m variables independientes (m > 2)................................ 9
2.1.2.5 EDP de orden superior .......................................................................................... 9
2.2 Sistema de péndulo invertido ........................................................................................... 10
Capítulo 3 Método de las Diferencias Finitas (MDF) ................................................................. 14
3.1 Fundamentos del método de las diferencias finitas ......................................................... 14
3.1.1 Modelos de una variable independiente ................................................................... 14
3.1.2 Modelos de dos variables........................................................................................... 15
3.1.3 Obtención de la molécula computacional.................................................................. 17
3.1.4 Criterio de estabilidad ................................................................................................ 21
3.1.4.1 Análisis de estabilidad de Von Neumann ............................................................ 21
3.2 Resolución mediante el método de las diferencias finitas ............................................... 26
3.2.1 Condiciones de contorno aproximadas...................................................................... 26
3.2.1.1 Condiciones de contorno parabólicas ................................................................. 28
3.2.1.1.1 Diferencias regresivas .................................................................................. 28
3.2.1.1.2 Diferencias centradas en q1 y progresivas en q2 ........................................ 32
3.2.1.1.3 Diferencias centradas ................................................................................... 34
3.2.2 Condiciones de contorno exactas .............................................................................. 39
3.2.2.1 Diferencias regresivas ......................................................................................... 39
3.2.2.2. Diferencias centradas ......................................................................................... 40
Capítulo 4 Método de los Elementos Finitos (MEF) mediante Freefem ................................... 43
4.1 Fundamentos del método de los elementos finitos ......................................................... 43
4.1.1 Reseña histórica ......................................................................................................... 43
4.1.2 Conceptos generales .................................................................................................. 44
4.1.2.1 Manejo del programa Freefem ........................................................................... 49
4.1.2.2 Ejemplo................................................................................................................ 50
4.1.3 Comparación entre el MEF y el MDF.......................................................................... 55
4.2 Resolución mediante el método de los elementos finitos ................................................ 56
4.2.1 Condiciones de contorno parabólicas ........................................................................ 56
4.2.1.1 Adición de términos de orden dos ...................................................................... 59
4.2.2 Condiciones de contorno exactas .............................................................................. 61
Capítulo 5 Simulación y comparación de resultados ................................................................ 64
5.1 Simulación en Simulink ..................................................................................................... 64
5.2 Resultados de simulación .................................................................................................. 65
5.2.1 Diferencias regresivas ................................................................................................ 66
5.2.2 Diferencias centradas ................................................................................................. 67
5.2.3 Elementos finitos........................................................................................................ 70
Anexo .......................................................................................................................................... 75
A.1 Diferencias regresivas ....................................................................................................... 75
A.2 Diferencias centradas........................................................................................................ 76
A.3 Elementos finitos .............................................................................................................. 78
A.3.1 Primera aplicación...................................................................................................... 78
A.3.2 Segunda aplicación .................................................................................................... 79
A.3.3 Lectura del fichero u.txt desde Matlab ...................................................................... 80
A.3 Función gradiente ............................................................................................................. 81
A.4 Función interpoladora....................................................................................................... 82
Bibliografía .................................................................................................................................. 84
Capítulo 1
Motivación y objetivos
1.1 Introducción
El objetivo de este proyecto de fin de carrera es continuar la línea de estudio iniciada en (Lucas
Rodríguez, 2012). En el anterior proyecto se estudiaba la implementación de un método
matemático numérico para la resolución de una ecuación diferencial determinada.
Concretamente mediante el método de las diferencias finitas.
El interés de este proyecto reside en que ha sido abordado siguiendo vías alternativas para la
resolución de la ecuación mencionada. Para ello se estudian el método de las diferencias
finitas (con una significativa variación respecto al proyecto anterior) y el método de los
elementos finitos usando el Freefem, detallando en ambos casos las ventajas y desventajas
que presentan, así como las dificultades y limitaciones que se han ido presentando a lo largo
del desarrollo de este proyecto.
La parte correspondiente a las diferencias finitas fue programada en lenguaje M en Matlab,
que es un lenguaje de alto nivel para el cálculo numérico. Está disponible para las plataformas
Unix, Windows, Mac OS X y GNU/Linux .
En cambio, para la implementación del método de los elementos finitos se decidió explorar las
posibilidades que ofrece el Freefem, que es un lenguaje de programación y software enfocado
en resolver ecuaciones diferenciales parciales usando el método de elementos finitos.
FreeFem está escrito en C++ y desarrollado y mantenido por la Universidad Pierre y Marie
Curie y el Laboratorio Jacques-Louis Lions. Es compatible con GNU/Linux, Solaris, OS X y MS
Windows. Cabe destacar que un hecho decisivo en la selección de este software, fue que es
muy usado por el personal de investigación del departamento de Ecuaciones Diferenciales y
Cálculo Numérico de la Universidad de Sevilla.
1
Capítulo 2
Ecuaciones diferenciales parciales y sistema
mecánico de péndulo invertido.
2.1 Introducción a las EDP
2.1.1 Ecuaciones Diferenciales Ordinarias
Las Ecuaciones Diferenciales Ordinarias (EDO) y las Ecuaciones Diferenciales Parciales (EDP)
están presentes en muchos de los modelos matemáticos que modelan fenómenos presentes
en la naturaleza.
Las Ecuaciones Diferenciales Ordinarias son en realidad un caso particular de las Ecuaciones
Diferenciales Parciales en el que únicamente hay funciones con una sola variable
independiente.
Son del tipo:
�, (),  ′ (), … ,   ()� = 0,
siendo ésta una ecuación diferencial ordinaria de orden , para una función () desconocida.
La obtención de las soluciones de las EDOs es mucho más sencilla que las de las EDPs, aunque
también suponen una gran simplificación del modelo matemático que describe la realidad
física del sistema que se desea conocer. Esto se debe a que solo aparece una variable
independiente de la que dependen todas las demás.
A continuación se exponen dos ejemplos de modelado de problemas mediante EDOs recogidos
en (Gallardo, 2012).
Ejemplo 1. Movimiento de un cuerpo en caída libre.
Se tiene un cuerpo de masa m que se deja caer desde una altura h únicamente bajo la
influencia de la gravedad tal y como se observa en la figura 2.1.1.1.
2
Figura 2.1.1.1
Este sistema se puede modelar mediante la segunda ecuación de Newton.
⃗ = � ���⃗
,
siendo  la aceleración y  cada una de las fuerzas que actúan sobre la masa. La posición
del cuerpo en cada instante es (), y por tanto la aceleración será su segunda derivada
′′(). La única fuerza que actúa en el sistema es la de la gravedad que viene dada por
 = −, donde g es la constante de la gravedad.
Para que nuestro sistema quede completamente definido se requieren en este caso dos
condiciones iniciales, que serán, (0) = ℎ, ya que para el instante inicial el cuerpo se
encuentra a una altura h, y  ′ (0) = 0, ya que el cuerpo se deja caer y por tanto su
velocidad inicial es cero.
La EDO es de segundo orden y queda de la siguiente forma:
2 
= − ,
 2
(0) = ℎ ,
 ′ (0) = 0.
Ejemplo 2. Vaciado de un tanque cilíndrico.
Se tiene un tanque cilíndrico como el de la figura 2.1.1.2 de radio  y altura 0
completamente lleno de agua. En la base inferior del tanque hay un orificio de área . La
constante  dependerá de la forma del orificio.
3
Figura 2.1.1.2
Aplicando la Ley de Torriceli, según la cual podemos determinar la velocidad de salida del
fluido. Esto se consigue igualando la energía cinética
Despejando ,  = �2ℎ.
1

2
y la energía potencial ℎ.
El caudal de agua que sale del tanque será  y por tanto podemos definir la siguiente
relación.
 = − = −�2ℎ ,
=

ℎ
=  2
,


igualando ambas expresiones obtenemos:
 2
ℎ
= −�2ℎ .

Como el tanque está inicialmente lleno, nuestra condición inicial será ℎ(0) = 0 .
2.1.2 Ecuaciones diferenciales en derivadas parciales
2.1.2.1 Definición
Aunque son de gran utilidad, existen gran cantidad de problemas que no pueden ser
abordados mediante las EDOs ya que intervienen varias variables independientes. Es en estos
casos cuando se utilizan las EDPs.
Se denomina ecuación diferencial en derivadas parciales a la ecuación de la forma:
 �1 , 2 , … ,  , ,



,…,
,…, 
�=0,
 1 1 2 2 …  
1

donde se cumple que 1 + 2 + ⋯ +  = 
La solución a la anterior ecuación en una región determinada R, es una función de la forma
 = (1 , 2 , … ,  ) ∈ ∁ () que al sustituir ésta y sus correspondientes derivadas en la
4
ecuación se convierte en la identidad respecto a sus variables independientes, si por ejemplo
se tiene una EDP con dos variables independientes,   . La solución será una superficie en el
sistema de coordenadas cartesianas , , (, ) como se muestra en la figura 2.1.2.1.1.
Figura 2.1.2.1.1
En el caso de que la ecuación dependa de más de dos variables independientes, no podríamos
visualizar geométricamente la solución, ya se tendría una superficie de cuatro dimensiones o
hipersuperficie (Romero. Moreno. Rodríguez, 2001).
Por último, el orden de una ecuación diferencial en derivadas parciales es el orden superior de
las derivadas parciales que están presentes en la ecuación. Por ejemplo:
 
+
= 0 Es de primer orden
 
 2  
+
= 0 Es de segundo orden
 2 
2.1.2.2 Condiciones de contorno
Además de la ecuación diferencial, son necesarias las condiciones de contorno para que el
problema quede completamente definido. Como se plantea en (Miersemann, 2012) se
distinguen tres tipos de condiciones:
•
Condición tipo Dirichlet
En este caso se fija solución de nuestra ecuación en la frontera determinada. Son del
tipo:
(, ) = ()
5
Refiriéndose a a una frontera determinada, y f(x) a los valores que se tendrán a lo
largo de ésta.
•
Condición tipo Newmann
Para este tipo de condiciones, se fija la derivada de la función incógnita a lo largo del
contorno estudiado. Son del tipo:
(, )
= ()

•
En este caso, el valor de la derivada de la función incógnita en la frontera a está
definido por la función g(x).
Condición tipo Mixta
Estas condiciones combinan las dos anteriores. Son del tipo:
(, ) +
(, )
= ()

2.1.2.3 EDP de orden dos y dos variables independientes. Tipos y ejemplos
Aunque en este proyecto se estudiarán con más detalle las EDPs de primer orden, también
resulta interesante comentar como se clasifican en general las de segundo orden, que
normalmente son de la forma:
2 
2 
2 


(, )  2 + (, )  + (, )  2 + (, )  + (, )  = (, , ),
donde A, B, C, D y E son constantes.
Las ecuaciones de segundo orden suelen estar clasificadas según el signo de  2 − 4
•
Ecuaciones hiperbólicas, si  2 − 4 > 0.
Sirven para modelar fenómenos oscilatorios, tales como oscilaciones
electromagnéticas, vibraciones de cuerdas, vibraciones de membranas, etc.
Como ejemplo, se muestra a continuación la ecuación de ondas recogida en
(Cañada Villar, 2006). Se tiene una cuerda flexible como la de la figura 2.1.2.3.1
que se estira hasta quedar tensa fijando los extremos en dos puntos
representados en el eje de abscisas por (0,0) y (π,0). Tras lo cual se tira de la
cuerda hasta que adopta una curva dada por la ecuación  = (). Por último
se suelta la cuerda. El objetivo del problema es conocer la posición de la cuerda
en función del tiempo y la posición x.
6
Figura 2.1.2.3.1
Se ha supuesto que:
1. La cuerda es homogénea, es decir, que el cociente de la masa entre la
longitud es constante.
2. Fuerzas gravitacionales despreciables.
Con todo ello se tiene que:
2 2 
=
 2  2
0 ≤  ≤ ,
(, 0) = () (1)
>0
(, )
= 0 (2)

(0, ) = (, ) = 0 (3)
La condición (1) representa la posición inicial de la cuerda.
La condición (2) significa que la velocidad inicial de la cuerda es nula.
La condición (3) significa que los dos extremos de la cuerda están fijos.
•
Ecuaciones elípticas, si  2 − 4 < 0.
Se usan para modelar procesos de ciclo fijo que no dependen del tiempo. Como
ejemplo se ilustra a continuación la ecuación de Laplace recogida en (Cañada
Villar, 2006). Se tiene una circunferencia C de radio unitario fijada en el origen
como se observa en la figura 2.1.2.3.2. Siendo u una función especificada en el
contorno C. U puede ser un por ejemplo un potencial o un campo eléctrico. La
región que encierra C se denomina R.
7
Figura 2.1.2.3.2
2  2
+
= 0,
 2  2
para mayor comodidad en el modelado, se realiza el cambio de variables a
coordenadas polares.  = (),  = ().
Realizando las sustituciones en la ecuación, queda:
 2  1  1  2 
+
+
= 0.
 2    2  2
Se requiere una especificación de contorno, que viene dada por
(1, ) = ()
Además la función u debe estar acotada según
|(, )| < 
∀(, )   ∁  2
Siendo K una constante.
•
Ecuaciones parabólicas, si  2 − 4 = 0.
Sirven para modelar problemas que incluyen la conducción o la transferencia
de calor. Como ejemplo, se muestra a continuación la ecuación del calor
recogida en (Cañada Villar, 2006). Se tiene una varilla delgada de longitud π.
Ambos extremos de la varilla se mantienen a 0 ˚C. Se sabe que la distribución
inicial de temperaturas es una función f(x). Se desea conocer la temperatura
en cualquier punto y en cualquier instante.
2  
=
0 <  < , 0 <  < 
 2 
(, 0) = () (1)
8
(0, ) = (, ) = 0
(2)
La condición (1) es la distribución de temperaturas inicial.
La condición (2) muestra que los extremos de la varilla se mantienen a 0 ˚C.
2.1.2.4 EDP de orden dos con  variables independientes ( > )
Las EDP con más de dos variables independientes describen modelos con otras tantas variables
independientes. Para su resolución numérica, es necesaria la aplicación de métodos numéricos
en tres (o más) dimensiones, lo cual se escapa de los contenidos de este proyecto. Tienen la
siguiente forma:
 �1 , … ,  , ,

 2 
2 
2 
2 
,…,
,
,
…
,
,
,
…
,
�=0,
1
 1 2
 2 1 2
1 
un ejemplo podría ser la ecuación de onda escalar en un espacio de dos dimensiones (tres
variables independientes, t, x e y).
2
2 2
2
=

�
+
�=0
 2
 2  2
2.1.2.5 EDP de orden superior
Las Ecuaciones Diferenciales Parciales de orden superior (n>2), se caracterizan porque
aparecen términos diferenciales de grado superior a dos. Tienen la siguiente forma:
 �1 , 2 , … ,  , ,



,…,
,…, 
�=0,
 1 1 2 2 …  
1

un ejemplo podría ser la ecuación que describe la flexión mecánica de una placa elástica:
4
4 
 4  (, )
+
2
+
=
.
 4
 2  2  4

9
2.2 Sistema de péndulo invertido
En este apartado se va a describir un sistema mecánico con dos grados de libertad en el que se
aplicaran los métodos matemáticos numéricos para su posterior simulación. El sistema en
cuestión ha sido extraído de la tesis de (Acosta Rodríguez, 2004).
El sistema es un péndulo de masa  formado por una varilla de inercia 1 en el extremo de la
cual hay un disco de inercia 2 como se ve en la figura 2.2.1.
Figura 2.2.1
Los grados de libertad son las variables  y  que son los ángulos que pueden girar la varilla y
el disco respectivamente. El objetivo del problema es hacer que el péndulo permanezca
vertical, lo cual se consigue mediante la adición de un controlador que gobierna al disco. Se
activará un par motor  que hace girar al disco en función de la posición de la varilla. Se
explicará esto con más detalle posteriormente.
Las ecuaciones que gobiernan a este sistema en coordenadas cartesianas son las de Lagrange,
y pueden ser descritas como:
�
1 + 2
2
2 ̈
−()
0
�� � + �
� = � �
2 ̈
1
0
(2.2.1),
para simplificar el problema, vamos a realizar un cambio de coordenadas,
1 = 
2 =  + 
Haciendo el cambio de variables, nuestro sistema de ecuaciones (2.2.1) nos queda:
1 ̈ 1 + 2 ̈ 2 − (1 ) = 0
10
2 ̈ 2 = 
Despejando las variables ̈ 1 y ̈ 2 nos queda el sistema:
−2

̈ 1
−
()
� + � 1 �  ,
� � = � 1
̈ 2
1
0
y definiendo:
nos queda finalmente:
=

1

=
2
,
1
̈
−()
−
� 1� = �
� + � � .
̈ 2
1
0
El controlador que se usará es el definido en la tesis “Control no lineal de sistemas
subactuados (Acosta Rodríguez, 2004)”. Actuará sobre el disco, por tanto se controlaran las
variables anteriormente descritas  y . La expresión de este controlador ha sido obtenida
usando un método de control determinado y viene dado por la siguiente expresión:
donde
 =   ∙ ( −  ∙  ∙ (  ∙ )−1 ) −  ∙   ∙ ( ∙ −1 ) ,
−1
−
 =� �=� �,
1
1
1
̇
 = � � = � 1 � ,
̇ 2
2
 =  (1 ),
−
2
2
⎡
(1 ) −  (2 − 1 )⎤
1
1 ⎥

,
 = ⎢ 1

2
⎢
⎥
 (2 − 1 )
⎣
⎦
1
y donde 1 y 2 son parámetros de control definidos por:
1 =  (1,1) +  (1,2) ,
2 =  (1,2) +  (2,2) ,
siendo  , ,  ,  las ganancias de control.
11
El sistema que se va a resolver es el siguiente:
̇ 1
1
0
2
̇ 2
� + � 0 �  �1 , 2 , 1 , 2 �.
� �=�
 (1 )
̇1
−1
1
̇2
0
Como se ha visto antes, el vector  tiene en cada una de sus dos componentes, la derivada
del potencial. Dicho potencial depende de las variables 1 y 2 . Este potencial se puede
calcular mediante la siguiente ecuación diferencial:
1


+ 2
= − (1 ) (2.2.2),
1
2
siendo 1 < 0 y 2 ≠ 0 y sujeta a las condiciones de contorno:
2
�
12 (
1 ,2 )=(0,0)
= 1
2 2
2
−
�
12 22 1 2 (
1 ,2 )=(0,0)
 1 > 0
= 2
(2.2.3),
 2 > 0
La solución analítica a la ecuación (2.2.2) viene dada por:
(1 , 2 ) =
2

1

cos(1 ) + �2 − 1 �
2
2
1
para simplificar tomaremos unos valores de:
1 = −1 ,
2 = 4 ,
 = 10 ,  =  = 1 ,
y entonces nuestra ecuación nos queda:
−
y su solución analítica sería:


+4
= −10 (1 ) (2.2.4),
2
1
1
(1 , 2 ) = −10 cos(1 ) + (2 + 41 )2 (2.2.5).
2
Nótese que verifica las condiciones de contorno (2.2.3).
Las derivadas de la ecuación solución (2.2.5) con respecto a 1 y 2 son:
12
(1 , 2 )
= 10 (1 ) + 42 + 161
1
(1 , 2 )
= 2 + 41
2
Véase que sustituyendo estas derivadas en la ecuación, se llega a la expresión 0 = 0, por tanto
la solución dada es correcta.
13
Capítulo 3
Método de las diferencias finitas (MDF)
3.1 Fundamentos del método de las diferencias finitas
Debido a que no siempre es posible hallar una expresión analítica de la solución de una
ecuación diferencial en derivadas parciales, o que su obtención es en excesivo complicada, se
suele recurrir a métodos numéricos para el cálculo de una aproximación de la solución.
En esta sección se va a exponer el método numérico de las diferencias finitas, que consiste en
usar derivadas para aproximar ecuaciones de diferencias.
3.1.1 Modelos de una variable independiente
Usando el Teorema de Taylor, que permite la aproximación de una función derivable
determinada en torno a un punto h. Se tiene que:

() = �
=0
 () (ℎ)
( − ℎ) ,
!
desarrollando la expresión anterior se llega a:
() = (ℎ) +
 ′ (ℎ)
 () (ℎ)
 (2) (ℎ)
( − ℎ) +
( − ℎ) ,
( − ℎ)2 + ⋯ +
1!
2!
!
a partir de esta expresión es fácil llegar a:
( + ℎ) = () +
2 () ℎ 2 3 () ℎ 3
()
ℎ+
+
+ ⋯,

 2 2!
 3 3!
reagrupando los términos llegamos a la expresión de la fórmula de las diferencias hacia
delante:
( + ℎ) − () () 2 () ℎ 3 () ℎ 2
=
+
+
+⋯

ℎ
 2 2!
 3 3!
(3.1.1.1)
Operando de forma análoga, podemos obtener la aproximación de f(x-h).
( − ℎ) = () −
2 () ℎ 2 3 () ℎ 3
()
ℎ+
−
+ ⋯,

 2 2!
 3 3!
14
y de nuevo reagrupando términos, llegamos a la fórmula de las diferencias hacia atrás:
() 2 () ℎ 3 () ℎ 2
( − ℎ) − ()
=−
+
−
+⋯

 2 2!
 3 3!
ℎ
(3.1.1.2)
Para ambas expresiones podemos despreciar las derivadas de orden dos y superiores, para
llegar a las fórmulas que usaremos en nuestras aproximaciones.
() ( + ℎ) − ()
( + ℎ) − ()
=
+ (ℎ) ≈

ℎ
ℎ
() () − ( − ℎ)
() − ( − ℎ)
=
+ (ℎ) ≈

ℎ
ℎ
Si restamos las ecuaciones (3.1.1.1) y (3.1.1.2), llegamos a la expresión de las derivadas
centradas, que es más exacta que las anteriores ya que el error cometido es de orden ℎ2
()
3 () ℎ 2
( + ℎ) − ( − ℎ)
=2
+2
+ ⋯,
 3 3!

ℎ
reagrupando términos y despreciando las derivadas de orden tres y superiores nos queda:
() ( + ℎ) − ( − ℎ)
( + ℎ) − ( − ℎ)
=
+ (ℎ2 ) ≈
.
2ℎ
2ℎ

Si en vez de restar las ecuaciones (3.1.1.1) y (3.1.1.2) las hubiéramos sumado, obtendríamos la
aproximación de las diferencias finitas de segundo grado. Que por supuesto se usarán en
aquellas ecuaciones en las que aparezcan estos términos.
( + ℎ) − 2() + ( − ℎ)
2 () 1
4 () ℎ3
=2
+2
+ ⋯,
ℎ2
 2 2!
 4 4!
despreciando términos que contengan derivadas de cuarto orden y superiores, nos queda:
2 () ( + ℎ) − 2() + ( − ℎ)
( + ℎ) − 2() + ( − ℎ)
2)
=
+
(ℎ
.
≈
ℎ2
ℎ2
 2
3.1.2 Modelos de dos variables
En el caso de que la función que se desea aproximar dependa de dos variables independientes,
se lleva a cabo un procedimiento similar:
( + ℎ, ) = (, ) +
2 (, ) ℎ 2 3 (, ) ℎ 3
(, )
ℎ+
+
+⋯

 2 2!
 3 3!
(3.1.2.1),
de aquí se puede calcular fácilmente la expresión de las diferencias hacia adelante,
despreciando derivadas de orden dos y superior nos queda:
15
(, ) =
(, ) ( + ℎ, ) − (, )
( + ℎ, ) − (, )
=
+ (ℎ) ≈
.
ℎ
ℎ

(, ) =
(, ) (,  + ) − (, )
(,  + ) − (, )
=
+ () ≈
.



De idéntica manera se obtienen las diferencias hacia adelante en caso que la variable
incrementada sea la y.
Para las fórmulas de las diferencias regresivas partimos de:
( − ℎ, ) = (, ) −
y fácilmente llegamos a:
(, ) =
(, ) =
2 (, ) ℎ 2 3 (, ) ℎ 3
(, )
ℎ+
−
+⋯

 2 2!
 3 3!
(3.1.2.2),
(, ) (, ) − ( − ℎ, )
(, ) − ( − ℎ, )
=
+ (ℎ) ≈
ℎ
ℎ

(, ) (, ) − (,  − )
(, ) − (,  − )
=
+ () ≈
.



De igual forma que hicimos para el caso de las ecuaciones con una sola variable independiente,
si restamos las expresiones (3.1.2.1) y (3.1.2.2), se llega a la fórmula de las diferencias
centradas:
(, ) =
(, ) ( + ℎ, ) − ( − ℎ, )
( + ℎ, ) − ( − ℎ, )
=
+ (ℎ2 ) ≈
.
2ℎ
2ℎ

(, ) =
(, ) (,  + ) − (,  − )
(,  + ) − (,  − )
=
+ ( 2 ) ≈
.
2
2

De forma análoga para la otra variable independiente:
Si en vez de restarse las expresiones (3.1.2.1) y (3.1.2.2) se hubiesen sumado se llega las
fórmulas de diferencias de segundo orden:
(, ) =
2 (, ) ( + ℎ, ) − 2(, ) + ( − ℎ, )
=
+ (ℎ2 ) ≈
ℎ2
 2
(, ) =
2 (, ) (,  + ) − 2(, ) + (,  − )
=
+ ( 2 ) ≈
2
 2
≈
≈
( + ℎ, ) − 2(, ) + ( − ℎ, )
.
ℎ2
(,  + ) − 2(, ) + (,  − )
.
2
16
3.1.3 Obtención de la molécula computacional
Sustituyendo las expresiones anteriores en la ecuación que se desee aproximar, obtendríamos
la fórmula de nuestra molécula, es decir, una expresión con la que podemos calcular la
solución en un nodo determinado a partir de otros nodos conocidos (bien sea mediante
condiciones de contorno o mediante iteraciones anteriores).
En este texto nos centraremos en el cálculo progresivo de nodos a partir de nodos anteriores,
es decir, en cada iteración se obtiene la solución en un nuevo nodo de la malla. El proceso
iterativo no acabará hasta que lleguemos al último nodo de la malla.
Nótese que otra forma de proceder sería plantear un sistema de ecuaciones como en (Lucas
Rodríguez, 2012). A partir de la molécula se puede plantear un sistema de ecuaciones lineales
que habría que resolver para obtener la solución buscada. Aunque como se comentó antes, en
este texto nos centraremos en el cálculo progresivo de las soluciones en los nodos.
A continuación se ilustra con un ejemplo la forma de proceder para la aproximación de la
solución de una EDP mediante el Método de las Diferencias Finitas. El ejemplo en cuestión es
el problema de la conducción de calor en una varilla. El problema viene dado por:
 (, ) =  2  (, )
�0 ,  ��0 ,  � = [0, ] ∙ [0,1] ,
 2 = 0,1 ,
(0, ) = (, ) = 0,
 = 1,
(, 0) = ().
Empezamos representando nuestra malla en la figura 3.1.3.1, en la que nuestras variables se
verán incrementadas a razón de h y k. Valores que no tienen por qué ser iguales.
Figura 3.1.3.1
17
Se usarán las formulas anteriormente obtenidas, concretamente la de diferencias progresivas
para la t, y la de las diferencias centradas para la x.
 ≈
 ≈
(,  + ) − (, )

( + ℎ, ) − 2(, ) + ( − ℎ, )
ℎ2
Sustituyendo ambas expresiones en la ecuación diferencial dada, nos queda:
(,  + ) − (, )
( + ℎ, ) − 2(, ) + ( − ℎ, )
≈ 2
,

ℎ2
reorganizando términos, nos queda:
(,  + ) − (, ) ≈ [( + ℎ, ) − 2(, ) + ( − ℎ, )] ,
donde se ha definido:
=
 2
.
ℎ2
Por tanto la molécula sería la mostrada en la figura 3.1.3.2, cuya expresión matemática viene
dada por la ecuación (3.1.3.1).
,+1 ≈ +1, + (1 − 2), + −1, (3.1.3.1).
.
Figura 3.1.3.2
Se conocen tres condiciones de contorno, por lo que únicamente se dispone de la solución de
la ecuación en tres de las cuatro fronteras de la malla.
18
En la siguiente figura se muestran como líneas rojas las fronteras que inicialmente son
conocidas. Se iniciará por tanto la iteración desde abajo e izquierda hacia la derecha y
subiendo una fila cuando se calcule un nodo de la última columna.
Figura 3.1.3.3
El cálculo iterativo vendría dado por:
2,2 ≈ 3,1 + (1 − 2)2,1 + 1,1
3,2 ≈ 4,1 + (1 − 2)3,1 + 2,1
⋮
−1,2 ≈ ,1 + (1 − 2)−1,1 + −2,1
2,3 ≈ 3,2 + (1 − 2)2,2 + 1,2
3,3 ≈ 4,2 + (1 − 2)3,2 + 2,2
⋮
−1,3 ≈ ,2 + (1 − 2)−1,2 + −2,2
⋮
−1, ≈ ,−1 + (1 − 2)−1,−1 + −2,−1
Teniendo en cuenta que la solución analítica a la ecuación planteada es conocida, y es:
(, ) =
 2 2 

− 2
   � � ,

19
podemos establecer una comparación entre ambas y visualizar así la calidad de nuestra
aproximación. Siendo la solución aproximada la mostrada en la figura 3.1.3.4, y la real la
mostrada en la figura 3.1.3.5:
1
u(x,t)
0.8
0.6
0.4
0.2
0
1
0.5
y
0
0
0.2
0.4
0.6
0.8
1
x
Figura 3.1.3.4
1
u(x,t)
0.8
0.6
0.4
0.2
0
1
0.5
t
0
0
0.2
0.4
0.6
0.8
1
x
Figura 3.1.3.5
20
La curva del error cometido en cada nodo es la representada en la figura 3.1.3.6.
-4
x 10
8
u(x,t)
6
4
2
0
1
0.5
y
0
0
0.2
0.4
0.6
0.8
1
x
Figura 3.1.3.6
El error máximo que se comete es de 6 ∙ 10−4 que es una cifra bastante admisible teniendo en
cuenta que supone un 0,16% de error con respecto a la solución real. Véase el previsible
comportamiento de esta curva representada en la figura 3.1.3.5, que crece a medida que nos
vamos alejando de las fronteras conocidas mediante las condiciones de contorno. De hecho el
error máximo se comete en el nodo más alejado de las tres fronteras.
3.1.4 Criterio de estabilidad
Un criterio de estabilidad de un método matemático numérico es una herramienta que nos
permite determinar la estabilidad o inestabilidad de dicho método sin necesidad de calcular la
solución de la EDP en cuestión.
El correcto funcionamiento del Método de las Diferencias Finitas está fuertemente ligado al
tipo de moléculas computacionales que se obtengan (algunas moléculas tendrán siempre un
comportamiento inestable) y a la relación entre los pasos de ambas variables, siendo necesaria
una buena elección de ambos para lograr estabilidad.
3.1.4.1 Análisis de estabilidad de Von Neumann
Existen diferentes métodos para realizar el análisis de estabilidad de la aproximación de una
ecuación diferencial en derivadas parciales usando las diferencias finitas. Siendo el análisis de
Von Neumann uno de los más sencillos de aplicar. Este método consiste en suponer una
solución armónica compleja para nuestra ecuación (Menéndez, A. 1987).
21
(, ) =  
(3.1.4.1.1),
donde  = () y  son determinadas sustituyendo la ecuación (3.1.4.1.1) en la expresión
matemática de la molécula de la ecuación que se desee aproximar.
Discretizando esta solución, nos queda la siguiente expresión:

 =    ,
y definiendo ε como el coeficiente de amplificación de la forma:
=
+1
.

Si el módulo del coeficiente de amplificación es mayor que uno, la solución será inestable ya
que este crecerá con el tiempo, en cambio si es menor que uno, se estabilizará con el tiempo.
�
 || < 1

 || > 1 
Veamos un ejemplo de aplicación:
Aplicando este método a la ecuación del calor anterior dada en el apartado 3.1.3 y
sustituyendo las fórmulas de las diferencias finitas en nuestra ecuación, habíamos llegado a la
siguiente expresión:
(,  + ) − (, ) ≈ [( + ℎ, ) − 2(, ) + ( − ℎ, )],
que discretizando nos queda:
+1





−  ≈ �+1 − 2 + −1 � ,
+1   −    ≈ �  (+1) − 2   +   (−1) � ,
donde se ha sustituido en la ecuación (3.1.4.1.1) y que operando:
 −  − − (1 − 2) −   = 0 ,
 = �  +  − � + (1 − 2).
Recordemos que para que sea estable,  tiene que ser menor que uno, es decir, que la
representación gráfica de la última expresión ∀ en el plano complejo este dentro de la
circunferencia unidad.
Para que esto ocurra, vemos que según la expresión obtenida de A, debe cumplirse que:
0 <  ≤ 0,5
22
Tomando un valor de  = 0,5 se obtiene la figura 3.1.4.1.1. Donde se muestra en rojo la
circunferencia unidad, y en azul la representación de .
Figura 3.1.4.1.1
En la figura 3.1.4.1.1 se aprecia que un pequeño incremento inestabilizaría el método. Además
no siempre se pueden tomar valores determinados de  ya que es en realidad una relación
entre los pasos de ambas variables, y éstos son por definición números enteros. Es por tanto
conveniente tomar un valor más rebajado para poder ajustar los pasos más cómodamente.
Definiendo  y  como el número de subdivisiones que se hacen en las variables  y 
respectivamente, y teniendo en cuenta que ambas variables estaban definidas entre cero y
uno, podemos determinar las expresiones de ℎ y  como:
ℎ=
=
1

1

Rescatando la definición de  anteriormente descrita como:
 2
= 2
ℎ
Podemos expresarla en función de las subdivisiones, nos queda:
 2  2  2
= 2 =
ℎ

23
Tomando un valor de  < 0,5 podemos obtener una posible combinación de subdivisiones
que garanticen estabilidad.
=
 2  2
< 0,5

Si tomamos un valor de  = 50. Tendríamos la siguiente inecuación:
 2 <
50 ∙ 0,5
= 250
0,1
 < 15,8
Tomamos por tanto los valores de  = 50 y  = 15 para garantizarnos la estabilidad. Si se
hubiera tomado un valor de  más grande correríamos el riesgo de encontrarnos con
inestabilidades, quizás no muy apreciables al principio pero notables a medida que vamos
aumentando el valor de dicho número de subdivisiones.
Con estos números  = 0,45. La curva de estabilidad es  = 0,45�  +  − � + (1 − 0,9).
Véanse en la figura 3.1.4.1.2 las curvas de estabilidad y de la correspondiente solución de la
ecuación para los anteriores números de subdivisiones.
Figura 3.1.4.1.2
Como se aprecia, la curva  (azul) está completamente dentro de la circunferencia unidad
asegurándose así la estabilidad de nuestra solución.
La solución para para  = 0,45 viene representada en la figura 3.1.4.1.3.
24
1
u(x,t)
0.8
0.6
0.4
0.2
0
1
0.5
0
t
0
0.2
0.6
0.4
1
0.8
x
Figura 3.1.4.1.3
Para el mismo valor de , si hubiéramos tomado  = 20. Obtendríamos una solución
inestable como se aprecia en la figura 3.1.4.1.4.
2
u(x,t)
1
0
-1
1
0.5
t
0
0
0.2
0.4
0.6
0.8
1
x
Figura 3.1.4.1.4
25
Podemos por tanto terminar este apartado destacando la importancia de una apropiada
elección de los pasos para una correcta aproximación.
Se ha de tener en cuenta que cuanto menor sea el parámetro  y mayor el número de
subdivisiones, más precisa será la solución pero también mayor el coste computacional. Por
consiguiente se debe conocer a priori el error admisible que podemos cometer para calcular a
posteriori los pasos de nuestro mallado.
3.2 Resolución mediante el método de las diferencias finitas
En el apartado anterior se describió el sistema mecánico que se desea simular. Para ello se
daba la expresión del controlador que gobernaría al disco, esta expresión dependía del
potencial del par motor transmitido al disco. En esta sección se tratará de resolver
numéricamente la ecuación diferencial dada anteriormente mediante el método de las
diferencias finitas. La ecuación en cuestión es la (2.2.4).
Las condiciones de contorno las deberemos aproximar para simplificar el proceso de cálculo,
ya que las condiciones originales (2.2.3) a las que la ecuación estaba sujeta eran bastante
complicadas.
Por tanto probaremos nuestro método numérico con distintas condiciones de contorno que
aproximen a las originales.
3.2.1 Condiciones de contorno aproximadas
En ocasiones, las condiciones de contorno reales no son del todo conocidas, aunque se sabe la
forma que deben tomar. En este apartado usaremos condiciones de contorno, de tipo
Dirichlet, que tienen la siguiente forma:
�10 , 2 � = − cos(10 ) + (2 − 10 )2
 1
�1 , 20 � = − cos(1 ) + (20 − 1 )2
 3
 �1 , 2 � = − cos(1 ) + (2 − 1 )2
 �1 , 2 � = − cos(1 ) + (2 − 1 )2
 2
(3.2.1.1)
 4
26
Donde
=

1
=

2
=
2
1
Siendo cada una de las fronteras mencionadas, las representadas en la malla de la figura
3.2.1.1.
Figura 3.2.1.1
En la sección anterior se definía el problema del péndulo, y teníamos que 1 < 0 y 2 ≠ 0. Por
tanto obtenemos que  < 0.
Las fronteras descritas tienen dos términos, uno sinusoidal y otro parabólico. En función de las
constantes que tomemos estos términos se harán más o menos significativos.
Para las fronteras parabólicas debe de cumplirse que:
|cos(1 )|
<1
|(2 − 1 )2 |
Operando con órdenes de magnitud para obtener una estimación nos queda:
(2 − 1 )2 =
(| cos(1 )|)
(||)
(2 − 1 )2 =
() − 1
(||)
() − 1
(2 − 1 ) =  ��
�
(||)
27
Se ve que es más conveniente tomar valores de  con órdenes de magnitud altos. Puesto que
los parámetros  y  son datos fijos del problema solo podemos modificar .
Para que las fronteras sean sinusoidales se debe cumplir:
|cos(1 )|
>1
|(2 − 1 )2 |
Cuanto más pequeño sea el denominador, mejor será la aproximación. Si 2 = 1 el
denominador se anula y se produce la dominancia del término sinusoidal.
3.2.1.1 Condiciones de contorno parabólicas
Cuando usemos las condiciones de contorno parabólicas, hemos de tener en cuenta que
estamos obviando el término sinusoidal, no debe sorprendernos entonces la posible aparición
de errores de exactitud. Estas condiciones de contorno tienen la siguiente forma:
�10 , 2 � = (2 − 10 )2
 1
�1 , 20 � = (20 − 1 )2
 3
 �1 , 2 � = (2 − 1 )2
 �1 , 2 � = (2 − 1 )2
 2
 4
Probaremos con valores de  = 0,5.
3.2.1.1.1 Diferencias regresivas
Usaremos las diferencias finitas regresivas, que eran de la forma:
(1 , 2 )1 ≈
(1 , 2 )2 ≈
(1 , 2 ) − (1 − ℎ, 2 )
ℎ
(1 , 2 ) − (1 , 2 − )

Las dos expresiones anteriores las sustituiremos en la ecuación (2.2.4). Pero antes haremos el
análisis de estabilidad para asegurarnos que la molécula que se generará a partir de las
fórmulas de las diferencias finitas sea estable. Para ello implementamos el análisis explicado
en la sección 3.1.4.1.
28

Tomando  =    y sustituyendo en la ecuación (2.2.4) y obviando el término
independiente ya que éste no influye en la estabilidad de la molécula. Tras hacer las derivadas
pertinentes:

llamando λ a:


−1
 −−1
 − 
−
+4
ℎ

=
=0,

4ℎ
−�   −   (−1) � +    − −1   = 0 ,
 = 1 −  +  − = 1 −  + �cos() − ()�.
Representando esta curva en el plano complejo en la figura 3.2.1.1.1.1:
Figura 3.2.1.1.1.1
Llegamos por tanto a la conclusión que esta molécula será estable si se cumple que
0<<1
Escogemos 60 espacios en cada dirección, de forma que:
=
4 ∙ 1
60

=
=
= 0,25 < 1
4ℎ 16 ∙ 2 4 ∙ 60
Conocidos ya los valores entre los que puede moverse la relación entre los pasos de la malla,
podemos proceder a la aproximación de la solución de nuestra ecuación (2.2.4). Para ello
sustituimos en ella las fórmulas de las diferencias regresivas y nos queda:
29
−
(1 , 2 ) − (1 − ℎ, 2 )
(1 , 2 ) − (1 , 2 − )
+4
= −10 (1 ),

ℎ
+1, = (1 − ), + ,−1 + 
10
(1 )
4
Usaremos esta recursión para calcular un nodo a partir de otros dos en cada una de las
iteraciones. Como bien se muestra en la malla de la figura 3.2.1.1.1.2, tendremos que empezar
iterando desde las fronteras uno y cuatro.
Figura 3.2.1.1.1.2
De hecho solo podremos utilizar dos de las cuatro condiciones de contorno que originalmente
tiene el problema, ya que la recursión calculada a partir de la molécula así lo requiere. Esto
podrá dar lugar a inexactitudes.
Se calcularán los nodos desde arriba, de izquierda a derecha, y bajando una fila después de
cada vez que se llegue a la frontera dos.
La solución que nos queda es la representada en la figura 3.2.1.1.1.3:
30
Figura 3.2.1.1.1.3
y la solución exacta en la figura 3.2.1.1.1.4:
Figura 3.2.1.1.1.4
Se pueden apreciar visibles diferencias entre ambas curvas. Podemos verlas de forma más
evidente si representamos la diferencia de las matrices exacta y aproximada en la figura
3.2.1.1.1.5.
31
Figura 3.2.1.1.1.5
Estas inexactitudes pueden estar asociadas al hecho de que solo se han tomado dos de las
cuatro condiciones de contorno, y además estas condiciones eran aproximadas (solo tenían
término parabólico).
Con el método de las diferencias finitas directo (calculando un nodo en cada iteración) no
podremos nunca aspirar a utilizar las cuatro condiciones de contorno. Esto sería únicamente
posible si utilizáramos el método indirecto (plantear ecuaciones lineales y resolver al final el
sistema) pero este es un tema que se escapa del estudio en este texto (Lucas Rodríguez, 2012).
En lugar de conformarnos con la utilización de dos condiciones, podemos intentar utilizar tres,
y para ello tendremos que modificar nuestra molécula.
3.2.1.1.2 Diferencias centradas en  y progresivas en 
En vez de emplear las diferencias finitas regresivas como antes, podemos usar las diferencias
centradas según la variable 1 y las diferencias progresivas según la variable 2 . Recordemos
que eran de la forma:
(1 , 2 )1 ≈
(1 + ℎ, 2 ) − (1 − ℎ, 2 )
2ℎ
(1 , 2 )2 ≈
(1 , 2 + ) − (1 , 2 )
2
Que sustituyendo en la ecuación (2.2.4) nos queda:
−
(1 + ℎ, 2 ) − (1 − ℎ, 2 )
(1 , 2 + ) − (1 , 2 )
+4
= −10 (1 ),
2ℎ
2
32
con una expresión recursiva:
−1, = �,+1 − ,−1 � + , − 10 (1 )
En la figura 3.2.1.1.2.1 siguiente podemos ver cómo sería la malla. Es decir, en cada iteración
calcularíamos un nodo a partir de los otros tres de la fila inferior.
Figura 3.2.1.1.2.1
Antes de iniciar la aproximación debemos realizar el análisis de estabilidad para determinar si
es posible el uso de esta molécula, y si lo es, que rango de valores puede tomar el parámetro 
para garantizar una solución estable.

Tomando  =    y sustituyendo en la ecuación (2.2.4) tras hacer las derivadas
pertinentes y obviando el término independiente:

+1



 − 
−
− +1 −1 + 4
=0,
2ℎ

llamando λ a:
=

8ℎ
−�  (+1) −   (−1) � + +1   −    = 0
Operando nos queda:
33
 = 1 + �  −   �
Cuya representación en el plano complejo está representada en la figura 3.2.1.1.2.2.
Figura 3.2.1.1.2.2
Como vemos, la curva representada en color verde queda fuera del círculo unidad, y no hay
valor alguno de  que haga que ésta quede dentro. Lo cual significa que la molécula en
cuestión es inestable.
3.2.1.1.3 Diferencias centradas
Debido a que la molécula generada mediante diferencias centradas y progresivas en el
apartado 3.2.1.1.2 era inestable, vamos a probar utilizando diferencias centradas en ambas
variables. Lo primero que debemos tener en cuenta es el análisis de estabilidad.

Tomando  =    y sustituyendo en la ecuación (2.2.4) tras hacer las derivadas
pertinentes y obviando el término independiente:
−

+1

−1
+1 −−1
  − 
+4
2ℎ
2
=0,
llamando λ a:
=

4ℎ
34
−�  (+1) −   (−1) � + +1   − −1   = 0 ,
−� (+1) −  (−1) � +   −
1 

=0,

2 − �  −  − � − 1 = 0.
Tenemos una ecuación de segundo grado, por tanto tenemos que determinar cada una de las
dos expresiones y representarlas en el plano complejo. La primera solución está representada
en la figura 3.2.1.1.3.1 y viene dada por:
=
�  −  − � + �2 (  −  − )2 + 4
2
Figura 3.2.1.1.3.1
En cuanto a la segunda solución, es parecida a la anterior, pero con el término de la raíz
cuadrada restando. Por ellos es lógico que la curva representada en la figura 3.2.1.1.3.2 sea
simétrica a la de la figura 3.2.1.1.3.1 con respecto al eje imaginario.
=
�  −  − � − �2 (  −  − )2 + 4
2
35
Figura 3.2.1.1.3.2
Para que ambas curvas siempre queden encerradas en la circunferencia unidad, el parámetro
 tiene que cumplir que 0 <  < 1. Se propone que  = 0,25
=
1

4 ∙ 
=
=
= 0,25
4ℎ 16 ∙  4 ∙ 2
1 = 2
Sabiendo que se tendrá estabilidad, podemos continuar con nuestro método de aproximación.
Las expresiones a utilizar son:
(1 , 2 )1 ≈
(1 , 2 )2 ≈
(1 + ℎ, 2 ) − (1 − ℎ, 2 )
2ℎ
(1 , 2 + ) − (1 , 2 − )
2
Sustituyendo en la ecuación (2.2.4) nos queda:
−
(1 + ℎ, 2 ) − (1 − ℎ, 2 )
(1 , 2 + ) − (1 , 2 − )
+4
= −10 (1 )
2
2ℎ
De donde podemos generar nuestra expresión recursiva:
−1, = +1, + �,+1 − ,−1 � − 10 (1 )
Como se observa en la figura 3.2.1.1.3.3, tendríamos dos formas distintas de proceder. En la
primera de ellas empezaríamos la iteración desde la frontera de abajo, de izquierda a derecha
y subiendo una fila cada vez que se llegara a la frontera derecha. La segunda opción era hacer
el camino inverso, es decir, empezar desde abajo, de derecha a izquierda y subiendo una fila
cada vez que se llegara a la frontera izquierda.
36
Figura 3.2.1.1.3.3
Esta molécula es un tanto especial, si observamos bien, no se utiliza nodo alguno en la mitad
de la molécula, en cambio hay un nodo desplazado una unidad hacia abajo, lo cual nos obliga a
imponer una cuarta condición de contorno para poder implementar nuestra iteración.
La nueva condición de contorno que debemos imponer es de tipo Neumann. Recordemos que
este tipo de condiciones son de la forma:
(1 , 2 )
= (1 )
2
Para utilizar este tipo de condiciones de contorno, es necesaria la adición de una nueva
fila en nuestra malla tal y como se muestra en la figura 3.2.1.1.3.4
Figura 3.2.1.1.3.4
La idea es aplicar una fórmula de las diferencias finitas entre los dos nodos marcados.
En nuestro caso podemos usar las diferencias progresivas o las regresivas, pero no las
37
centradas ya que el valor del nodo perteneciente a la penúltima fila antes de realizar la
nueva adición era desconocido.
En este caso tomaremos (1 ) = 1. Con lo cual, aplicando por ejemplo la fórmula de
las diferencias finitas progresivas en esa frontera nueva tenemos que:
Y por lo tanto:
�1 , 2 + � − �1 , 2 �
(1 , 2 )
= (1 ) =
=1
2

(1 , 2 + ) = (1 , 2 ) + 
Es decir que las condiciones de contorno en las dos últimas filas de la malla (la original y la
nueva) van a ser casi iguales.
Ejecutando el método y haciendo que 1 = 2 = 60 (podríamos haber tomado más
valores, para conseguir una mayor precisión, pero también esto haría aumentar el coste
computacional). La solución aproximada está representada en la figura 3.2.1.1.3.5
Figura 3.2.1.1.3.5
La gráfica del error cometido en la aproximación mediante las diferencias centradas es la
representada en la figura 3.2.1.1.3.6. Nótese que el error es ahora considerablemente menor
al que estábamos cometiendo al usar las diferencias regresivas (véase la figura 3.2.1.1.1.5).
38
Figura 3.2.1.1.3.6
3.2.2 Condiciones de contorno exactas
Si aplicamos condiciones de contorno exactas (de la forma de la solución analítica al
problema), se espera obtener una aproximación de la ecuación diferencial más precisa. Éstas
son de la forma de las condiciones de contorno (3.2.1.1).
3.2.2.1 Diferencias regresivas
La estabilidad del problema no depende de las condiciones de contorno que vayamos a
utilizar, por tanto, nos limitamos a repetir el apartado anterior pero cambiando las condiciones
de contorno. En este caso vamos a utilizar las siguientes:
(−2, 2 ) = −10 cos(−2) + 0,5 ∙ (2 − 4(−2))2
(1 , 2) = −10 cos(1 ) + 0,5(2 − 41 )2
 1
 4
Con ellos nos queda la siguiente aproximación mostrada en la figura 3.2.2.1.1.
39
Figura 3.2.2.1.1
Cuyo error con respecto a la solución exacta puede verse en la figura 3.2.2.1.2.
Figura 3.2.2.1.2
3.2.2.2. Diferencias centradas
Volvemos a repetir el problema anteriormente descrito pero modificando las condiciones de
contorno, esta vez serán de la forma:
40
(−2, 2 ) = −10 cos(−2) + 0,5 ∙ (2 − 4(−2))2
(2, 2 ) = −10 cos(2) + 0,5(2 − 4(2))2
(1 , −2) = −10 cos(1 ) + 0,5(−2 − 41 )2
Además de la de Neumann:
 1
 2
 3
(1 , 2 )
=0
2
Con ello, la solución obtenida y su error frente a la solución exacta pueden verse en las
figura 3.2.2.2.1 y 3.2.2.2.2 respectivamente.
Figura 3.2.2.2.1
Figura 3.2.2.2.2
41
Nota: El análisis de todos los resultados calculados en esta sección se pospone a la sección
cinco.
42
Capítulo 4
El método de los elementos finitos (MEF)
mediante Freefem
4.1 Fundamentos del método de los elementos finitos
En este proyecto se van a realizar las aproximaciones mediante los elementos finitos usando el
programa Freefem.
El freefem es un programa desarrollado por la universidad francesa “Marie Curie” que se usa
para resolver ecuaciones diferenciales en derivadas parciales utilizando el método de los
elementos finitos. El programa tiene su propia interfaz y lenguaje de programación. Es posible
abordar dominios tanto en 2D como en 3D (aunque en este texto nos limitaremos a dominios
2D).
4.1.1 Reseña histórica
El método de los elementos finitos comenzó a desarrollarse en la década de 1940 de la mano
de Hrennikoff y Mchenry, que en 1941 y 1943 respectivamente, publicaron un artículo en que
utilizaban una red lineal de elementos (barras y vigas) para la solución de las tensiones en
solidos continuos. Aunque estos artículos no tuvieron un gran reconocimiento durante mucho
tiempo.
También en 1943, Courant propuso la utilización de funciones polinómicas para la formulación
de problemas elásticos en subdominios triangulares, que no era otra cosa que una aplicación
especial del método antes propuesto por Ritz. Lo utilizó cálculo de variables en un sistema de
vibración.
El inicio de la década de 1950 trae consigo la aparición de las primeras máquinas de cálculo.
Hasta esta fecha el cálculo de estructuras se realizaba con métodos iterativos, realizándose
éstos de forma manual y por tanto resultando lentos. El cálculo de las estructuras de un
edificio podía alargarse varios días o incluso semanas, por lo que el coste en tiempo era
enorme. Con la llegada de las computadoras, hubo un resurgimiento del método de los
desplazamientos ya conocido muchos años antes pero inabordable hasta la fecha por la
enorme cantidad de ecuaciones que generaba.
Entre 1960 y 1970 se da una expansión de las aplicaciones prácticas del método. Se buscaba la
rapidez en el cálculo lo que hizo aumentar la memoria de las computadoras. También se hizo
importante la implementación de nuevos algoritmos que aplicaran el método de forma más
óptima. Ante la expansión del método de los elementos finitos a otras áreas de la ingeniería
como la transferencia de calor, mecánica de fluidos o la industrial aeroespacial, surgieron
43
dificultades con las nuevas geometrías a estudiar, mucho más complejas que las de las
estructuras.
En la década de 1980, con el surgimiento de los ordenadores personales, se produce un amplio
desarrollo de distintos software que aplican el método de los elementos finitos,
especializándose muchos en específicos campos de la ingeniería.
Un campo relativamente nuevo en el que se aplica el método de los elementos finitos es la
bioingeniería, en la que aún hay grandes retos que superar como la modelación de materiales
no lineales, geometrías no lineales, etc.
Desde hace ya más de cincuenta años se están realizando grandes avances en el estudio de los
elementos finitos, y sin lugar a dudas, matemáticos, ingenieros y otros científicos seguirán
implementando mejoras en la aplicación de este método en diferentes áreas.
4.1.2 Conceptos generales
La idea principal del método de los elementos finitos es dividir el dominio en el cual está
definido el problema en un número determinado de subdominios o elementos. De ahí el
nombre de elementos finitos. Estos elementos están interconectados entre sí mediante unos
puntos llamados nodos. El objetivo es pasar de un sistema continuo con infinitos grados de
libertad gobernado por una o varias ecuaciones diferenciales a otro con un numero finito de
grados de libertad que se rige por un sistema de ecuaciones.
En el sistema que se vaya a estudiar (véase la figura 4.1.2.1), se puede distinguir entre:
•
•
•
Dominio, que es el espacio geométrico donde se va a estudiar el problema.
Condiciones de contorno, que son variables conocidas en determinados contornos del
dominio.
Incógnitas, que son las variables desconocidas del problema que se desean conocer.
Figura 4.1.2.1
El método de los elementos finitos es un campo de estudio enorme y existen multitud de
variaciones y posibilidades. En general se pueden emplear dos tipos de métodos, los basados
44
en principios variacionales y los que se basan en los residuos ponderados, en este texto nos
centraremos en los primeros.
En general, las partes principales de un algoritmo del método de los elementos finitos basado
en los principios variacionales son cuatro y están bien diferenciadas:
1. Reformulación del problema en forma variacional.
Imaginemos una ecuación diferencial parcial de dos incógnitas que se desea resolver.
La idea es aproximar las incógnitas  y  que hacen estacionario un funcional
mediante una suma ponderada de funciones.

� = �   (, )
=1

� = �   (, )
=+1
(4.1.2.1)
Donde � y � son aproximaciones de  y  respectivamente,  unas determinadas
constantes llamadas coordenadas generalizadas y  (, ) unas funciones arbitrarias
llamadas funciones de prueba, que aunque su elección puede ser arbitraria, deben
satisfacer las condiciones de contorno y compatibilidad del problema.
Definiendo  como la siguiente ecuación integro-diferencial:
 = � (, , , ,  ,  ,  ,  )   (4.1.2.2)
Derivando las expresiones 4.1.2.1 de las aproximaciones de  y :

 (, )
�
= � 


=1

 (, )
�
= � 


=+1

�
 (, )
= � 


=1

�
 (, )
= � 


=+1
Sustituyendo las expresiones de aproximación y sus derivadas en la ecuación integrodiferencial (4.1.2.2), se obtendrá el funcional  que será función de las coordenadas
generalizadas por ahora desconocidas.
 = ( )
 = 1, … , 
Ahora se deben encontrar los  más adecuados, para ello aplicamos la condición de
estacionaridad.

 = �
=1

 = 0
 
45
Lo que significa que:

= 0  = 1, … , 

Si el funcional  fuera una función cuadrática, nos quedaría:

= (1 1 + 2 2 + ⋯ +   −  ) = 0
 = 1,2, … , ,

Donde  son funciones que acompañan a cada una de las coordenadas generalizadas
 .
Agrupando en términos matriciales:
11

� 21
⋮
1
12
22
⋮
2
⋯
⋯
⋱
⋯
1
1 1
2 2

� � � = � 2�
⋮
⋮
⋮
 

Resolviendo este sistema de ecuaciones obtendremos las coordenadas generalizadas,
y sustituyéndolas en las ecuaciones (4.1.2.2) tendríamos las aproximaciones de
nuestra ecuación.
2. Dividir el dominio del problema en un número finito de subdominios tal y como se
propone en (París, 1996), que son los llamados elementos finitos.
El concepto de discretización, es quizás, desde un punto de vista ingenieril, la novedad
más importante que presenta el método de los elementos finitos, esta discretización
supondrá la obtención de una solución discreta aproximada. Un ejemplo de la
utilización del concepto de discretización, podría ser el cálculo del área de un círculo. Si
se tiene un círculo cuya área se desea calcular. (Véase la figura 4.1.2.2).
Figura 4.1.2.2
Podemos discretizar el círculo como en la figura 4.1.2.2, es decir dividir el dominio en
elementos. En este caso lo hemos hecho con seis elementos, tras lo cual, podemos
proseguir definiendo la ecuación de cada elemento. De forma que el conjunto de
todos los cálculos de todos los elementos es equivalente al cálculo final que se
46
pretende realizar. En nuestro caso cada uno de los elementos definidos en el círculo
será como el representado en la figura 4.1.2.3.
Figura 4.1.2.3
El área del elemento finito representado en la figura 4.1.2.3 vendrá dado por:
 =∙,
además el ángulo superior del triángulo representado es:
=
2
,

siendo  el número de triángulos adscritos. Por tanto la superficie de cada elemento
es:

 2
2
sin
 =  2 sin cos =
2



Una vez calculadas las ecuaciones en cada elemento (en este caso la expresión de la
superficie del mismo), nos falta ensamblar el conjunto y resolverlo. En nuestro
problema el valor final buscado se obtiene sumando todas las áreas de los triángulos.
Se obtiene:

 = �  = 
=1
2
2
sin
2

Si hacemos que el número de triángulos tienda a infinito, se tiene:
2
2
sin 
cos 
lim  = lim  sin
= lim  2
= lim  2
=  2
→∞
→∞
→0
→0
2


1
En este caso, la ecuación que teníamos en cada elemento era exacta, y por tanto el
error era debido únicamente al proceso de discretización. No siempre vamos a estar
en esta situación. Habrá veces en las que es conveniente definir una ecuación en cada
47
elemento que represente de forma aproximada el comportamiento del mismo. En
estos casos tendremos dos errores, el de discretización y el de la definición de la
ecuación del elemento. Por último mencionar que el tipo de elementos que se usa, va
en función del tipo de dominio que estamos discretizando como se comenta en
(Celigüeta Lizarza, 2000). Por ejemplo para análisis de una sola dimensión (por ejemplo
para el estudio de barras), utilizaremos elementos como los que se muestran en la
figura 4.1.2.4.
Figura 4.1.2.4
Para áreas y superficies tendrán dos dimensiones, y los elementos a usar serán como
los mostrados en la figura 4.1.2.5.
Figura 4.1.2.5
Y en el caso de trabajar con volúmenes o cuerpos en tres dimensiones, los elementos
serán de la siguiente forma mostrada en la figura 4.1.2.6.
Figura 4.1.2.6
3. Ensamblar las ecuaciones de cada elemento.
Todos los elementos que tenemos en nuestra malla están interconectados con otros
elementos a través de los nodos, son estos nodos los que se tendrán en cuenta para el
ensamblaje de las ecuaciones en una matriz global. Esta matriz recibe el nombre de
matriz global del sistema.
48
4. Resolver el sistema de ecuaciones para obtener la aproximación buscada.
4.1.2.1 Manejo del programa Freefem
Como se ha comentado con anterioridad, en este proyecto se va a implementar el Método de
los Elementos Finitos usando para ello la aplicación informática Freefem. El Freefem tiene su
propio lenguaje de programación, además ofrece un entorno integrado de trabajo como se
representa en la figura 4.1.2.1.1.
Figura 4.1.2.1.1
Como puede apreciarse en la figura 4.1.2.1.1, el entorno de trabajo de Freefem se divide en
tres partes diferenciadas. Que son:
•
Editor de código: En esta ventana es donde se escribe el código del programa que
se desea realizar. La definición de la ecuación diferencial en cuestión, las
condiciones de contorno o el tipo de mallado deben se especifican aquí.
•
Ventana de gráficos: En esta ventana se mostrarán las gráficas que se hayan
ordenado en el editor de códigos. Si son varias gráficas, se ordenarán por pestañas.
•
Ventana de procesos: En esta ventana se pueden observar los posibles errores que
hayan surgido durante la compilación del programa para su posterior corrección.
Una vez el código sea correcto, se mostraran aquí las variables que se deseen
mostrar en pantalla después de la ejecución.
49
Una vez tengamos el código correcto, procedemos a la ejecución del programa presionando
sobre el botón ejecutar situado en el cuadro verde en la parte superior izquierda de la figura
4.1.2.1.1. Si insertamos uno de los códigos explicados en los anexos al final de este texto, el
entorno de trabajo quedaría como el mostrado en la figura 4.1.2.1.2.
Figura 4.1.2.1.2
Cabe destacar que si se desea trabajar con la solución proporcionada por Freefem en otro
software como por ejemplo el Matlab, lo que se puede hacer es exportar la matriz solución en
un archivo de texto para ser posteriormente leída con Matlab. El Freefem es una buena
herramienta para solucionar ecuaciones diferenciales en derivadas parciales, pero no para
trabajar con las soluciones que proporciona.
4.1.2.2 Ejemplo
Como ejemplo a la teoría anteriormente descrita podemos proponer la siguiente ecuación
diferencial.
 (, ) +  (, ) +  (, ) +  (, ) = (, )
Con las condiciones de contorno:
(0, ) =  
(2, ) =  
(, 0) = cos()
1
(, 0,5) = cos()  2
(, ) =   (cos() − sin())
50
Tenemos inicialmente el problema expresado en forma diferencial, es decir, de la siguiente
forma:
 2    2  
+
+
+
= (, )
 2   2 
En Freefem los problemas deben escribirse en forma variacional, es decir, de la forma
siguiente:

2

2
(, ) + 2 (, ) +
(, )�
� � 2 (, ) +



 
= � (, ) ∙ (, )
(4.1.2.2.1)

Tenemos que buscar una función � que aproxime  usando las expresiones a continuación.

 ≈ � = �   (, )
=1

 (, )
�
= � 


=1

 2  (, )
 2 �
=
�


 2
 2
=1

�
 (, )
= � 


=1

 2 �
 2  (, )
=
�


 2
 2
=1
Sustituyendo las anteriores fórmulas de aproximación en la ecuación (4.1.2.2.1) escrita ya en
forma variacional, nos queda:



=1
=1
 2  (, )
 (, )
 2  (, )
+
�

(,
)
+
�

 = � �� 



 2
 2

=1

+ � 
=1
 (, )
(, )� − � (, ) ∙ (, )


(4.1.2.2.2)
Como veremos más adelante, podemos tomar  (, ) =  +   +    (, ) ∈  .
Donde ,    son constantes y  es el elemento finito . Si sustituimos  (, ) en la
ecuación (4.1.2.2.2) nos queda:

 = � ���  +   � − (, ) ∙ ( +  +  )�
Se busca que:
 =1
51

= 0  = 1, … ,  ,

entonces tenemos:

= (1 1 + 2 2 + ⋯ +   −  ) = 0


 = 1,2, … ,  ,
��  +   � − (, ) ∙ � +  +  � = 0  = 1,2, … , .
=1
Agrupando expresiones nos queda el término genérico 
 =
 + 
 +  + 
,
podemos expresar todos los términos como un sistema de ecuaciones.
11
21
�
⋮
1
12
22
⋮
2
⋯
⋯
⋱
⋯
1
1 1
2 2
2
�� � = � �
⋮
⋮
⋮
 

Que es un sistema de  ecuaciones con  incognitas. Una ecuación por cada nodo que
tenemos en la malla.
La discretización del dominio se ha realizado mediante triángulos en un mallado regular (Véase
la figura 4.1.2.2.1), esto podría no haber sido así, pero la necesidad de exportar la solución a
Matlab (en nuestro proyecto tenemos que exportar la solución a Matlab para la realización de
la simulación en Simulink) hace más cómodo trabajar con este tipo de mallados.
Figura 4.1.2.2.1
52
Nótese en la figura 4.1.2.2.1 que el orden de las fronteras en sentido inverso a las agujas del
reloj, este orden se define por defecto en Freefem.
Vemos además que a diferencia de en el método de las diferencias finitas implementado en
temas anteriores, aquí podemos utilizar cuatro condiciones de contorno, lo cual hará la
solución encontrada más precisa.
Tomando uno de los elementos aleatoriamente como el representado en la figura 4.1.2.2.2.
Figura 4.1.2.2.2
Se tendrá en cada uno de los vértices del elemento anterior, la ecuación (4.1.2.2.2) adaptada
con los correspondientes subíndices.
La función (, ) arbitraria la podemos elegir de tres formas distintas, tal y como se comenta
en (Hecht, 2012):
•
•
•
Elemento 0
Para cada triángulo (o tetraedro en caso de que tuviéramos elementos finitos en 3D)
  , nuestra función (, ) viene dada por:
 (, ) = 1   ∈ 
 (, ) = 0   ∉ 
Elemento 1
Para cada vértice   , la función (, ) viene dada por:
 (, ) =  +   +    (, ) ∈ 
 �  � = 1,  �  � = 0   ≠ 
Elemento 2
Para cada vértice   , la función (, ) viene dada por:
 (, ) =  +   +   +   2 +   +   2  (, ) ∈ 
 �  � = 1,  �  � = 0   ≠ 
53
En nuestro caso hemos elegido 1 y el resultado es el mostrado en la figura 4.1.2.2.3.
Figura 4.1.2.2.3
Siendo la solución exacta la mostrada en la figura 4.1.2.2.4.
Figura 4.1.2.2.4
54
El error de la aproximación está representado en la figura 4.1.2.2.5.
Figura 4.1.2.2.5
4.1.3 Comparación entre el MEF y el MDF
El método de los elementos finitos, aunque más complicado y abstracto que el de las
diferencias finitas, presenta varias ventajas que hacen su estudio interesante.
El método de las diferencias finitas es aplicable sobre todo a problemas cuyos dominios
presentan formas simples, en cambio con los elementos finitos se pueden estudiar geometrías
mucho más complejas. Además los problemas que presenten propiedades de materiales no
lineales o variables pueden ser abordados. También podemos mencionar que la existencia de
una estructura clara en este método, permite crear códigos más generales que pueden usarse
en una gama más amplia de problemas.
Como desventaja podríamos citar el mayor coste computacional que supone el método de los
elementos finitos. Esto es así por la necesidad de resolver un sistema de ecuaciones en la
última parte del proceso, en cambio con las diferencias finitas podemos evitar tener que
invertir la matriz del sistema si utilizamos el método directo, es decir, calculando un nodo en
cada iteración.
55
4.2 Resolución mediante el método de los elementos finitos
En el apartado 4.1 se explicó la teoría del método de los elementos finitos que usaremos para
aproximar la ecuación (2.2.4) que estaba sujeta a las condiciones de contorno (2.2.3).
Al igual que hicimos cuando aplicamos el método de las diferencias finitas, aproximaremos las
condiciones de contorno para una mayor simplicidad en el proceso.
4.2.1 Condiciones de contorno parabólicas
Las condiciones de contorno que vamos a aplicar son las (3.2.1.1.1). Pero la numeración de las
fronteras es distinta en esta sección debido a que en el programa Freefem, los contornos se
ordenan así:
�10 , 2 � = (2 − 10 )2
 4
�1 , 20 � = (20 − 1 )2
 1
 �1 , 2 � = (2 − 1 )2
 �1 , 2 � = (2 − 1 )2
 2
 3
Para
=

= 0,5
2
=
2
=4
1
Si  es la solución a la ecuación (2.2.4), podemos aproximar esta solución como:

 ≈ � = �   (1 , 2 )
=1
Derivando esta expresión respecto a sus dos variables independientes se obtiene:

 (1 , 2 )
�
= � 
1
1
=1

�
 (1 , 2 )
= � 
2
2
=1
Tenemos ahora que obtener una expresión variacional de nuestra ecuación diferencial:
�−



(1 , 2 ) + 4
(1 , 2 ) = � (1 , 2 ) ∙ (1 , 2 ),
2
1

56
sustituyendo las anteriores expresiones de aproximación ene esta ecuación nos queda:


=1
=1
 (1 , 2 )
 (1 , 2 )
(1 , 2 ) + 4 � 
(1 , 2 ) = � (1 , 2 ) ∙ (1 , 2 )
� − � 
1
2


Planteadas ya las ecuaciones que tendremos en cada uno de nuestros nodos, procedemos
ahora a discretizar nuestro dominio. Véase en la figura 4.2.1.1 que debido al tipo de ecuación,
solamente podemos aplicar dos condiciones de contorno.
Figura 4.2.1.1
Se ha definido una malla cuadrada en el Freefem en la que ambas variables varían de − a .
El número de subdivisiones en ambas direcciones es de cien, por lo tanto tenemos un total de
10.201 nodos y 20.000 triángulos.
Esta cifra la podremos aumentar o disminuir en función de la calidad de la aproximación que
busquemos.
En el Freefem se define por defecto el dominio [0,1][0,1]. Por tanto debemos modificar el
dominio original para convertirlo en [−, ][−, ].
 = [0,1] →  = [−, ]
Utilizaremos la siguiente ecuación para el cambio de variable:
 +  =  ,
 = 0 →  ∙ 0 +  = − ,
por tanto:
 =1 →∙1+ =,
57
 = 2
 = − ,
y nuestra ecuación de cambio de variables queda:
 = 2 −  = (2 − 1).
Este cambio de coordenadas tenemos que definirlo en el código del programa. Al final de este
texto se muestran los códigos de las funciones programadas para este proyecto.
También cabe mencionar que para esta aproximación han sido usadas las funciones de prueba
del tipo 1 , es decir:
 (, ) =  +   +  
 (, ) ∈ 
 �  � = 1,  �  � = 0
Siendo  el triángulo  y   el vértice .
  ≠ 
Con todo ello nos queda la siguiente solución representada en la figura 4.2.1.2.
Figura 4.2.1.2
Como se puede apreciar a simple vista, ésta no es una buena solución, estas inexactitudes
vienen originadas por la aplicación únicamente de dos condiciones de contorno, que además
son aproximaciones de las originales.
58
4.2.1.1 Adición de términos de orden dos
En el caso anterior hemos tenido problemas en la aproximación debido al orden de la ecuación
que intentamos aproximar. En este caso añadiremos términos de orden dos multiplicados por
constantes  suficientemente pequeñas y elegidas convenientemente para así poder aplicar
más condiciones de contorno. De forma que nuestra ecuación a resolver queda de la siguiente
forma:


2
2
−
+4
−
−
−
= −10 (1 )
1
2
1 2
2 2
En este caso podemos aplicar las cuatro condiciones de contorno en las fronteras de la malla
de la figura 4.2.1.1.1, por lo que es de esperar que esta solución sea satisfactoria.
Figura 4.2.1.1.1
Expresando la ecuación de forma variacional nos queda:
� �−



2
2
+4
−
−
−
� (1 , 2 ) = � (1 , 2 ) ∙ (1 , 2 )
1
2
1 2
2 2


(4.2.1.1.1)
∀  ≈ �   (1 , 2 )
=1
∀  (1 , 2 )     1
Desarrollando la ecuación (4.2.1.1.1) llegamos a:
� �

  (1 , 2 ) 
  (1 , 2 )

+
−
(1 , 2 ) + 4
(1 , 2 )�
1
2
2
1
1
2
= � (1 , 2 ) ∙ (1 , 2 )

59
Reordenando términos:

 (1 , 2 )
 (1 , 2 )
− (1 , 2 )� � 
� �
1
1

=1

 (1 , 2 )
 (1 , 2 )
+ � �
+ 4(1 , 2 )� � 
= � (1 , 2 ) ∙ (1 , 2 )
2
2


=1
Una vez planteado el sistema de ecuaciones, podemos proceder a mostrar los resultados que
ofrecen la resolución del mismo. La solución aproximada para un valor  = 10−3 es la
mostrada en la figura 4.2.1.1.2.
Figura 4.2.1.1.2
Siendo el error cometido la curva diferencia entre la función exacta y la aproximada
representada en la figura 4.2.1.1.3.
Figura 4.2.1.1.3
60
Como vemos es un error considerablemente alto, aunque tenemos que tener en cuenta que
las condiciones de contorno aportadas eran únicamente parabólicas.
4.2.2 Condiciones de contorno exactas
Las condiciones que usaremos serán las condiciones (3.2.1.1). Aunque en este caso la
numeración queda como sigue ya que el Freefem las ordena de este modo por defecto.
�10 , 2 � = − cos(10 ) + (2 − 10 )2
 4
�1 , 20 � = − cos(1 ) + (20 − 1 )2
 1
 �1 , 2 � = − cos(1 ) + (2 − 1 )2
 �1 , 2 � = − cos(1 ) + (2 − 1 )2
=

= 10
1
=

= 0,5
2
=
 2
 3
2
=4
1
En este caso se ha agrandado la malla a unas dimensiones [−2, 2][−2, 2].
Utilizaremos la siguiente ecuación para el cambio de variable:
 +  = 
 = 0 →  ∙ 0 +  = −2 ,
por tanto:
 = 1 →  ∙ 1 +  = 2 ,
 = 4
 = −2 ,
y nuestra ecuación de cambio de variables queda:
 = 4 − 2 = 2(2 − 1).
Este cambio de coordenadas hay que hacerlo en el código del programa, se mostrará al final
del texto un anexo con las distintas funciones implementadas.
En el apartado 4.2.1 solamente fue satisfactorio uno de los casos, el de adición de términos de
orden dos. Por tanto en el presente apartado solo implementaremos la aproximación de la
ecuación (2.2.4) con condiciones de contorno exactas.
61
La matemática del problema es exactamente la misma, solo cambian las condiciones de
contorno descritas en el código.
La solución aproximada para  = 10−3 nos queda tal y como se ve en la figura 4.2.2.1.
Figura 4.2.2.1
Siendo la curva de error la representada en la figura 4.2.2.2.
Figura 4.2.2.2
62
Como se aprecia, estos resultados son mucho mejores. Podrían incluso mejorarse si
utilizáramos funciones de prueba 2 en vez de 1 , o bien disminuyéramos el coeficiente  o
bien utilizáramos un mallado más fino. Aunque también hay que tener en cuenta que se han
utilizado condiciones de contorno exactas (son como la solución real), que en la práctica rara
vez podrá disponerse de ellas.
En efecto si en vez de hacer 100 subdivisiones en la dirección de cada variable, hacemos 150,
tendremos un total de 22.801 nodos y 45.000 triángulos. Con esta medida ganaremos
precisión, aunque también coste computacional.
El error para el caso en que  = 150 sería de 0,1583 y su representación se ve en la figura
4.2.2.3.
Figura 4.2.2.3
Nota: Tanto los resultados de esta sección como los de la sección tres, se analizan y comparan
en la sección cinco.
63
Capítulo 5
Simulación y comparación de resultados
Recordemos que el sistema mecánico que queremos simular es el representado en la figura
2.2.1. Y que el sistema de ecuaciones obtenido era el (2.2.1).
5.1 Simulación en Simulink
En el caso que vayamos a calcular el par motor (1 , 2 ) aproximando nuestra ecuación
numéricamente. Debemos proceder utilizando un algoritmo de la siguiente forma:
1. Resolver la ecuación diferencial parcial en una malla determinada.
2. Configurar las condiciones iniciales que tiene el sistema mecánico.
3. Definir un tiempo de simulación y discretizarlo, en nuestro caso hemos hecho que el
tiempo se vaya incrementando a razón de 0,1 segundos.
4. Calcular los potenciales de la solución a la ecuación diferencial utilizando para ello
fórmulas de diferencias finitas.
5. Interpolar en las matrices de los potenciales anteriores para obtener el punto exacto
en cuestión.
6. Se calcula una aproximación de  .
7. Siendo () = [1 (), 2 (), 1 (), 2 ()] en cada instante de tiempo. Calcular
( + 1) mediante el método de Runge-Kutta.
El diagrama del cual nos valemos en Simulink para implementar dicho algoritmo es el 5.1.1.
Diagrama 5.1.1
64
En donde el bloque “MATLAB function” llama a un grupo de funciones que se encargan de
calcular las matrices de potencial a partir de la solución a la ecuación diferencial, interpolar el
punto exacto deseado y usar éste para calcular  mediante la ley de control descrita.
El bloque azul es el que se encarga de describir el sistema mecánico estudiado. Si miramos
dentro de este bloque, nos aparece el siguiente esquema representado en el diagrama 5.1.2.
Diagrama 5.1.2
Donde los bloques “Fcn2” y “Fcn1” representan a las ecuaciones diferenciales del sistema
(2.2.1) que gobiernan el sistema mecánico.
Nótese que después de cada integrador en ambos bloques se obtienen las variables ̇ () y
() respectivamente.
5.2 Resultados de simulación
En esta sección vamos a utilizar los resultados que se obtuvieron en los capítulos tres y cuatro,
para simular el sistema mecánico y comparar los resultados. Empezaremos recopilando los
resultados obtenidos de la aproximación de nuestra ecuación diferencial sujeta a condiciones
de contorno exactas mediante el método de las diferencias finitas utilizando diferencias
regresivas, diferencias centradas y por último mediante el método de los elementos finitos.
La tabla 5.2.1 muestra diferentes datos de cálculo. El parámetro  representa el número de
subdivisiones realizadas en cada dirección,  es el valor del error cometido en el nodo de
la malla donde el error es máximo, es el  es el tiempo requerido para obtener la
aproximación,  es el tiempo necesario para realizar la simulación con cada matriz
correspondiente.
65
Nótese que no se han añadido valores en la columna del tiempo de simulación para las
diferencias regresivas, esto es debido a que para estos casos las señales de salida se iban fuera
del dominio durante la simulación.
Diferencias Regresivas
Diferencias centradas
Elementos finitos
n
emax
t (s)
t sim (s) n
emax
t (s)
t sim (s) n
emax
t (s)
t sim (s)
50 39,5043 0,013
50 9,6598 0,0154
5
50 0,5831
0,64
5
100 39,5899 0,0285
100 4,9148 0,0372
15
75 0,3019 1,544
11
150 39,6877 0,0604
150 3,3172 0,061
33
125 0,0789 3,681
24
200
250
300
350
400
450
500
39,7507
39,7933
39,8236
39,8463
39,8638
39,8778
39,8892
0,1206
0,2204
0,2829
0,4233
0,6029
0,8248
0,9126
-
200
250
300
350
400
450
500
2,5034
2,0143
1,6861
1,4512
1,2737
1,1349
1,0234
0,1557
0,2377
0,3717
0,632
0,9699
1,1919
1,4996
64
118
440
900
1400
2050
3100
150
175
200
225
250
275
300
0,0317
0,0249
0,0179
0,0121
0,0066
0,0017
0,0001
5,491
7,582
9,266
12,168
14,929
18,318
22,639
33
49
64
92
118
274
440
Tabla 5.2.1
Los tiempos medidos, son algo relativos, ya que han sido medidos para un ordenador personal,
concretamente un ordenador dotado de un microprocesador de 2 GHz y una memoria RAM de
4 Gb. Si se buscara una precisión en los cálculos muy alta, se requerirían matrices más grandes
y por tanto la mejor opción podría ser realizar las simulaciones en un equipo más potente.
5.2.1 Diferencias regresivas
Como vemos en los datos de la tabla 5.2.1, el error cometido es prácticamente el mismo en
todos los casos, así que lo más lógico sería tomar  = 50. De todas maneras este método nos
proporciona siempre un error bastante alto, lo que origina fallos a la hora de la simulación.
Esto es debido a que cuando realizamos el cálculo del gradiente (se adjunta función en el
anexo de funciones) de la solución aproximada, este tiene una forma muy distinta al gradiente
de la solución exacta, lo cual causa que en la simulación las variables 1 y 2 alcancen valores
situados fuera del dominio que estudiamos.

2
Un ejemplo de este fenómeno para unas condiciones iniciales [1 , ̇ 1 , 2 , ̇ 2 ] = �−, 0, , 0� se
adjunta en la figura 5.2.1.1 a continuación.
66
Figura 5.2.1.1
Donde 1 y 2 aparecen en azul y verde respectivamente. Como se aprecia en la figura 5.2.1.1,
en la simulación usando la solución aproximada, el proceso acaba en el instante  = 1,65  ya
que el valor de alguna de las variables independientes alcanza un valor situado fuera del
dominio en ese momento, lo que hace que la función destinada a interpolar valores lo detecte
y detenga la simulación.
5.2.2 Diferencias centradas
A diferencia del caso de las diferencias regresivas, en las centradas si existe una gran diferencia
en los errores cometidos en la aproximación a medida que se va aumentando el número de
subdivisiones. Y aunque las variaciones del tiempo de aproximación no son muy significativas,
si lo son las del tiempo de simulación. Nótese que este tiempo va desde unos pocos segundos
a varios minutos según seleccionemos un tamaño u otro de las subdivisiones. La figura 5.2.2.1
muestra la simulación en el Simulink utilizando  = 150 y unas condiciones iniciales

2
[1 , ̇ 1 , 2 , ̇ 2 ] = �−, 0, , 0�.
Figura 5.2.2.1
67
Aparentemente se trata de una solución bastante aceptable con unos tiempos también
aceptables, aunque si se desea satisfacer un error máximo determinado, podemos interpolar
en la figura 5.2.2.2 el error máximo en cuestión usando la línea de tendencia introducida.
Figura 5.2.2.2
Ponemos el ejemplo de que se busque una aproximación de la ecuación (2.2.4) cuyo error
máximo no exceda de siete. Es decir:
 = 7
 = 512,62 ∙ ()−1,026 = 512,62 ∙ (7)−1,026 = 69,71
Tomaremos  = 70 para asegurarnos el cumplimiento de la condición. La distribución de error
obtenida se muestra en la figura 5.2.2.3.
Figura 5.2.2.3
68
Se aprecia en la figura 5.2.2.3 que el error máximo absoluto no excede de siete. El error
máximo calculado en Matlab es de 6,94.
Si simulamos el sistema utilizando  = 70 y con unas condiciones iniciales [1 , ̇ 1 , 2 , ̇ 2 ] =


� 3 , 0, 8 , 0�, se obtienen los resultados mostrados en la figura 5.2.2.4.
Figura 5.2.2.4
Se distinguen anomalías en el comportamiento de las curvas aproximadas en la zona en que la
curva exacta se estabiliza. Esto es debido al error cometido en los gradientes de la solución
que a su vez han sido causados por un número insuficiente de subdivisiones. Si disminuimos
aún más el número de subdivisiones, por ejemplo,  = 20 obtendremos cada vez unos
resultados con más diferencias con la simulación exacta. Véase la figura 5.2.2.5.
Figura 5.2.2.5
69
También representamos los tiempos estimados de cálculo y de simulación en las figuras 5.2.2.6
y 5.2.2.7 respectivamente.
Figura 5.2.2.6
Figura 5.2.2.7
Como se observa en las dos gráficas superiores, los tiempos de cálculo y de simulación no
tienen la misma relevancia, ya que el primero es en todos los casos relativamente pequeño, y
el segundo crece de manera muy rápida a medida que aumentamos el número de
subdivisiones.
5.2.3 Elementos finitos
Los datos de la tabla 5.2.1 revelan que si utilizamos el método de los elementos finitos,
necesitamos un número de subdivisiones en cada eje mucho menor que en el método de las
diferencias finitas (centradas) para conseguir un error similar. Es decir, que nuestra matriz
solución estará formada por menos nodos. Si simulamos el sistema utilizando  = 150 y con
70

3

8
unas condiciones iniciales [1 , ̇ 1 , 2 , ̇ 2 ] = � , 0, , 0�, se obtienen los resultados de la figura
5.2.3.1.
Figura 5.2.3.1
Se muestra a continuación en la figura 5.2.3.2 la curva del error frente al número de
subdivisiones para el caso de los elementos finitos.
Figura 5.2.3.2
Al igual que se hizo en el caso de las diferencias centradas, se ha añadido una curva de mejor
ajuste para poder predecir la  necesaria que satisfaga un error máximo determinado.
Si por ejemplo se desea que el error no exceda de 0,2:
 = 52,324()−0,303 = 85,2
Para asegurarnos el cumplimiento de esta especificación, tomamos  = 86. La distribución del
error se muestra en la figura 5.2.3.3.
71
Figura 5.2.3.3
Para las mismas condiciones iniciales que antes y para una simulación del sistema con  = 86,
se ve que a pesar que no haber tomado un número  excesivamente alto, se obtiene una
solución admisible. Véase la figura 5.2.3.4.
Figura 5.2.3.4
También representamos en la figura 5.2.3.5 el tiempo estimado de cálculo. Que como puede
verse es muy superior al tiempo requerido cuando usamos las diferencias finitas centradas.
72
Figura 5.2.3.5
Por último se realiza una comparación general entre las simulaciones del sistema con unas

3

8
condiciones iniciales [1 , ̇ 1 , 2 , ̇ 2 ] = � , 0, , 0� usando las diferencias finitas centradas
( = 50), los elementos finitos ( = 50) y la simulación exacta tal y como se muestra en la
figura 5.2.3.6.
Figura 5.2.3.6
73
Concluimos indicando que como observamos en la figura 5.2.3.6 para la simulación con  =
50, el método de los elementos finitos ofrece una solución más exacta, pero a su vez también
es mayor el tiempo que se requiere para calcularlas.
Por otra parte, si aplicamos el método de las diferencias finitas centradas obtendremos un
error mayor, aunque su simplicidad y rapidez, lo hacen bastante efectivo.
74
Anexo
Se exponen a continuación los códigos de los programas principales que se han llevado a cabo
en Matlab y Freefem para este proyecto.
A.1 Diferencias regresivas. Archivo dif2.m
La función “dif2” se encarga de aproximar nuestra ecuación diferencial parcial usando para ello
las diferencias finitas regresivas.
function un=dif2(nx,ny)
k=(4*pi)/ny;
h=(4*pi)/nx;
lambda=k/(h*4);
Tiene como argumentos de entrada el número de subdivisiones que haremos en cada
dirección de las variables independientes 1 y 2 , y como argumento de salida la matriz
solución () de la ecuación diferencial parcial.
Se definen  y ℎ como la longitud del dominio entre el número de subdivisiones, y  es
el parámetro que relaciona a los dos anteriores.
un=zeros(ny+1,nx+1);
x=2*pi:-4*pi/nx:-2*pi;
y=-2*pi:4*pi/ny:2*pi;
Debemos definir las dimensiones de la matriz solución y reservar dicho espacio en memoria.
Esto lo hacemos así ya que es más cómodo que modificar estas dimensiones en el bucle
posterior.
También se define el dominio de ambas variables independientes.
un(:,1)=-10.*cos(-2*pi)+0.5.*(y-4*(-2*pi)).^2; %Frontera 1
un(1,:)=-10.*cos(x)+0.5.*(2*pi-4.*x).^2; %Frontera 4
Estas son las condiciones de contorno. Recordemos que en las diferencias regresivas
solamente utilizábamos dos.
75
A continuación se adjuntan la figura A.1.1 de nuestra malla y la expresión recursiva de la
molécula para la mejor comprensión de los bucles.
+1, = (1 − ), + ,−1 + 
10
(1 )
4
Figura A.1.1
for i=2:ny+1
for j=2:nx+1
un(i,j)=un(i-1,j)*(1-lambda)+un(i-1,j-1)*lambda+k*2.5*sin(x(j));
end
end
end
Empezaremos calculando el valor de cada nodo desde arriba a la izquierda (elemento (2,2) de
la matriz) de la malla hacia la derecha y cada vez que lleguemos a la frontera derecha, bajamos
una fila para proseguir con la iteración.
A.2 Diferencias centradas. Archivo dif5.m
Esta función aproximará la ecuación del potencial mediante diferencias finitas centradas.
function u=dif5(nx,ny)
k=(4*pi)/ny;
h=(4*pi)/nx;
lambda=k/(h*4);
un=zeros(ny+2,nx+1);
x=-2*pi:4*pi/nx:2*pi;
y=-(2*pi+4*pi/ny):4*pi/ny:2*pi;
76
Esta primera parte del código es igual que la de la función anterior salvo por un detalle. Dado
que en esta ocasión se va a utilizar una condición de Neumann. Para ello debemos agrandar la
malla una fila más, de ahí que la variable 2 (representada en el código como ), parta desde
 = −2 −
4
.

un(:,1)=-10*cos(-2*pi)+0.5.*(y-4*(-2*pi)).^2; %Frontera 1
un(:,nx+1)=-10*cos(2*pi)+0.5.*(y-4*(2*pi)).^2; %Frontera 2
un(ny+2,:)=k-10.*cos(x)+0.5.*(2*pi-4.*x).^2; %Frontera 3 (Neumann)
un(ny+1,:)=-10.*cos(x)+0.5.*(2*pi-4.*x).^2; %Frontera 3
La condición de Neumann es de esa forma debido a:
�1 , 2 + � − �1 , 2 �
(1 , 2 )
= (1 ) =
=1
2

(1 , 2 + ) = (1 , 2 ) + 
Al igual que antes se muestran a continuación la expresión recursiva y la malla en la figura
A.2.1.
−1, = +1, + �,+1 − ,−1 � − 10 (1 )
Figura A.2.1
for i=ny:-1:1
for j=2:nx
un(i,j)=un(i+2,j)+lambda*(un(i+1,j+1)-un(i+1,j-1))-5*k*sin(x(j));
end
end
Empezamos calculando los nodos desde debajo de izquierda a derecha (elemento ( −
2,  − 1) de la matriz), y cuando se llegue al nodo anterior a la frontera de la derecha,
subimos una fila.
77
u=[ny+1,nx+1];
for i=1:ny+1
for j=1:nx+1
u(i,j)=un(i,j);
end
end
end
Recordemos que tenemos que eliminar la fila adicional que creamos para la aplicación de la
condición de Neumann, para ello creamos la matriz  (esta vez con las dimensiones correctas)
que será la matriz que la función devuelva.
El bucle es simplemente para copiar todas las filas de la matriz  (salvo la última) en la matriz
 (argumento de salida).
A.3 Elementos finitos
Como sabemos, el programa utilizado para la aplicación del método de los elementos finitos a
nuestra ecuación diferencial es el Freefem. El Freefem tiene un lenguaje de programación
propio, aunque es similar al C++.
A.3.1 Primera aplicación. Archivo Prueba1.edp
En esta primera aplicación se trató de aproximar la ecuación usando únicamente dos
condiciones de contorno.
mesh Th=square(100,100,[4*pi*x-2*pi, 4*pi*y-2*pi]);
fespace Vh(Th,P1);
Iniciamos el código declarando una malla cuadrada con cien subdivisiones en cada dirección.
El Freefem tiene por defectos mallas cuyos dominios son [0,1][0,1]. En nuestro caso
queremos que sea [−2, 2][−2, 2]. Para ello tenemos que hacer un cambio de
coordenadas:
 = [0,1] →  = [−2, 2]
La ecuación de cambio de variables que utilizaremos es de la forma:
 +  = 
78
Con
 = 0 →  ∙ 0 +  = −2 ,
 = 1 →  ∙ 1 +  = 2 ,
nuestra ecuación queda:
 = 4
 = −2 ,
 = 4 − 2.
También declaramos el tipo de elemento que vamos a utilizar en nuestra aproximación, en
este caso 1 .
func f=-10*sin(x);
func g4=-10*cos(-1.)+0.5*(y-4)^2;
func g2=-10*cos(1.)+0.5*(y+4)^2;
Con estas órdenes declaramos el término independiente que tiene nuestra ecuación
diferencial y las dos condiciones de contorno que vamos a aplicar. En este caso sobre las
fronteras dos y cuatro, que son las de la derecha y la izquierda (la numeración es distinta a la
que tomamos en el método de las diferencias finitas).
Vh u,v;
solve problema(u,v)=int2d(Th)((-1.)*dx(u)*v+4*dy(u)*v)int2d(Th)(f*v)+on(4,u=g4)+on(2,u=g2);
plot(u,wait=1);
En esta parte del código se da la orden de resolver en 2D el problema en que tiene como
variables  y , donde  es la incógnita buscada y  las funciones de prueba 1 . Además se
especifica sobre que fronteras han de ser aplicadas las funciones de las condiciones de
contorno antes definidas. Por último aparecerá por pantalla la representación de la solución
obtenida.
A.3.2 Segunda aplicación. Archivo Prueba4.edp
Con esta función se calcula una aproximación de nuestra ecuación diferencial, usando para ello
el método de los elementos finitos. Este código es similar al del caso anterior, pero con la
diferencia que en esta ocasión se le añadieron dos términos (multiplicados por una constante
 suficientemente pequeña) de segundo orden a la ecuación diferencial.
79
mesh Th=square(100,100,[2*pi*x-pi,2*pi*y-pi]);
plot(Th,wait=1);
fespace Vh(Th,P1);
func f=-10*sin(x);
func fex=-10*cos(x)+0.5*(y+4*x)^2;
Vh u,v;
real eps=1.e-3;
solve problema(u,v)=int2d(Th)((1.)*dx(u)*v+4*dy(u)*v+eps*dx(u)*dx(v)+eps*dy(u)*dy(v))
-int2d(Th)(f*v)+on(1,2,3,4, u=fex);
plot(u,value=1,wait=1);
Vh err=ex-u;
plot(err,wait=1);
{
ofstream file("u.txt");
file<<u[]<<endl;
}
Esta vez tenemos cuatro condiciones de contorno de Dirichlet aplicadas sobre cada una de las
fronteras.
Al final del código se ordena que se registre la solución calculada en un archivo de texto
llamado .  que después leeremos con Matlab.
A.3.3 Lectura del fichero u.txt desde Matlab. Archivo exportador.m
Sabiendo que el Freefem almacena la matriz solución en forma de vector en un archivo de
texto (fichero u.txt), se tendrá que desarrollar un programa en Matlab que lea esa información
y la reordene en forma de matriz.
Tambien tenemos que tener en cuenta que el primer elemento del archivo de texto es el
número de nodos que tenía la matriz. Por tanto nuestro código quedará:
filevar='u.txt';
fi2=fopen(filevar,'r');
nbv=fscanf(fi2,'%d',[1,1]);
u=fscanf(fi2,'%f',[1,nbv]);
fclose(fi2)
Con estos comandos leemos el archivo .  llamando  al número de nodos, y
almacenando todos los datos posteriores en un vector  de dimensión . Por último
cerramos el archivo.
n=sqrt(nbv)-1;
k=1;
for i=1:1:n+1
for j=1:1:n+1
A(i,j)=u(k);
k=k+1;
end
end
80
Si  es el número de nodos,  = √ − 1 será el número de subdivisiones en cada
dirección. Tengamos en cuenta que hemos considerado la matriz será cuadrada y el mismo
número de subdivisiones en ambas variables.
Por último tenemos simplemente un bucle que convierte la información del vector  en la
matriz solución .
A.3 Función gradiente. Archivo gradiente.m
El objetivo de esta función es calcular el gradiente de la matriz solución.
function [dzdx, dzdy]=gradiente (x,y,v,n)
h=4*pi/n;
k=4*pi/n;
Los argumentos de salida serán los gradientes según cada una de las variables, y los de entrada
serán la malla a estudiar ( e ), la matriz solución de la ecuación diferencial () y el número
de subdivisiones (). También se definen los parámetros ℎ y  que se utilizarán para cálculos
posteriores.
for i=2:n
for j=2:n
dzdx(i,j)=(v(i,j+1)-v(i,j-1))/(2*h);
dzdy(i,j)=(v(i-1,j)-v(i+1,j))/(2*k);
end
end
En este bucle se calcula mediante diferencias centradas los gradientes de ambas variables en
los nodos interiores de la malla, es decir todos salvo los nodos pertenecientes a los contornos
del dominio.
for j=2:n %Fronteras superior e inferior
dzdx(1,j)=(v(1,j+1)-v(1,j-1))/(2*h); %Centrada
dzdy(1,j)=
(v(1,j)-v(1+1,j))/(k); %Regresiva
dzdx(n+1,j)=(v(n+1,j+1)-v(n+1,j-1))/(2*h); %Centrada
dzdy(n+1,j)=
(v(n+1-1,j)-v(n+1,j))/(k); %Progresiva
end
for i=2:n %Fronteras izquierda y derecha
dzdx(i,1)=(v(i,1+1)-v(i,1))/(h); %Progresiva
dzdy(i,1)=dzdy(i,2); %Centrada
dzdx(i,n+1)=(v(i,n+1)-v(i,n+1-1))/(h); %Regresiva
dzdy(i,n+1)=dzdy(i,n); %Centrada
end
81
En estos dos bucles se calculan los gradientes en los nodos pertenecientes las fronteras,
excepto los nodos que pertenezcan a dos fronteras a la vez, es decir, los vértices de la malla.
Siempre que sea posible se realiza el cálculo mediante las diferencias finitas centradas, en los
casos en los que no se puedan usar, recurrimos a las diferencias finitas progresivas o
regresivas.
i=1; j=1; %Vertice entre fronteras Superior e izquierda
dzdx(i,j)=(v(i,j+1)-v(i,j))/(h); %Progresiva
dzdy(i,j)=dzdy(1,2);%(v(i+1,j)-v(i,j))/(k); %Regresiva
i=1; j=n+1; %Vertice entre fronteras Superior y derecha
dzdx(i,j)=(v(i,j)-v(i,j-1))/(h); %Regresiva
(v(i,j)-v(i+1,j))/(k); %Regresiva
i=n+1; j=1; %Vertice entre fronteras Inferior e izquierda
dzdx(i,j)=(v(i,j+1)-v(i,j))/(h); %Progresiva
(v(i-1,j)-v(i,j))/(k); %Progresiva
i=n+1; j=n+1; %Vertice entre fronteras Inferior y derecha
dzdx(i,j)=(v(i,j)-v(i,j-1))/(h); %Regresiva
(v(i-1,j)-v(i,j))/(k); %Progresiva
En esta parte del código se calculan los gradientes en los nodos restantes, es decir en los
vértices. En los vértices no se podrán utilizar diferencias finitas centradas, por tanto se utilizan
las regresivas y progresivas.
A.4 Función interpoladora. Archivo interpolador.m
Cuando simulemos nuestro sistema, no solo se necesitarán el valor del gradiente en los nodos
de la malla, sino en todo el dominio. Esta función se encargará de interpolar en la malla.
function [dzdxi, dzdyi ] = interpolador(xi, yi, x, y, dzdx, dzdy)
Como vemos la función tiene como argumentos de entrada las coordenadas  ,  donde se
desea conocer el valor del gradiente, la distribución de los nodos ,  y las matrices gradientes
 y . Como argumentos de salida se tienen los valores en los puntos deseados.
x0
xf
y0
yf
=
=
=
=
x(1);
x(length(x));
y(1);
y(length(y));
82
Se definen 0 y  como el primer y último valor del vector  (referido a la variable 1 ). Ídem
con 0 y  .
if xi >= x0 && xi <= xf
if yi >= yf && yi <= y0
dzdxi = interp2(x,y,dzdx,xi,yi,'linear');
dzdyi = interp2(x,y,dzdy,xi,yi,'linear');
else
error('El nodo no se encuentra en el dominio')
end
else
error('El nodo no se encuentra en el dominio')
end
end
En estos bucles lo primero que se tiene en cuenta es si el punto que se desea interpolar está
dentro de nuestro dominio, es decir si pertenece a la malla. Si no es así, aparecerá un mensaje
de error y se detendrá la simulación. En el caso de que el nodo en cuestión pertenezca al
dominio, se procede a su interpolación mediante la función de Matlab “interp2” que interpola
de forma lineal a partir de los argumentos anteriormente descritos.
83
Bibliografía
Acosta Rodríguez, J. A. (2004). Control no lineal de sistemas subactuados. PhD tesis.
Universidad de Sevilla. Sevilla.
Cañada Villar, Antonio. (2006). Apuntes de ecuaciones en derivadas parciales. Universidad de
Granada. Granada.
Celigüeta Lizarza, J. T. (2000). Método de los elementos finitos para análisis estructural.
Gallardo, José M. (2012). Ecuaciones diferenciales ordinarias. Una introducción con SAGE.
Hecht, Freefem++ Manual. Laboratoire Jacques-Louis Lions. Université Pierre et Marie Curie.
Paris.
Lucas Rodríguez, Carlos. (2012). Resolución numérica de EDPs asociadas a problemas de
control. Universidad de Sevilla. Sevilla.
Menéndez, Ángel N, (1987). Errores en la solución numérica de ecuaciones diferenciales.
Miersemann, Erich. (2012). Partial differential equations. Lecture notes. Leipzig University.
Leipzig.
Paris, Federico. (1996). Teoría de la elasticidad.
Periago Esparza, Francisco. Fundamentos matemáticos del método de los elementos finitos.
Universidad Politécnica de Cartagena.
Romero, Sixto. Moreno, Francisco J. Rodríguez, Isabel M (2001). Introducción a las Ecuaciones
en Derivadas Parciales (EDP’s).
Zienkiewicz, O. C. (1981).El método de los elementos finitos.
84

Documentos relacionados