ESP PFC Año Anterior
-
Upload
porkerriaccdlv -
Category
Documents
-
view
6 -
download
1
description
Transcript of ESP PFC Año Anterior
-
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
-
1
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
-
2
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.
-
3
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
diferencial , donde es la posicin, es el tiempo y la velocidad o
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
-
4
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
cuerpo es , y (2.1.1) pasa a ser
(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.
-
5
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.
-
6
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, y 1 y consecuentemente 4 < 4
-
7
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
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, y por lo que 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, y
por lo que 4
-
8
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, utilizadas para modelar el
movimiento no lineal de una onda:
(
)
No existen mtodos genricos para su resolucin. sta depender del tipo de
problema. (Polyanin, 2002)
1 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.
-
9
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.
-
10
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.
-
11
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 por obtendramos su aproximacin en
dicho punto:
Reagrupando los trminos en la primera ecuacin, se consigue la siguiente
expresin,
-
12
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
-
13
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
|
|
|
4
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)
-
14
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
-
15
Aproximacin Derivada Orden 2
|
|
|
4
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 [ ] [ ] [ 1] [ 1] en el
que existen condiciones tipo Neumann en y el resto son de tipo Dirichlet.
Siendo sus expresiones:
-
16
1
|
( ( ))
1
( ) 1
( )
Lo primero ser discretizar el dominio en la direccin y en la direccin . Se
tomar el mismo paso en ambos ejes para simplificar, siendo .
Figura 3.2.3. Generacin de parmetros para la discretizacin de en funcin de las
condiciones de contorno del problema.
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:
-
17
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:
( )
|
0
0
-
18
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.
-
19
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.
-
20
3.3 Ejemplo
Encontrar la solucin de la ecuacin
en el dominio
[ ] [ ] [ ] [ ] siendo las condiciones de contorno
|
Siendo el paso en la direccin , 1 y el paso en la direccin , 1 .
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:
-
21
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:
(
) 4
(
) 1
(
) (
)
1 (
1) 4
(
1) 1 1
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:
-
22
( ) ( )
( )
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:
-
23
4 1 1 1 4
1 1 1 1 4
1 1 1 1 14 4
11 1 1 1 4 1 4 1
1 1 1 1 14 4 1 4 1
1 1 1 1 1 4 1 4 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 1
1
-
24
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 0 h 2h 3h
0 5 4,00 3,00 2,00
k 3 3,11 2,33 0,88
2k 3 3,11 2,33 0,88
3k 5 4 3 2
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
-
25
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 anteriores surgidas tras la
discretizacin como un sistema matricial
7. Resolver el valor de del sistema.
-
26
Esta pgina ha sido intencionalmente dejada en blanco
-
27
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.
-
28
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.
-
29
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:
-
30
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= [ 0 ];% 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);
-
31
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, 9*y^2-9*y+5;%condicion_x0 ; 1, -6;%condicion_xf ; 0, 5-3*x;%condicion_y0 ; 0, 5-3*x];%condicion_yf
8. Se genera la variable parmetros_dominio.
dominio = [ xi, pasox xf yi, pasoy, yf ]; parametros_dominio = dominio; end
-
32
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 e , 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:
Que mediante el comando
function plantilla = modulo0(funciones_contorno, parametros_dominio)
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)]
-
33
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((k-
1)*(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);
-
34
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
y un ejemplo de estos datos de entrada seran:
function [dominio_de_funcion] = modulo1(parametros_dominio, funcion_contorno)
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)]
-
35
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.
En el ejemplo anterior, el resultado sera el mostrado a continuacin:
Por tanto, se ha transformado el dominio original dado por [ ] [ ]
[ ] [ ] que producira la siguiente discretizacin
Figura 4.1.1. Dominio original
dominio_de_funcion =
Columns 1 through 7
1.0000 -3.0000 3.0000 -5.0000 5.0000 -3.0000 5.0000
Columns 8 through 11
-5.0000 5.0000 2.0000 3.3333
[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]
-
36
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.
-
37
-
38
El cdigo en MATLAB ser el siguiente
1. Se leen los datos de entrada:
parmetros_dominio
funcin_contorno
de forma automtica con la instruccin:
2. Se leen las dimensiones de ambos datos
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 de columnas que posee el dato
parmetros_dominio.
3. Se declara la existencia del vector 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.
function [dominio_de_funcion] = modulo1(parametros_dominio,
funcion_contorno)
[m_columnas, n_columnas] = size(funcion_contorno); [m_dominio , n_dominio] = size(parametros_dominio);
dominio = zeros(1, (1 + m_dominio + 2*m_dominio+2*m_dominio));
-
39
4. Se sobreescriben las dimensiones del nuevo vector domino en m_domino y
n_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.
En los 2*(2*n) primeros elementos se reservan los lugares impares para
guardar la informacin del domino original.
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.
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
[m_dominio , n_dominio] = size(dominio);
[m_dominio , n_dominio] = size(dominio);
dominio(1,1:n_dominio-length(funcion_contorno(1,1))) = [
parametros_dominio(1,1), 0, parametros_dominio(2,1), 0,
parametros_dominio(1,3), 0, parametros_dominio(2,3), 0,
parametros_dominio(1,2), parametros_dominio(2,2)];
dominio(1,2) = funcion_contorno(1,n_columnas-1); dominio(1,4) = funcion_contorno(3,n_columnas-1); dominio(1,6) = funcion_contorno(2,n_columnas-1); dominio(1,8) = funcion_contorno(4,n_columnas-1);
-
40
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.
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:
8. Por ltimo se cierra la funcin con la instruccin
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
dominio = [dominio(1,n_dominio), dominio(1,1:n_dominio-
length(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)];
end
-
41
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:
Ejecutando su comando en MATLAB:
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.
function [nodos] = modulo2(dominio_de_funcion)
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
-
42
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.
-
43
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.
-
44
Datos de Salida
Figura 4.1.4: Datos de Salida. Tabla de nodos de un dominio ampliado. Tipologia.
-
45
Diagrama de flujo de modulo2.m
-
46
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
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.
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 = dominio(1:(length(dominio)-variables)); B = 0*A; v = ones(1,variables); w = 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.
function [nodos] = modulo2(dominio_de_funcion)
n = zeros(1,18);
-
47
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 y se almacena en n_prima
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 el nmero total de nodos existentes en la
discretizacin.
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.
-
48
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)
-
49
if abs(diferencia(indice))
-
50
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; %nodo interno else
-
51
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
-
52
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.
-
53
-
54
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;
-
55
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;
-
56
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
-
57
else
end
11.3.3 Nodos Neumann
if sum(nodos(k,15:18)) ~= 0 %la frontera tiene
condiciones en derivadas %display(frontera derivada) linea = linea + 1;
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
-
58
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
-
59
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
-
60
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) ; %paso en x k = parametro(5) ; %paso en y
M = zeros(3,3);
if length(coeficiente) == 2 %molecula grado 1 con euler
hacia delante (x, y)
%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 ; %molecula grado 2 con euler
hacia delante (x, y)
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});
-
61
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
-
62
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))
-
63
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:
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.
function [sistema_ecuacion, termino, representacion_i] = modulo4(funcion_campo,
funciones_contorno, funcion_termino_F_i, parametros_dominio)
-
64
-
65
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 que representan la ecuacin del sistema (incluyendo el trmino libre)
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);
-
66
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 incgnita se construye el domino correspondiente.
[dominio_de_funcion] = modulo1(parametros_dominio,
funcion_contorno);
7.4 Para cada funcin incgnita se obtienen los nodos
correspondientes.
[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
-
67
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); %lista de
nodos excluidos para esta funcion.
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((i-
1)*(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;
-
68
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 ve