You are on page 1of 174

Este informe describe el proyecto fin de carrera titulado Resolucin Numrica

de EDPS asociadas a problemas de control, realizado por Carlos Lucas


Rodrguez, para la carrera Ingeniera Aeronutica dependiente del
Departamento de Ingeniera en Sistemas y Automtica de la Universidad de
Sevilla. Este proyecto fue realizado bajo la supervisin del profesor D. Jos
ngel Acosta Rodrguez.

El informe fue redactado en Microsoft Office y Adobe PDF. La familia de fuentes


utilizada es Verdana, 11, para texto, y Courier Math para expresiones
matemticas.
Sevilla, 20 de Septiembre de 2012.

Esta pgina ha sido intencionalmente dejada en blanco

Agradecimientos

A mi padre, mi madre y mis hermanos,


por darme todo su apoyo y confianza.
A mi abuela.
A los que no se encuentran entre nosotros,
siempre estaris presentes.
A aquellos que me ayudaron a seguir hacia adelante.
A aquellos profesores que siempre me apoyaron.
A mi tutor Jos ngel A. R.
por su apoyo y dedicacin

Esta pgina ha sido intencionalmente dejada en blanco

Resumen

Este proyecto presenta los resultados obtenidos al aplicar un caso particular


del MDF (Mtodo de las Diferencias Finitas) en la resolucin de EDPS (Sistemas
de Ecuaciones Diferenciales Parciales).
Se presentar la formulacin matemtica del MDF para funciones de dos
variables y posteriormente se implementar para funciones en derivadas
parciales de orden dos. Asimismo se utilizar esta formulacin para la
resolucin de EDPS.
El mtodo, programado en MATLAB, se ha aplicado a un caso prctico: el
pndulo invertido. El software ha sido utilizado para generar parmetros
esenciales de la ley de control que sera la responsable de estabilizar el
sistema.
La memoria finaliza con una serie de conclusiones y futuras tareas para esta
lnea de trabajo planteada.

Esta pgina ha sido intencionalmente dejada en blanco


Captulo 1. Motivacin y objetivos
1.1. Introduccin................................................................................. 1

Captulo 2. EDPS
2.1. Introduccin................................................................................. 3
2.2. Tipo ............................................................................................ 6
2.3. Sistemas de Ecuaciones................................................................. 9
2.4. Condiciones de Contorno ............................................................. 10

Captulo 3. Resolucin de EDPS


3.1. Aproximacin de Derivadas. El MDF. ............................................. 11
3.2. El mtodo de la molcula ............................................................. 14
3.3. Ejemplos ................................................................................... 20
3.4. Clculo de soluciones en EDPS. Aproximacin de la solucin ............ 25

Captulo 4. El Integrador Numrico EDPS_MDF_2D


4.1. El Integrador Numrico: Programacin en MATLAB ......................... 27
problema.m............................................................................. 29
modulo0.m .............................................................................. 32
modulo1.m ............................................................................. .34
modulo2.m .............................................................................. 41
modulo3.m .............................................................................. 52
modulo4.m .............................................................................. 63
modulo5.m .............................................................................. 70
modulo6.m .............................................................................. 76

script.m .................................................................................. 81

Captulo 5. Integrador EDPS_MDF_2D: Soluciones


5.1. EDP de orden uno y dos variables ................................................. 83
5.2. EDP de orden dos y dos variables ................................................. 94
a) Ejemplo 1: Ecuacin de ondas ............................................... 94
b) Ejemplo 2: Laplaciano 2D ...................................................... 94
5.3. EDPS de orden uno y dos variables ............................................... 99

Captulo 6. Aplicacin: Control del Pndulo Invertido


6.1. Ecuaciones de Euler-Lagrange .................................................... 101
6.2. Ecuaciones de Control ............................................................... 102
6.3. Anlisis y discusin de los resultados obtenidos ............................ 106

Captulo 7. Conclusiones y Trabajo Futuro


7.1. Conclusiones ............................................................................ 141
7.2. Trabajo Futuro ......................................................................... 146

Anexos
Anexo A ......................................................................................... 151
Anexo B ......................................................................................... 152
Anexo C ......................................................................................... 153
Anexo D ......................................................................................... 155

Glosario ............................................................................................. 159


Bibliografa ........................................................................................ 161

Captulo 1
Motivacin y objetivos
1.1

Introduccin

Para estudiar un sistema fsico ya sea ste mecnico, elctrico o de otro tipo,
es necesario realizar un modelo matemtico que refleje el comportamiento de
las magnitudes fsicas que intervienen en el sistema. Estos modelos
matemticos generalmente expresan las relaciones entre las diferentes
magnitudes a travs de ecuaciones diferenciales siendo stas, ecuaciones
diferenciales parciales si las magnitudes bajo estudio dependen de ms de una
variable.
El objetivo del presente proyecto es sentar las bases para generar un software
que permita resolver EDPS. Para ello se aplicarn mtodos numricos, en
particular el Mtodo de las Diferencias Finitas, que permitir obtener una
aproximacin de la solucin. Dicho mtodo ser programado bajo el nombre de
EDPS_MDF_2D, software del cul se hablar en detalle en el captulo 4 del

presente texto. Una vez hecho esto, se proceder a resolver un tipo especial
de EDPs que surge en problemas de control de determinados sistemas
mecnicos. Dicha solucin se utilizar para calcular la ley de control que regula
el sistema. Con ayuda de un programa de simulacin, Simulink, incluido en el
paquete MATLAB, se podr visualizar el comportamiento del sistema ante la
1

seal de control analtica y la aproximada por el mtodo numrico


implementado. Es por ello por lo que resulta interesante buscar formas de
crear un software que pueda aportar una aproximacin en la resolucin de
EDPS, ya que son muchos los fenmenos de la naturaleza que son modelados
por este tipo de ecuaciones.
El software aqu generado, EDPS_MDF_2D, ha sido programado en MATLAB.
MATLAB ofrece un entorno de desarrollo integrado (IDE) con un lenguaje de
programacin propio (lenguaje M) estando disponible para diversos sistemas
operativos. Esto implica mayor flexibilidad a la hora de modificar o generar
nuevo cdigo.
Se ha elegido este software porque entre sus prestaciones bsicas se hallan: la
manipulacin de matrices, la representacin de datos y funciones, la
implementacin de algoritmos, la creacin de interfaces de usuario (GUI) y la
comunicacin con programas en otros lenguajes y con otros dispositivos
hardware. El paquete MATLAB dispone de dos herramientas adicionales que
expanden sus prestaciones, a saber, Simulink (plataforma de simulacin
multidominio) y GUIDE (editor de interfaces de usuario - GUI). Adems, se
pueden ampliar las capacidades de MATLAB con las cajas de herramientas
(toolboxes); y las de Simulink con los paquetes de bloques (blocksets).
Asimismo, MATLAB es muy usado en universidades y centros de investigacin
y desarrollo, por lo tanto es un programa actualizado. Hecho que se refleja en
el aumento del nmero de prestaciones en los ltimos aos. Una de ellas, la de
programar directamente procesadores digitales de seal o crear cdigo VHDL.
Por ltimo comentar que, si en principio ya existen programas en el mercado
que resuelven problemas especficos de ingeniera mediante mtodos
numricos, como por ejemplo, Ansys Structural para resolver problemas de
elasticidad o Ansys Fluent para simular determinados comportamientos de los
fluidos, stos son de tipo particular y no de carcter general, es decir, no
resuelven cualquier tipo de ecuaciones planteadas por el usuario.

Captulo 2
EDPS
2.1

Introduccin

Hoy en da los modelos matemticos usados para describir la realidad plantean


ecuaciones, generalmente en derivadas, que son resueltos mediante el uso de
computadoras. Estas facilitan y aligeran la tediosa tarea, en ocasiones
mecnica, de tener que realizar grandes cantidades de clculos para obtener
una estimacin sobre el comportamiento del sistema bajo estudio.
Es fcil pensar que si un mvil avanza un metro por cada segundo que
transcurre, a los dos segundos el mvil habr avanzado dos metros y as
sucesivamente. Esta descripcin de la realidad obedece a una simple ecuacin
, donde es la posicin, es el tiempo y la velocidad o
diferencial
tasa de variacin de la posicin con respecto al tiempo, siendo en este caso
intuitiva su solucin.
Sin embargo, no todos los modelos existentes en la naturaleza son tan
sencillos. La complejidad de los modelos reside tanto en el nmero de
variables que intervienen en l como en el tipo de relaciones existentes entre
ellas. No es lo mismo analizar el comportamiento de un sistema elstico
dotado de un solo grado de libertad, (por ejemplo un muelle con un extremo
fijo) que un sistema elstico de varios grados de libertad. As mismo, no es lo
mismo considerar que este muelle que mencionbamos realice su movimiento
en el vaco, que en presencia de disipacin de energa. Es por ello por lo que el
empleo de ordenadores en la resolucin de estos modelos es imprescindible. Y
para que los resultados obtenidos sean ptimos, los mtodos de clculo
empleados, que debern ser numricos, han de ser lo ms eficiente posible.
Una vez se ha justificado el porqu del uso de un ordenador para obtener los
resultados se ha de hacer una breve descripcin de qu son las ecuaciones
diferenciales, algunos de sus tipos y los sistemas que generan.
Se entiende por ecuacin diferencial cualquier ecuacin en la que interviene
una variable dependiente y sus derivadas con respecto a una o ms variables
independientes. Muchas leyes de la naturaleza, en fsica, qumica, biologa o
3

astronoma, encuentran su expresin ms natural en el lenguaje de las


ecuaciones deferenciales. Son asimismo abundantes sus aplicaciones en la
propia matemtica, especialmente en geometra, y tambin en ingeniera,
economa y en otro muchos campos de las ciencias aplicadas.
Es fcil comprender la razn que se oculta tras una tan amplia gama de
aplicaciones de las ecuaciones diferenciales. El lector recordar que si
es una funcin dada, su derivada se puede interpretar como el ritmo de cambio
de con respecto a . En cualquier proceso natural, las variables involucradas
sus ritmos de variacin estn relacionadas entre s por medio de los
principios cientficos bsicos que gobiernan dichos proceso. Al expresar tal
conexin en smbolos matemticos, el resultado es con frecuencia una
ecuacin diferencial.
El siguiente ejemplo ilustra estos comentarios. De acuerdo con la segunda ley
de Newton, la aceleracin a de un cuerpo de masa m es proporcional a la
fuerza total , que acta sobre l con 1
como constante de proporcionalidad,
de modo que
, o sea,
(2.1.1)
Supongamos, por ejemplo, que un cuerpo de masa m cae bajo la sola
influencia de la gravitacin. En tal caso, la nica fuerza que acta sobre l es
mg, donde g denota la aceleracin de la gravedad. Si y es la altura medida
hacia abajo desde una cierta posicin prefijada, entonces su velocidad

es el ritmo de cambio de su posicin y su aceleracin

es el ritmo de cambio de la velocidad. Con esta notacin,


(2.1.1) se convierte en
(2.1.2)
O sea,
(2.1.3)
Si alteramos la situacin, admitiendo que el aire ejerce una fuerza de
resistencia proporcional a la velocidad, la fuerza total que acta sobre el
, y (2.1.1) pasa a ser
cuerpo es

(2.1.4)

Las ecuaciones (2.1.2) y (2.1.3) son las ecuaciones diferenciales que modelan
el comportamiento de los dos procesos fsicos bajo consideracin.

Como ejemplos adicionales de ecuaciones diferenciales cabe citar:


(2.1.5)
(2.1.6)
En cada una de esas ecuaciones la variable dependiente es , mientras que la
variable independiente es . Las letras ,
y
representan constantes. Una
ecuacin diferencial ordinaria es una en la que slo existe una variable
independiente, de manera que todas las derivadas que aparecen en ella son
derivadas ordinarias. Todas las que acabamos de citar son ordinarias. El orden
de una ecuacin diferencial es el orden de la derivada ms alta que contiene.
Las ecuaciones (2.1.5) y (2.1.6) son de primer y segundo orden
respectivamente.
Una ecuacin diferencial en derivadas parciales es una que hace intervenir ms
de una variable independiente, de modo que las derivadas que aparecen en
ella son derivadas parciales. Por ejemplo, si
es una funcin del
tiempo y de las tres coordenadas rectangulares de un punto en el espacio, las
que siguen son ecuaciones diferenciales en derivadas parciales de segundo
orden:
(2.1.7)
(

(2.1.8)

(2.1.9)

stas son EDPs clsicas. Se trata, respectivamente, de las ecuaciones de


Laplace, del calor y de ondas. Cada una de ellas posee un importante
significado en fsica terica, y su estudio ha estimulado el desarrollo de muchas
ideas matemticas relevantes. En general, las EDPs aparecen en la mecnica
de los medios continuos, en problemas relacionados con campos elctricos,
dinmica de fluidos, difusin y movimientos ondulatorios, sin dejar de lado
todo lo relativo al estudio de fenmenos aerodinmicos. Su teora es muy
diferente de la de las ecuaciones diferenciales ordinarias, y notablemente ms
difciles de resolver en casi todas sus facetas.

2.2

Tipos

Una vez conocido el concepto de ecuacin diferencial parcial resulta de inters


su clasificacin. Esto ayudar a la hora de proponer una solucin, puesto que
cada tipo posee un anlisis en particular. Si bien esto puede parecer muy
prctico, hay que decir que slo en determinados casos la solucin de la
ecuacin planteada tendr solucin analtica.

A) Ecuaciones diferenciales de una variable


Existen muchos tipos de mtodos numricos para aproximar la solucin de
este tipo de ecuaciones. Su expresin genrica es:
(

Como se puede observar, al existir una nica variable independiente, las


derivadas no son parciales, sino totales. Por tanto, no hay que confundirlas con
una ecuacin diferencial parcial. Son ecuaciones diferenciales ordinarias.

B) EDPs de orden dos en dos variables


Segn el tipo de problema (nmero de coeficientes y valores de stos) existen
unos mtodos recomendados para resolverlos.
Su expresin ms genrica es:

Y en funcin de los coeficientes a, b y c esta ecuacin ser elptica, hiperblica,


o parablica.
Ecuacin Elptica
Si
4 < la ecuacin diferencial parcial es elptica. Estas
ecuaciones son tpicas de problemas estacionarios, generalmente
problemas de potencial. Dos ejemplos seran:
Ecuacin de Poisson

Ecuacin de Laplace

En ambos casos

1,

1 y consecuentemente
6

4 <

Ecuacin Hiperblica
Si
4
la ecuacin diferencial parcial es hiperblica.
Estas ecuaciones son tpicas de problemas oscilatorios. Un ejemplo
sera:

La ecuacin de ondas

En este caso

1,

por lo que

Ecuacin Parablica
Si
4
la ecuacin diferencial parcial es hiperblica.
Estas ecuaciones son tpicas de problemas que describen flujos,
como es el caso de la conduccin de calor o de materia.

La ecuacin de calor
En este caso

1,

por lo que

En los ejemplos tratados, se han considerado los coeficientes ,


y
constantes pero en general, estos coeficientes dependen de las variables
independientes, por lo que la ecuacin cambiar de un tipo a otro en el mismo
dominio.

C) EDPs de orden dos definidas en

siendo

Las EDPs de segundo orden se aplican a una inmensa cantidad de fenmenos


fsicos. Su expresin genrica es:
(
Un ejemplo para

)
podra ser
(

donde

D) EDPs de orden superior definidas en

siendo

Otros procesos fsicos son modelados mediante EDPs de rdenes superiores.


Su expresin genrica es:
(

Ejemplos de inters de estas ecuaciones son los siguientes:

Flexin mecnica de una placa elstica:

Vibracin flexional de una viga:


[

Ecuacin de Korteweg-de Vries, que tiene soluciones de tipo solitn1,


[

Ecuacion de KadomtsevPetviashvili,
movimiento no lineal de una onda:
(

utilizadas

para

modelar

el

No existen mtodos genricos para su resolucin. sta depender del tipo de


problema. (Polyanin, 2002)

Un solitn es una onda solitaria que se propaga sin deformarse en un medio no lineal. Para un mejor
entendimiento se anexa una imagen y su explicacin.

La lnea azul son las ondas portadoras, mientras que la lnea roja es la envolvente de los solitones.

2.3

Sistemas de Ecuaciones

Para finalizar este captulo solo quedara por describir el problema matemtico
que puede generar la agrupacin de dichas ecuaciones. Efectivamente, se est
hablando de un problema que se podra identificar como un sistema de
ecuaciones diferenciales parciales, en el que existiran
ecuaciones con
incgnitas. La particularidad de este sistema residira en que las incgnitas a
resolver seran funciones en vez de variables simples. Y por tanto, la solucin
consistira en un conjunto de funciones, lineales o no lineales, dependientes
de las
variables del problema, definidas por el dominio en el que estn
definidas estas funciones.
Un ejemplo de un sistema de ecuaciones diferenciales parciales sera el
generado por las ecuaciones de Navier-Stokes, muy conocidas en Mecnica de
Fluidos:

(
[ (

)]

)
)]

( )

Donde las incgnitas son


,
,
,
,
,
definidas en
pues son cuatro las variables de las que depende
cada funcin incgnita. Este sistema tiene solucin tras una serie de
simplificaciones e hiptesis que reduce tanto el nmero de incgnitas como el
nmero de variables independientes.
Con esto, se pretender dar a conocer al lector, que la resolucin de una
ecuacin diferencial parcial en s es compleja, y al aumentar el nmero de
ecuaciones y el nmero de variables, la complejidad es an mayor, por lo que,
generalmente, se requiere de simplificaciones y un estudio minucioso de cada
problema para poder llegar a soluciones analticas.
9

2.4

Condiciones de Contorno

Para concluir el captulo presente, se hablar de otro aspecto importante que


completa la definicin de toda ecuacin diferencial parcial. ste se refiere a las
condiciones de contorno. stas regulan la solucin concreta del problema que
se est tratando. Dichas condiciones modelan la funcin primitiva y son
responsables de que cambie, por norma general, la solucin planteada en un
caso y en otro.
Los tipos de condiciones de contorno que podemos encontrar son:

Condiciones de frontera tipo Dirichlet:


Son aquellas condiciones de contorno que se expresan mediante la
evaluacin directa de la funcin incgnita en la frontera, es decir, en la
frontera el valor que adquiere la funcin primitiva (aquella a la cul queremos
llegar) es conocido.

Si la variable independiente en la que est expresada la condicin de


frontera hace referencia al tiempo , suelen denominarse condiciones iniciales.

Condiciones de frontera tipo Neumann:


Son aquellas condiciones de contorno que se expresan mediante la
evaluacin de la derivada de la funcin incgnita en la frontera, es decir, se
conoce el valor que adquiere la derivada de la funcin primitiva en la frontera.

Condiciones de frontera tipo Robin:


Son aquellas que se expresan mediante una combinacin de las
anteriores.

10

Captulo 3.
Resolucin De EDPs
En este captulo se describir el mtodo numrico utilizado para resolver
aquellos problemas en los que aparecen EDPs. La idea es aproximar la
expresin de la derivada y sustituir su valor exacto por uno aproximado. Si
bien existen aproximaciones para todo tipo de rdenes de derivadas de
funciones que dependen de un nmero
de variables escalares reales, en este
proyecto slo se tratarn las de orden uno y orden dos, en dos variables,
proponiendo como aproximaciones las recogidas en la bibliografa consultada
(K.A. Stroud, 2001). Estas aproximaciones estn basadas en un desarrollo en
series de Taylor en torno a un punto conocido. Este proceso y su aplicacin lo
describiremos en los epgrafes sucesivos.

3.1 Aproximacin de Derivadas. El MDF.

3.1.1 Una variable


Es sabido que si
es una funcin continua y derivable en su dominio, se
puede conocer el valor de la funcin en un punto prximo a del que dista una
magnitud denotada por
(paso). Esta aproximacin se realiza mediante el
desarrollo en serie de Taylor cuya expresin es la siguiente:

de forma anloga, y cambiando


dicho punto:

por

obtendramos su aproximacin en

Reagrupando los trminos en la primera ecuacin, se consigue la siguiente


expresin,

11

y de la segunda ecuacin se obtiene,

Despreciando los trminos de orden dos y superiores las expresiones


anteriores se transforman en
frmula de la diferencia hacia adelante
frmula de la diferencia hacia atrs
Finalmente, restando estas expresiones se obtiene la llamada frmula de la
diferencia centrada que aproximada la primera derivada

Es decir, esta expresin sugiere que una aproximacin de la derivada, para


suficientemente pequeo, es evaluar la diferencia del valor de la funcin en
dos puntos y dividirlo entre su distancia (siempre que se desprecien los
trminos anteriormente comentados). Las implicaciones son notorias, pues
convierten la derivacin en una mera resta y divisin. Esta idea, en principio
vaga, tendr una aplicacin de extremo valor a la hora de resolver los
problemas como se ir viendo a lo largo del captulo.
Si en vez de haberse restado las expresiones de las diferencias hacia adelante
y hacia atrs, se hubieran sumado hubisemos obtenido la expresin de la
frmula centrada que aproxima la segunda derivada. Esta es

Cabe decir, que desde el punto de vista de los mtodos numricos, las
frmulas de las diferencias centradas se comportan mejor en cuanto a
convergencia en la solucin, ya que el error es menor (Medina, 2007)
(Barreiro, 2012).

3.1.2 Dos variables


La idea de la aproximacin de la derivada comentada en el epgrafe anterior
puede ser extrapolada a ms de una variable. El resultado es que una funcin
12

continua y derivable que dependa de dos variables reales,


e , puede
desarrollarse en series de Taylor en torno a un punto y obtener as su valor en
un punto prximo a l.
Analticamente esto se refleja en la siguiente expresin:
1

Si se desprecian los trminos de orden superior a dos, y sustituyendo los


valores
por
y
por ;
por
y
por
; y
por
y
por
se
obtendrn tres expresiones similares a la anterior. Sumando por un lado todas
las expresiones y restndolas en otro caso, se llegan a las expresiones de las
diferencias centradas para aproximar las derivadas primeras y segundas de las
funciones de dos variables. Estas expresiones son
Derivadas de orden uno
|

|
Derivadas de orden dos

Aunque en este caso slo utilizaremos hasta las expresiones en derivadas de


orden dos, y para funciones de dos variables, cabe decir que se pueden
obtener expresiones anlogas para rdenes superiores y ms variables. Es
decir, siempre se podr encontrar una expresin algebraica en funcin de los
valores que tome la funcin en el dominio que aproxime la derivada. (Medina,
2007)

13

Por tanto, la forma de abordar este tipo de problemas en los que aparecen
ecuaciones diferenciales parciales ser sustituir estas derivadas por sus
aproximaciones. Es por ello por lo que ser necesario discretizar el dominio y
evaluar las funciones en dichos puntos. Siendo los valores de la funcin en
estos puntos las nuevas incgnitas del problema.

3.2

El mtodo de la molcula

Si recopilamos las aproximaciones anteriores y las planteamos grficamente, el


esquema resultante sera el siguiente:

Aproximacin Derivada Orden 1

Figura 3.2.1 Molcula Computacional MDF Centradas Derivada Orden 1

14

Aproximacin Derivada Orden 2

Figura 3.2.2. Molcula Computacional MDF Centradas Derivada Orden 2

Esta configuracin grfica es muy til a la hora de resolver el problema. Ya que


se ir colocando la molcula computacional en cada nodo de la malla y se ir
observando a qu nodos afecta dicha expresin, obtenindose la
discretrizacin del problema rpidamente. Esto se explica ms fcilmente con
un ejemplo:
Supongamos que hay que resolver una EDP de orden uno dada por
en el dominio dado por
que existen condiciones tipo Neumann en
Siendo sus expresiones:
15

[ 1]

[ 1] en el

y el resto son de tipo Dirichlet.

( ))
1

Lo primero ser discretizar el dominio en la direccin y en la direccin


tomar el mismo paso en ambos ejes para simplificar, siendo
.

Figura 3.2.3. Generacin de parmetros para la discretizacin de


condiciones de contorno del problema.

. Se

en funcin de las

El paso siguiente, puesto que se ha mencionado que existe una condicin tipo
Neumann en
mientras que en el resto de extremos son de tipo Dirichlet,
consistir en ampliar

en el paso

, para poder aplicar aqu la molcula

correspondiente a la condicin tipo Neumann ya que el mtodo requiere, para


aproximar la derivada en los nodos, un nodo anterior y otro posterior. Por
tanto el nuevo dominio es
[
] [
] y por tanto la malla que
discretiza a

es:

16

Figura 3.2.4. Discretizacin de

en presencia de condiciones tipo Neumann.

Una vez se han hecho los pasos anteriores, se puede proceder a discretizar la
ecuacin aplicando la molcula a cada nodo que lo requiera. stos sern todos
aquellos nodos que no posean condiciones tipo Dirichlet y que adems cumplan
la condicin de encontrarse presentes en el mallado original. A continuacin se
presenta una discretizacin, usando el esquema de la molcula computacional,
de las ecuaciones que intervienen el problema:
Molcula de la ecuacin de campo:

Molcula de la condicin tipo Dirichlet en frontera:

17

Teniendo el esquema grfico de la discretizacin de las ecuaciones, solo


quedar aplicarlo a la malla generada.
Para aquellos nodos en los que exista una condicin en derivada, se aplicar la
molcula correspondiente a dicha frontera. Un ejemplo se muestra a
continuacin:

Figura 3.2.5. Aplicacin del mtodo de la molcula para obtener una discretizacin de
las condiciones tipo Neumann.

En este caso estamos aplicando el esquema sobre el borde del mallado que
corresponde al extremo superior de la coordenada , es decir,
, En este
borde el enunciando del problema expresa la condicin de contorno en forma
diferencial, es por ello por lo que se aplicar su correspondiente molcula,
obteniendo as una ecuacin por cada nodo que junto al resto de ecuaciones
permitir conocer los valores de la funcin
que se desea resolver.
El procedimiento ser anlogo para los nodos que sean de tipo interno, es
decir, aquellos nodos que se encuentran dentro de las fronteras del mallado de
trabajo. Un ejemplo se muestra en la Figura 3.2.6.
Para los nodos que se encuentren en las fronteras del dominio y la condicin
impuesta sea de tipo Dirichlet solo habr que evaluar su valor en dicho nodo.
18

Figura 3.2.6. Aplicacin del mtodo de la molcula para obtener una discretizacin de
la ecuacin de campo.

Figura 3.2.7. Aplicacin del mtodo de la molcula para obtener una discretizacin de
las condiciones Dirichlet.

19

3.3

Ejemplo

Encontrar la solucin de la ecuacin


[

en el dominio

] siendo las condiciones de contorno

Siendo el paso en la direccin ,

y el paso en la direccin ,

Lo primero que se realiza es el mallado del dominio y la numeracin de los


nodos. Se puede observar que existe una condicin en derivada en el extremo
1. Esto obligar a modificar el mallado original, dado en la figura 3.3.1.

Figura 3.3.1. Lmites del dominio de integracin.

aumentndolo en el paso, es decir

como se ve a continuacin:
20

Figura 3.3.2 Mallado ampliado: Dominio de trabajo.

Una vez el mallado es el adecuado se procede a evaluar los valores de la


funcin
(la incgnita a resolver) en los lugares conocidos. En este caso
en ,
e , siendo estos valores los siguientes:
(
(

( 1)

( 1)

11

La solucin se evala en los nodos 7,8,9,12,13,14. Las condiciones de contorno


adems requerirn de los nodos 10 y 15.
Aplicando las frmulas de las diferencias centradas a la ecuacin en derivadas
parciales obtenemos la siguiente expresin:
21

)
)

Que se puede expresar como la siguiente molcula computacional:

Figura 3.3.3 Molcula computacional del nodo interno

O si la simplificamos obtendramos:

Figura 3.3.4 Molcula computacional del nodo interno simplificada

Aplicando este esquema a los nodos internos, es decir a los nodos


7,8,9,12,13,14 obtendremos 1 ecuacin por nodo en total:

22

14

11

14

14

Por ltimo quedara obtener las ecuaciones referentes las incgnitas de la


columna aadida al mallado original que corresponden a las incgnitas de las
condiciones de contorno. Para generarlas, primero obtendremos la expresin
en diferencias finitas de la condicin de contorno:

Cuya molcula se presenta como:

Figura 3.3.5 Molcula computacional del nodo con condicin tipo Neumann

Aplicando esta expresin en los nodos de coordenada

obtenemos las 4

ecuaciones que faltan para que el sistema sea compatible determinado

1
1

23

Si ordenamos estas ecuaciones y las expresamos en un sistema matricial tal y


como sugiere el mtodo, obtenemos el sistema:

Cuya solucin en el dominio original corresponde a los valores recogidos en la


siguiente tabla:

Y\X

2h

3h

4,00

3,00

2,00

3,11

2,33

0,88

2k

3,11

2,33

0,88

3k

Tabla 3.3.1 Aproximacin de

en el dominio discretizado

Modificando el paso en ambas direcciones y asignndole el nuevo valor


se obtiene un total de 272 nodos y una solucin ms precisa
siendo su representacin la encontrada en la figura 3.3.6

Figura 3.3.6 Solucin al problema

24

3.4

Clculo de soluciones en EDPS. Aproximacin de la solucin

Siguiendo la idea anterior, el proceso para resolver un sistema de ecuaciones


en derivadas parciales de m ecuaciones definidas en
ser el siguiente
1. Discretizar el dominio en el que se vaya a proceder a su resolucin. Esta
discretizacin depender, como se coment con anterioridad, tanto del
nmero de variables como de las condiciones de contorno establecidas:
tipo Dirichlet o tipo Neumann.
2. Aplicar las frmulas de las diferencias centradas de orden
correspondiente a cada una de las funciones incgnitas en cada ecuacin
existente. Es decir, discretizar la ecuacin objetivo.
3. Evaluar dicha expresin en todos los puntos interiores al dominio dado.
4. Evaluar las condiciones de contorno.
a. Si son expresiones que aporten el valor de la funcin en el nodo,
sustituir los valores e identificar el valor de la funcin en ese
punto con el obtenido.
b. Si son expresiones en derivadas, discretizar esta condicin
haciendo uso de las diferencias centradas y obtener la ecuacin
correspondiente.
5. Realizar el paso 2, 3 y 4 para todas y cada una de las ecuaciones
restantes.
6. Plantear el conjunto de ecuaciones
discretizacin como un sistema matricial

7. Resolver el valor de

del sistema.

25

anteriores

surgidas

tras

la

Esta pgina ha sido intencionalmente dejada en blanco

26

Captulo 4.
El Integrador Numrico EDPS_MDF_2D
4.1 El Integrador Numrico: Programacin en MATLAB
El integrador numrico EDPS_MDF_2D ha sido programado en MATLAB.
EDPS_MDF_2D implementa el mtodo de las diferencias centradas para
obtener una aproximacin de la operacin derivada. De esta forma, cada
ecuacin diferencial parcial planteada se convierte en un conjunto de
ecuaciones a evaluar en una serie de puntos. Este conjunto de ecuaciones
generar un sistema matricial que permitir obtener los valores de la funcin
en los puntos del dominio. Este integrador es apropiado para resolver EDPS de
dimensin
en
siendo
es el nmero de funciones incgnitas.
Una vez conocido el fundamento matemtico del integrador es el momento de
explicar su funcionamiento. Para ello se ha decidido estructura este captulo en
tantos subapartados como bloques componen el EDPS_MDF_2D, nueve en
total. Asimismo cada subapartado estar constituido por tres epgrafes, y
ocasionalmente cuatro, que se destinarn a explicar:
1. Finalidad del archivo.
2. Argumentos de Entrada y Salida.
3. Algoritmo y codificacin en MATLAB.
4. Funciones auxiliares del mdulo.
Antes de explicar cada bloque, a modo de introduccin, hay que decir que el
integrador est compuesto por siete mdulos gobernados por un archivo
llamado script.m:
Script lanza la orden de leer el archivo con los datos, llamado ste
generalmente problema.m
Script da rdenes tanto sobre el paso a usar para generar el mallado,
como sobre los lmites del recinto en el que se buscar la solucin.

27

Posteriormente ejecuta los mdulos de forma correcta para obtener la


solucin del problema.
Los siete mdulos que se ejecutan son los siguientes
modulo0.m: crear una plantilla base de nodos.
modulo1.m: genera los lmites del mallado para cada funcin.
modulo2.m: genera el mallado en base a los lmites.
modulo3.m: genera las ecuaciones de cada nodo
modulo4.m: extrae de cada ecuacin del EDPS las funciones incgnitas.
En cada punto del dominio se evaluarn todas las ecuaciones
correspondientes que quedarn recogidas en una submatriz.
Posteriormente sern ensambladas todas estas submatrices para
resolver todos los valores simultneamente junto a las condiciones de
contorno.
modulo5.m: Agrupa todas las matrices que discretizan cada ecuacin
del EDPS en otra matriz.
modulo6.m: procede al clculo y representacin del sistema
creado en modulo5.m
Dicho esto se pasar a describir detalladamente cada mdulo en el resto de
pginas que componen este captulo.

28

problema.m
Finalidad del archivo
El objetivo de este archivo es proporcionar al programa los datos del problema
planteado. En l se introducirn las ecuaciones a resolver, las condiciones de
contorno de cada funcin incgnita y el dominio en el que se debe buscar la
solucin.

Argumentos de Entrada y Salida


Algunos de los datos necesarios para este archivo sern proporcionados de
forma automtica por script.m, stos son
,
, , , , e . El resto
de datos, (condiciones de contorno y ecuaciones a resolver) debern
introducirse manualmente abriendo el fichero y escribiendo en l. Una vez que
el problema se encuentra codificado en el fichero, ste devuelve como salida
las siguientes variables:
funciones_campo variable que almacena las ecuaciones del EDPS
funciones_contorno variable que almacena las condiciones de contorno
de cada funcin

funciones_termino_F_i variable que almacena los trminos lineales de la


funcin incgnita que aparecen en las ecuaciones. Estos trminos deben estar a
la derecha de la ecuacin

parametros_dominio variable que almacena los parmetros que definen


el dominio: paso en x, paso en y, inicio en x, final en x e igual en la coordenada
y.

Algoritmo y codificacin en Matlab


A continuacin se procede a explicar el cdigo por partes.
1. Se leen los datos de entrada:
function [funciones_campo, funciones_contorno, funciones_termino_F_i,
parametros_dominio] = problema1(pasox,pasoy,xf,xi,yf,yi)

2. Se cierra todo y se reinicia la pantalla:

29

close all
clc

3. Se declaran las variables en las que est definido el domino: x e y.


%vector incognitas
syms x y
variables = [x y];
dimension = length(variables);

4. Se introducen manualmente las ecuaciones del sistema, en este caso slo


una.
%Introducir SISTEMA DE ECUACIONES
%coeficientes_funciones =
[ d2f1/dx2 d2f1/dy2 d2f1/dxdy d1f1/dx d1f1/dy c_1 ];
coeficientes_funciones = [ 1 1 0 0 0 0];

5. Se genera la variable funciones_campo que almacena los coeficientes


anteriormente metidos.

[m,n] = size(coeficientes_funciones);
funciones_campo = x*zeros(m,n+2);
for i=1:m
funciones_campo(i,:) = [ i, 0, coeficientes_funciones(i,:) ] ;
end
clear coeficientes_funciones;

6. Se introducen los trminos lineales que dependan de la incgnita. En este


caso son nulos.
funciones_termino_F_i= [

];% a la derecha de la ecuacion

7. Se introducen manualmente las funciones de contorno. Los pasos previos a


ellos que se ven en las sucesivas lneas son para reservar la memoria
necesaria para esta variable.
%Introucir Condiciones de Contorno
m_filas
= 2*dimension*m;
n_columnas = 4;
funciones_contorno = x*zeros(m_filas,n_columnas);

30

for i=1:m
funciones_contorno((i-1)*(2*dimension)+1:i*(2*dimension),1) =
i*ones((2*dimension),1);
funciones_contorno((i-1)*(2*dimension)+1:i*(2*dimension),2) =
(1:2*dimension);
end
funciones_contorno(:,3:n_columnas) = [0,
1,
0,
0,

8. Se genera la variable parmetros_dominio.

dominio = [ xi, pasox xf


yi, pasoy, yf ];
parametros_dominio = dominio;
end

31

9*y^2-9*y+5;%condicion_x0 ;
-6;%condicion_xf ;
5-3*x;%condicion_y0 ;
5-3*x];%condicion_yf

modulo0.m
Finalidad del archivo
Este mdulo crea un mallado plantilla. Es decir, lee todas las funciones de
contorno, y crea un mallado base que es el ms amplio y el que abarcara
todas las posibilidades del problema. Por tanto, a modo de ejemplo, si existe
una funcin con una condicin tipo Neumann en
y otra funcin con condicin
tipo Neumann en
[
] [

, este mdulo crear un mallado en el dominio


]

Esta plantilla ser muy til a la hora de ordenar las ecuaciones que genera
cada nodo en un EDPS.

Argumentos de Entrada y Salida


Hay que decir que este mdulo toma como argumentos de entrada los
parmetros del dominio, es decir los valores
] almacenados
] [
[
en el vector parmetros_dominio, y por otro lado tomar la informacin
relativa a todas las condiciones de contorno recogidas en la variable
funciones_contorno. Un ejemplo de estos datos de entrada seran los
mostrados a continuacin:
parametros_dominio =
-3.0000

2.0000

3.0000

-5.0000

3.3333

5.0000

funciones_contorno =
[ 1, 1, 0, (y - 3)^2/2 + 4458529838789353/4503599627370496]
[ 1, 2, 1,

y + 113170775182595419/36028797018963968]

[ 1, 3, 0,

(x - 5)^2/2 - cos(x)]

[ 1, 4, 0,

(x + 5)^2/2 - cos(x)]

Que mediante el comando


function plantilla = modulo0(funciones_contorno, parametros_dominio)

32

generara como salida una matriz de nodos llamada plantilla anloga a la


mostrada en la Figura 4.1.4.

Algoritmo y codificacin en Matlab


1. Se leen los datos de entrada:
function plantilla = modulo0(funciones_contorno, parametros_dominio)

2. Se generan la variables:
numero_de_variables = length(parametros_dominio(:,1));
numero_de_fronteras = 2*numero_de_variables;
numero_incognitas_EDPs =
length(funciones_contorno(:,1))/numero_de_fronteras;
CONTORNO = zeros(numero_de_fronteras,numero_incognitas_EDPs);

3. A continuacin se introducen por columna, en la matriz CONTORNO, la


tercera columna de la variable funciones_contorno que moldea cada funcin
del EDPS. Recordemos que en esta columna si la fila era 0, la condicin era
tipo Dirichlet y en caso contrario se trataba de una condicin tipo Neumann
for k = 1:numero_incognitas_EDPs
CONTORNO(:,k) = funciones_contorno((k1)*(numero_de_fronteras)+1:k*(numero_de_fronteras),3);
end

4. Hecho esto se va a generar una variable llamada contorno_estrella que va a


poseer las dimensiones de funciones_contorno. La tercera columna de esta
variable tendr filas cero si la condicin es tipo Dirichlet, si no ser tipo
Neumann.
contorno_estrella = 0*funciones_contorno;
contorno_estrella(:,3) = sum(CONTORNO,2);

5. A continuacin modulo1.m genera un mallado ampliado, acorde a las


condiciones de contorno establecidas en funciones_contorno.
dominio_de_funcion = modulo1(parametros_dominio, contorno_estrella);

6. Finalmente se realiza un mallado en este nuevo dominio. Obteniendo as la


variable plantilla.
plantilla = modulo2(dominio_de_funcion);

33

modulo1.m
Finalidad del archivo
Es el encargado de establecer los lmites del mallado de la solucin que
depende de las condiciones de contorno, por lo tanto, en principio no sern los
mismos que los del dominio en el que se buscar la solucin. Por tanto,
funciona de la siguiente forma:
Si existen condiciones en derivadas en alguna frontera ( )
aumentar el dominio en el paso y si no, ser exactamente igual
a los lmites introducidos manualmente como datos.

Argumentos de Entrada y Salida


Hay que decir que este mdulo toma como argumentos de entrada los
parmetros del dominio, es decir los valores
] almacenados
] [
[
en el vector parmetros_dominio, y por otro lado tomar la informacin
relativa a las condiciones de contorno del vector funcin_contorno.
El comando en MATLAB sera
function [dominio_de_funcion] = modulo1(parametros_dominio, funcion_contorno)

y un ejemplo de estos datos de entrada seran:


parametros_dominio =
-3.0000

2.0000

3.0000

-5.0000

3.3333

5.0000

funciones_contorno =
[ 1, 1, 0, (y - 3)^2/2 + 4458529838789353/4503599627370496]

[ 1, 2, 1,

y + 113170775182595419/36028797018963968]

[ 1, 3, 0,

(x - 5)^2/2 - cos(x)]

[ 1, 4, 0,

(x + 5)^2/2 - cos(x)]

34

En este caso, al existir una condicin en derivada en la frontera 2 ( )


condicin que se denota con el valor 1 en la tercera columna de la matriz
funciones_contorno, la funcin proporcionar unos nuevos lmites del dominio
donde crear el mallado para resolver los valores incgnita de la ecuacin.
Finalmente, modulo1.m proporciona un vector fila que almacena la funcin
incgnita para la cual se est haciendo el mallado, los antiguos lmites de
integracin, los nuevos y el paso en ambas variables.
[dominio_de_funcion] =

[incognita_numero,
x0_dato_original,
xf_dato_original,
y0_dato_original,
yf_dato_original,
x0_dato_nuevo,
xf_dato_nuevo,
y0_dato_original, yf_dato_final, pasox, pasoy]

En el ejemplo anterior, el resultado sera el mostrado a continuacin:


dominio_de_funcion =
Columns 1 through 7
1.0000

-3.0000

3.0000

-5.0000

2.0000

3.3333

5.0000

-3.0000

5.0000

Columns 8 through 11
-5.0000

5.0000

Por tanto, se ha transformado el dominio original dado por


[
] [
] que producira la siguiente discretizacin

Figura 4.1.1. Dominio original

35

] [
]
En el dominio
[
] [
] [
que generar la
discretizacin mostrada en la Figura 4.1.2 para poder aplicar as el mtodo de
las diferencias centradas en las fronteras del dominio de integracin.

Figura 4.1.2. Dominio ampliado

Algoritmo y codificacin en Matlab


A continuacin se explicar el cdigo por partes siguiendo como esquema el
diagrama de flujo mostrado en la pgina siguiente. Se ha dividido el cdigo en
pasos que se corresponden con partes del diagrama y que se referencian con
el nmero correspondiente.

36

37

El cdigo en MATLAB ser el siguiente


1. Se leen los datos de entrada:
parmetros_dominio
funcin_contorno

de forma automtica con la instruccin:


function [dominio_de_funcion] = modulo1(parametros_dominio,
funcion_contorno)

2. Se leen las dimensiones de ambos datos


[m_columnas, n_columnas]
[m_dominio , n_dominio]

= size(funcion_contorno);
= size(parametros_dominio);

Esto se hace con el objeto de tener en la variable

m_columnas el nmero de condiciones de contorno existente para cada


funcin incgnita f_i a calcular (este nmero depende del nmero de
variables independientes de la funcin, que ser siempre 2*n, siendo n
el nmero de variables independientes)
n_columnas aportar informacin sobre el nmero de columnas que
posee la matriz funcin_contorno. Como se recordar, los datos
introducidos obligan a que las funciones contorno vayan acompaadas
de su carcter en derivada o no (representado por un uno en caso
afirmativo y un cero en caso negativo), de la frontera a la que afecta la
funcin, y de la funcin f_i a la que est moldeando esta condicin de
contorno.
m_dominio
es
el
nmero
de
filas
que
posee
el
dato

parametros_dominio
n_dominio es el nmero
parmetros_dominio.

de

columnas

que

posee

el

dato

3. Se declara la existencia del vector dominio,


dominio = zeros(1, (1 + m_dominio + 2*m_dominio+2*m_dominio));

Este vector, de una fila y (1 + m_dominio + 2*m_dominio+2*m_dominio)


columnas, es el encargado de incluir la informacin del domino original (recinto
dnde debe ser integrada la ecuacin), la relativa al nuevo dominio (ya
acondicionado para poder aplicar el MDF), el paso en cada direccin del
dominio, y a qu funcin incgnita f_i corresponde.
38

4. Se sobreescriben las dimensiones del nuevo vector domino en m_domino y


n_dominio
[m_dominio , n_dominio] = size(dominio);

5. Se empieza a escribir la informacin en el vector dominio.


El ltimo elemento del vector se reserva para indicar a qu funcin
corresponde dicho domino. Es decir, adquiere el valor i de la funcin f_i.
[m_dominio , n_dominio] = size(dominio);

En los 2*(2*n) primeros elementos se reservan los lugares impares para


guardar la informacin del domino original.
dominio(1,1:n_dominio-length(funcion_contorno(1,1))) = [
parametros_dominio(1,1), 0,
parametros_dominio(2,1),
parametros_dominio(1,3), 0,
parametros_dominio(2,3),
parametros_dominio(1,2), parametros_dominio(2,2)];

0,
0,

Las n posiciones finales se reservan para almacenar el valor del paso.


A continuacin, los lugares pares de los 2*(2*n) primeros elementos del vector
se rellenan con la informacin procedente de las funciones contorno.
dominio(1,2)
dominio(1,4)
dominio(1,6)
dominio(1,8)

=
=
=
=

funcion_contorno(1,n_columnas-1);
funcion_contorno(3,n_columnas-1);
funcion_contorno(2,n_columnas-1);
funcion_contorno(4,n_columnas-1);

Estos valores que se estn introduciendo son 0s o 1s e indican si existe una


condicin de contorno tipo Neumann o tipo Dirichlet.
Se ha rellenado de esta forma el vector para que en los
primeros lugares,
en las posiciones impares estn los lmites del dominio y en los lugares pares
se exprese si este lmite debe ser ampliado o no, siendo un 0 no y un 1 si.
6. Finalmente, el vector dominio va a ser modificado, sobreescribiendo en los
lugares pares los nuevos datos del nuevo domino til para aplicar el MDF.
Esto se hace con un condicional en el que se preguntar si el lugar par
prximo al impar es 0 o 1. Si es cero, el lugar par adquirir el mismo valor
39

que el lugar impar, y si no, el valor se aumentar o disminuir de tal forma


que el valor del lugar impar permita aumentar el dominio en el valor de un
paso.
if dominio(2) == 0
dominio(2) = dominio(1);
else
dominio(2) = dominio(1) - dominio(9);
end

if dominio(4) == 0
dominio(4) = dominio(3);
else
dominio(4) = dominio(3) - dominio(10);
end
if dominio(6) == 0
dominio(6) = dominio(5);
else
dominio(6) = dominio(5) + dominio(9);
end
if dominio(8) == 0
dominio(8) = dominio(7);
else
dominio(8) = dominio(7) + dominio(10);
end

7. Una vez el vector dominio recopila toda la informacin, se va a reordenar


para que en el primer lugar del vector est el nmero de la incgnita , a
continuacin estn los valores del mallado original, seguido de ello estn los
valores del nuevo dominio y en los
ltimos lugares estn los valores de
los pasos.
Las lneas de cdigo son:
dominio = [dominio(1,n_dominio), dominio(1,1:n_dominiolength(funcion_contorno(1,1)))];
dominio_de_funcion = [dominio(1) dominio(2) dominio(6) dominio(4)
dominio(8) dominio(3) dominio(7) dominio(5) dominio(9) dominio(10)
dominio(11)];

8. Por ltimo se cierra la funcin con la instruccin


end

40

modulo2.m
Finalidad del archivo
Es el encargado de discretizar el dominio, es decir, de crear los nodos
correspondientes. Crear los nodos en funcin de las coordenadas y los
clasificar segn su tipologa, la cul se explicar ms adelante.

Argumentos de Entrada y Salida


Los datos de entrada son
dominio_de_funcion

variable que almacena el dominio original y el

dominio ampliado

siendo un ejemplo de estos datos los mostrados a continuacin:


dominio_de_funcion =
Columns 1 through 7
1.0000

0.0000

1.0000

0.0000

1.0000

0.0000

1.3333

Columns 8 through 11
0.0000

0.0000

0.3333

0.3333

Ejecutando su comando en MATLAB:


function [nodos] = modulo2(dominio_de_funcion)

El resultado o argumento de salida sera


nodos matriz que almacena los nodos que discretizan el dominio (ver Figura
4.1.4)

Esta variable discretiza el espacio en funcin del paso especificado en cada


direccin y asigna a cada nodo un nmero y su tipologa. Obtenemos as la
denominada malla de trabajo mostrada en la Figura 4.1.3.

41

Figura 4.1.3. Ejemplo de Discretizacin del dominio

Observando la malla, se puede distinguir que los nodos pueden ser de varios
tipos. Concretamente tres:
Nodo en Borde: representados por el color verde aguamarina son
aquellos que se encuentran en aqul punto que se encuentra fuera del
dominio original. Son afectados por las condiciones de contorno en
derivadas pero no generan ninguna ecuacin.
Nodo en Frontera: representados por el color rojo son aquellos nodos
que se encuentran exactamente en las fronteras del dominio original. Si
coinciden con frontera y con borde, se consideran que estn en frontera
y son afectados por las condiciones de tipo Dirichlet.
Nodo Interno: son aquellos nodos que se encuentran en el interior del
dominio de trabajo. Son afectados por las ecuaciones de campo que
plantea el EDPS. Si el nodo es estrictamente interno (interior al dominio
original) ste genera una sola ecuacin referente a la de campo. Si el
nodo es interno y adems se encuentra en una frontera original, este
nodo generar una ecuacin ms relativa a la condicin de contorno tipo
Neumann.
La identificacin del tipo de nodo es de vital importancia ya que dependiendo
de su posicin en la malla, el valor que toma la funcin debe ser aproximado
segn un tipo de molcula u otra, o si ste se encuentra en las fronteras
deber ser evaluado de acuerdo las condiciones de contorno establecidas.

42

Llegados a este punto, la forma de almacenar esa informacin ser en una


matriz con tantas filas como nodos y tantas columnas como caractersticas
haya que especificar sobre el nodo. En nuestro caso 18. En la Figura 4.1.4
aparece recogido un ejemplo de esta matriz.
Columna1: Numero del nodo.
Columna2: Coordenada X del nodo.
Columna3: Coordenada Y del nodo.
Columna4: 1 si est en la Frontera

x0. 0 si no lo est.

Columna5: 2 si est en la Frontera

. 0 si no lo est.

Columna6: 3 si est en la Frontera

. 0 si no lo est.

Columna7: 4 si est en la Frontera

0 si no lo est.

Columna8: 1 si est en el Borde

. 0 si no lo est.

Columna9: 2 si est en el Borde

. 0 si no lo est.

Columna10: 3 si est en el Borde

. 0 si no lo est.

Columna11: 4 si est en el Borde

. 0 si no lo est.

Columna12: 1 si el nodo es interno. 0 si no lo es.


Columna13: 1 si el nodo no existe. 0 si existe.
Columna14: 1 si el nodo se representa (genera ecuacin). 0 en caso contrario.
Columna15: 1 si el nodo tiene condicin tipo Neumann en

. 0 si no.

Columna16: 2 si el nodo tiene condicin tipo Neumann en

. 0 si no.

Columna17: 3 si el nodo tiene condicin tipo Neumann en

. 0 si no.

Columna18: 4 si el nodo tiene condicin tipo Neumann en

. 0 si no.

43

Datos de Salida

Figura 4.1.4: Datos de Salida. Tabla de nodos de un dominio ampliado. Tipologia.

44

Diagrama de flujo de modulo2.m

45

Algoritmo y codificacin en Matlab


El cdigo para generar este archivo se muestra a continuacin. El diagrama de
flujo asociado es el mostrado anteriormente el cul se encuentra enumerado
para poder seguir su correspondencia con el cdigo.

1. Se leen los datos de entrada:


dominio_de_funcion

de forma automtica con el comando


function [nodos] = modulo2(dominio_de_funcion)

2. A continuacin se declara la variable n. Esta variable (que ser una matriz


con tantas filas como nodos haya y tantas columnas como caractersticas
tenga cada uno) recoger la informacin de cada nodo.
n = zeros(1,18);

3. Luego se crea la variable dominio. Aqu se almacenan los valores del


dominio original y del dominio sobre el que hay que hacer el mallado.
dominio = dominio_de_funcion(1,2:length(dominio_de_funcion));

4. Se establece el nmero de variables independientes, las cuales darn lugar


al tipo del dominio. En este caso R2.
variables = length(dominio)/5;

5. Se crean una serie de variables A, B, v y w que sern tiles posteriormente


para saber si el nodo se encuentra dentro o fuera del dominio original.
A
B
v
w

=
=
=
=

dominio(1:(length(dominio)-variables));
0*A;
ones(1,variables);
1:2*variables;

A vector que almacena los valores del domino original y los del dominio
sobre el que se llevar a cabo la discretizacin: [x0_dato_original,
xf_dato_original,
y0_dato_original,
yf_dato_original,
x0_dato_nuevo,
xf_dato_nuevo, y0_dato_original, yf_dato_final]
B vector de ceros de igual dimensin que A.

46

v vector de unos de una fila y tantas columnas como de variables


dependa la funcin a calcular.
w vector de una fila y
. Es un vector que
tiene en cada elemento el valor .

6. Las lneas sucesivas sern para ir generando la matriz n.


Se declara un contador, que har referencia a la numeracin del nodo:
nodo = 0;

Se establece identifica el nmero de divisiones en la variable


en n_prima

y se almacena

n_prima = length(dominio(5):dominio(9):dominio(6));

Se hace lo mismo para las divisiones en el eje OY y se almacena su valor en


m_prima
m_prima = length(dominio(7):dominio(10):dominio(8));

Siendo n_prima*m_prima
discretizacin.

el

nmero

total

de

nodos

existentes

en

la

7. A continuacin se generar un bucle que haga un barrido tanto en la


variable j (corresponde a x) y cuando llegue al final, que la reinicie y
aumente en un paso la variable i (corresponde a y). Para ello se escriben
las siguientes lneas:

for i = 1:m_prima
for j = 1:n_prima

8. Y para cada nodo, dentro del bucle se irn haciendo las siguientes
operaciones:

Se aumenta en uno la numeracin para tener as el valor del nodo


nodo = nodo + 1

Se guarda este valor en la fila nodo y en la columna 1 de la matriz n.


n(nodo,1) = nodo;

Se calcula la coordenadax y coordenada y del nodo y se guardarn en la fila


nodo y en la columna 2 y 3 respectivamente.
47

n(nodo,2) = dominio(5) + (j-1)*dominio(9) ;


n(nodo,3) = dominio(7) + (i-1)*dominio(10) ;

A continuacin se utlizarn las variables que creamos al principio para saber en


qu frontera se encuentra el nodo, si es que se encuentra en alguna, o en qu
borde se encuentra el nodo, si es que se encuentra en alguno.
Para ello se crea un vector vfx de las mismas dimensiones que v pero que
contiene la coordenada x en todos sus elementos.
vfx = n(nodo,2)*v;

Se realiza lo mismo para la coordenada y generando un vector vfy que las


recoja.
vfy = n(nodo,3)*v;

Se crea el vector B que recoge los vectores anteriores dispuestos de la


siguiente forma:
B = [vfx, vfy, vfx, vfy];

Se crea la variable Localizador con el vector w dispuesto como se muestra a


continuacin
Localizador = [w, w];

Este vector en el caso en que haya dos variables ser 1234,1234 y hace
referencia a que las frontera 1234 (los 4 primeros valores) y a los bordes 1234
(los otros 4 valores)
Se restan y su valor se almacena en un vector denominado diferencia.
diferencia = B-A;

Se crea una variable llamada C de igual dimensin que diferencia.


C = 0*diferencia;

A continuacin, se analiza cada elemento del vector diferencia. Si alguno de


ellos es 0 (considerando cero segn la tolerancia de MATLAB como aquel valor
que es igual o inferior a 1e-14) se asigna a su homlogo en C (aqul que posea
el mismo ndice) un 1.
for indice = 1:length(diferencia)

48

if abs(diferencia(indice)) <= 1e-14


C(indice) = 1;
else
end
end

Para finalizar, se multiplica el Localizador por C, elemento a elemento, de tal


modo que de este producto salga un vector con los lugares en los que se
encuentra el nodo, indicando si es frontera o borde como ya hemos
mencionado anteriormente al hablar del Localizador. Esta informacin es
guardada en las columnas de 4 en adelante utilizando un total de 2*2*n de
columnas.
n(nodo,4:4+length(diferencia)-1)=C.*Localizador;

A continuacin se hace un filtrado de las condiciones anteriores. Como se


mencion, existen bordes y fronteras. Los bordes son los extremos del dominio
ampliado, se produce cuando ste posee condiciones de contorno en
derivadas, y las fronteras corresponden a los extremos del dominio original.
Por tanto es obvio que si del paso anterior un nodo es catalogado como si
estuviese en borde y en frontera es porque el borde es una frontera y por
tanto no existe borde. Es decir, si en el producto de C.*Localizador el valor en
el elemento i y en el elemento i+2*variables coincidiesen, este ltimo debera
ser cero para indicar que no era un borde ese extremo y si una frontera. As
mismo se aprovechar la programacin de esta condicin, para decir que si
ocupa una frontera este nodo, la columna 14+i de la fila nodo de la variable
n (que recordemos recoga la informacin de los nodos) guardar en qu
frontera se encuentra. Evidentemente esta frontera no corresponde al dominio
original sino al domino ampliado (el de trabajo) y sirve para identificar las
condiciones tipo Neumann. Esto se consigue mediante las siguientes lneas de
cdigo:
%Filtro1. Frontera o borde // Que borde.
for indice = 1:(length(diferencia)/2)
if n(nodo,3+indice) == n(nodo,3+indice+2*variables)
n(nodo,3+indice+2*variables) = 0;
else
if n(nodo,3+indice) ~= 0

49

n(nodo,14+indice) = n(nodo,3+indice) ;
else
end
end
end

Una vez pasado el primer filtro y catalogacin se procede a filtrar el caso de


que est en ms de una frontera. Esto se har observando el resultado de los
2*variables primeros elementos del producto C.*Localizador. Si hay ms de un
valor distinto de cero se considera que est en ms de una frontera y se
asignar que se encuentra en la ms lejana al origen del dominio. Este criterio
no influye en el clculo.
Se aprovechar este condicional para establecer el carcter interno o no del
nodo, ya que si est en frontera y adems posee condiciones en derivada este
nodo ser interno
%Filtro2: El nodo solo puede estar en una frontera// Nodo Interno
if sum(n(nodo,4:7)) > max(n(nodo,4:7))
[a, b] = max(n(nodo,4:7));
n(nodo,4:7) = 0*n(nodo,4:7);
n(nodo,3+b) = a
else
if sum(n(nodo,15:18))/max(n(nodo,15:18)) == 1 %
n(nodo,12) = 1;

%nodo interno

else
end
end

Por otro lado, el nodo puede ser interno si resulta que no est ni en borde ni
en frontera. Es decir que la suma de todos los elementos correspondientes a
estas posiciones sea nulo. O lo que es lo mismo:
if sum(n(nodo,4:11)) == 0
n(nodo,12) = 1;
else

%nodo interno

50

end

Si el nodo est en ms de un borde requiere que en el nodo (i-1,j-1) haya una


condicin de derivada cruzada, por tanto no seran condiciones de frontera y
obedeceran a otro tipo de problemas. En resumen, este tipo de nodos en estos
tipos de problemas no pueden existir, por tanto se eliminan del mallado.

if sum(n(nodo,8:11)) > max(n(nodo,8:11))

%nodo en mas de un

borde
else
n(nodo,13) = 1;

%nodo a excluir

end

Si el nodo es real y existe, entonces se representa


if sum(n(nodo,8:11)) > 0
else
n(nodo,14) = 1;

%nodo se representa

end

9. Se cierran los bucles para cada nodo


end

end

10.

Se declara la variable nodos y en ella se guardan los valores de n y se


finaliza la funcin.

nodos = n; %(:,1:14);
end

51

modulo3.m
Finalidad del archivo
Es el ncleo del integrador. Este mdulo genera las ecuaciones
correspondientes a cada nodo. Es el encargado de aproximar el valor de las
derivadas por las frmulas de las diferencias centradas y de evaluar los nodos
en las fronteras.

Argumentos de Entrada y Salida


Los argumentos de entrada son:
dominio_de_funcion es el dominio de trabajo (ampliado si procede)
nodos matriz con los nodos del mallado de trabajo y su tipologa
coeficientes_campo recoge los coeficientes de la EDP
funcion_contorno recoge las condiciones de contorno de la funcin
delta variable binaria que vale 1 si coincide el nmero de la ecuacin que se
est resolviendo con el ndice de la funcin

y da como resultados:
ecuacion matriz que discretiza a en el mallado de trabajo
termino trmino evaluado en cada uno de los nodos del mallado
representacin vector cuyo elemento valdr 1 en caso de que el nodo
haya de ser reprsentado.

Algoritmo y codificacin en Matlab


En la siguiente pgina se presenta el diagrama de flujo de este mdulo y en las
pginas posteriores el cdigo correspondiente a dicho diagrama.

52

53

El algoritmo en Matlab sera el siguiente:


1. Se leen los datos de entrada
function [ecuacion, termino, representacion] =
modulo3(dominio_de_funcion, nodos, coeficientes_campo, funcion_contorno,
delta)

2. Se establecen como simblicas las variables


global plantilla x y

3. Se declara el nmero de filas de las que constar la matriz que va a


discretizar la ecuacin. Evidentemente coincide con el nmero de nodos que
es el nmero de incgnitas. Este valor se almacena en la variable
total_nodos.
total_nodos = length(plantilla(:,1));

4. Se reserva el espacio para la matriz que discretizar el sistema. Esta matriz


se llamar ecuacin.
ecuacion = zeros(total_nodos, total_nodos);

5. Se realiza lo mismo para el vector que recoger los valores del trmino
independiente, variable llamada termino.
termino = zeros(total_nodos,1);

6. Se genera la variable represantacion.


representacion = ones(total_nodos,1);

7. Se almacenan los lmites del mallado y el paso en las variables x0,pasox,xf,


y0, pasoy, yf.

x0 = dominio_de_funcion(3);
paso_x = dominio_de_funcion(10);
xf = dominio_de_funcion(7);
y0 = dominio_de_funcion(5);
paso_y = dominio_de_funcion(11);
yf = dominio_de_funcion(9);

8. Se declara la variable lnea y la variable indiceexcluido, que sern usados a


modo de contador
indiceexcluido = 0;

54

linea = 0;

9. A continuacin se har un barrido para cada nodo. Este barrido dar como
resultado la ecuacin correspondiente al nodo dependiendo de su tipologa
(mencionada en el mdulo2). Es decir, aqu se obtiene la discretizacin de
la ecuacin introducida.
k = 0;
for k = 1:total_nodos

10.El primer filtro de la plantilla es saber si existe o no en el mallado de la


funcin que se est evaluando, para ello se realiza lo siguiente.
for kk = 1:total_nodos
nodo_de_plantilla_en_dominio =
comparar_plantilla(plantilla(kk,2:3),nodos(:,2:3));
if nodo_de_plantilla_en_dominio == 0
%es decir es falso
%el nodo de la plantilla no existe en dominio por lo que se
avanza una linea
indiceexcluido = indiceexcluido + 1;
nodosexcluidos(indiceexcluido) = k;
linea = linea+1;
else

En este paso, se ha recurrido a la funcin comparar_plantilla. Esta


funcin lee un vector de dos columnas y compara ese vector con otra serie de
vectores almacenados en la matriz a comparar. Si encuentra coincidencia
devuelve un uno, cero en caso contrario.
Una vez hecho y sabido que el nodo existe en el mallado de la funcin, se
analiza cada nodo para generar la ecuacin correspondiente en caso de que
proceda. Este anlisis se realiza en los subapartados de 11.1 a 11.5
k = k + 1;
representacion(k,1) = nodos(k,14);
11.1

En primer lugar, se comprueba si el nodo es virtual. En ese caso no


participar en ninguna ecuacin; se almacenar en la variable
nodosexcluidos qu nodo es el que debe desaparecer de los k nodos
existentes en el mallado. (Recordar que estos nodos son aquellos que
se encuentran en dos o ms bordes)
if nodos(k, 13) == 0

indiceexcluido = indiceexcluido + 1;
nodosexcluidos(indiceexcluido) = k;

55

else
end
11.2

Con el paso anterior se asegura que el nodo que se trate a


continuacin participa como incgnita en la ecuacin. Dependiendo
de su tipologa, generar un tipo de ecuacin u otra. Para identificar
el tipo de nodo se aplicarn las mismas normas de identificacin que
se establecieron en el mdulo2.
if sum(nodos(k,8:11)) > 0 % nodo en borde y no genera ecuacion
else

11.3

Con el condicional anterior, se eliminan los nodos que no generan


ecuaciones. A partir de aqu, modulo3 se encargar de generar las
ecuaciones segn las condiciones que cumpla el nodo.

11.3.1 Caso nodo interno:


if nodos(k,12) == 1
linea = linea + 1;
parametro = [nodos(k,1:3), paso_x, paso_y];
[ecuacion(linea,:), termino(linea,1)] =
molecula(coeficientes_campo, parametro, x, y, nodos);
anexo(linea,1) = 0;
else
end
11.3.2 Nodos Dirichlet
if sum(nodos(k,4:7)) ~= 0 && nodos(k,12) == 0
linea = linea + 1;
parametro = [nodos(k,1:3), nodos(k,4:7), total_nodos];
if delta == 1
[ecuacion(linea,:), termino(linea,1)] =
evaluarfrontera(funcion_contorno, parametro, x, y);
else
[equ, ter] = evaluarfrontera(funcion_contorno,
parametro, x, y);
termino(linea,1) = delta*ter;
ecuacion(linea,:) = delta*equ;
end

56

else
end
11.3.3 Nodos Neumann
if sum(nodos(k,15:18)) ~= 0
condiciones en derivadas
%display(frontera derivada)
linea = linea + 1;

%la frontera tiene

parametro = nodos(k,15:18);
[coef_molecula_frontera] =
coeficientesFrontera(funcion_contorno, parametro);
parametro = [nodos(k,1:3), paso_x, paso_y];
if delta == 1
[ecuacion(linea,:), termino(linea,1)] =
molecula(coef_molecula_frontera, parametro, x, y, nodos);
anexo(linea,1) = 0;
else
[equ, ter] = molecula(coef_molecula_frontera,
parametro, x, y, nodos);
termino(linea,1) = delta*ter;
ecuacion(linea,:) = delta*equ;
end
else
end
11.4

Se borra la variable parmetro para evitar restos de informacin


clear parametro

11.5

Se cierra el condicional que

end
11.6

Se cierra el bucle.
end

Se obtiene como resultado una matriz ecuacin (A) y un vector termino (b)
que discretiza la funcin incgnita. El vector representacin hace mencin a
57

qu nodos han de ser representados (es decir, pertenecen al dominio original)


y cules no.
12

Se cierra la funcin.

end

Funciones auxiliares del mdulo


En este mdulo se han usado las siguientes funciones auxiliares.

Funcin evaluarfrontera.m
Esta funcin recibe como argumentos las condiciones de contorno de la
funcin incgnita que se est resolviendo, un nodo y sus coordenadas y
las variables simblicas x e y. Con estos datos evala dicha funcin
contorno en el nodo proporcionado como resultado el valor de la funcin
incgnita en dicho nodo.
Algoritmo evaluarfrontera.m
function [ecuacion, termino] = evaluarfrontera(funcion_contorno,
parametro, x, y)
nodo = parametro(1);
nodox = parametro(2);
nodoy = parametro(3);
frontera = max(parametro(1,4:7));
total_nodos = parametro(8);
ecuacion = zeros(1,total_nodos);
ecuacion(nodo,nodo) = 1;
termino = subs(funcion_contorno(frontera,4),{x,y},{nodox,nodoy});
ecuacion = ecuacion(nodo,:);
end

58

Funcin coeficientesFrontera.m
Al existir una frontera con condiciones tipo Neumann es necesario
extraer los coeficientes que compondrn la molcula correspondiente a
la discretizacin de dicha condicin. A travs de esta funcin, la cul
recibe como argumentos de entrada las funciones de contorno que
definen la funcin a resolver, y la frontera en la que se encuentra el
nodo, se obtiene un vector coeficientes_fronteras con los coeficientes
que se buscaban.
Algoritmo coeficientesFrontera.m
function coeficientes_frontera =
coeficientesFrontera(funcion_contorno, parametro)
n = length(funcion_contorno(1,:));
i = max(parametro(1:n))
; %identificamos en qu frontera
se encuentra.
termino = funcion_contorno(i,n) ; %almacenos el trmino
independiente que corresponde a la condicin en derivada.
w = zeros (1,length(funcion_contorno(:,1)));
%construir vector
de ceros anlogo al funcin contorno pero traspuesto.
w(i) = 1
;
%ser uno el lugar
(frontera) en la que est el nodo.
coeficientes = w(i).*(funcion_contorno(:,n-1)) ;%obtenemos as si
la frontera en cuestin tiene condicin en Derivada o Evaluada.
lote = length(funcion_contorno(:,1))/2

for j = 1:lote
coeficiente(j) = sum(coeficientes((j-1)*(lote)+1:j*(lote),:));
end
coeficientes_frontera = [coeficiente, termino];
end

Funcin molecula.m
Esta funcin genera la discretizacin de la ecuacin de campo planteada
en un nodo interno. Toma como argumentos de entrada los coeficientes
que componen la ecuacin de campo, las coordenadas del nodo, y los
nodos vecinos necesarios para discretizar dicha ecuacin en dicho nodo.
El resultado es un vector que discretiza la ecuacin de campo y un

59

nmero llamado trmino que corresponde con el valor que adquiere la


ecuacin que se est discretizando en el nodo proporcionado.
Algoritmo molecula.m
function [ecuacion, termino] = molecula(coeficientes, parametro, x, y,
nodos)
termino = coeficientes(1,length(coeficientes));
%coeficiente del termino independiente
coeficiente = coeficientes(1:(length(coeficientes)-1));
%coeficientes de la molecula
nodo = parametro(1);
nodox = parametro(2);
nodoy = parametro(3);
total_nodos = length(nodos(:,1));
h = parametro(4) ;
k = parametro(5) ;

%paso en x
%paso en y

M = zeros(3,3);
if length(coeficiente) == 2
hacia delante (x, y)

%molecula grado 1 con euler

%CREAR MOLCULA DE LA ECUACION(es la que recoge el mtodo de


Integracion)
m_u = coeficiente(2)*1/(2*k);
m_d = -m_u;
m_r = coeficiente(1)*1/(2*h);
m_l = -m_r;
m_c = 0;
M = [ 0, m_u, 0; m_l, m_c, m_r ; 0, m_d, 0];
elseif length(coeficiente) == 5 ;
hacia delante (x, y)

%molecula grado 2 con euler

M= [-coeficiente(3)/(4*h*k)
(coeficiente(1)/(h^2)+coeficiente(5)/(2*k))
coeficiente(3)/(4*h*k)
;
coeficiente(4)/(2*h)+(coeficiente(2)/(k^2)) -2*coeficiente(1)/(h^2)2*coeficiente(2)/(k^2) coeficiente(2)/(k^2)+coeficiente(4)/(2*h)
;
coeficiente(3)/(4*h*k) (coeficiente(1)/(h^2)-coeficiente(5)/(2*k))
coeficiente(3)/(4*h*k)
];
End
[m, n] = size(M);
mol = subs(M,{x,y},{nodox,nodoy});
termino = subs(termino,{x,y},{nodox,nodoy});

60

ecuacion = zeros(1,total_nodos);
for fila = 1:m
for columna = 1:n
coordenadax = nodox + (columna-2)*h;
coordenaday = nodoy - (fila-2)*k;
lugar = buscarNodo(coordenadax,coordenaday,nodos);
if lugar == 0
else
ecuacion(1,lugar) = mol(fila, columna);
end
end
end
end

61

Funcion buscarNodo.m
Esta funcin proporciona el nmero del nodo en funcin a las coordenadas x
e y que lo definen.
Algoritmo buscarNodo.m
function lugar = buscarNodo(coordenadax,coordenaday,nodos)
busca(1,1) = coordenadax;
busca(1,2) = coordenaday;
total_nodos = length(nodos(:,1));
lugar = 0;
for k = 1:total_nodos
diferencia = nodos(k,2:3) - busca;
if sum(abs(diferencia)) <= 1e-7 % ==0 %<= 10e-14 otra
tolerancia o bien <= pasox o pasoy
lugar = k;
else
end
end
if ( lugar == 0 ) && ( abs(busca(1,1)) >= min(nodos(:,2)) ) && (
abs(busca(1,2)) <= min(nodos(:,3)) )
display(error en la busqueda del siguiente nodo de
coordenadas)
k, busca
sum(abs(diferencia))
display(PROBAR OTRO TIPO DE MALLADO, MALLADO MUY FINO,
PROBLEMAS CON LA TOLERANCIA DE MATLAB)
nodos
return
else
end
end

62

modulo4.m
Finalidad del archivo
Discretiza cada ecuacin del EDPS obteniendo as su matriz correspondiente.

Argumentos de Entrada y Salida


Los argumentos de entrada son:
funcin de campo una ecuacin a resolver del sistema propuesto
funcin de contorno cada funcin de campo albergar una
combinacin de las funciones incgnitas, por tanto es necesario conocer
las funciones de contorno de dichas funciones incgnitas
funcin trmino cada ecuacin del sistema puede poseer un trmino
que dependa de s mismo
parmetros de dominio para poder crear la solucin hay que dar un
dominio de integracin, donde se obtendr el valor de la ecuacin del
sistema

El cdigo para llamar a esta funcin es:


function [sistema_ecuacion, termino, representacion_i] = modulo4(funcion_campo,
funciones_contorno, funcion_termino_F_i, parametros_dominio)

Como resultado da:


sistema_ecuacion, Una matriz con el sistema de ecuaciones que
representa a la ecuacin del sistema original.
termino El trmino b correspondiente derivado de la ecuacin original
del sistema.
representacion_i Un vector que seala qu nodos han de ser
representados y cules no.

Algoritmo y codificacin en Matlab


A continuacin se presenta el algoritmo y el cdigo usados para generar este archivo.

63

64

En MATLAB el cdigo es:


1. Se leen los datos de entrada de forma automtica con el siguiente
comando,
function [sistema_ecuacion, termino, representacion_i] =
modulo4(funcion_campo, funciones_contorno, funcion_termino_F_i,
parametros_dominio)

Como resultado se obtienen las variables


funcion_campo,
funciones_contorno,
funcion_termino_F_i,
parametros_dominio

Se almacena en n el nmero de coeficientes que existen en la ecuacin del


sistema a resolver.
n = length(funcion_campo);

Se declara la existencia de la variable plantilla


global plantilla

2. Identificamos qu ecuacin del sistema estamos resolviendo.


ecuacion_m_i(1,1) = 0;
ecuacion_m_i(1,1) = funcion_campo(1,1);

3. Almacenamos en m el nmero total de incgnitas del sistema original (que


coincide con el nmero de ecuaciones)
m = ones(length(funciones_contorno(:,1)),1);
m(:,:) = (funciones_contorno(:,1));
m = max(m);

4. En funcion_campo ahora almacenamos slo los coeficientes


representan la ecuacin del sistema (incluyendo el trmino libre)

que

funcion_campo = funcion_campo(1,3:n);

5. A continuacin obtenemos el nmero de coeficientes de la ecuacin del


sistema (ahora ya no est el trmino libre) por cada funcin incgnita
n = length(funcion_campo);

65

numero_coeficientes = (n-1)/m ; %se reparte de forma igualitaria

6. Se crea la variable nodos_de_incognita. Dicha variable va a almacenar el


nmero de nodos que utiliza cada funcin incgnita para ser discretizada.
nodos_de_incognita = zeros(1,m+1);

7. Para todas y cada una de las funciones incgnitas que intervienen en la


ecuacin del sistema de ecuaciones que estamos tratando, realizamos el
mallado, y obtenemos su correspondiente matriz A y trmino b.
for i=1:m
7.1

Con este delta estamos consiguiendo, que en una misma


ecuacin, los valores en contorno de cada funcin incgnita slo
estn siendo evaluados una vez.
if ( i - ecuacion_m_i == 0 ) %variable binaria que es 1 si la
fila del sistema es igual al indicie de la funcion incognita y
0 en caso contrario
delta = 1;
else
delta = 0;
end

7.2

Para cada funcin incgnita se selecciona su funcin contorno.


funcion_contorno = funciones_contorno((i-1)*(4)+1:i*(4),:);

7.3

Para cada funcin


correspondiente.

incgnita

se

construye

el

domino

[dominio_de_funcion] = modulo1(parametros_dominio,
funcion_contorno);
7.4

Para
cada
funcin
correspondientes.

incgnita

se

obtienen

los

nodos

[nodos] = modulo2(dominio_de_funcion);
7.5

Se crea la variable a que adquiere el valor que se ve a


continuacin:
a=length(nodosexcluidos_f_i)-1;

7.6

A continuacin se observan qu nodos estn del mallado de la


funcin incgnita estn en la plantilla. Si el resultado es negativo,
implica que no existen nodos a excluir, es decir, que la plantilla
coincide con el mallado de la funcin incgnita. En este caso, se
66

almacena en la posicin correcta de nodos_de_incgnita el


nmero de nodos usados.
Si existieran nodos a excluir, se almacenara su nmero y se
restara al total existente obteniendo as el nmero de nodos
usados en el mallado. Asimismo se anotaran qu nodos son estos
para posteriormente eliminarlos del sistema creado que
representara el EDPS. Este paso se hara en modulo5.
[nodosexcluidos_f_i]=
excluir(nodos,plantilla);
nodos excluidos para esta funcion.

%lista

de

if nodosexcluidos_f_i(1) < 0
nodos_de_incognita(i+1) = length(nodos(:,1));
nodos_q_quitar(1,a+1:a+length(nodosexcluidos_f_i))
=
nodosexcluidos_f_i;
else
nodos_de_incognita(i+1)
=
length(nodos(:,1))length(nodosexcluidos_f_i);
nodos_q_quitar(1,a+1:a+length(nodosexcluidos_f_i))
nodosexcluidos_f_i+sum(nodos_de_incognita(1,1:i));
end
7.7

Para cada funcin incgnita se extraen los coeficientes que la


representan.
coeficientes_campo = funcion_campo((i1)*(numero_coeficientes)+1:i*(numero_coeficientes));

7.8

Almacenamos los coeficientes de cada funcin incgnita extrados


en el paso previo.
coeficientes_campo(1, numero_coeficientes + 1) =
funcion_campo(1,n);

7.9

Una vez tenemos los coeficientes que representan cada funcin


incgnita (dentro de cada ecuacin del sistema) obtenemos el
sistema de ecuaciones correspondiente a dicha funcin incgnita.
[ecuaciones_incognita_i, termino_incognita_i, anexo_i,
representacion_i] = modulo3(dominio_de_funcion, nodos,
coeficientes_campo, funcion_contorno, delta);

7.10

Vamos generando en cada paso, una matriz sistema_ecuacion que


recoge los valores de las incgnitas a resolver de cada funcin
incgnita de la ecuacin del sistema
[ filas , total_nodos] = size(ecuaciones_incognita_i)
sistema_ecuacion(:, (i-1)*(filas)+1:i*(filas)) =
ecuaciones_incognita_i;

67

7.11

Anlogamente lo hacemos para sistema_termino_F_i.


sistema_termino_F_i(:, (i-1)*(filas)+1:i*(filas)) =
funcion_termino_F_i(i)*eye(filas);

7.12

Y tambin para el trmino independiente, que lo almacenamos en


term.
term(:,i) = termino_incognita_i;
sistema_ecuacion = sistema_ecuacion - sistema_termino_F_i;
end

8. Finalmente se selecciona el trmino correspondiente a la evaluacin de las


ecuaciones de campo y en la frontera de la funcin incgnita que se est
evaluando.
termino= (term(:,ecuacion_m_i));
end

Funciones auxiliares del mdulo


En este mdulo se han usado dos funciones auxiliares.

Funcin comparar_plantilla.m
Con esta funcin se consigue determinar si un vector dado se encuentra
dentro de una matriz llamada plantilla que posee el mismo nmero de
columnas que el vector. Si existe el vector propuesto dentro de la matriz, el
resultado ser un uno, siendo cero en caso negativo.
Algoritmo comparar_plantilla.m
function conclusion = comparar_plantilla(vector, matriz)
TOL = 1e-14;
[m,n] = size(matriz);
w = zeros(m,n);
for i = 1:m
w(i,:) = vector;
end
diferencia = w-matriz;
conclusion = 0*diferencia;
for i = 1:m
diferencia(i,:) = sum(abs(diferencia(i,:)));
if diferencia(i,:) <= TOL
conclusion = 1; %el nodo de la plantilla esta en el
dominio
break

68

else
conclusion = 0; %el nodo de la plantilla no est en el
dominio
end
end
end

Funcin excluir.m
A travs de esta funcin se consigue identificar si un nodo propuesto se
encuentra dentro de una plantilla de nodos.
Algoritmo excluir.m
function [nodosexcluidos]= excluir(nodos,plantilla)
%funcion que devuelve un listado con los nodos que no es encuentran en
la %plantilla
nodosexcluidos = -1;
k = 0;
indiceexcluido = 0;
total_nodos = length(plantilla(:,1));
for kk = 1:total_nodos
nodo_de_plantilla_en_dominio =
comparar_plantilla(plantilla(kk,2:3),nodos(:,2:3));
if nodo_de_plantilla_en_dominio == 0
%es decir es falso
%el nodo de la plantilla no existe en dominio por lo que se avanza
una linea
indiceexcluido = indiceexcluido + 1;
nodosexcluidos(indiceexcluido) = k;
else
%identificar nodos virtuales, no hacer nada con ellos
%y con los otros, que pasen varias veces por diferentes condiciones
k = k + 1;
if nodos(k, 13) == 0
indiceexcluido = indiceexcluido + 1;
nodosexcluidos(indiceexcluido) = k; %el nodo no computa y
no se hace nada pero se anota cul es
else
end
end
end
end

69

modulo5.m
Finalidad del archivo
Como hemos visto anteriormente, modulo4.m obtena para cada ecuacin del
EDPS su discretizacin y generaba la matriz correspondiente. Este mdulo
agrupa cada ecuacin discretizada del EDPS en otra matriz , que representa
la discretizacin de todo el EDPS.

Argumentos de Entrada y Salida


Por tanto, modulo5.m toma como argumentos:
funciones_campo matriz que contiene todas las ecuaciones del EDPS
funciones_contorno variable simblica que contiene todas las funciones
de contorno

funciones_termino_F_i matriz que contiene los trminos lineales de


todas las

para cada ecuacin del EDPS

parametros_dominio vector que contiene los lmites del dominio original


de integracin

function [A,b, m, representacion, nodos_de_incognita] =


modulo5(funciones_campo, funciones_contorno, funciones_termino_F_i,
parametros_dominio)

y genera como datos de salida:


A matriz que discretiza todo el EDPS
b vector trmino independiente
m nmero de ecuaciones del EDPS
representacin vector que establece qu nodo debe ser representado
nodos_de_incgnita vector que recoge el nmero de nodos que se
han utilizado para generar el mallado de cada incgnita

Algoritmo y codificacin en Matlab


Se muestran en la pginas siguientes el diagrama de flujo y el cdigo
comentado propuesto para la realizacin de este fichero.
70

71

El algoritmo en MATLAB sera


1. Se leen los datos de entrada con el comando
function [A,b,m, representacion, nodos_de_incognita] =
modulo5(funciones_campo, funciones_contorno, funciones_termino_F_i,
parametros_dominio)

A continuacin se obtiene el nmero de ecuaciones del cul consta el EDPS y


se almacena en m.
[m, n] = size(funciones_campo);

2. A continuacin, para cada ecuacin del EDPs generamos


correspondiente sistema de ecuaciones a travs de mdulo 4.

su

for i=1:m
i

2.1.

Almacenamos la parte correspondiente al trmino que depende


de la funcin incgnita.
funcion_termino_F_i = funciones_termino_F_i(i,:);

2.2.

Almacenamos la funcin campo que hay que resolver.


funcion_campo = funciones_campo(i,:);

2.3.

Con modulo4.m generamos el sistema matricial que representa


la ecuacin i del EDPS.
[sistema_ecuacion_i, termino_sistema_i, representacion_i,
nodos_de_incognita, nodos_q_quitar] = modulo4(funcion_campo,
funciones_contorno, funcion_termino_F_i, parametros_dominio);

2.4.

En este paso en el trmino ecuacin se guardar el sistema


correspondiente que representa cada ecuacin del sistema. En
termino se almacenar el trmino correspondiente a la ecuacin
del sistema.
[filas , total_nodos] = size(sistema_ecuacion_i);
ecuacion((i-1)*(filas)+1:i*(filas),:) =
sistema_ecuacion_i;
termino((i-1)*(filas)+1:i*(filas),1) =
termino_sistema_i;

72

representacion((i-1)*(filas)+1:i*(filas),1) =
representacion_i;
end

3. Llegados a este punto, el EDPS est discretizado en la matriz ecuacion y en


el vector termino. Sin embargo, hay que decir que en esta matriz hay
nodos que puede que no existan y por tanto habr que quitar. Esto se hace
mediante la eliminacin de filas y columnas correspondientes a ese nodo.
La forma de proceder en MATLAB sera la siguiente
if length(nodos_q_quitar) == 1;
if nodos_q_quitar < 0
display(No hay que quitar nodos)
else
nodos_nuevos_q_quitar = nodos_q_quitar;
representacion = quitarnodos(nodos_nuevos_q_quitar, representacion);
ecuacion = quitarnodos(nodos_nuevos_q_quitar, ecuacion);
termino = quitarnodos(nodos_nuevos_q_quitar, termino);
end
else
counter = 0;
for i=1:length(nodos_q_quitar)
if nodos_q_quitar(i) < 0
else
counter = counter+1;
nodos_nuevos_q_quitar(counter) = nodos_q_quitar(i);
end
end
representacion = quitarnodos(nodos_nuevos_q_quitar,
representacion);
ecuacion = quitarnodos(nodos_nuevos_q_quitar, ecuacion);
termino = quitarnodos(nodos_nuevos_q_quitar, termino);
end

Dnde quitarnodos es una funcin que toma como argumentos una matriz y
una serie de nodos que quitar y devuelve esa matriz sin esos nodos.
4. Finalmente, se obtiene el sistema

que discretiza el sistema.

A=ecuacion;
b=termino;
end

73

Funciones auxiliares del mdulo


En este mdulo se ha usado una funcin auxiliar.

Funcin quitarnodos.m
Esta funcin, que toma como argumentos una matriz y una serie de nodos
que quitar, devuelve la matriz original sin esos nodos.
Algoritmo quitarnodos.m
function [matriz] = quitarnodos(nodos, matriz_0)
total = length(nodos);
nodos = sort(nodos, descend);
[filas,columnas] = size(matriz_0);
if filas == columnas
for indice = 1:total
[m,n] = size(matriz_0);
matriz = zeros(m-total, n-total);
nodo = nodos(indice);
contadorx = 1;
contadory = 1;
for i = 1:m

%avanzar en filas, en i, en y

if i == nodo

else
for j = 1:n

%avanzar en columnas, en j, en x

if j == nodo

else
matriz(contadory,contadorx) =
matriz_0(i,j);
contadorx = contadorx + 1;

74

end
end
contadorx = 1;
contadory = contadory + 1;
end
end
matriz_0 = matriz;
end

else
%programa para el vector mx1
for indice = 1:total
[m,n] = size(matriz_0);
matriz = zeros(m-total, 1);
nodo = nodos(indice);
contadorx = 1;
contadory = 1;
for i = 1:m

%avanzar en filas, en i, en y

if i == nodo

else
matriz(contadory,contadorx) = matriz_0(i,1);
contadory = contadory + 1;
end
end
matriz_0 = matriz;
end
end
end

75

modulo6.m
Finalidad del archivo
Este mdulo implementa el mtodo apropiado para resolver el sistema
que resulta de la discretizacin de todo el EDPS.

Argumentos de Entrada y Salida


Este modulo toma como argumentos:
A matriz que discretiza todo el EDPS
b vector trmino independiente evaluado en todos los nodos de la
discretizacin
funciones_contorno variable simblica que contiene todas las funciones
de contorno

parametros_dominio vector que contiene los lmites del dominio original


de integracin

m nmero de ecuaciones del EDPS


representacin vector que establece qu nodo debe ser representado
nodos_de_incognita vector que recoge el nmero de nodos que se
han utilizado para generar el mallado de cada incgnita

y genera como datos de salida:


X discretizacin del dominio original en el eje OX.
Y discretizacin del dominio original en el eje OY.
Z matriz que recoge todas las evaluaciones de cada
dominio.

en cada

localizador variable que almacena el nmero de nodos que ha


utilizado cada malla de trabajo de cada funcin.
nodos matriz que recoge todos los nodos usados.

Algoritmo y codificacin en Matlab


El diagrama de flujo del archivo modulo6.m se puede consultar en la siguiente
pgina.
76

77

El algoritmo en MATLAB sera:


1. Se leen los datos de entrada de forma automtica
function [X,Y,Z,localizador,nodos] = modulo6(A, b, funciones_contorno,
parametros_dominio, m, representacion, nodos_de_incognita)

2. Se genera el vector X e Y que generan la discretizacin en una direccin y


en otra, tal que
e
X =
parametros_dominio(1,1):parametros_dominio(1,2):parametros_dominio(1,3);
Y =
parametros_dominio(2,1):parametros_dominio(2,2):parametros_dominio(2,3);

3. Si la matriz que genera el problema no tiene rango completo, es decir su


determinante es nulo, el sistema no podr ser resuelto, por tanto se dar
un aviso alertando de este problema al usuario.
if det(A) == 0
display(WARNING: No hay solucin para este mallado)
pause(1)
X=0;
Y=0;
Z=0;
nodos=0;
else

4. En caso contrario, el sistema


4.1

puede ser resuelto.

Se declara la variable Matriz_Z que albergar el valor de la funcin


en los puntos del domino.

MATRIZ_Z = zeros(m*length(Y),length(X));

4.2

Se calcula la solucin del sistema

soluTion = A\b;

4.3

Para todas y cada una de las incgnitas se genera el vector


representacin_i es un vector que indica que nodo se representa.
solution recoge del vector solutTion, solo los valores que
representan la solucin corresponidente a

for k = 1:m

78

representacion_i =
representacion(nodos_de_incognita(k)+1:nodos_de_incognita(k+1),1);
solution =
soluTion(nodos_de_incognita(k)+1:nodos_de_incognita(k+1),1);

4.4

A continuacin se filtran los nodos, aquellos que sean representados,


es decir pertenezcan al dominio original, sern almacenados en el
vector SOLUCION

contador = 0;
for i = 1:length(solution)
if representacion_i(i) == 1
contador = contador + 1;
SOLUCION(contador,1) = solution(i);
else
end
end

4.5

Se guarda la informacin del vector SOLUCION en la matriz Z, a


modo de rejilla, de tal modo que cada elemento
almacene el valor
que toma la funcin
1

en el nodo de coordenadas

contador = 0;
Z = zeros(length(Y),length(X));
for i = 1:length(Y)
for j = 1:length(X)
contador = contador + 1;
Z(i,j) = SOLUCION(contador);
end
end

4.6

Posteriormente en la variable MATRIZ_Z se va almacenando las


soluciones para cada f_i.

79

MATRIZ_Z((k-1)*(length(Y))+1:k*(length(Y)),:) = Z;

4.7

Una vez hecho esto, se presenta la solucin de forma grfica con las
lneas siguientes:

figure(k)
mesh(X,Y,Z)

4.8

Antes de finalizar el bucle, se almacenan en la variable nodos el


mallado de trabajo correspondiente a esta incgnita

funcion_contorno = funciones_contorno((k-1)*(4)+1:k*(4),:);
[dominio_de_funcion] = modulo1(parametros_dominio,
funcion_contorno);
[nodos_k] = modulo2(dominio_de_funcion);
nodos(nodos_de_incognita(k)+1:nodos_de_incognita(k+1),:) =
nodos_k;
end

5. Antes de finalizar el conidicional, se guarda en la variable Z todas las


soluciones de cada funcin incgnita
Z = MATRIZ_Z;
end

6. Para finalizar el mdulo, se guarda en la variable localizador los nodos que


utiliza cada mallado de trabajo de cada incgnita.
localizador = nodos_de_incognita;
end

80

script.m
Este archivo ejecuta de forma directa e indirecta los mdulos anteriores. En
resumen, dado un archivo problema.m y un dominio, script.m realiza
diferentes mallados para encontrar la solucin del EDPS planteado.
El cdigo es el siguiente
function [X Y Z nodos]=script(xi,xf,yi,yf)
%clear all
global plantilla x y
%se establecen las variables globales (domino de integracion)
syms x y
%numero de elementos en los que dividir el mallado
longitudx
= xf-xi;
inicialx
= 5;%31//27 cnd Neumann -20,20
finalx
= 5;
longitudy
inicialy
finaly

= yf-yi;
= 400;
= 400;

variables = nargin()/2;
%se inicia la resolucin del sistema
for buclex = inicialx:finalx
for bucley = inicialy:finaly
close all
pasox = longitudx/buclex;
pasoy =
longitudy/bucley;%longitudy/bucley;%longitudy/longitudx*pasox;%2.1/0.6*pa
sox;%longitudy/bucley;longitudy/(5/3*(pasox))

%se introducen los datos almacenados en el fichero


[funciones_campo, funciones_contorno, funciones_termino_F_i,
parametros_dominio] = problema(pasox,pasoy,xf,xi,yf,yi);

%Obtener mallado mximo y numeracin


plantilla = modulo0(funciones_contorno, parametros_dominio);
%se obtiene la discretizacion del problema introducido anteriormente
[A,b,m,representacion,nodos_de_incognita] = modulo5(funciones_campo,
funciones_contorno, funciones_termino_F_i, parametros_dominio);
%Modo de obtener la aproximacin de las ecuaciones.

81

[X,Y,Z,localizador,nodos] = modulo6(A, b, funciones_contorno,


parametros_dominio, m, representacion, nodos_de_incognita);
if X == 0
%a = [A,b];
%xlswrite(myfile8bis.xls, a)
%return
else
%save(myfile.txt,a,-ascii,-double,-tabs);
%a = [A,b];
%xlswrite(myfile8.xls, a)
%return
pause(3)
end
end
end
end

82

Captulo 5.
Integrador EDPS_MDF_2D: SOLUCIONES
En este captulo se discutirn los resultados aportados por el MDF
implementado en el software EDPS_MDF_2D. Para ello se testear su
funcionamiento con ejemplos clsicos cuya solucin analtica es conocida
obteniendo as una comparacin entre la solucin aproximada y la real. Un
guin de los casos a ensayar es el siguiente:
5.1.

EDP de orden uno y dos variables.

5.2.

EDP de orden dos y dos variables.


a) Ejemplo 1: Ecuacin de ondas
b) Ejemplo 2: Laplaciano 2D

5.3.

EDPS de orden uno y dos variables.

EDP
5.1. EDP de orden 1 en

EDPS

5.2. EDP de orden 2 en

5.3. EDPS de orden 1 en

EDPS 2x2
Objetivo: obtener

5.1

Objetivo: obtener

Objetivo: obtener

EDP de orden uno y dos variables

Un ejemplo de este tipo de ecuaciones es el presentado en el siguiente


problema:

83

Encontrar la solucin de la ecuacin


[

en el dominio

] siendo las condiciones de contorno

problema que posee la siguiente solucin analtica:

Introduciendo los datos en el programa y considerando


4 ,
con un
total de 20 nodos, se obtiene una muy buena aproximacin pues el error
mximo recogido es
1
1
.
En las tablas siguientes mostramos los valores obtenidos al resolver la
ecuacin en los nodos seleccionados, tanto para la aproximacin de la solucin
como para la solucin real.
Valor de

aproximado:
Y\X

2/4

4/4

0
1/3
2/3
3/3

2.0000
2.0000
2.0000
2.0000

2.0000
2.0833
2.1667
2.2500

2.0000
2.1667
2.3333
2.5000

2.0000
2.2500
2.5000
2.7500

2.0000
2.3333
2.6667
3.0000

Tabla 5.1.1 Aproximacin de

Valor de

en los puntos del dominio discretizado

real:
Y\X

2/4

4/4

0
1/3
2/3
3/3

2.0000
2.0000
2.0000
2.0000

2.0000
2.0833
2.1667
2.2500

2.0000
2.1667
2.3333
2.5000

2.0000
2.2500
2.5000
2.7500

2.0000
2.3333
2.6667
3.0000

Tabla 5.1.2 Valor de

en los puntos del dominio discretizado

84

La tabla de errores es la siguiente:


Error (Real-Aproximado)/Real*100
1.0e-013 *
Y\X

2/4

4/4

0
1/3
2/3
3/3

0
0
0
0

0
-0.213
0.205
0

0
0
0
0

0
0
0
0

0
0
-0.166
0

Tabla 5.1.3 Error relativo al aproximar

en los puntos el dominio discretizado

Esta informacin se puede presentar grficamente como se muestra en la


Figura 5.1.1, forma en la que aparecer a partir de ahora cuando el nmero de
nodos sea elevado.

Figura 5.1.1: Solucin Real vs Aproximacin con 20 nodos

Tras observar la eficacia del integrador se decidi aumentar el nmero de


nodos y observar los errores cometidos.
85

En el nuevo caso en el que los valores de y eran


,
no se
obtuvieron resultados ya que la matriz que discretizaba el sistema era singular.
Por ello se cambi el paso a
1 y
resultando un mallado con un
total de 400 nodos (Figura 5.1.2)

Figura 5.1.2: Solucin Real vs Aproximacin con 400 nodos

Tras el anlisis de los datos se pudo concluir que si bien el integrador estaba
generando soluciones muy bien aproximadas para este tipo de problemas
tambin existan zonas (nodos) ms propensos a generar errores, es decir, el
error en la aproximacin no se distribua de forma homognea. Este hecho hay
que tenerlo en cuenta, puesto que al resolverse el sistema
de forma
conjunta, valores mal aproximados en algunos nodos provocarn una
propagacin del error a otros nodos dando como resultado una solucin
alejada de la realidad. Sera por ello de gran inters proponer como tarea
futura, ya que no es objeto del presente proyecto, el anlisis del
condicionamiento de la matriz , as como un estudio de la convergencia de la
solucin aportada por este mtodo como tambin un estudio sobre la unicidad
de la solucin encontrada, tanto para este tipo de problemas como para todos
aquellos que se resuelvan a travs del Mtodo de las Diferencias Finitas
Centradas.
86

5.2

EDP de orden dos y dos variables

A) Ejemplo 1: Ecuacin de Ondas


Considrese la ecuacin de ondas
1
definida en

] y por las siguiente condiciones de

contorno:

Si

, entonces
1
1

expresin que puede ser reescrita como,


4
Esta ecuacin es una EDP de tipo hiperblico que junto con las condiciones de
contorno que la definen cuenta con procedimientos analticos que permiten
hallar su solucin. Su expresin es la siguiente:

Usando este problema y su solucin analtica podremos comparar la precisin


de la solucin aportada por el integrador.
Para ello se propone un mallado con
[
]
nodos en el dominio dado por

el cul genera un total de 16


[

Los valores numricos en el caso real y aproximado se recogen en las


siguientes tablas:

87

Solucin Aproximada
Y\X

1/3

2/3

0
1/3
2/3
1

0
0.0000
-0.000
0

0.8660
-0.288
-0.288
0.8660

0.8660
-0.288
-0.288
0.8660

0.0000
-0.000
-0.000
0.0000

Tabla 5.2.1 Aproximacin de

en los puntos del dominio discretizado

Solucin Real
Y\X

1/3

2/3

0
1/3
2/3
1

0
0
0
0

0.8660
-0.433
-0.433
0.8660

0.8660
-0.433
-0.433
0.8660

0.0000
-0.000
-0.000
0.0000

Tabla 5.2.2 Valor de

en los puntos del dominio discretizado

Error en tanto por uno


Error (Real-Aproximado)/Real

Y\X

2/4

0
1/3
2/3
3/3

NaN
-Inf
Inf
NaN

0.000
-0.333
-0.333
0

-0.000
-0.333
-0.333
0.0000

0
1.4175
0.0000
0

Tabla 5.2.3 Error relativo al aproximar

en los puntos el dominio discretizado

Los errores cometidos en este caso son del 33.33% puesto que los valores que
se observan en las fronteras son irrelevantes al tratarse de expresiones que
carecen de significado en su planteamiento. La solucin grfica corresponde a
la presentada en la Figura 5.2.1.
Tras los resultados anteriores se pens en mejorar el mallado y observar el
comportamiento del MDF. Para ello se propuso disminuir el paso.

88

En primer lugar se prob con valores de y menores pero que no guardasen


ninguna correlacin entre ellos,
y
1
. El resultado fue poco
concluyente. Las soluciones que generaba el mtodo parecan, desde un punto
de vista matemtico correctas, pero no coincidan con las reales (Figura 5.2.2).
Es por ello que se consider que se deba mejorar el paso pero manteniendo la
proporcin 1:1. Esto result en asignar iguales valores a y , concretamente
1 .

Figura 5.2.1 Solucin de la Ecuacin de Ondas para

El resultado desemboc en una notable mejora cualitativa y cuantitativa (ver


Figura 5.2.3). En primer lugar la forma de la solucin aportada era muy
prxima a la real. Por otro lado, la diferencia mxima entre el valor real y el
aproximado era tan solo 0.005109424959817 (frente al error mximo de la
aproximacin anterior de magnitud 0.333). Lo que implicaba que el valor
aproximado, en el peor de los casos, aportaba una solucin con dos decimales
exactos. Estos puntos se localizaban en aquellas zonas en las que la funcin
cambiaba su carcter convexo a cncavo y viceversa.

89

Figura 5.2.2 Mallado dado por

Figura 5.2.3. Mallado dado por

90

Para finalizar el estudio de la solucin en el caso de la ecuacin de ondas, se


propuso cambiar una de las condiciones de contorno Dirichlet por su
correspondiente tipo Neumann.
El problema a resolver ahora era el siguiente

en

con las condiciones de frontera siguientes

|
El mallado propuesto fue el mismo que en el caso anterior. Relacin de
aspectos 1:1 con valor
1 .

Figura 5.2.4 Solucin Grfica de la Ecuacin de Ondas con condiciones Mixtas

91

Los resultados, presentados de forma grfica en la Figura 5.2.4 son aptos. Sin
embargo, en comparacin con las condiciones de contorno tipo Dirichlet, cabe
decir que el error ms desfavorable existente es mayor, puesto que la
diferencia entre el valor real y el aproximado en dicho caso es
0.013456064953458 y por tanto la precisin es de una cifra decimal correcta.

B) Ejemplo 2: Laplaciano 2D
Otro ejemplo de este tipo de ecuaciones en derivadas parciales son las de tipo
elptico. Se ha propuesto la resolucin de la ecuacin de Laplace, aplicada a un
caso de transferencia de calor. El resultado de esta ecuacin representa el
campo de temperaturas en un dominio bidimensional definido por la geometra
particular del problema. En nuestro caso el mostrado en la siguiente imagen:

Figura 5.2.5. Esquema del problema de transferencia de calor

La formulacin matemtica del problema es la siguiente:


; definida en
Siendo

1 y las condiciones de frontera las siguientes


(

1
De este problema se sabe que la solucin analtica tiene la siguiente expresin:

)
(

92

)]

Para obtener las conclusiones, se contrast la solucin analtica propuesta (con


una serie de 100 elementos) con la solucin generada por el Integrador con
.
Los resultados fueron los siguientes.

Figura 5.2.6. Solucin analtica (100 Trminos) vs Aproximacin Integrador

Se observa que la aproximacin difiere poco de la solucin real excepto en los


puntos
y
1 . Esto es debido al planteamiento del problema.
Segn las condiciones de contorno ambos puntos deben estar a la temperatura
1
y
. En el integrador se program, que en caso de que un punto
perteneciese a dos fronteras, se evaluase una de ellas, en este caso
1 .
Sin embargo, la solucin analtica considera que en los puntos
y
la
temperatura es . Es por ello por lo que se produce la discrepancia en dichos
puntos de la solucin.
93

5.3

EDPS de orden uno y dos variables

Para finalizar el captulo se procede a calcular la solucin de un EDPS generado


por dos ecuaciones en derivadas parciales. Las incgnitas a resolver son
y
y el nmero de variables independientes son dos: e .
El problema es el siguiente:

definido en

Junto a las condiciones de contorno:

1
1

1
(
1 1
(

)
)
)

Este sistema tiene como solucin analtica la dada por las siguientes funciones:
1

1
1

Una ilustracin de estas superficies sera la mostrada a continuacin en la


Figura 5.3.1.
94

Figura 5.3.1. Solucin Real del EDPS

Para resolverlo utilizando el integrador EDPS_MDF_2D se han propuesto los


valores de
1
y
obteniendo una malla con 672 nodos. Los
resultados, mostrados en la Figura 5.3.2 son satisfactorios ya que, en el peor
de los casos, el valor aportado por la aproximacin posee una precisin de dos
cifras decimales.
Hay que decir, que si bien para este mallado el resultado es muy acertado, no
ocurre as para un mallado arbitrario. En casos en los que los valores y no
sean los adecuados, el mtodo programado encontrar problemas de diversos
tipos: bien se obtendr un sistema
cuyos valores no aproximen en
absoluto la solucin; bien se obtendr un sistema
cuya solucin
aproxime peor la solucin; o por ltimo, existir la opcin de que el sistema
no posea solucin por haberse generado una matriz con determinante
nulo. Sabido esto, se continuar la seccin con la descripcin de los resultados
cuantitativos de la aproximacin obtenida en la resolucin del EDPS presente.

95

Figura 5.3.2. Solucin Aproximada del EDPS

En efecto, en las figuras Figura 5.3.3 y Figura 5.3.4 se muestran unas


comparaciones entre los valores reales y aproximados para las funciones
y
que componen el sistema.
Las diferencias mximas y mnimas encontradas entre los valores reales y
aproximados para la funcin
han sido 0.0033 y -0.0032
respectivamente. Es decir, gracias al uso del MDF se est obteniendo una
aproximacin de la solucin de dos cifras decimales.

96

Figura 5.3.3. Funcin


.
Comparacin entre valores reales y aproximados

Realizando el mismo procedimiento para la otra funcin que compone el EDPS,


, se obtiene que las diferencias mximas y mnimas entre los valores
reales y aproximados son 0.0029 y -0.0032 respectivamente. Estos resultados
se pueden ver grficamente en la Figura 5.3.4. La conclusin en esta situacin
es la misma que en caso anterior, la precisin del mtodo es de dos cifras
decimales.

97

Figura 5.3.4. Funcin

).

Comparacin entre valores reales y aproximados

En el caso en el que las condiciones de contorno del sistema fueran diferentes,


tales que hubiera alguna de tipo Neumann, el mtodo, para una gran
diversidad de pasos programados, no logra encontrar un sistema
que
sea compatible.
Sin embargo, si se considera que este sistema
ofrece una
incompatibilidad debido a que existen combinaciones lineales de filas en la
matriz , se podran eliminar stas obteniendo as una matriz no cuadrada. La
solucin de este problema puede ser aproximada por mnimos cuadrados. En
un caso de este tipo, concretamente en aqul en el que las condiciones de tipo
Neumann fueran establecidas en la funcin
en el extremo superior de la
variable , es decir
1 (frontera 2), y para un caso en el que el paso en
98

la direccin
adquiriera el valor 1
encontrada sera la siguiente:

en la direccin

la solucin

Figura 5.3.5. Aproximacin de la solucin del EDPS


con condiciones en fronteras mixtas mediante mnimos cuadrados.

99

Esta pgina ha sido intencionalmente dejada en blanco

100

Captulo 6.
Aplicacin: Control del Pndulo Invertido
6.1. Ecuaciones de Euler-Lagrange
Un ejemplo prctico para aplicar la teora anteriormente vista es la resolucin
de un sistema mecnico con dos grados de libertad. Se eligi para tal fin uno
de los diversos sistemas tratados por J. A. Acosta Rodrguez en su tesis Control
no lineal de sistemas subactuados (Acosta Rodrguez, 2004). Se trata de un
pndulo invertido de inercia
que en su extremo superior posee un disco de
inercia . De este modo, existen dos grados de libertad en el problema, por un
lado el ngulo que forma la varilla con la vertical y por otro, el ngulo que
forma un radio de referencia del disco en el extremo de la varilla respecto de la
vertical.

Figura 6.1.1. Pndulo Invertido: Esquema del problema

Si se formula el problema atendiendo a dicho esquema, las ecuaciones EulerLagrange que lo describen son las siguientes:
[

][ ]

101

[ ]
1

Siendo

El cambio de coordenadas

permite una representacin ms simple,

[ ]

Donde

6.2. Ecuaciones de Control


Una vez definido el problema desde el punto de vista mecnico, la tesis
Control no lineal de sistemas subactuados (Acosta Rodrguez, 2004) propone
el siguiente controlador de las posiciones
y :
(

donde
[

1
]
1

[ ]

[ ]

)
(

)(
)

)
]

Siendo y los parmetros de control que vienen dados por las siguientes
expresiones

102

11

1
Donde

son las ganancias de control.

Por tanto el sistema a resolver se puede expresar de la siguiente forma:

[ ]

1
1

Como se puede observar, la seal de control , depende de


dependencia de las dos primeras se recoge a travs del vector
representa cada una de las derivadas parciales del potencial
.

. La
que

Dicho potencial se calcula de la resolucin de la siguiente EDP:


siendo

<

junto a las condiciones de contorno:


siendo

|
(

siendo

)|

siendo su solucin la siguiente:


(

Ahora bien, si se proponen como ganancias de control las siguientes:


[
entonces
expresin:

1,

4, y la EDP de la que se deduce el potencial adquirira la

103

que tiene como solucin:


1

4
1

cuyas derivadas parciales vendran dadas por las siguientes expresiones,


1 (
1

Ahora se podra simular la evolucin del sistema propuesto. Una forma de


hacerlo sera mediante integracin numrica basada en otros mtodos
numricos ya existentes. Un algoritmo que recogiese este proceso sera el
siguiente:
1. Leer un vector de condiciones iniciales.
2. Discretizar el tiempo de la simulacin.
3. Para cada
y para cada
aproximar
mtodos numricos ya existentes en Matlab.

usando uno de los

Dicho algoritmo sera implementado en Simulink mediante el diagrama


mostrado a continuacin.

Figura 6.2.1. Esquema de la simulacin del sistema y su control

104

En l, el bloque MATLAB Function Control toma como datos de entrada el


[
] en cada instante , y calcula la seal de
vector
control para dicho instante. Posteriormente el bloque Pendulum integra el
sistema de ecuaciones expuesto en el apartado 6.2. Ecuaciones de Control
(pgina 103) dando como salida la posicin del pndulo y de la rueda de
inercia, as como sus velocidades, en el instante inmediatamente posterior a ,
[
es decir, se obtiene como salida el vector
1
1
1
1
1 ] que ser la nueva entrada del bloque MATLAB Function Control .
Esto es posible en el caso de conocer la expresin analtica de
. En caso
contrario, sera necesario obtener una aproximacin de dicho potencial. Es por
ello por lo que resultara interesante comparar la solucin en el caso en que
fuese conocido con aquel caso en el que
fuese aproximado por el
integrador EDPS_MDF_2D.
Para hacer uso de la solucin aproximada, el integrador intervendra en el
algoritmo anterior de la siguiente forma:
1. Resolver EDP (obteniendo
un dominio

aproximado) con EDPS_MDF_2D en

suficientemente amplio perteneciente a

(proceso

offline).
2. Con los valores de
,

en

y mediante el MDF se aproximan los valores

(proceso offline).

3. Leer un vector de condiciones iniciales.


4. Discretizar el tiempo de la simulacin.
5. Para cada

y para cada

5.1.

5.2.

Interpolar el valor de

]
con los datos obtenidos

de la resolucin de

en el dominio

5.3.

Interpolar el valor de

5.4.

Obtener una aproximacin del vector

5.5.

Resolver

6. Aproximar

en el paso 1.

con los datos del paso 2.


[

1 usando mtodos numricos existentes en Matlab.

En el diagrama mostrado en la Figura 6.2.2 se muestra cmo ahora el bloque


MATLAB Function Control toma como datos de entrada adems del vector
105

] en cada instante , los valores de

suministrados por el bloque MATLAB Function Control SolucionEDP en dominio


Q para obtener mediante interpolacin lineal los valores

| y

| en funcin

de
y
y obtener as una aproximacin de
lo cul permitir calcular
la seal de control, que como se puede recordar vena dada por la expresin
(
)
(
)

Figura 6.2.2. Esquema de la simulacin del sistema y su control basado ste en la


resolucin de mediante EDPS_MDF_2D

6.3. Anlisis y discusin de los resultados obtenidos


Una vez descrito el problema se plantea analizar su solucin para diferentes
condiciones iniciales y diferentes tipos de condiciones de contorno.
Los ensayos estarn estructurados en dos subapartados principales (6.3.1.
Condiciones de contorno exactas y 6.3.2. Condiciones de contorno
aproximadas). El esquema de las situaciones ensayadas es el mostrado en la
Figura 6.3.1. Las condiciones iniciales a ensayar dentro de un mismo
subapartado sern siempre las mismas, variando de un caso a otro las
condiciones de contorno para obtener conclusiones sobre la solucin aportada
por el MDF en funcin del tipo de frontera planteado.
Una de las situaciones propuestas fue simulada en un modelo 3D ofrecido por
el autor de la tesis anteriormente mencionada. En la presentacin anexa se
muestra un video correspondiente al caso en el que la posicin de inicio es
[
] y las condiciones en frontera son conocidas (exactas) de tipo
mixto (se considera la existencia de una condicin tipo Neumann en la frontera
).
106

107

6.3.1.

Condiciones de contorno exactas

6.3.1.a. Condiciones Dirichlet


Las condiciones Dirichlet permiten obtener el valor de
en las fronteras
del dominio
mediante evaluacin directa. En un primer ejemplo se
[ 1 1] [ 1 1] discretizado por
resolvi la EDP en el dominio
,
.

Figura 6.3.1.a.1 Solucin de

en

Estos resultados sugieren que se obtendrn buenos resultados en el control del


sistema ya que la diferencia entre el valor real y aproximado difiere en la
tercera cifra decimal una cantidad igual a
en el caso ms desfavorable.

108

Se procedi por tanto a realizar una simulacin del sistema en el caso en el


que las condiciones iniciales fueran las recogidas en el vector
[
1
]

Figura 6.3.1.a.2: Comportamiento del sistema ante

Nota: La lnea azul y verde representan


y
respectivamente en las grficas de la
izquierda y
y
respectivamente en las grficas de la derecha.

A la vista de los resultados era evidente que se lograba controlar el sistema. La


resolucin de la EDP estaba siendo correcta. Sin embargo, el dominio de
integracin propuesto era pequeo limitando as los posibles valores que
podan tomar las condiciones iniciales y reduciendo cualitativamente el nmero
de simulaciones posibles.
Para los ejemplos sucesivos y el resto del captulo se decidi cambiar el
dominio por aqul que, en cada caso, proporcionase resultados significativos
sobre la solucin. Por tanto, la extensin del domino as como los parmetros
usados para su discretizacin eran susceptibles de cambios. De este modo, los
resultados mostrados seran ms representativos al asegurar un amplio rango
de valores
y
que permitiesen obtener una aproximacin para
en todo
momento, pues podra darse el caso en el que se produjese una
sobreoscilacin de alguna de las coordenadas ,
y al no estar stas dentro
del mallado propuesto no poder continuarse con la simulacin.
[
]
En la Figura 6.3.1.a.3 se muestra el nuevo dominio
el que
y
generndose un total de 1116 nodos.

109

] en

Este nuevo mallado ofrece buenas aproximaciones en las zonas alejadas del
origen. En aquellas prximas a la coordenada

existen grandes
diferencias entre los valores reales y aproximado siendo necesario otro mallado
en torno a estos puntos si se quiere mejorar la precisin del control en dichos
casos. Por tanto, se espera que el rgimen permanente simulado con valores
de la aproximacin de
sea de carcter oscilatorio.

Figura 6.3.1.a.3: Solucin de

en

Una vez conocidas las limitaciones de la solucin se procedi a realizar una


nueva simulacin.
[
]. El
El caso actual parta de iguales condiciones iniciales
1
objetivo era observar cmo haba afectado el nuevo mallado a la solucin del
problema. En la Figura 6.3.1.a.4 se muestran los resultados. stos han sido
similares al caso anterior. Sin embargo, en el dominio de la solucin ha
aparecido una zona en la que los errores porcentuales son altos. Con este
mallado se ha mantenido la precisin para aproximar valores de la solucin de
la EDP en ciertos puntos del dominio, pero en otros la aproximacin aportada
no es recomendable.
110

Figura 6.3.1.a.4. Condiciones iniciales

A modo de curiosidad, se expone el caso simtrico, aqul en el que el sistema


parte de una posicin simtrica a la anterior. El comportamiento es el
esperado.

Figura 6.3.1.a.5. Condiciones iniciales

111

A continuacin se recogen algunos de los casos ensayados para probar la


fiabilidad de las soluciones con este mallado. En ellos el pndulo parte de
diferentes configuraciones iniciales. Se presenta la solucin de forma grfica en
la que aparece la solucin real contrastada con la aproximada.

Figura 6.3.1.a.6. Condiciones iniciales

Figura 6.3.1.a.7. Condiciones iniciales

112

Figura 6.3.1.a.8. Condiciones iniciales

Figura 6.3.1.a.9. Condiciones iniciales

113

Figura 6.3.1.a.10. Condiciones iniciales

Figura 6.3.1.a.11. Condiciones iniciales

[ 41

La conclusin fue la buena aproximacin del integrador EDPS_MDF_2D en


aquellos puntos del dominio
fuera de la franja diagonal donde las
aproximaciones de
diferan notablemente de los valores reales. Para
mallados ms precisos (mallado
) e iguales condiciones iniciales se
obtuvieron mejores aproximaciones pues la franja de error disminua su ancho
y mejoraba en resultado.

114

6.3.1.b. Condiciones Mixtas


En este apartado se estudi el caso en el que las condiciones en frontera
fueran de tipo mixtas. Se decidi establecer una de tipo Neumann en la
, mientras el resto se regan por las de tipo Dirichlet.
frontera
Se prob el mismo mallado que en el caso anterior, pero para estas
condiciones no exista un sistema compatible por tanto se cambi a un mallado
de iguales dimensiones en los que
1 y
. El resultado para unas
[
]
condiciones iniciales
1
fue el mostrado a continuacin:

Figura 6.3.1.b.1. Condiciones iniciales

A pesar de que no exista divergencia en sus coordenadas el resultado no era


el deseado. Por ello se modificaron nuevamente los parmetros que
discretizaban el dominio y se procedi a buscar una solucin ms exacta, ms
cercana a la real.
Cambiando los parmetros y a 41 y
respectivamente se obtuvo una
mejora en la solucin (ver Figura 6.3.1.b.2). En la nueva simulacin las
oscilaciones en rgimen permanente haban reducido su magnitud
(anteriormente eran de radianes en
y ahora este valor era 1 ) por lo que
una disminucin en el paso estaba aportando mejores resultados, ms
precisos.

115

Figura 6.3.1.b.2. Condiciones iniciales

Es por ello por lo que se busc aumentar la precisin de la solucin, generando


[
] [
] con parmetros
otro nuevo mallado
1 y
en el que se obtuvo una leve mejora como se puede ver en la Figura 6.3.1.b.3.
Sin embargo no era suficiente y se eligi uno que haba dado muy buenos
[ 1 1 ] [ 1 1 ] con
resultados en casos anteriores. ste era
1 y
.

Figura 6.3.1.b.3. Condiciones iniciales

116

El porqu de estos buenos resultados se puede encontrar contrastando los


valores de
reales y los aproximados por el integrador. Esto se muestra
en la Figura 6.3.1.b.4. Si se observa la grfica Distribucin del Error I se
deduce la existencia de una pequea franja diagonal en el espacio generado
por
y
en la que existen algunos puntos que producen malas
aproximaciones siendo de especial inters evitar cuatro puntos en los que los
errores son excesivos. En el resto del dominio los errores cometidos son
pequeos. De esta observacin se deduce que la solucin en
,
punto en torno al que se quiere estabilizar el sistema, producir oscilaciones
mayores que en el caso analtico, pues aqu el error es apreciable.
Una vez conocidas las limitaciones de la solucin se procedi a repetir la
simulacin del control del pndulo invertido para los casos anteriormente
descritos. Las soluciones se muestran grficamente desde la Figura 6.3.1.b.5
hasta la Figura 6.3.1.b.9

Figura 6.3.1.b.4: Solucin de

117

en

Figura 6.3.1.b.5: Condiciones iniciales

Figura 6.3.1.b.6: Condiciones iniciales

118

Figura 6.3.1.b.7. Condiciones iniciales

Figura 6.3.1.b.8: Condiciones iniciales

119

Figura 6.3.1.b.9. Condiciones iniciales

[ 41

La conclusin a la que se llega es la esperada. La aproximacin de la seal de


control es muy buena en todos los puntos ensayados.
RESUMEN SOBRE EL APARTADO 6.3.1.
Cuando las fronteras son conocidas las conclusiones son las siguientes:
1. La integracin de la EDP mediante el MDFC produce una franja en el plano
(franja a la que se llamar franja de inadmisin) en la que la
aproximacin de
difiere notablemente de la real. En dicha franja se
encuentra el punto
, valor en torno al que se quiere estabilizar el
sistema (rgimen permanente).
2. Se ha podido observar que esta franja puede reducirse y mejorarse en
funcin de los parmetros que discretizan el dominio, encontrndose que
para una misma discretizacin, los errores obtenidos cuando las condiciones
de contorno son de tipo Dirichlet son menores que cuando las condiciones
son de tipo mixtas.
3. El integrador, no lograr llegar a una situacin en la que
y
sean cero
en rgimen estacionario. Siempre existir una oscilacin en torno a dicho
punto, siendo mayor en el caso en el que las condiciones de contorno sean
de tipo mixtas.
120

6.3.2. Condiciones de contorno aproximadas


A veces se desconocen con exactitud las condiciones de contorno reales
aunque se sabe la forma que deben tener dichas soluciones.
Se realiz un estudio de la solucin tomando como condiciones en las fronteras
aquellas que respondan a la linealizacin de dichas funciones en los puntos
medios. Los resultados fueron poco aproximados y solo vlidos para casos en
los que las posiciones de equilibrio y sobreoscilaciones fueran menores que
orden dos (menores a un grado sexagesimal).
Por tanto se propuso realizar un anlisis dimensional del problema, para, en
funcin de las conclusiones extradas, proponer las fronteras ms adecuadas
para cada caso. Este considera que, si se partieran de las condiciones
conocidas, estas tomaran la siguiente forma
Frontera 1

Frontera 2

Frontera 3

Frontera 4

)
(

)
)

(
(

donde

Y puesto que por condiciones del problema


y < siendo ambos datos.

<

se obtiene que

Por tanto se podran proponer funciones de dos tipos, bien parablicas, bien
sinusoidales.
Fronteras Parablicas
Si proponemos fronteras parablicas se debe cumplir que
|

por tanto,
|

|<| |
121

<1

Haciendo una estimacin en base a los rdenes de magnitud, se deduce que


|

|
| |
1

Lo que sugiere que interesan con rdenes de magnitud altos. Tambin sern
vlidas estas configuraciones para aquellos pndulos en los que sea alto con
respecto a siendo
y
de rdenes lo ms dispares posibles, lo cul se hace
posible eligiendo adecuadamente el valor del parmetro .
Sin embargo, puesto que los valores de
y
son datos del problema
(obedecen a la configuracin del pndulo) slo podemos modificar . Por tanto
sera de esperar que para altos valores de , el integrador aporte mejores
aproximaciones.

Fronteras Sinusoidales
Si se quieren proponer soluciones de tipo sinusoidales se debe cumplir que
|

fuera del orden de


Una solucin a considerar sera que el trmino
1
, suponiendo que los coeficientes
y
fuesen del mismo orden de
magnitud. Puesto que stos son dato, para que esta condicin se cumpla
incondicionalmente, cuanto ms pequeo sea el valor de la expresin
anteriormente mencionada, mejor ser su aproximacin. En el caso extremo
en el que su valor sea nulo, se producir la dominancia de los trminos
sinusoidales. Esto sugiere que

Por tanto cuando las condiciones iniciales sean de este tipo,


independientemente de la configuracin del pndulo, es decir, de los valores
de los coeficientes anteriormente mencionados, las fronteras sinusoidales
ofrecern una buena aproximacin de la solucin y ser posible el control.

122

6.3.2.a. Condiciones Dirichlet:


APROXIMACIN PARABLICA DE LA FRONTERA
En un primer caso se plantearon las fronteras parablicas de acuerdo con los
datos originales del problema. Por tanto la expresin de las fronteras ahora
era:
Frontera 1

Frontera 2

Frontera 3

Frontera 4

)
)

(
(

donde
1

A este caso se le aadieron otros dos para estudiar el comportamiento del


sistema ante estas condiciones siendo tres los casos totales a estudiar:
(problema original);
;y
1

Aproximacin parablica. 1er Caso:


[ 1 1 ] [ 1 1 ] con parmetros
Se realiz un mallado definido por
1
y
y se procedi a resolver la ecuacin que determinaba el
potencial
. La aproximacin, segn se puede ver en la Figura 6.3.2.a.1,
no estaba aportando buenos resultados en una zona del dominio (ver
Distribucin de Error I). De hecho, el vector de condiciones iniciales propuesto
para simular el sistema se situaba en
punto que estaba
produciendo un error del 33.9334%. Por tanto, era lgico pensar que al aplicar
esta aproximacin para controlar el sistema, los resultados no fuesen buenos,
ya que lo que se estaba haciendo en el fondo era buscar una solucin al
problema donde precisamente el integrador no estaba funcionando. Por tanto,
en un caso prctico, el paso siguiente hubiese sido modificar el mallado que se
est utilizando para obtener una mejor aproximacin. Sin embargo, como el
objetivo de este apartado es mostrar que independientemente del mallado que
se haya elegido, al aumentar se va a obtener una mejor aproximacin de la
solucin se seguir con este mallado procediendo a la simulacin del control
del sistema (ver Figura 6.3.2.a.2.)
123

Figura 6.3.2.a.1:

aproximado con

vs

exacto en

Se simul el control sobre el sistema cundo este parta de unas condiciones


[
]. El control sobre el sistema fall. A los ocho
iniciales dadas por
segundos de iniciar la simulacin era evidente la divergencia en las
coordenadas
y
que describan el sistema.

Figura 6.3.2.a.2.

, condiciones iniciales

124

Aproximacin parablica. 2 Caso:


En este caso se repiti la simulacin para las mismas condiciones iniciales en
las que, siendo
, el sistema no se lograba controlar. Era evidente que si
este parmetro mejoraba la solucin cuanto mayor era, en este caso la
solucin obtenida iba a ser peor. Para comprobarlo se volvi a buscar la
[ 1 1 ] [ 1 1 ]
solucin del potencial
en el mismo dominio
mallado de igual forma. La aproximacin del potencial (Figura 6.3.2.a.3) en
este caso no mejor en la zona en la que se deba buscar la solucin, siendo en
general, peor la aproximacin en el resto de puntos del dominio que en el caso
en el que
.

Figura 6.3.2.a.3:

aproximado con

vs

exacto en

Una vez calculada la aproximacin solo restaba utilizarla para aproximar la ley
de control y analizar el comportamiento del sistema. Para ello se ejecut
nuevamente el simulador bajo unas condiciones iniciales dadas por
[
]. El resultado, mostrado en la Figura 6.3.2.a.4 puso de manifiesto el
comportamiento esperado del parmetro . Si bien, en el caso anterior el
control sobre las coordenadas del sistema se perda a los ocho segundos de
haber iniciado la simulacin, en este caso no se lograba ir ms all del quinto
segundo.
125

Figura 6.3.2.a.4.

, condiciones iniciales

Aproximacin parablica. 3er Caso:


Para finalizar, se propuso aumentar el orden de . La solucin que el
integrador EDPS_MDF_2D ofreca para
dadas estas nuevas fronteras,
haba mejorado (ver Figura 6.3.2.a.5). Si bien segua existiendo una zona en la
que la aproximacin era desaconsejable, sta era ms estrecha y concentraba
los errores mayores cerca del origen (solucin en rgimen permanente).
Por tanto, si se ensayaba la simulacin con las mismas condiciones iniciales
[
], que en los casos anteriores, se esperaba que los resultados
mejorasen. Y as fue. Ahora, el sistema no diverga. El sistema mostraba un
carcter oscilatorio en torno al punto de equilibrio (ver Figura 6.3.2.a.6).

Conclusiones
La conclusin obtenida tras la resolucin de estos casos fue que el valor de
en las fronteras (condiciones de contorno) poda ser usado para ajustar la
solucin. Se distinguan dos casos:
a) Si las condiciones iniciales de las que parte el sistema se sitan
dentro de la franja de inadmisin, a medida que
aumenta, el
tiempo durante el cual el sistema permanece bajo control aumenta,
hasta cierto valor del parmetro
en el cul el sistema adquira un
comportamiento oscilatorio e
126

Figura 6.3.2.a.5

aproximado con

Figura 6.3.2.a.6.

, condiciones iniciales

127

vs

exacto en

] en

comportamiento oscilatorio en torno a los valores introducidos en el


vector de condiciones iniciales. Cabe decir, que adems pueden
encontrase valores de que consigan una respuesta amortiguada en
el sistema (ver Figura 6.3.2.a.7). Se concluye por tanto que un valor
de
suficientemente alto lleva al sistema a oscilar de forma
controlada (desde su posicin inicial hasta su simtrica) en torno al
punto de equilibrio del sistema, y que adems pueden encontrarse
valores de que amortigen la respuesta del sistema, aunque no sea
fcil su obtencin a priori.

[
Figura 6.3.2.a.7 4 , condiciones iniciales
Obsrvese el amortiguamiento en la respuesta

] en

b) Si las condiciones iniciales de las que parte el sistema se encuentran


fuera de la franja en la que la aproximacin no es aconsejable, un
aumento del valor de
mejorar significativamente la aproximacin
de
consiguindose estabilizar el sistema y/o mejorar el
tiempo en estabilizarlo. A modo de ejemplo se propuso simular el
[1 1
] para as
sistema partiendo de la condicin inicial
mostrar el potencial de mejora del parmetro . Se presentan pues,
en la Figura 6.3.2.a.8 y Figura 6.3.2.a.9, los resultados de aproximar
la seal de control
cuando se aproxima
con
y
1
respectivamente.

128

En el caso en el que
la aproximacin de
no es buena
producindose una mala aproximacin de la seal de control con lo
cul el sistema no consigue controlarse.

Figura 6.3.2.a.8.

, condiciones iniciales

[1

Sin embargo, al aumentar


a la aproximacin de
logrndose as controlar y estabilizar el sistema.

Figura 6.3.2.a.9.

, condiciones iniciales

129

] en

mejora,

[1

] en

Propuesta para mejorar los resultados para el caso

Como ltimo caso se propuso


para mejorar la solucin. Los resultados
fueron prcticamente idnticos (ver Figura 6.3.2.a.10). Solo se pudo apreciar

Figura 6.3.2.a.10.

, condiciones iniciales

una pequea mejora en torno al comportamiento de las velocidades


y .
Ahora su comportamiento oscilatorio estaba bien definido. A partir de aqu, la
nica forma de mejorar el rgimen permanente, dadas estas condiciones
iniciales, sera mediante el redimensionado del domino de integracin y la
eleccin adecuada de los parmetros y que lo discretizaban.
Por ejemplo, para un caso en el que el nuevo dominio fue descrito por
[
] [
] con parmetros
1
y
los valores de
y

aproximados mediante

(valor del parmetro igual al

valor del parmetro en el problema original) posean un error muchsimo


menor (ver figuras 6.3.2.a.11, 6.3.2.a.12 y 6.3.2.a.13). Adems, la franja en
la que se producan peores aproximaciones redujo su amplitud y mejor su
comportamiento (ver Figura 6.3.2.a.11). En dicho caso, la seal de control iba
a aproximarse mejor y los resultados iban a mejorar. Para comprobarlo, se
ensay el mismo problema que habamos estado tratando desde el comienzo
del presente apartado. Los resultados, en los que se puede apreciar el buen
funcionamiento del integrador, se muestran en la Figura 6.3.2.a.14. Se
observ que si bien, en el caso en el que el mallado vena dado por
para
el control del sistema fallaba a los ocho segundos, para este nuevo
mallado e igual valor de la simulacin aportaba muy buenos resultados.
130

Figura 6.3.2.a.11

Figura 6.3.2.a.12

aproximado con

aproximado con

131

vs

exacto en

exacto en

vs

Figura 6.3.2.a.13

Figura 6.3.2.a.14.

aproximado con

vs

, condiciones iniciales

132

exacto en

] en

APROXIMACIN SINUSOIDAL DE LA FRONTERA


Proponiendo las condiciones sinusoidales siguientes
Frontera 1

Frontera 2

Frontera 3

Frontera 4

(
(

)
)

[ 1 1 ] [ 1 1 ] en el que
en el dominio
1
y
, las
aproximaciones de
sern vlidas para resolver problemas con
[
]
condiciones iniciales tipo
Tomando unas condiciones de este tipo, por ejemplo las del caso anterior
[
], para as poder comparar los resultados, se obtuvo el siguiente
comportamiento:

Figura 6.3.2.a.15:

4, condiciones iniciales

Sin embargo, una vez las condiciones iniciales cambian y se alejan de las
[
] mostrado en la Figura 6.3.2.a.16,
propuestas, como en el caso
se produce un offset en el valor de
en torno al cul se estabiliza.

133

Figura 6.3.2.a.16:

4, condiciones iniciales

Para condiciones de contorno muy alejadas de la propuestas, caso de la Figura


6.3.2.a.17, el control sobre la variable
se pierde.

Figura 6.3.2.a.17:

4, condiciones iniciales

En conclusin, las aproximaciones del integrador son tiles dentro de los


rangos anteriormente expuestos.
134

RESUMEN SOBRE EL APARTADO 6.3.2.a


Cuando las fronteras son desconocidas de tipo Dirichlet las conclusiones fueron
las siguientes:
1. Al aproximarlas mediante una expresin parablica de tipo
aumentar el parmetro
para un mismo mallado conlleva una
mejora de la solucin. La mejor o peor aproximacin de la solucin en
rgimen permanente depender de si las condiciones iniciales se
encuentran fuera o dentro de la franja de inadmisin as como de la
precisin del mallado.
2. Si son aproximadas mediante una expresin sinusoidal del tipo
se encuentran muy buenos resultados en aquellas simulaciones en
las que las configuraciones del sistema tienen como vector de condiciones
[
]
iniciales , definido por
A continuacin, en el apartado 6.3.2.b, se expondrn y se discutirn los
resultados obtenidos para el caso en el que las condiciones propuestas en las
fronteras sean mixtas.

135

6.3.2.b. Condiciones Mixtas


En este ltimo epgrafe de este captulo se presenta el comportamiento del
sistema ante una aproximacin de
basada en condiciones de contorno
aproximadas de tipo mixtas.
En principio la solucin no tiene por qu ser vlida, puesto que habra que
hacer un estudio sobre qu trminos de las derivadas son dominantes y bajo
qu condiciones lo son. Sin embargo se van a ensayar un par de fronteras para
cada caso a modo de ejemplo

APROXIMACIN PARABLICA DE LA FRONTERA


El caso de estudio es el dado por la siguiente configuracin:
Frontera 1 (Tipo Dirichlet)
Frontera 2 (Tipo Neumann)

(
(

Frontera 3 (Tipo Dirichlet)

Frontera 4 (Tipo Dirichlet)

[ 1 1 ] [ 4 4] en el que
en un mallado
11 ,
y
se
obtiene una aproximacin de
cuyos valores se recogen en la siguiente
figura

Figura 6.3.2.b.1: Solucin de

136

en

Ante una simulacin para unas condiciones iniciales dadas por


[ 11 1
], el sistema es incapaz de ser controlado. Es decir, la aproximacin
aportada por el integrador no est siendo acertada. Es por ello por lo que se
decidi aumentar el valor de , al igual que se hizo en el apartado anterior,
para observar si en estas nuevas fronteras el comportamiento era el mismo.
Aumentando por tanto, el valor de
a
y recurriendo al integrador para
aproximar la funcin
las mejoras fueron evidentes:

Figura 6.3.2.b.2: Solucin de

aproximado con

en

Se lograba controlar el sistema aunque el rgimen permanente era oscilante.

Figura 6.3.2.b.3: Condiciones iniciales

137

[ 11 1

APROXIMACIN SINUSOIDAL DE LA FRONTERA


Para el caso en el que las fronteras son sinusoidales de tipo mixtas, la
formulacin es la siguiente:
Frontera 1 (Tipo Dirichlet)
Frontera 2 (Tipo Neumann)

(
(

)
)

(
(

Frontera 3 (Tipo Dirichlet)

Frontera 4 (Tipo Dirichlet)

[ 1 1 ] [ 1 1 ] en el que
en un mallado dado por
1 se obtiene la siguiente aproximacin de

Figura 6.3.2.b.4: Solucin de

en

Siendo la simulacin para una configuracin en la que


mostrada en la Figura 6.3.2.b.5

138

1 ,

[ 11 1

] la

Figura 6.3.2.b.5: Condiciones iniciales

[ 11 1

Si ahora consideramos que las condiciones iniciales tienen que ser del tipo
[
] el resultado que se consigue es mucho mejor. Los valores de
y
se estabilizan y el comportamiento del sistema aproximado es semejante
al problema cuya solucin analtica es conocida.

Figura 6.3.2.b.6: Condiciones iniciales

139

[ 1144

Esta pgina ha sido intencionalmente dejada en blanco

140

Captulo 7.
Conclusiones y Trabajo futuro
Tras el trabajo de documentacin y programacin para desarrollar el
integrador numrico EDPS_MDF_2D y el posterior anlisis de resultados se
presenta, en este ltimo captulo, una serie de conclusiones y propuestas de
trabajos futuros.

7.1

Conclusiones

A continuacin se exponen unas conclusiones sobre el trabajo desarrollado:


1. Aunque a priori el mtodo de las diferencias centradas resulta muy verstil,
rpido e intuitivo no siempre genera soluciones, es decir, no siempre se
obtiene una matriz
cuyo rango sea completo. Esto depender de dos
factores. Por un lado del valor de los parmetros que discretizan el dominio,
y por otro, de los coeficientes que acompaen a las derivadas en la EDP, ya
que ambos son los responsables de generar los trminos de la matriz .
2. Es muy importante la relacin entre pasos en el mallado (factor
en los
ejemplos tratados) as como las relaciones entre los pasos y la extensin
del dominio de integracin (relaciones
y
), estando la
solucin del problema fuertemente condicionada por dichos valores. Esto,
en trminos matemticos, significa estudiar la estabilidad y convergencia
del mtodo as como comprobar la unicidad de la solucin aportada. Sin
embargo, este aspecto no es objeto de estudio en el proyecto aqu
presente, proponindose como tarea futura.
3. Por otro lado la precisin de la solucin depende de la frmula elegida para
aproximar la expresin de la derivada, producindose en cualquiera de ellas
errores de truncamiento. En el caso particular del mtodo programado
estos errores de truncamiento son de orden
. A medida que o
disminuye, los errores de truncamiento de tipo
o
se convierten en
errores de redondeo, por tanto, aunque tericamente se obtendra una
mayor exactitud, el uso de la aritmtica finita limita la precisin del
resultado. Por otro lado, si los valores de o no son los suficientemente
141

pequeos se corre el riesgo de no obtener una discretizacin infinitesimal,


por lo que la aproximacin en este caso tambin producir errores
significativos. Nos encontramos as con la existencia de una zona en la que
se minimiza el error, siendo sta la zona deseable y ptima para trabajar
con este mtodo (ver Figura 7.1)

4. Para entender la otra limitacin ser necesario profundizar un poco en el


fundamento del mtodo utilizado. En primer lugar recordar que este mtodo
requiere una discretizacin del dominio. Esta discretizacin genera nodos.
Nodos en los que se establecer una relacin biunvoca entre su
numeracin y el valor de sus coordenadas
. En dichos nodos se
sustituir la EDP o la condicin de contorno por su expresin discreta
correspondiente. En el caso en el que en el nodo haya que evaluar una
derivada direccional, esta se discretizar mediante el MDF obteniendo una
expresin del tipo:

|
donde
-

es el orden de la derivada parcial.


es el nmero total de variables de las que depende la funcin incgnita
.
142

es el nmero total de nodos que discretizan el dominio en el que se


quiere resolver la funcin .
es un nmero natural mayor que cero que denota el nodo de
coordenadas
) donde el subndice indica que el valor
(

es conocido.
es el valor escalar y real que resulta de evaluar la funcin

(por ahora desconocida) en el nodo de numeracin .


expresa una relacin lineal entre los trminos
. Esta es la
funcin que recoge el MDF usado.

Expresin que, teniendo en cuenta el carcter de , puede rescribirse como:

O bien de forma vectorial como:

][

[
(

donde
-

denota un escalar real cuyo valor depende de los

parmetros que discretizan el sistema. Este valor es particular del nodo


, de la direccin , del orden
de derivacin y del nodo objetivo. Se
obtiene por inspeccin de la frmula del MDF aplicada al nodo .
se ha considerando paso fijo, por lo que
tienen valores
constantes. Sin embargo si se consideran dependientes cada uno de
ellos del punto en el que se estn evaluando, es decir, del vector
[
] el planteamiento expuesto es vlido.

De este modo puede obtenerse la expresin genrica de la molcula


computacional en
para
dimensiones para los casos en los que no
existan derivadas cruzadas, siendo sta la mostrada a continuacin:

143

|
[

pudindose as definir

como la matriz que, dado un nodo , un orden de derivacin


y el nmero
de variables de las que depende la funcin a discretizar, aproxima la
expresin de la derivada en funcin de sumas ponderadas del valor que la
funcin adquiere en los nodos que discretizan el dominio, siendo tarea de
estudio encontrar los valores que forman dicha matriz. Notar que esta
matriz expresa, a travs de sus filas (direccin de derivacin), conectividad
entre el nodo donde se evala la derivada y los nodos que se usarn para
aproximar el valor de la misma.
Si adems, cada expresin de la derivada va multiplicada por algn
coeficiente
, ste, tras su evaluacin en el nodo
de
coordenadas

) puede ser denotado por

(
[

](

obtenindose:

Entonces, si dada una EDP junto con sus condiciones de contorno se realiza
el correspondiente mallado y se aplica el MDF en los correspondientes
nodos, se obtendrn
ecuaciones lineales que discretizarn el problema
agrupndose todas ellas en un sistema lineal
.
1
Siguiendo lo anteriormente expuesto y proponiendo como EDP a resolver:

144

se obtendra para cada nodo


ecuacin del tipo:

en el que estuviera definida la EDP, una

Si decidimos usar notacin matricial, la EDP se puede escribir como

]
[

y puede ser aproximada como

[1 1]

[1 1] (
[

donde el factor

[1
genera un vector

1] (

de dimensiones 1

Por tanto, se obtendra para cada nodo

en el que estuviera definida la

EDP, una ecuacin dada por el siguiente producto

que no es

]
1

ms que la ecuacin en la que aparecan los sumatorios pero esta vez en


forma vectorial. En total
ecuaciones de este tipo, donde
hace
referencia al total de nodos que definen los lmites del mallado.
Siguiendo con esta notacin, las
siguiente forma:

ecuaciones se agruparan de la

( )

145

que junto a las ecuaciones de las condiciones de contorno (supuestas


Dirichlet para simplificar) generaran un sistema lineal del tipo:

cuya resolucin permite obtener una aproximacin de


del dominio.

en los nodos

Lo importante de lo expuesto es ser consciente de que el MDF transforma


los trminos de derivadas en ecuaciones lineales algebraicas siendo fcil su
resolucin, conceptualmente hablando, cuando es invertible.
Sin embargo si la ecuacin original es de tipo no lineal como puede ser
(

tras aplicar el MDF se obtendra un sistema de ecuaciones no lineales cuyas


incgnitas son funcin de . Para resolverlo habra que utilizar nuevamente
mtodos numricos cometindose nuevamente errores de aproximacin,
por lo que, a priori no se podra asegurar que se vaya a encontrar una
buena solucin al problema planteado utilizando este mtodo.
5. Asimismo hay que recordar que, debido a la realidad intrnseca de la
integracin, el integrador ofrece una funcin o funciones primitivas las
cuales dependen de constantes. Si el problema no posee las condiciones de
contorno apropiadas (caso que ocurre con mayor frecuencia cuando estas
condiciones de contorno son de tipo Neumann) no se lograr una matriz
con determinante no nulo obtenindose as un problema mal condicionado.
La conclusin que se debe sacar ante esta situacin es la deficiencia en
condiciones de contorno lo que impide determinar cul de las infinitas
soluciones es la correcta.
6. Por otro lado, otras limitaciones son las relativas a las variables
independientes. Este mtodo utiliza un mallado en dos dimensiones a base
de elementos rectangulares. El concepto es extrapolable a dimensin tres.
Los rectngulos se transformaran en paraleleppedos y es fcilmente seguir
el mtodo de forma manual. Sin embargo la programacin usando el
mtodo grfico de la molcula sera mucho ms compleja que en el caso de
dimensin dos.
7. Finalmente, el MDF requiere condiciones en la frontera, lo cul limita los
problemas a resolver. Como se podr recordar, las condiciones de contorno
asociadas a la EDP que haba que resolver en el problema de control del
146

pndulo invertido no estableca este tipo de fronteras. Por ello debieron


proponerse unas de tipo aproximado. En estos casos, si la frontera
propuesta es la adecuada el resultado ser correcto. En caso contrario el
MDF no aportara soluciones relevantes.

7.2

Trabajo Futuro

Una vez comentadas las conclusiones sobre el mtodo programado se


presentan posibles ideas para seguir trabajando en el desarrollo y mejora del
integrador numrico:
1. Uno de los aspectos en los que centrarse sera mejorar la matriz . Una
idea sera realizar un mallado suficiente y utilizar frmulas alternativas de
las diferencias centradas en funcin del nodo elegido. Esto podra reducir la
posibilidad de obtener un rango deficitario en dicha matriz. Se
desaconsejar en la medida de lo posible utilizar aquellas aproximaciones
que no sean de tipo centrado ya que no se asegura su convergencia,
adems, las diferencias centradas proporcionan mejores aproximaciones
para el mismo orden de aproximacin.
2. Siguiendo la lnea de mejorar el condicionamiento de la matriz
propondra la opcin de elegir un mallado con paso variable.

se

3. Una posible tarea sera extrapolar el MDF a dimensiones. El problema de


esta tarea es que no existe una frmula genrica para discretizar una
funcin en funcin de las variables de las que depende. Es por ello por lo
que o bien, se podra buscar dicha frmula o considerar cada caso de forma
particular y desarrollar las frmulas correspondientes a dicho problema.
Asimismo, algo similar ocurre con el orden de la derivada. No existen
frmulas genricas que, dada una funcin y un nmero de variables
determinado y un orden de derivacin aporten como solucin inmediata la
discretizacin de dicha funcin.
Un aspecto a comentar sera que no podran utilizarse esquemas grficos
(como el mtodo de la molcula computacional en
) para generar las
ecuaciones cuando las funciones dependan de ms de tres variables. El
procedimiento sera analtico. Una forma de programarlo sera aadiendo a
la matriz de nodos generada por modulo2.m tantas columnas como
variables existan y que en estas columnas se guarden los ndices del nodo,
de tal modo que cuando se aplique el MDF y se obtenga una posible
discretizacin como por ejemplo la siguiente:

147

|
la bsqueda del nodo

, que corresponde al nodo que se encuentra en la

fila anterior a la fila , se haga mediante identificacin de ndices. En este


caso buscando el nodo cuyo ndice viene dado por
1
y procediendo de
igual forma para
y para localizar el nodo
.
4. Otro aspecto sobre el que trabajar sera el estudio de la convergencia y
estabilidad del mtodo, as como el estudio de la unicidad y convergencia
de las soluciones obtenidas, pues como se vio al resolver la ecuacin de
ondas en el apartado 5.2.1, el mtodo produca soluciones matemticas
vlidas pero que no eran fsicamente correctas.
5. En los casos en los que el determinante de la matriz sea nulo las lneas de
trabajo sugeriran implementar sistemas iterativos que permitiesen
encontrar varias soluciones y adoptar la ms acertada en funcin de unos
criterios de partida. En este proyecto se implementaron los mtodos de
Jacobi, Gauss-Seidel y los mtodos de Sobrerrelajacin y Subrrelajacin.
Estos mtodos convergen cuando las matrices cumplen una serie de
condiciones (matrices definidas positivas, matrices diagonalmente
estrictamente dominantes) caso que no ocurre por lo general en sistemas
de este tipo. Es por ello por lo que diversos autores como [Nachtigal, R.
W.], [Ott, A. L.] o [Ames, W.] proponen otros mtodos que abarcan desde
el anlisis del espectro de Fourier de la matriz hasta proponer sistemas
iterativos propios e innovadores.
6. Finalmente, cabra estudiar la posibilidad del uso de mtodos no basados en
mallas como por ejemplo el MDFG GSM. stos se utilizan en simulacin de
fluidos y la ventaja sobre el MDF tradicional reside en la relajacin de la
condicin impuesta por la geometra del problema, pues en los
tradicionales, la malla es esttica y debe ajustarse a una geometra variable
(la impuesta por el problema) produciendo problemas en aquellos puntos
en los cules la configuracin espacial de la malla no sea apropiada al
contorno del problema.

148

Anexos
Se presentan en las prximas pginas cuatro anexos: Anexo A, Anexo B,
Anexo C y Anexo D. Cada uno de ellos recoge un tema en particular cuya
aplicacin ha permitido bien obtener soluciones de los EDPS o bien investigar
sobre el tipo de las mismas. A continuacin se har una breve explicacin del
porqu se han incluido y posteriormente se mostrar su contenido:
Anexo A: Interpolacin bilineal. Polinomios de Bernstein
Este anexo presenta un mtodo para interpolar valores con respecto a
un conjunto de valores dados. La necesidad de realizar una interpolacin en
este proyecto se presenta a la hora de obtener un valor de la funcin primitiva
(resultante tras resolver un EDPS) en un punto que no exista en la
discretizacin original del problema. Recordemos que los mtodos utilizados
para resolver dichas ecuaciones son de tipo numricos y discretos, por lo cul,
si estamos interesados en obtener la solucin en algn punto que no
coincidiera con la discretizacin original, a priori no se sabr el valor de la
funcin en este punto.

Anexo B: El algoritmo de Casteljau


Generalmente, realizar una interpolacin de datos con polinomios de
Bernstein es una tarea tediosa ya que la expresin de stos se complica a
medida que el nmero de puntos aumenta. Es por ello por lo que se recoge en
Anexo B: El algoritmo de Casteljau, un algoritmo propuesto por el ingeniero
Casteljau que permite obtener dichos polinomios de forma simple y recursiva
facilitando la tarea en caso de tener que generarlos manualmente.

Anexo C: Interpolacin de superficies. Curvas de Bzier


Este anexo es una extensin del primer anexo Anexo A: Interpolacin
bilineal. Polinomios de Bernstein. En aqul, la interpolacin del valor buscado
dependa de una sola coordenada, se pretenda obtener el valor de
dado .
En ste la interpolacin del valor que se pretende obtener depende de dos
coordenadas. Para fijar ideas, dicho anexo presenta un mtodo basado en los
149

Polinomios de Bernstein para obtener valores de una funcin


) dados e
. Es decir es una interpolacin de superficies. Esto es til cuando la solucin
de la EDPs es una funcin que depende de dos coordenadas. Adems,
implementado en Matlab, con ayuda del paquete simblico, permite obtener
una expresin analtica de la solucin.

Anexo D: Mtodos iterativos para la resolucin de sistema lineales


Como se ha comentado a lo largo de la memoria aqu presente, la
resolucin de EDPs por medio del MDF requiere generar un sistema lineal
cuya solucin ser la solucin del problema. Aunque la resolucin de
dicho sistema, es simple desde el punto de vista matemtico, a la hora de
resolverlo mediante un ordenador hay algoritmos que permiten encontrar la
solucin de manera ms eficiente que otros. Es por ello por lo que se recogen
en este anexo tres mtodos iterativos (los ms usados) para la resolucin de
dichos sistemas.

150

Anexo A
Interpolacin bilineal. Polinomios de Bernstein
Un polinomio de Bernstein
de orden
aproxima una funcin
intervalo, mejor cuanto mayor sea , a partir de esta frmula:

en un

donde los
variable y los

son elementos de la distribucin binomial respecto de la


son puntos de la funcin que queremos aproximar.

Para aproximar la funcin en el intervalo [ 1] estos elementos toman los


siguientes valores:
y

( )

( )

De forma general, transformando las ecuaciones para un intervalo [


[ ] se convierten en polinomios de la base de Bernstein:
(

Siendo, la frmula general:


(

151

( )

], los

Anexo B
El algoritmo de Casteljau
El algoritmo de de Casteljau es un mtodo recursivo para calcular polinomios
en la forma de Bernstein o base de Bernstein, o en las curvas de Bzier. Es un
mtodo numricamente estable para evaluar las curvas de Bzier.
Aunque el algoritmo de De Casteljau es relativamente lento en
configuraciones, si se compara con otros es numricamente ms estable.

las

Este algoritmo se define de la siguiente forma:


Dado un polinomio B en forma de Bernstein de grado n

donde b es un polinomio base de Bernstein, el polinomio en el punto t0 puede


ser calculado con la relacin de recurrencia

con

152

Anexo C
Interpolacin de superficies. Curvas de Bzier
Dada una serie de puntos en
espacio definido en [ 1] [ 1] por

estos pueden ser interpolados desde un


y . La superficie podra definirse como:

[ 1]

Consideremos un polgono de control, al que tambin llamaremos malla de


control, dado por una matriz de puntos en el espacio:

Para generar una superficie con esta malla de puntos, tomamos los puntos
de la primera columna de y construimos su curva de Bzier:

[ 1]

Ahora, para cada columna

consideramos la curva de Bzier dada

por esos puntos:

[ 1]

La idea es mover
transversalmente a lo largo de las curvas
este modo, generar la superficie:

153

y, de

Esta frmula puede escribirse de forma ms concisa en notacin matricial:


(

)(

Esta expresin es la forma explicita de las superficies de Bzier. Los polinomios


que acompaan a los puntos de la malla de control, como se puede apreciar,
estn formados por el producto de dos polinomios de Bernstein, cada uno en
una variable.

Algoritmo surf_bernstein
function superficie = surf_bernstein(puntos, a, b , c, d)
syms brn_y brn_x
[vy, ux] = size(puntos);
brn_y = bernstein_v(vy-1,c,d);
brn_x = bernstein_u(ux-1,a,b);
size(brn_x)
size(brn_y)
superficie = brn_x*puntos*brn_y;
end
function brn=bernstein_u(n,a,b)
syms u;
for i=0:n;
brn(i+1)=(prod(1:n)/(prod(1:i)*prod(1:(n-i)))) * ((u-a)/(b-a))^i *(1-((ua)/(b-a)))^(n-i);
end
end
function brn=bernstein_v(n,c,d)
syms v;
for i=0:n;
brn(i+1)= (prod(1:n)/(prod(1:i)*prod(1:(n-i)))) * ((v-c)/(d-c))^i *(1((v-c)/(d-c)))^(n-i);
end
end

154

Anexo D
Mtodos iterativos para la resolucin de sistemas
lineales
Este anexo recoge tres mtodos existentes en la literatura para el clculo
iterativo de sistemas lineales. En este proyecto no se han usado de forma
definitiva, solo a modo de pruebas para obtener conclusiones parciales sobre
las soluciones. El motivo de no haberlos implementado resida en la imposicin
de condiciones sobre la matriz A, condiciones que por regla general no se
satisfacen. Los tres mtodos, cuyos algoritmos se recogen aqu son:
Mtodo de Jacobi
Mtodo de Gauss Seidel
Mtodo de Relajacin Sucesiva (SOR)

Algoritmo Jacobi
function [x, varargout]=jacobi(a,b,varargin)
% valores por defecto
n=length(a); mmax=100;
eps1=1e-4;
eps2=1e-4; % tol. absoluta y relativa
x=zeros(n,1);
if nargin>2
mmax=varargin{1};
end
if nargin>3
eps1=varargin{2};
end
if nargin>4
eps2=varargin{3};
end
if nargin>5
x(:)=varargin{4}; %x es un vector columna
end

155

%metodo jacobi
errores=zeros(1,mmax);
d=diag(a);
r=(b-a*x);
normab=norm(b);
for m=1:mmax
x=x+r./d;
r=(b-a*x); % residuo
normar=norm;
errores(m)=normar; % norm(x-y,2),norm(x-y,inf)
if (normar<eps1+eps2*normab)
break
end
end
errores=errores(1:m);
if (m==mmax) && nargout<=3
disp(no se ha encontrado solucion)
end
% salida
if (nargout>1)
varargout{1}=m; % no de iteraciones
end
if (nargout>2)
varargout{2}=errores; % diferencia entre iteraciones
end
if (nargout>3)
% flag: 1 si hay convergencia, 0 en caso contrario
if m==mmax
varargout{3}=0;
else
varargout{3}=1;
end
end
return

Algoritmo Gauss-Seidel
function [x, varargout]=gaussSeidel(a,b,varargin)
% valores por defecto
n=length(a); mmax=100;
eps1=1e-4;
eps2=1e-4; % tol. absoluta y relativa
x=zeros(n,1);
if nargin>2
mmax=varargin{1};
end

156

if nargin>3
eps1=varargin{2};
end
if nargin>4
eps2=varargin{3};
end
if nargin>5
x(:)=varargin{4}; %x es un vector columna
end
%metodo gausseidel
errores=zeros(1,mmax);
for m=1:mmax
error=0;
y=x;
for i=1:n
x(i)=(b(i)-a(i,[1:i-1 i+1:n])*x([1:i-1 i+1:n]))/a(i,i);
end
error=norm(x-y,1); % otras normas con norm(x-y,2),norm(x-y,inf)
errores(m)=error;
if (error<eps1+eps2*norm(x))
break
end
end
errores=errores(1:m);
if (m==mmax) && nargout<=3
disp(numero maximo de iteraciones sobrepasado)
end
% salida
if (nargout>1)
varargout{1}=m; % no de iteraciones
end
if (nargout>2)
varargout{2}=errores; % diferencia entre iteraciones
end
if (nargout>3)
% flag: 1 si hay convergencia, 0 en caso contrario
if m==mmax
varargout{3}=0;
else
varargout{3}=1;
end
end
return

157

Algoritmo SOR
function [x,G,c] = relaj(A, b, n, w, z)
%nnmero de iteraciones
%zvector inicial (default 0)
%xiteracin final
%GmatrizGauss-Seidel
%cvectorGauss-Seidel
%wCoeficiente de relajacin
if nargin <=3,
z=0*b;
w=1.2; %0.7
n=100;
end
D = diag(diag(A));
LD = inv(D+w*tril(A ,-1));
G = LD*((1-w)*D-w*triu(A ,1));
c = w*LD*b;
x = z;
for i = 1:n
x= (G*x+ c);
v(i,:)=x;
end
end

158

Glosario
Bordes: Valores extremos del dominio ampliado que no tienen por qu
coincidir con el dominio original. Aparecen cuando existen condiciones de
contorno tipo Neumann y es necesario ampliar el domino original.
Condiciones de contorno tipo Dirichlet: Son condiciones de contorno que
aportan el valor de la funcin en la frontera.
Condiciones de Contorno Mixtas: Son aquellas condiciones de contorno que
definen las fronteras por medio de la combinacin de condiciones de contorno
explicadas anteriormente.
Condiciones de contorno tipo Neumann: Son aquellas condiciones de
contorno que implican el valor que adquiere el gradiente de la funcin en la
frontera.
EDP (plural-EDPs): Ecuacin en Derivadas Parciales (Ecuaciones en Derivadas
Parciales).
EDPS: Siglas de Equation Differencial Partial System (Sistema de Ecuaciones
en Derivadas Parciales).
Fronteras: Lmites generados por valores extremos del dominio.
GSM: Gradient Smoothing Method (novedoso mtodo numrico sin malla)
Mallado de trabajo Mallado ampliado: Malla que se utiliza para resolver
el problema. En casos en los que existan condiciones de contorno tipo
Neumann, este mallado ser mayor que el original en dicha frontera, en caso
contrario, el mallado de trabajo ser idntico al original.
MDF: Mtodo de las Diferencias Finitas.
MDFC: Mtodo de las Diferencias Finitas Centradas.
MDFG: Mtodo de las Diferencias Finitas Generalizadas.

159

Esta pgina ha sido intencionalmente dejada en blanco

160

Bibliografa
Acosta Rodrguez, J. A. (2004). Control no lineal de sistemas subactuados. PhD tesis. Universidad de
Sevilla. Sevilla.
Ames, W. (1977). Numerical Methods for Partial Differential Equations. Academic Press.
B. Vanrumste, M. M. (2002). A MULTIGRID SOLVER IN EEG SOURCE ANALYSIS APPLYING THE FINITE
DIFFERENCE METHOD. International Journal of Bioelectromagnetism, Vol. 4, No. 2
Barreiro, D. M. (2012). Modelizacin Numrica de la Atmsfera. Montevideo.
Fachinotti, V. D. (2008). Mtodos Numricos para la Solucin de Ecuaciones Diferenciales. Santa
Fe.
Goering, R. (10/04/2004). Matlab edges closer to electronic design automation world . EE Times
Online.
K.A. Stroud, D. J. (2001). Engineering Mathematics. Palgrave Macmillan.
Medina, A. A. (2007). Clculo Diferencial e Integral y lgebra Lineal.
Nachtigal, R. W. (1994). An impelmentation of the QMR method based on coupled two-term
recurrences. SIAM Journal on Scientific Computing.
Numerical Potential Solver. (s.f.). http://echo.bu.edu/~meerso/papers/satfb_r2/node8.html.
Ott, A. L. (1981). Nonlinear simulations of type I irregularities in the equatorial electrojet. J.
Geophys.
Polyanin, A. D. (2002). Handbook of Linear Partial Differential Equations for Engineers and
Scientists. Boca Raton: Chapman & Hall/CRC Press ISBN 1-58488-299-9.
Strikwerda, J. C. (2004). Finite Difference Schemes And Partial Differential Equations. En J. C.
Strikwerda, Finite Difference Schemes And Partial Differential Equations Siam.
W. Press, S. T. (1988). Numerical Recipes in C. Cambridge University Press.
C. F. Gerald and P. O. Wheatley, Addision Wesley Longman. (1997). Applied Numerical Analysis
Kelvin Dowd and C. R. Severance, OReilly and Associates (1998). High Performance Computing

161

Esta pgina ha sido intencionalmente dejada en blanco

162

Fin

You might also like