aplicaciÓn del mdf y del mef a problemas de...

90
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

Upload: duongliem

Post on 05-Jun-2018

218 views

Category:

Documents


0 download

TRANSCRIPT

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

1

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.

2

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.

3

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.

Figura 2.1.1.1

4

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 12𝑚𝑣 y la energía potencial 𝑚𝑔ℎ.

Despejando 𝑣, 𝑣 = �2𝑔ℎ.

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, … , 𝑥𝑛,𝑢,𝑑𝑢𝑑𝑥1

, … ,𝑑𝑢𝑑𝑥𝑛

, … ,𝑑𝑚

𝑑𝑘1𝑥1𝑑𝑘2𝑥2 …𝑑𝑘𝑛𝑥𝑛� = 0 ,

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

Figura 2.1.1.2

5

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.

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𝑢𝑑𝑥2

+𝑑𝑢𝑑𝑦

= 0 Es de segundo orden

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:

𝑢(𝑥,𝑎) = 𝑓(𝑥)

Figura 2.1.2.1.1

6

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.

7

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

𝑢(𝑥, 0) = 𝑓(𝑥) (1)

𝑑𝑢(𝑥, 𝑡)𝑑𝑡

= 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.

Figura 2.1.2.3.1

8

𝑑2𝑢𝑑𝑥2

+𝑑2𝑢𝑑𝑦2

= 0 ,

para mayor comodidad en el modelado, se realiza el cambio de variables a coordenadas polares. 𝑥 = 𝑟𝑐𝑜𝑠(𝜃),𝑦 = 𝑟𝑠𝑒𝑛(𝜃). Realizando las sustituciones en la ecuación, queda:

𝑑2𝑢𝑑𝑟2

+1𝑟𝑑𝑢𝑑𝑟

+1𝑟2𝑑2𝑢𝑑𝜃2

= 0.

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𝑢𝑑𝑥2

=𝑑𝑢𝑑𝑡

0 < 𝑥 < 𝜋, 0 < 𝑡 < 𝑇

𝑢(𝑥, 0) = 𝑓(𝑥) (1)

Figura 2.1.2.3.2

9

𝑢(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, … , 𝑥𝑛,𝑢,𝑑𝑢𝑑𝑥1

, … ,𝑑𝑢𝑑𝑥𝑛

,𝑑2𝑢𝑑𝑥12

, … ,𝑑2𝑢𝑑𝑥𝑛2

,𝑑2𝑢

𝑑𝑥1𝑑𝑥2, … ,

𝑑2𝑢𝑑𝑥1𝑑𝑥𝑛

� = 0 ,

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𝑢𝑑𝑥2

+𝑑2𝑢𝑑𝑦2

� = 0

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, … , 𝑥𝑛,𝑢,𝜕𝑢𝜕𝑥1

, … ,𝜕𝑢𝜕𝑥𝑛

, … ,𝜕𝑚

𝜕𝑘1𝑥1𝜕𝑘2𝑥2 …𝜕𝑘𝑛𝑥𝑛� = 0 ,

un ejemplo podría ser la ecuación que describe la flexión mecánica de una placa elástica:

𝑑4𝑤𝑑𝑥4

+ 2𝑑4𝑤

𝑑𝑥2𝑑𝑦2+𝑑4𝑤𝑑𝑦4

=𝑞(𝑥,𝑦)𝐷

.

10

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.

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 𝐼2

� ��̈��̈�� + �−𝑚𝑔𝑙𝑠𝑒𝑛(𝜃)0 � = �01� 𝑣 (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

Figura 2.2.1

11

𝐼2�̈�2 = 𝑣

Despejando las variables �̈�1 y �̈�2 nos queda el sistema:

��̈�1�̈�2� = �−

𝑚𝑔𝑙𝐼1

𝑠𝑒𝑛(𝜃)

0� + �

−𝐼2𝐼11� 𝑣 ,

y definiendo:

𝑎 =𝑚𝑔𝑙𝐼1

𝑦 𝑏 =𝐼2𝐼1

,

nos queda finalmente:

��̈�1�̈�2� = �−𝑎𝑠𝑒𝑛(𝜃)

0 � + �−𝑏1 � 𝑣 .

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:

𝑢𝑐 = 𝐺𝑇 ∙ (𝐷𝑉 −𝑀𝑑 ∙ 𝐷𝑉𝑑 ∙ (𝐺𝑇 ∙ 𝐺)−1)− 𝐾𝑑 ∙ 𝐺𝑇 ∙ (𝑝 ∙ 𝑀𝑑−1) ,

donde

𝐺 = �−𝑏1 � = �−11 � ,

𝑝 = �𝑝1𝑝2� = ��̇�1�̇�2

� ,

𝐷𝑉 = 𝑚𝑔𝑙 𝑠𝑒𝑛(𝑞1),

𝐷𝑉𝑑 =

⎣⎢⎢⎡−𝑚𝑔𝑙𝛾1

𝑠𝑒𝑛(𝑞1) − 𝐾𝑝𝛾2𝛾1

(𝑞2 − 𝑞1𝛾2𝛾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.

12

El sistema que se va a resolver es el siguiente:

�̇�1�̇�2�̇�1�̇�2

� = �

𝑝1𝑝2

𝑚𝑔𝑙 𝑠𝑒𝑛(𝑞1)0

�+ �00−11

�𝑢𝑐�𝑞1 ,𝑞2,𝑝1,𝑝2�.

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𝜕𝑉𝜕𝑞1

+ 𝛾2𝜕𝑉𝜕𝑞2

= −𝑚𝑔𝑙 𝑠𝑒𝑛(𝑞1) (2.2.2),

siendo 𝛾1 < 0 y 𝛾2 ≠ 0 y sujeta a las condiciones de contorno:

𝜕2𝑉𝜕𝑞12

�(𝑞1,𝑞2)=(0,0)

= 𝐾1 𝑐𝑜𝑛 𝐾1 > 0

(2.2.3),

𝜕2𝑉𝜕𝑞12

𝜕2𝑉𝜕𝑞22

−𝜕2𝑉𝜕𝑞1𝑞2

�(𝑞1,𝑞2)=(0,0)

= 𝐾2 𝑐𝑜𝑛 𝐾2 > 0

La solución analítica a la ecuación (2.2.2) viene dada por:

𝑉(𝑞1,𝑞2) =𝑚𝑔𝑙𝛾1

cos(𝑞1) +𝑘𝑝2�𝑞2 −

𝛾1𝛾2𝑞1�

2

para simplificar tomaremos unos valores de:

𝛾1 = −1 , 𝛾2 = 4 ,

𝑚𝑔𝑙 = 10 , 𝐾𝑝 = 𝐾𝑑 = 1 ,

y entonces nuestra ecuación nos queda:

−𝜕𝑉𝜕𝑞1

+ 4𝜕𝑉𝜕𝑞2

= −10 𝑠𝑒𝑛(𝑞1) (2.2.4),

y su solución analítica sería:

𝑉(𝑞1,𝑞2) = −10 cos(𝑞1) +12

(𝑞2 + 4𝑞1)2 (2.2.5).

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:

13

𝜕𝑉(𝑞1,𝑞2)𝜕𝑞1

= 10 𝑠𝑒𝑛(𝑞1) + 4𝑞2 + 16𝑞1

𝜕𝑉(𝑞1,𝑞2)𝜕𝑞2

= 𝑞2 + 4𝑞1

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.

14

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:

𝑓(𝑥) = 𝑓(ℎ) +𝑓′(ℎ)

1!(𝑥 − ℎ) +

𝑓(2)(ℎ)2!

(𝑥 − ℎ)2 + ⋯+𝑓(𝑛)(ℎ)𝑛!

(𝑥 − ℎ)𝑛 ,

a partir de esta expresión es fácil llegar a:

𝑓(𝑥 + ℎ) = 𝑓(𝑥) +𝑑𝑓(𝑥)𝑑𝑥

ℎ +𝑑2𝑓(𝑥)𝑑𝑥2

ℎ2!

2

+𝑑3𝑓(𝑥)𝑑𝑥3

ℎ3!

3

+ ⋯,

reagrupando los términos llegamos a la expresión de la fórmula de las diferencias hacia delante:

𝑓(𝑥 + ℎ) − 𝑓(𝑥)ℎ

=𝑑𝑓(𝑥)𝑑𝑥

+𝑑2𝑓(𝑥)𝑑𝑥2

ℎ2!

+𝑑3𝑓(𝑥)𝑑𝑥3

ℎ3!

2

+ ⋯ (3.1.1.1)

Operando de forma análoga, podemos obtener la aproximación de f(x-h).

𝑓(𝑥 − ℎ) = 𝑓(𝑥) −𝑑𝑓(𝑥)𝑑𝑥

ℎ +𝑑2𝑓(𝑥)𝑑𝑥2

ℎ2!

2

−𝑑3𝑓(𝑥)𝑑𝑥3

ℎ3!

3

+ ⋯,

15

y de nuevo reagrupando términos, llegamos a la fórmula de las diferencias hacia atrás:

𝑓(𝑥 − ℎ) − 𝑓(𝑥)ℎ

= −𝑑𝑓(𝑥)𝑑𝑥

+𝑑2𝑓(𝑥)𝑑𝑥2

ℎ2!−𝑑3𝑓(𝑥)𝑑𝑥3

ℎ3!

2

+ ⋯ (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

𝑓(𝑥 + ℎ) − 𝑓(𝑥 − ℎ)ℎ

= 2𝑑𝑓(𝑥)𝑑𝑥

+ 2𝑑3𝑓(𝑥)𝑑𝑥3

ℎ3!

2

+ ⋯,

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

= 2𝑑2𝑓(𝑥)𝑑𝑥2

12!

+ 2𝑑4𝑓(𝑥)𝑑𝑥4

ℎ3

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

ℎ2!

2

+𝑑3𝑓(𝑥,𝑦)𝑑𝑥3

ℎ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:

16

𝑓(𝑥, 𝑦)𝑥 =𝑑𝑓(𝑥,𝑦)𝑑𝑥

=𝑓(𝑥 + ℎ,𝑦) − 𝑓(𝑥,𝑦)

ℎ+ 𝑂(ℎ) ≈

𝑓(𝑥 + ℎ,𝑦) − 𝑓(𝑥,𝑦)ℎ

.

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:

𝑓(𝑥 − ℎ,𝑦) = 𝑓(𝑥,𝑦) −𝑑𝑓(𝑥,𝑦)𝑑𝑥

ℎ +𝑑2𝑓(𝑥,𝑦)𝑑𝑥2

ℎ2!

2

−𝑑3𝑓(𝑥,𝑦)𝑑𝑥3

ℎ3!

3

+⋯ (3.1.2.2),

y fácilmente llegamos a:

𝑓(𝑥,𝑦)𝑥 =𝑑𝑓(𝑥,𝑦)𝑑𝑥

=𝑓(𝑥,𝑦) − 𝑓(𝑥 − ℎ,𝑦)

ℎ+ 𝑂(ℎ) ≈

𝑓(𝑥,𝑦) − 𝑓(𝑥 − ℎ,𝑦)ℎ

𝑓(𝑥,𝑦)𝑦 =𝑑𝑓(𝑥,𝑦)𝑑𝑦

=𝑓(𝑥,𝑦) − 𝑓(𝑥,𝑦 − 𝑘)

𝑘+ 𝑂(𝑘) ≈

𝑓(𝑥,𝑦) − 𝑓(𝑥,𝑦 − 𝑘)𝑘

.

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ℎ

.

De forma análoga para la otra variable independiente:

𝑓(𝑥,𝑦)𝑦 =𝑑𝑓(𝑥,𝑦)𝑑𝑦

=𝑓(𝑥,𝑦 + 𝑘) − 𝑓(𝑥,𝑦 − 𝑘)

2𝑘+ 𝑂(𝑘2) ≈

𝑓(𝑥,𝑦 + 𝑘) − 𝑓(𝑥, 𝑦 − 𝑘)2𝑘

.

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 .

17

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 , 𝐿 = 1,

𝑢(0, 𝑡) = 𝑢(𝐿, 𝑡) = 0,

𝑢(𝑥, 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

18

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).

.

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.

Figura 3.1.3.2

19

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.

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 𝑠𝑒𝑛 �

𝜋𝑥𝐿� ,

Figura 3.1.3.3

20

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:

00.2

0.40.6

0.81

0

0.5

10

0.2

0.4

0.6

0.8

1

xy

u(x,

t)

Figura 3.1.3.4

00.2

0.40.6

0.81

0

0.5

10

0.2

0.4

0.6

0.8

1

xt

u(x,

t)

Figura 3.1.3.5

21

La curva del error cometido en cada nodo es la representada en la 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).

00.2

0.40.6

0.81

0

0.5

10

2

4

6

8

x 10-4

xy

u(x,

t)

Figura 3.1.3.6

22

𝑢(𝑥, 𝑡) = 𝐴𝑒𝑖𝛼𝑥 (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

23

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 𝐴.

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

𝑛𝑡

Figura 3.1.4.1.1

24

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

0,1= 250

𝑛𝑥 < 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.

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.

Figura 3.1.4.1.2

25

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.

00.2

0.40.6

0.81

0

0.5

10

0.2

0.4

0.6

0.8

1

xt

u(x,

t)

Figura 3.1.4.1.3

00.2

0.40.6

0.81

0

0.5

1-1

0

1

2

xt

u(x,

t)

Figura 3.1.4.1.4

26

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𝑓 , 𝑞2� = −𝛼 cos(𝑞1𝑓) + 𝛽(𝑞2 − 𝛾𝑞1𝑓)2 𝑓𝑟𝑜𝑛𝑡𝑒𝑟𝑎 2 (3.2.1.1)

𝑉�𝑞1,𝑞20� = −𝛼 cos(𝑞1) + 𝛽(𝑞20 − 𝛾𝑞1)2 𝑓𝑟𝑜𝑛𝑡𝑒𝑟𝑎 3

𝑉 �𝑞1, 𝑞2𝑓� = −𝛼 cos(𝑞1) + 𝛽(𝑞2𝑓 − 𝛾𝑞1)2 𝑓𝑟𝑜𝑛𝑡𝑒𝑟𝑎 4

27

Donde

𝛼 =𝑚𝑔𝑙𝛾1

𝛽 =𝐾𝑝2

𝛾 =𝛾2𝛾1

Siendo cada una de las fronteras mencionadas, las representadas en la malla de la 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)||𝛽(𝑞2 − 𝛾𝑞1)2| < 1

Operando con órdenes de magnitud para obtener una estimación nos queda:

𝑂(𝑞2 − 𝛾𝑞1)2 =𝑂(|𝛼 cos(𝑞1)|)

𝑂(|𝛽|)

𝑂(𝑞2 − 𝛾𝑞1)2 =𝑂(𝛼) − 1𝑂(|𝛽|)

𝑂(𝑞2 − 𝛾𝑞1) = 𝑂��𝑂(𝛼) − 1𝑂(|𝛽|)

Figura 3.2.1.1

28

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)||𝛽(𝑞2 − 𝛾𝑞1)2| > 1

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𝑓 ,𝑞2� = 𝛽(𝑞2 − 𝛾𝑞1𝑓)2 𝑓𝑟𝑜𝑛𝑡𝑒𝑟𝑎 2

𝑉�𝑞1,𝑞20� = 𝛽(𝑞20 − 𝛾𝑞1)2 𝑓𝑟𝑜𝑛𝑡𝑒𝑟𝑎 3

𝑉 �𝑞1,𝑞2𝑓� = 𝛽(𝑞2𝑓 − 𝛾𝑞1)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) − 𝑉(𝑞1 − ℎ, 𝑞2)

𝑉(𝑞1,𝑞2)𝑞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.

29

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:

−𝑢𝑚𝑝 −𝑢𝑚−1

𝑝

ℎ+ 4

𝑢𝑚𝑝 − 𝑢𝑚

𝑝−1

𝑘= 0 ,

llamando λ a:

𝜆 =𝑘4ℎ

−𝜆�𝐴𝑝𝑒𝑖𝛼𝑚 − 𝐴𝑝𝑒𝑖𝛼(𝑚−1)�+ 𝐴𝑝𝑒𝑖𝛼𝑚 − 𝐴𝑝−1𝑒𝑖𝛼𝑚 = 0 ,

𝐴 = 1 − 𝜆 + 𝜆𝑒−𝑖𝛼 = 1 − 𝜆 + 𝜆�cos(𝛼) − 𝑖𝑠𝑒𝑛(𝛼)�.

Representando esta curva en el plano complejo en la 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ℎ

=4𝜋 ∙ 𝑛𝑞1

16𝜋 ∙ 𝑛𝑞2=

604 ∙ 60

= 0,25 < 1

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:

Figura 3.2.1.1.1.1

30

−𝑉(𝑞1,𝑞2) − 𝑉(𝑞1 − ℎ, 𝑞2)

ℎ+ 4

𝑉(𝑞1,𝑞2)− 𝑉(𝑞1,𝑞2 − 𝑘)𝑘

= −10 𝑠𝑒𝑛(𝑞1),

𝑣𝑖+1,𝑗 = (1 − 𝜆)𝑣𝑖,𝑗 + 𝜆𝑣𝑖,𝑗−1 + 𝑘104

𝑠𝑒𝑛(𝑞1)

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.

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:

Figura 3.2.1.1.1.2

31

y la solución exacta en la 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.

Figura 3.2.1.1.1.3

Figura 3.2.1.1.1.4

32

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)

2ℎ+ 4

𝑉(𝑞1,𝑞2 + 𝑘)− 𝑉(𝑞1, 𝑞2)2𝑘

= −10 𝑠𝑒𝑛(𝑞1),

Figura 3.2.1.1.1.5

33

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.

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

𝑝

2ℎ+ 4

𝑢𝑚𝑝+1 − 𝑢𝑚

𝑝

𝑘= 0 ,

llamando λ a:

𝜆 =𝑘8ℎ

−𝜆�𝐴𝑝𝑒𝑖𝛼(𝑚+1) − 𝐴𝑝𝑒𝑖𝛼(𝑚−1)�+ 𝐴𝑝+1𝑒𝑖𝛼𝑚 − 𝐴𝑝𝑒𝑖𝛼𝑚 = 0

Operando nos queda:

Figura 3.2.1.1.2.1

34

𝐴 = 1 + 𝜆�𝑒𝑖𝛼 − 𝑒𝑖𝛼�

Cuya representación en el plano complejo está representada en la 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

𝑝

2ℎ+ 4

𝑢𝑚𝑝+1 − 𝑢𝑚

𝑝−1

2𝑘= 0 ,

llamando λ a:

𝜆 =𝑘4ℎ

Figura 3.2.1.1.2.2

35

−𝜆�𝐴𝑝𝑒𝑖𝛼(𝑚+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

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

Figura 3.2.1.1.3.1

36

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

𝜆 =𝑘4ℎ

=4𝜋 ∙ 𝑛𝑥

16𝜋 ∙ 𝑛𝑦=

𝑛𝑞14 ∙ 𝑛𝑞2

= 0,25

𝑛𝑞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) − 𝑉(𝑞1 − ℎ, 𝑞2)

2ℎ

𝑉(𝑞1,𝑞2)𝑞2 ≈𝑉(𝑞1,𝑞2 + 𝑘) − 𝑉(𝑞1,𝑞2 − 𝑘)

2𝑘

Sustituyendo en la ecuación (2.2.4) nos queda:

−𝑉(𝑞1 + ℎ, 𝑞2) − 𝑉(𝑞1 − ℎ, 𝑞2)

2ℎ+ 4

𝑉(𝑞1,𝑞2 + 𝑘) − 𝑉(𝑞1,𝑞2 − 𝑘)2𝑘

= −10 𝑠𝑒𝑛(𝑞1)

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.

Figura 3.2.1.1.3.2

37

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)𝜕𝑞2

= 𝑔(𝑞1)

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

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

Figura 3.2.1.1.3.3

Figura 3.2.1.1.3.4

38

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:

𝜕𝑉(𝑞1,𝑞2)𝜕𝑞2

= 𝑔(𝑞1) =𝑉�𝑞1, 𝑞2 + 𝑘� − 𝑉�𝑞1, 𝑞2�

𝑘= 1

Y por lo tanto:

𝑉(𝑞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

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).

Figura 3.2.1.1.3.5

39

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

𝑉(𝑞1, 2𝜋) = −10 cos(𝑞1) + 0,5(2𝜋 − 4𝑞1)2 𝑓𝑟𝑜𝑛𝑡𝑒𝑟𝑎 4

Con ellos nos queda la siguiente aproximación mostrada en la figura 3.2.2.1.1.

Figura 3.2.1.1.3.6

40

Cuyo error con respecto a la solución exacta puede verse en la 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:

Figura 3.2.2.1.1

Figura 3.2.2.1.2

41

𝑉(−2𝜋, 𝑞2) = −10 cos(−2𝜋) + 0,5 ∙ (𝑞2 − 4(−2𝜋))2 𝑓𝑟𝑜𝑛𝑡𝑒𝑟𝑎 1

𝑉(2𝜋, 𝑞2) = −10 cos(2𝜋) + 0,5(𝑞2 − 4(2𝜋))2 𝑓𝑟𝑜𝑛𝑡𝑒𝑟𝑎 2

𝑉(𝑞1,−2𝜋) = −10 cos(𝑞1) + 0,5(−2𝜋 − 4𝑞1)2 𝑓𝑟𝑜𝑛𝑡𝑒𝑟𝑎 3

Además de la de Neumann:

𝜕𝑉(𝑞1,𝑞2)𝜕𝑞2

= 0

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

42

Nota: El análisis de todos los resultados calculados en esta sección se pospone a la sección cinco.

43

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

44

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.

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

Figura 4.1.2.1

45

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 integro-diferencial (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

46

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

𝑘12𝑘22

⋯ 𝑘1𝑛⋯ 𝑘2𝑛

⋮ ⋮ ⋱ ⋮𝑘𝑛1 𝑘𝑛2 ⋯ 𝑘𝑛𝑛

� �𝑎1𝑎2⋮𝑎𝑛� = �

𝑓1𝑓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). 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

Figura 4.1.2.2

47

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. 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 sin𝜋𝑛

cos𝜋𝑛

=𝑅2

2sin

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:

𝑆𝑇 = �𝑆𝑖 = 𝑛𝑅2

2sin

2𝜋𝑛

𝑛

𝑖=1

Si hacemos que el número de triángulos tienda a infinito, se tiene:

lim𝑛→∞

𝑆𝑇 = lim𝑛→∞

𝑛𝑅2

2sin

2𝜋𝑛

= lim𝛾→0

𝑅2sin𝛾𝜋𝛾

= lim𝛾→0

𝑅2cos𝛾𝜋

1= 𝜋𝑅2

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

Figura 4.1.2.3

48

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.

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. 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.

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.

Figura 4.1.2.4

Figura 4.1.2.5

Figura 4.1.2.6

49

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. 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.

Figura 4.1.2.1.1

50

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. 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(𝑥)

𝑢(𝑥, 0,5) = cos(𝑥) 𝑒12

𝑓(𝑥,𝑦) = 𝑒𝑦(cos(𝑥) − sin(𝑥))

Figura 4.1.2.1.2

51

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

𝜕𝑢�𝜕𝑦

= �𝑎𝑖𝜕𝑁𝑖(𝑥,𝑦)

𝜕𝑦

𝑚

𝑖=1

𝜕2𝑢�𝜕𝑥2

= �𝑎𝑖𝜕2𝑁𝑖(𝑥,𝑦)

𝜕𝑥2

𝑚

𝑖=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:

𝜙 = � ��𝑎𝑖𝜕2𝑁𝑖(𝑥, 𝑦)

𝜕𝑥2

𝑚

𝑖=1

+ �𝑎𝑖𝜕𝑁𝑖(𝑥,𝑦)

𝜕𝑥

𝑚

𝑖=1

𝑁(𝑥,𝑦) + �𝑎𝑖𝜕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:

𝜙 = � ���𝑎𝑖𝐵𝑖𝑙 + 𝑎𝑖𝐶𝑖𝑙�𝑚

𝑖=1

− 𝑓(𝑥,𝑦) ∙ (𝐴𝑖𝑙 + 𝐵𝑖𝑙 + 𝐶𝑖𝑙)�𝛺

Se busca que:

52

𝜕𝜙𝜕𝑎𝑖

= 0 𝑖 = 1, … ,𝑛 ,

entonces tenemos:

𝜕𝜙𝜕𝑎𝑖

= (𝑘𝑖1𝑎1 + 𝑘𝑖2𝑎2 + ⋯+ 𝑘𝑖𝑚𝑎𝑚 − 𝑓𝑖) = 0 𝑖 = 1,2, … ,𝑚 ,

��𝑎𝑖𝐵𝑖𝑙 + 𝑎𝑖𝐶𝑖𝑙�𝑚

𝑖=1

− 𝑓(𝑥,𝑦) ∙ �𝐴𝑖𝑙 + 𝐵𝑖𝑙 + 𝐶𝑖𝑙� = 0 𝑙 = 1,2, … ,𝑚.

Agrupando expresiones nos queda el término genérico 𝑘𝑖𝑙

𝑘𝑖𝑙 =𝐵𝑖𝑙 + 𝐶𝑖𝑙

𝐴𝑖𝑙 + 𝐵𝑖𝑙 + 𝐶𝑖𝑙 ,

podemos expresar todos los términos como un sistema de ecuaciones.

𝑘11𝑘21

𝑘12𝑘22

⋯ 𝑘1𝑛⋯ 𝑘2𝑛

⋮ ⋮ ⋱ ⋮𝑘𝑛1 𝑘𝑛2 ⋯ 𝑘𝑛𝑛

� �𝑎1𝑎2⋮𝑎𝑛� = �

𝑓1𝑓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

53

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. 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 𝑝𝑎𝑟𝑎 𝑖 ≠ 𝑗

Figura 4.1.2.2.2

54

En nuestro caso hemos elegido 𝑃1 y el resultado es el mostrado en la 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.3

Figura 4.1.2.2.4

55

El error de la aproximación está representado en la 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.

Figura 4.1.2.2.5

56

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𝑓 ,𝑞2� = 𝛽(𝑞2 − 𝛾𝑞1𝑓)2 𝑓𝑟𝑜𝑛𝑡𝑒𝑟𝑎 2

𝑉�𝑞1,𝑞20� = 𝛽(𝑞20 − 𝛾𝑞1)2 𝑓𝑟𝑜𝑛𝑡𝑒𝑟𝑎 1

𝑉 �𝑞1,𝑞2𝑓� = 𝛽(𝑞2𝑓 − 𝛾𝑞1)2 𝑓𝑟𝑜𝑛𝑡𝑒𝑟𝑎 3

Para

𝛽 =𝐾𝑝2

= 0,5 𝛾 =𝛾2𝛾1

= 4

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

= �𝑎𝑖𝜕𝑁𝑖(𝑞1,𝑞2)

𝜕𝑞1

𝑚

𝑖=1

𝜕𝑢�𝜕𝑞2

= �𝑎𝑖𝜕𝑁𝑖(𝑞1,𝑞2)

𝜕𝑞2

𝑚

𝑖=1

Tenemos ahora que obtener una expresión variacional de nuestra ecuación diferencial:

� −𝜕𝑢𝜕𝑞1

𝑁(𝑞1,𝑞2) + 4𝜕𝑢𝜕𝑞2

𝑁(𝑞1, 𝑞2) = �𝑓(𝑞1,𝑞2) ∙ 𝑁(𝑞1,𝑞2)𝛺𝛺

,

57

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

� −�𝑎𝑖𝜕𝑁𝑖(𝑞1,𝑞2)

𝜕𝑞1

𝑚

𝑖=1

𝑁(𝑞1,𝑞2) + 4�𝑎𝑖𝜕𝑁𝑖(𝑞1,𝑞2)

𝜕𝑞2

𝑚

𝑖=1

𝑁(𝑞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.

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 + 𝑏 = −𝜋 ,

𝑥 = 1 → 𝑎 ∙ 1 + 𝑏 = 𝜋 ,

por tanto:

Figura 4.2.1.1

58

𝑎 = 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. 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.

Figura 4.2.1.2

59

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:

−𝜕𝑉𝜕𝑞1

+ 4𝜕𝑉𝜕𝑞2

− 𝜀𝜕2𝑉𝜕𝑞12

− −𝜀𝜕2𝑉𝜕𝑞22

= −10 𝑠𝑒𝑛(𝑞1)

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.

Expresando la ecuación de forma variacional nos queda:

� �−𝜕𝑉𝜕𝑞1

+ 4𝜕𝑉𝜕𝑞2

− 𝜀𝜕2𝑉𝜕𝑞12

− −𝜀𝜕2𝑉𝜕𝑞22

�𝛺

𝑁(𝑞1,𝑞2) = �𝑓(𝑞1,𝑞2) ∙ 𝑁(𝑞1,𝑞2)𝛺

(4.2.1.1.1)

∀ 𝑢 ≈�𝑎𝑖𝑁𝑖(𝑞1, 𝑞2)𝑚

𝑖=1

∀ 𝑁𝑖(𝑞1,𝑞2) 𝑓𝑢𝑛𝑐𝑖𝑜𝑛𝑒𝑠 𝑑𝑒 𝑝𝑟𝑢𝑒𝑏𝑎 𝑑𝑒 𝑃1

Desarrollando la ecuación (4.2.1.1.1) llegamos a:

� �𝜀𝜕𝑢𝜕𝑞1

𝜕𝑁𝑖(𝑞1,𝑞2)𝜕𝑞1

+ 𝜀𝜕𝑢𝜕𝑞2

𝜕𝑁𝑖(𝑞1, 𝑞2)𝜕𝑞2

−𝜕𝑢𝜕𝑞1

𝑁(𝑞1,𝑞2) + 4𝜕𝑢𝜕𝑞2

𝑁(𝑞1,𝑞2)�𝛺

= �𝑓(𝑞1, 𝑞2) ∙ 𝑁(𝑞1,𝑞2)𝛺

Figura 4.2.1.1.1

60

Reordenando términos:

� �𝜀𝜕𝑁𝑖(𝑞1,𝑞2)

𝜕𝑞1− 𝑁(𝑞1,𝑞2)�

𝛺�𝑎𝑖

𝜕𝑁𝑖(𝑞1, 𝑞2)𝜕𝑞1

𝑚

𝑖=1

+ � �𝜀𝜕𝑁𝑖(𝑞1,𝑞2)

𝜕𝑞2+ 4𝑁(𝑞1,𝑞2)��𝑎𝑖

𝜕𝑁𝑖(𝑞1,𝑞2)𝜕𝑞2

𝑚

𝑖=1𝛺= �𝑓(𝑞1,𝑞2) ∙ 𝑁(𝑞1,𝑞2)

𝛺

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.

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.2

Figura 4.2.1.1.3

61

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𝑓 ,𝑞2� = −𝛼 cos(𝑞1𝑓) + 𝛽(𝑞2 − 𝛾𝑞1𝑓)2 𝑓𝑟𝑜𝑛𝑡𝑒𝑟𝑎 2

𝑉�𝑞1,𝑞20� = −𝛼 cos(𝑞1) + 𝛽(𝑞20 − 𝛾𝑞1)2 𝑓𝑟𝑜𝑛𝑡𝑒𝑟𝑎 1

𝑉 �𝑞1, 𝑞2𝑓� = −𝛼 cos(𝑞1) + 𝛽(𝑞2𝑓 − 𝛾𝑞1)2 𝑓𝑟𝑜𝑛𝑡𝑒𝑟𝑎 3

𝛼 =𝑚𝑔𝑙𝛾1

= 10 𝛽 =𝐾𝑝2

= 0,5 𝛾 =𝛾2𝛾1

= 4

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𝜋 ,

𝑥 = 1 → 𝑎 ∙ 1 + 𝑏 = 2𝜋 ,

por tanto:

𝑎 = 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.

62

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.

Siendo la curva de error la representada en la figura 4.2.2.2.

Figura 4.2.2.1

Figura 4.2.2.2

63

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.

Nota: Tanto los resultados de esta sección como los de la sección tres, se analizan y comparan en la sección cinco.

Figura 4.2.2.3

64

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

65

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.

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.

Diagrama 5.1.2

66

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 39,7507 0,1206 - 200 2,5034 0,1557 64 150 0,0317 5,491 33 250 39,7933 0,2204 - 250 2,0143 0,2377 118 175 0,0249 7,582 49 300 39,8236 0,2829 - 300 1,6861 0,3717 440 200 0,0179 9,266 64 350 39,8463 0,4233 - 350 1,4512 0,632 900 225 0,0121 12,168 92 400 39,8638 0,6029 - 400 1,2737 0,9699 1400 250 0,0066 14,929 118 450 39,8778 0,8248 - 450 1,1349 1,1919 2050 275 0,0017 18,318 274 500 39,8892 0,9126 - 500 1,0234 1,4996 3100 300 0,0001 22,639 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.

Un ejemplo de este fenómeno para unas condiciones iniciales [𝑞1, �̇�1,𝑞2, �̇�2] = �−𝜋, 0, 𝜋2

, 0� se

adjunta en la figura 5.2.1.1 a continuación.

67

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

[𝑞1, �̇�1,𝑞2, �̇�2] = �−𝜋, 0, 𝜋2

, 0�.

Figura 5.2.1.1

Figura 5.2.2.1

68

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.

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.2

Figura 5.2.2.3

69

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.

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.4

Figura 5.2.2.5

70

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.

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

Figura 5.2.2.6

Figura 5.2.2.7

71

unas condiciones iniciales [𝑞1, �̇�1,𝑞2, �̇�2] = �𝜋3

, 0, 𝜋8

, 0�, se obtienen los resultados de la 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.

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.

Figura 5.2.3.1

Figura 5.2.3.2

72

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.

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.

Figura 5.2.3.3

Figura 5.2.3.4

73

Por último se realiza una comparación general entre las simulaciones del sistema con unas

condiciones iniciales [𝑞1, �̇�1,𝑞2, �̇�2] = �𝜋3

, 0, 𝜋8

, 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.5

Figura 5.2.3.6

74

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.

75

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.

76

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 + 𝑘104

𝑠𝑒𝑛(𝑞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;

Figura A.1.1

77

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)𝜕𝑞2

= 𝑔(𝑞1) =𝑉�𝑞1, 𝑞2 + 𝑘� − 𝑉�𝑞1, 𝑞2�

𝑘= 1

𝑉(𝑞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)

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.

Figura A.2.1

78

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:

𝑎𝑥 + 𝑏 = 𝑦

79

Con

𝑥 = 0 → 𝑎 ∙ 0 + 𝑏 = −2𝜋 ,

𝑥 = 1 → 𝑎 ∙ 1 + 𝑏 = 2𝜋 ,

𝑎 = 4𝜋 𝑏 = −2𝜋 ,

nuestra ecuación queda: 𝑦 = 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.

80

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

81

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

82

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 = x(1); xf = x(length(x)); y0 = y(1); yf = y(length(y));

83

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.

84

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.