ESP PFC Año Anterior

174

description

dddd

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