TITULO DEL PROYECTO: OPTIMIZACIÓN Y EXTRACCIÓN DE PARAMETROS ÓPTICOS DE ESTRUCTURAS MULTICAPA PROYECTO DE FINAL DE CARRERA TITULACIÓN: Enginyeria Automàtica i Electrònica Industrial (2008) AUTOR: SANTI MENSA DIRECTOR: LLUIS MARSAL FECHA: junio 2008. PFC: OPTIMIZACIÓN Y EXTRACCIÓN DE PARAMETROS ÓPTICOS DE ESTRUCTURAS MULTICAPA ÍNDICE: 1 Objetivo. ............................................................................................................................. 4 2. Antecedentes...................................................................................................................... 4 3. Memoria descriptiva. ......................................................................................................... 4 3.1. Propiedades Ópticas de Sólidos.................................................................................. 4 3.1.1.Generalidades........................................................................................................4 3.1.2. Ecuaciones de Maxwell. .......................................................................................4 3.1.3. Ecuaciones de la materia. ....................................................................................5 3.1.4.Propiedades del tensor .....................................................................................9 3.1.5. Las relaciones de Kramers-Krönig. ...................................................................11 3.1.6 Ondas Electromagnéticas en medios isótropos...................................................12 3.1.7 Transiciones intrabanda......................................................................................16 3.1.7.1 Ecuación cinética de Boltzmann. .....................................................................16 3.2 Efectos de superficie en los espectros ópticos........................................................... 18 3.2.1. Elipsometría. ......................................................................................................18 3.2.2. Efectos de interferencia en capas delgadas .......................................................21 3.2.3. Obtención del .................................................................................................21 3.3. Rugosidad. ................................................................................................................ 22 3.3.1. Campo Local. .....................................................................................................23 3.3.2. Campo Exterior. .................................................................................................24 3.3.3. Modelo de Medio Efectivo..................................................................................27 3.4. Figuras originales. .................................................................................................... 29 3.4.1. Efectos de interferencia en capas delgadas. ......................................................29 3.4.2. Efectos de película de óxido. ..............................................................................29 3.4.3. Rugosidad. ..........................................................................................................29 3.5 Transiciones Interbanda............................................................................................. 32 3.5.1. Teoría de Transiciones Interbanda. ...................................................................32 3.5.2. Transiciones banda-banda. ................................................................................36 3.5.3. Algunos Casos. ...................................................................................................39 3.6. Punto crítico M0. ...................................................................................................... 40 3.6.1 Transiciones prohibidas en el punto crítico M0. ................................................42 3.7. Punto de Ensilladura M1. ......................................................................................... 42 3.8. Cristales Bidimensionales......................................................................................... 44 3.9. Cristales Unidimensionales. ..................................................................................... 44 3.10. Constante dieléctrica de un sistema de osciladores quánticos................................ 45 3.11. Radiación en la materia. ......................................................................................... 45 3.12.Ecuaciones de dispersión del índice de refracción. ................................................. 47 3.12.1. La ecuación de Cauchy. ...................................................................................47 PROYECTO FINAL DE CARRERA página 2 de 98 PFC: OPTIMIZACIÓN Y EXTRACCIÓN DE PARAMETROS ÓPTICOS DE ESTRUCTURAS MULTICAPA 3.12.2. Ecuación de sellmeier.......................................................................................49 4. Entorno MATLAB. ......................................................................................................... 52 4.1. Entorno gráfico GUIDE con MATLAB................................................................... 52 4.1.1. Herramienta GUIDE. .........................................................................................52 4.1.2. Inicio...................................................................................................................52 4.1.3. Propiedades de los componentes........................................................................55 4.1.4. Funcionamiento de una aplicación GUI. ...........................................................56 4.1.5. Manejo de datos entre los elementos de la aplicación y el archivo .M..............56 4.1.6. Sentencias GET y SET. .......................................................................................57 4.2 Matlab optimización. ................................................................................................. 58 4.2.1.LSQNONLIN........................................................................................................58 4.2.1.1 Ecuación. ..........................................................................................................58 4.2.1.2 Sintaxis. ............................................................................................................58 4.2.1.3 Descripción.......................................................................................................58 4.2.1.3 Argumentos de entrada.....................................................................................60 4.2.1.4 Argumentos de salida. ......................................................................................61 4.2.1.5. Opciones. .........................................................................................................62 4.2.1.4.1. Algoritmos de mediana i larga escala..........................................................62 4.2.1.4.1.1. Solo algoritmo de larga escala..................................................................63 4.2.1.4.1.2 Solo para algoritmo de mediana escala.....................................................65 4.2.1.4.2. Ejemplos. ......................................................................................................65 4.2.1.4.2.1 Optimización de gran escala. .....................................................................66 4.2.1.4.2.2 Optimización mediana escala.....................................................................66 4.2.1.4.3 Limitaciones. .................................................................................................66 4.2.1.4.3.1. Optimización a gran escala.......................................................................66 5. Medidas experimentales. ................................................................................................. 68 5.1. Espectrofotómetro de Infrarrojo por transformada de Fourier VERTEX 70. .......... 70 5.1.1. Características VERTEX 70. ..............................................................................71 5.1.2. Puesta a punto del sistema de medida con el espectrofotómetro IR del DEEEA.73 5.2. Software OPUS 5.0 for QA/QC. .............................................................................. 74 6. Programa principal. ......................................................................................................... 76 6.1 Menu principal........................................................................................................... 76 6.2 Funcionamiento del programa. .................................................................................. 79 7 Resultados obtenidos. ....................................................................................................... 81 7.1 Pruebas con una sola lámina de cristal. ..................................................................... 81 7.2 Optimizacion de doble capa. ..................................................................................... 96 8. Referencias bibliográficas. .............................................................................................. 98 PROYECTO FINAL DE CARRERA página 3 de98 PFC: OPTIMIZACIÓN Y EXTRACCIÓN DE PARAMETROS ÓPTICOS DE ESTRUCTURAS MULTICAPA Memoria descriptiva 1 Objetivo. El Objetivo principal es el desarrollo de un entorno gráfico que permita la determinación de los parámetros ópticos de los materiales. Este entorno nos permitirá representar gráficamente los datos experimentales y a partir de estos datos obtener los parámetros ópticos óptimos para los resultados experimentales obtenidos. Para el desarrollo del proyecto es necesario tener conocimientos en: Conocimientos de las propiedades ópticas. Lenguaje de programación MATLAB. La herramienta para el desarrollo del interfaz gráfico (GUIDE). 2. Antecedentes. El departamento EEEA lleva años experimentando con cristales nanoporosos de diferentes materiales y desarrollando aplicaciones para poder contrastar los resultados experimentales con los teóricos. Este no deja de ser un proyecto de ayuda para la obtención de parámetros ópticos a partir de resultados prácticos desarrollados en el laboratorio. 3. Memoria descriptiva. 3.1. Propiedades Ópticas de Sólidos. 3.1.1.Generalidades. Ecuaciones de Maxwell, causalidad y relaciones de Kramers-Krönig. Constante dieléctrica compleja y conductividad compleja. Índice de refracción complejo. Índice de refracción real y coeficiente de absorción. Reflectancia. 3.1.2. Ecuaciones de Maxwell. Como fenómeno electromagnético, la luz está determinada por las ecuaciones de Maxwell. Las enunciamos aquí de la forma más general posible. Las características del material están implícitas en las cargas y corrientes ligadas, que vienen a ser la respuesta del medio ante los campos aplicados. En nuestro caso, estamos interesados en una descripción macroscópica de estos fenómenos. Por esto, es conveniente definir los promedios Donde Δv y Δt son magnitudes lo suficientemente pequeñas para describir precisamente los campos, pero lo suficientemente grandes para redondear las variaciones bruscas dentro de un átomo. En otras palabras, el volumen de integración es muy pequeño en comparación con el PROYECTO FINAL DE CARRERA página 4 de 98 PFC: OPTIMIZACIÓN Y EXTRACCIÓN DE PARAMETROS ÓPTICOS DE ESTRUCTURAS MULTICAPA Memoria descriptiva volumen total del sólido, pero mucho más grande que el de un núcleo. Por su parte, el tiempo de integración debe ser consistente con una distancia promedio definida por el volumen (típicamente la raíz cúbica de éste) y la velocidad de la luz. En metales es común asociarlo con el tiempo de relajación de los electrones, que se explicará en detalle en el capítulo siguiente. Además le llamaremos B al promedio H . Suponiendo que las integrales convergen uniformemente, las ecuaciones de Maxwell son válidas para los campos definidos por (5) y (6). 3.1.3. Ecuaciones de la materia. Ahora, caractericemos el campo eléctrico dentro de un sólido. Debido a nuestra escala de trabajo, el momento dipolar, definido por: p p r dv (1.7) Es la magnitud apropiada para describir la reacción de los átomos frente a los campos aplicados. De esta forma, la contribución al campo eléctrico total será la polarización P , que corresponde al momento dipolar por unidad de volumen. A partir de esta definición se desprende fácilmente que: Suponiendo además que el cuerpo es eléctricamente neutro, Y utilizando la identidad vectorial Donde a es un vector arbitrario, es posible concluir: Lo cual liga el campo interno con las fuentes inducidas de carga. Reemplazando este resultado en la ecuación de continuidad PROYECTO FINAL DE CARRERA página 5 de 98 PFC: OPTIMIZACIÓN Y EXTRACCIÓN DE PARAMETROS ÓPTICOS DE ESTRUCTURAS MULTICAPA Memoria descriptiva Tenemos O bien, Donde N es un vector cualquiera por ahora. Es posible identificarlo con la magnetización P M si t = 0. En tal caso, En caso contrario, las variaciones de la polarización contribuyen a la corriente, oscureciendo un poco más su identificación. Para evitar estas distinciones engorrosas, incluyamos todos los efectos materiales en un solo vector. Para ello, definimos: De tal forma que satisface Y Así, la polarización y la corriente están completamente determinadas por p . Es posible definir un vector desplazamiento eléctrico con esta polarización, de la forma PROYECTO FINAL DE CARRERA página 6 de 98 PFC: OPTIMIZACIÓN Y EXTRACCIÓN DE PARAMETROS ÓPTICOS DE ESTRUCTURAS MULTICAPA Memoria descriptiva Y relacionarlo con el campo eléctrico de la forma más general posible La integral respecto al volumen expresa una posible dependencia del campo respecto a la magnitud de éste en regiones vecinas. Por ejemplo, si el desplazamiento de los portadores es comparable a la longitud característica del campo eléctrico, deberemos considerar su valor en regiones aledañas, pues afectarán su valor notablemente en un futuro cercano. Por otra parte la integral temporal representa los efectos de retardo debidos a la existencia de corrientes transientes. La anisotropía está incluida en el carácter tensorial de la constante dieléctrica (de importancia en estructuras cristalinas, para explicar fenómenos como birrefringencia y efecto Kerr). Si el comportamiento del medio es invariante ante traslaciones, sólo depende de su vecindad, y no del punto donde se evalúe. Para la invariancia temporal, la expresión es análoga En la mayoría de los casos se cumple esta última expresión. Si es así, la ecuación (19) queda: Que es una convolución en el tiempo, por lo que es más conveniente trabajar en el espacio de Fourier. Aplicando la transformada a cada lado de la ecuación (22), la transformada de la convolución se transforma en un producto de transformadas, resultando De aquí que la dispersión en el espacio de frecuencias proviene de los efectos de retardo. Por otra parte, de cumplirse (20) el procedimiento es equivalente en el espacio recíproco de la posición. Análogamente, escribimos la corriente como Hasta ahora la introducción del vector p nos permite calcular la polarización y la corriente, que a su vez dependen linealmente del campo eléctrico por las relaciones (18), (23) y (24). Esto nos permite inferir que debe haber alguna relación entre los tensores y . Efectivamente, reescribiendo (18) y (23), queda PROYECTO FINAL DE CARRERA página 7 de 98 PFC: OPTIMIZACIÓN Y EXTRACCIÓN DE PARAMETROS ÓPTICOS DE ESTRUCTURAS MULTICAPA Memoria descriptiva Donde Integrando por partes, resulta Finalmente, igualando las partes real e imaginaria en (23), queda De aquí podemos concluir que es puramente real para un dieléctrico y puramente imaginario para un metal. O bien, es imaginario puro si el material no es conductor, y completamente real en el caso contrario. El trabajar con tensores complejos es el precio que debemos pagar por introducir un vector que unifica ambos fenómenos. A modo de ejemplo, calculemos la constante dieléctrica de un conjunto de N dipolos no interactuantes. Cada uno consta de dos partículas de cargas q y -q, separadas por una distancia r. Podemos suponer que para pequeñas perturbaciones en torno a la separación de equilibrio r oscilará armónicamente con frecuencia w0, por lo que al aplicar un campo eléctrico E (t ) tenemos para cada dipolo Aplicando la transformada de Fourier a ambos lados de la ecuación, resulta una expresión algebraica para r . Reordenando, se obtiene Con esto, es posible calcular el momento dipolar de cada dipolo, que viene dado por Habiendo N dipolos en un volumen V, la polarización resulta ser PROYECTO FINAL DE CARRERA página 8 de 98 PFC: OPTIMIZACIÓN Y EXTRACCIÓN DE PARAMETROS ÓPTICOS DE ESTRUCTURAS MULTICAPA Memoria descriptiva Pues no hay magnetización en el sistema (con lo cual se cumple la relación ). Finalmente, obtenemos Donde la función dieléctrica es compleja. A partir de la solución r() es posible calcular J en función de E y verificar las relaciones (28) y (29). Así, si Tenemos que Lo cual es completamente consistente con el cálculo de . Esta frecuencia de resonancia w0 corresponde al color que el cuerpo absorbe, reflejando el resto. Es posible introducir a dedo más frecuencias de absorción. Por otra parte, podemos modelar un material conductor con este mismo modelo. Si w0 = 0, se entiende que los portadores de carga se mueven sin una fuerza restitutiva, aunque sigue existiendo el término responsable de la amortiguación de tal movimiento. Se dará un sustento teórico a tal suposición en el capítulo siguiente. Sin embargo, es de notar que ajustando las constantes y w0, el modelo resulta ser más general de lo previsto. 3.1.4.Propiedades del tensor Estudiemos las propiedades de E como la función compleja que es. Designamos Donde t t ' Ante la conjugación, se puede deducir fácilmente Por lo tanto, la parte real es par y la imaginaria impar. Ahora, si w es complejo PROYECTO FINAL DE CARRERA página 9 de 98 PFC: OPTIMIZACIÓN Y EXTRACCIÓN DE PARAMETROS ÓPTICOS DE ESTRUCTURAS MULTICAPA Memoria descriptiva Entonces, posee un valor acotado en el semiplano superior, y por ende es analítica en esta región. A partir de esto, es posible deducir una relación un poco más general, Veamos ahora que sucede en los valores límite de w. Para w → 0, podemos recurrir a la ecuación (27) y escribir Separemos las partes real e imaginaria, expresando 4 Im Donde . Podemos calcular el límite para medios dieléctricos y conductores. Físicamente es de esperar que en un dieléctrico, tenga un valor acotado para un campo estático y la parte real de tienda a cero debido a la ausencia de corrientes estables. Sin embargo, éstas pueden existir en un conductor, por lo que la parte imaginaria de diverge en estos materiales para frecuencias nulas. ( ) Para el límite , consideremos PROYECTO FINAL DE CARRERA página 10 de 98 PFC: OPTIMIZACIÓN Y EXTRACCIÓN DE PARAMETROS ÓPTICOS DE ESTRUCTURAS MULTICAPA Memoria descriptiva Que corresponde la solución dada por el modelo de Lorentz. La única suposición hecha en él es que los electrones son partículas clásicas. Tomando los primeros términos de la expansión en torno a ,resulta Donde e es la carga del electrón, n la densidad de electrones y m, la masa efectiva de éstos ( que puede variar según el material). A wp se le llama frecuencia de plasma, y su valor es crucial para determinar la propagación o atenuación de una onda en un medio de electrones libres, como la ionosfera. 3.1.5. Las relaciones de Kramers-Krönig. Hasta ahora hemos deducido la analiticidad del tensor en el semiplano superior complejo. Gracias a esta propiedad podremos relaciones entre sus partes real e imaginaria. Para ello, recordemos la fórmula integral de Cauchy si el contorno de integración incluye el punto z = z0. Ahora, consideremos la función — 1. Gracias a la ecuación (1.45), su valor tiende a cero para frecuencias muy altas. Integrémosla en el contorno que muestra la figura, aislando las singularidades = 0 y 0. Entonces, lo cual se puede entender como que la suma de las cuatro integrales (las dos semicircunferencias que rodean los polos, el radio mayor y la que cubre la mayor parte del eje real) es nula. Naturalmente, tomaremos los límites R r1 → 0 y r2 → 0. Para el primer límite, la contribución de la integral C3 se anula, debido a que, según la ecuación (39), decae como 2 para valores grandes. Para las dos integrales alrededor de los polos, tenemos que por la ecuación (42), sus valores serán la mitad de los residuos si es que los radios r1 y r2 tienden a cero. Así, y PROYECTO FINAL DE CARRERA página 11 de 98 PFC: OPTIMIZACIÓN Y EXTRACCIÓN DE PARAMETROS ÓPTICOS DE ESTRUCTURAS MULTICAPA Memoria descriptiva Entonces, la integral en el eje real está determinada completamente, y resulta ser separando las partes real e imaginaria, resulta finalmente donde Estas son las llamadas relaciones de Kramers-Krönig. De las ecuaciones se desprende que si la parte real o imaginaria de es conocida, la función está determinada completamente. 3.1.6 Ondas Electromagnéticas en medios isótropos. Hasta ahora ha sido útil caracterizar en el espacio de Fourier la respuesta de un medio ante un campo aplicado. Si escribimos cada vector C de la forma. las ecuaciones de Maxwell pasan a ser ecuaciones algebraicas con la ya mencionada ecuación de la materia PROYECTO FINAL DE CARRERA página 12 de 98 PFC: OPTIMIZACIÓN Y EXTRACCIÓN DE PARAMETROS ÓPTICOS DE ESTRUCTURAS MULTICAPA Memoria descriptiva por lo que la solución estará determinada por la relación entre w y k . Para hallar k . hacemos producto cruz entre el vector k y la ecuación (50), obteniendo De aquí podemos clasificar las posibles soluciones como ondas longitudinales y transversales. Si el lado derecho de la ecuación es nulo, tenemos una onda longitudinal, donde el campo eléctrico oscila en la dirección de propagación. Esto puede producirse porque el valor de es nulo para ciertas frecuencias, o porque la dirección del campo eléctrico es tal que el producto del tensor dieléctrico con el vector es nulo. Naturalmente, esto depende de las características del medio, y no puede concebirse en el vacío. El caso contrario corresponde a las ondas transversales, donde el campo eléctrico es perpendicular al vector de onda. Entonces por lo que en un medio isótropo, donde n es el índice de refracción habitual de la ley de Snell y k0 es el módulo del vector de onda en el vacío. Supongamos ahora un pulso monocromático en los espacios k y por lo que a partir de la ecuación (55) obtenemos una onda plana en el tiempo y el espacio, Sin embargo, es posible que n sea un número complejo. En tal caso, lo denotamos por y definimos donde k es el coeficiente de extinción. De acuerdo a (65), n determinará la forma de propagación de la onda, estableciendo los puntos de fase constante. Por otra parte, será responsable de un decaimiento exponencial de la amplitud de la onda en su dirección. Se denomina profundidad de 1 piel (skindepth) a la distancia que indica cuánto penetrará la onda en el material antes de desvanecerse significativamente. Es posible apreciar este fenómeno aún cuando el índice de PROYECTO FINAL DE CARRERA página 13 de 98 PFC: OPTIMIZACIÓN Y EXTRACCIÓN DE PARAMETROS ÓPTICOS DE ESTRUCTURAS MULTICAPA Memoria descriptiva refracción sea puramente real. Por ejemplo, en la reflexión total interna sucede algo similar entre dos medios dieléctricos. En este caso, la naturaleza compleja reside en el vector unitario que acompaña a , y no en su valor. Es posible obtener a partir de N como. Veamos como segundo ejemplo, un modelo de material conductor. Queremos calcular la fracción de energía que transmite y refleja al incidir una onda plana sobre él. En el medio inicial (supuestamente no absorbente), existen una onda incidente y una reflejada, mientras que en el metal sólo hay una onda transmitida. Sean sus expresiones en los medios 1 y 2, respectivamente y donde km = nmk0, según la ecuación (63) . Si la frecuencia es lo suficientemente pequeña, la constante dieléctrica viene dada por Entonces el índice de refracción complejo es Consideremos además que el medio inicial es vacío, o sea, ni = 1. Apliquemos ahora las condiciones de borde. Sobre las fases, imponemos que en la interfase, éstas no dependen del punto PROYECTO FINAL DE CARRERA página 14 de 98 PFC: OPTIMIZACIÓN Y EXTRACCIÓN DE PARAMETROS ÓPTICOS DE ESTRUCTURAS MULTICAPA Memoria descriptiva de evaluación. Entonces, si igualamos las partes real e imaginaria de todas las fases en el plano de interfase, donde r pertenece a dicho plano. De las partes reales se deducen fácilmente las leyes de reflexión y de Snell. De la parte imaginaria, concluimos que el vector siempre es perpendicular al plano para cualquier ángulo de incidencia. Esto implica que los planos de amplitud constante son paralelos a la interfase, mientras que los planos de fase constante están determinados por las direcciones de los vectores de onda. Supongamos ahora que la incidencia es normal. Esto simplifica mucho las cosas, ya que todos los vectores de onda están en el eje z, como muestra la figura. Así, y la única diferencia sustancial entre los vectores de onda es el índice de refracción. Respecto a las amplitudes, simplemente por continuidad de las componentes tangenciales al plano de incidencia de los vectores E y H , tenemos La segunda ecuación es de utilidad si recordamos que, para el caso de ondas planas longitudinales, por lo que De esta forma, podemos resolver el sistema de ecuaciones y obtener la reflectancia y transmitancia definidas por Como PROYECTO FINAL DE CARRERA página 15 de 98 PFC: OPTIMIZACIÓN Y EXTRACCIÓN DE PARAMETROS ÓPTICOS DE ESTRUCTURAS MULTICAPA Memoria descriptiva donde se ha preferido trabajar con los módulos cuadrados de las amplitudes, para obtener magnitudes proporcionales al flujo de energía. 3.1.7 Transiciones intrabanda. Propiedades ópticas de portadores libres en los metales. Modelo de Drude. Modelo de ecuación de Boltzman.(4cl) Figura 2.1: Función dieléctrica de un gas de electrones libres. hω p = 10 eV, γ = h/τ= 0,1 eV. 3.1.7.1 Ecuación cinética de Boltzmann. PROYECTO FINAL DE CARRERA página 16 de 98 PFC: OPTIMIZACIÓN Y EXTRACCIÓN DE PARAMETROS ÓPTICOS DE ESTRUCTURAS MULTICAPA Memoria descriptiva Figura 2.2: Parte imaginaria de la función dieléctrica del cobre [PR 118, 1509 (1960)] Figura 2.3: constantes opticas del cobre n y k tomadas de [Jonson y christy, PRB 6, 4370 (1972)]. PROYECTO FINAL DE CARRERA página 17 de 98 PFC: OPTIMIZACIÓN Y EXTRACCIÓN DE PARAMETROS ÓPTICOS DE ESTRUCTURAS MULTICAPA Memoria descriptiva Figura 2.4: Representación esquemática de la conservación del número de electrones en su movimiento en el espacio de fase r , k 3.2 Efectos de superficie en los espectros ópticos. 3.2.1. Elipsometría. 3.2.2. Determinación directa de €1 y €2, sin utilizar las relaciones de Kramer-Krönig. Considérese el problema general de la reflexión y refracción de un rayo de luz polarizado, que desde un medio 1 incide en la intercara de un medio 2. Los vectores p y s representan la polarización del campo E de la onda incidente, reflejada y refractada. Onda P: Polarización paralela al plano de incidencia Onda S: Polarización perpendicular al plano de incidencia Figura 3.1: Esquema de Polarizaciones de la luz. En un medio isótropo o cúbico, al aplicar las condiciones de borde de la electrodinámica se obtiene: Amplitud de Reflectividad (coeficiente de reflexión de Fresnel) PROYECTO FINAL DE CARRERA página 18 de 98 PFC: OPTIMIZACIÓN Y EXTRACCIÓN DE PARAMETROS ÓPTICOS DE ESTRUCTURAS MULTICAPA Memoria descriptiva Reflectividad Como N1 y N2 son complejos, las amplitudes de reflectividad son complejas: rs = |rs | exp (iΔs) y rp = |rp| exp (iΔp). Nótese que N1 y N2 reales producen Δs, Δp igual a 0 o 180°. La elipsometría determina el cambio en el estado de polarización del haz incidente al reflejarse en la muestra. Dicho cambio se expresa en términos de la razón: La ecuación anterior define los ángulos elipsométricos W y Δ las ecuaciones de Fresnel permiten determinar E(w) de las mediciones elipsométricas de acuerdo con la relación: Para una reflexión aire/sustrato, N1 = 1 y N2 = n + ik, la constante dieléctrica se puede escribir como E = 1 + i 2, por lo tanto de la ecuación anterior podemos despejar los valores de 1 y 2, obteniéndose: La luz incidente sobre la muestra esta linealmente polarizada y la reflejada resulta elípticamente polarizada. Pues en la onda incidente se cumple que Las que están en fase Y en la onda reflejada se obtiene que PROYECTO FINAL DE CARRERA página 19 de 98 PFC: OPTIMIZACIÓN Y EXTRACCIÓN DE PARAMETROS ÓPTICOS DE ESTRUCTURAS MULTICAPA Memoria descriptiva Esto satisface Con Δ= Δp - Δr, esto es una elipse rotada en un ángulo . Figura 3.2: Onda incidente linealmente polarizada y onda reflejada elípticamente polarizada. El ángulo de rotación de los ejes de la elipse satisface tan Erp Ers ,medible con polarizadores. es medible usando polarizadores. Hay métodos más sofisticados usando dispositivos optoelectrónicos, que son de utilización corriente, como el elipsometro. PROYECTO FINAL DE CARRERA página 20 de 98 PFC: OPTIMIZACIÓN Y EXTRACCIÓN DE PARAMETROS ÓPTICOS DE ESTRUCTURAS MULTICAPA Memoria descriptiva Figura 3.3: elipsometro 3.2.2. Efectos de interferencia en capas delgadas. En la vida real, no hay superficies iguales al bulto. La superficie puede estar oxidada, tener rugosidad, o sufrir daos o reconstrucción, lo cual le cambia las constantes 1, 2 (o n, k). El modelo mas simple supone una capa intermedia entre el aire y el sustrato que se quiere medir. Figura 3.4: reflexión de múltiples intercaras y su efecto en la transmitancia de una película delgada (T=1-R). Donde 2 es igual a la diferencia de fase entre dos reflexiones sucesivas 3.2.3. Obtención del La diferencia de camino óptico PROYECTO FINAL DE CARRERA página 21 de 98 PFC: OPTIMIZACIÓN Y EXTRACCIÓN DE PARAMETROS ÓPTICOS DE ESTRUCTURAS MULTICAPA Memoria descriptiva Con esto finalmente tenemos que: La amplitud de la onda reflejada es la interferencia de las reflexiones en las intercaras 1-2 y 23. Entonces la amplitud de reflexión neta es: Usando r21 = -r12 y t12t21 =1 – r212 obtenemos: Si al medir tanψ y Δ se calculan 1 y 2 con un modelo AIRE/SUSTRATO, a 1 + i 2 se le llama pseudofunción dieléctrica. Volveremos sobre este tema más adelante. Solamente si la superficie esta limpia y sin dado, la pseudofunción dieléctrica ser la verdadera (ω). 3.3. Rugosidad. La mayoría de las muestras utilizadas en laboratorios, son generadas sobre sustratos, donde se forman capas rugosas de materiales, como se observa en la figura. PROYECTO FINAL DE CARRERA página 22 de 98 PFC: OPTIMIZACIÓN Y EXTRACCIÓN DE PARAMETROS ÓPTICOS DE ESTRUCTURAS MULTICAPA Memoria descriptiva Figura 3.5: Esquema de la rugosidad superficial. [Adachi, 1999]. En estos casos, se realiza una aproximación sobre el modelo que mejor describe la superficie, modelos piramidales, semiesféricos, etc. Para ello también se utilizan imágenes obtenidas con variados métodos, como se observa en la figura a continuación. Figura 3.6: Imagen AFM de superficie de Cu(110) [Stahrenberg et al, PRB64, 115111 (2001)]. En lo que prosigue haremos un análisis más electrodinámico del material, para comprender la rugosidad. 3.3.1. Campo Local. Distinción entre el campo E ' que actúa sobre un tomo y el campo promediado E ' E E . Para calcular Δ E ' , consideremos una división del espacio entre una esfera de radio R grande comparado con sus dimensiones, y el resto del medio. Tenemos: Ein se puede calcular dado el punto de vista microscópico, tomo por tomo. Eout puede Eout calcularse con un enfoque macroscópico. es el campo del dieléctrico dentro de la cavidad vaca. Consideremos que los tomos o moléculas dentro de la cavidad se pueden representar por dipolos puntuales. Donde R son las posiciones de los tomos y PROYECTO FINAL DE CARRERA d R sus dipolos. página 23 de 98 PFC: OPTIMIZACIÓN Y EXTRACCIÓN DE PARAMETROS ÓPTICOS DE ESTRUCTURAS MULTICAPA Memoria descriptiva Si los tomos no tienen momento dipolar permanente, sino que la polarización es inducida por el campo local, entonces d Etoc , Eloc es el mismo para todos, donde es la R polarizabilidad. Donde R = (d, R .En un medio desordenado R se convierte en R 2 sindRddψ. Veamos que : Es decir E in 0 en un medio desordenado. De hecho en una red cúbica, la evaluación cuidadosa da que E in 0 . 3.3.2. Campo Exterior. La discontinuidad de P en el borde produce una carga de polarización. Si integramos sobre el volumen del cilindro (ver figura) la expresión anterior: PROYECTO FINAL DE CARRERA página 24 de 98 PFC: OPTIMIZACIÓN Y EXTRACCIÓN DE PARAMETROS ÓPTICOS DE ESTRUCTURAS MULTICAPA Memoria descriptiva Figura 3.7: La discontinuidad de P . en el borde produce una carga de polarización. cuando h 0 , pol ·h pol , por lo tanto de las ecuaciones anteriores obtenemos: pero P1n = 0 y P2n = P cos(θ) como muestra la figura, entonces la expresión final para la densidad de carga polarizada es El campo eléctrico en el centro de la esfera generado por esta carga de polarización es paralelo a P Este viene a ser el campo en la posición atómica. Una aproximación mejor será : PROYECTO FINAL DE CARRERA página 25 de 98 PFC: OPTIMIZACIÓN Y EXTRACCIÓN DE PARAMETROS ÓPTICOS DE ESTRUCTURAS MULTICAPA Memoria descriptiva Con 0 1, esto da cuenta de los dipolos no son puntuales. = 0 es el caso de electrones libres deslocalizados. Como simplificación adicional, supondremos que el medio es isótropo. En tal caso la polarización inducida P es paralela a Etoc , con un coeficiente de proporcionalidad que es independiente de la dirección. Reemplazando el valor del campo eléctrico local antes mostrado, obtenemos n donde N V densidad de dipolos, ordenando la expresión anterior Por lo tanto el desplazamiento eléctrico D es: Finalmente tenemos que : Poniendo = 1 se obtiene la formula de Clausius-Mossolti. Esta formula es valida cuando n es muy pequeño, que es el caso para gases enrarecidos. PROYECTO FINAL DE CARRERA página 26 de 98 PFC: OPTIMIZACIÓN Y EXTRACCIÓN DE PARAMETROS ÓPTICOS DE ESTRUCTURAS MULTICAPA Memoria descriptiva 3.3.3. Modelo de Medio Efectivo. El modelo de aproximación de medio-efectivo de Bruggeman (EMA), el de LorentzLorenz (LL) y el de Maxwell Garnett (MG) son teorías simples de medio efectivo, que representan una mezcla dieléctrica heterogénea. Todos los modelos LL, MG y EMA tienen la misma forma genérica: Donde < >, h, 1, 2,... son las funciones dieléctricas (complejas) de un medio efectivo, medio servidor e inclusiones del tipo 1,2,…..en el servidor respectivamente y donde v1, vi 1 v2,... representan fracciones de volumen ( i ) del material del tipo 1,2,... en el volumen total. En la aproximación LL, la cual fue desarrollada para describir entidades de puntos polarizadles, de polarizabilidad , insertadas en vacío, h = 1,< >= y vi es igual a las fracciones volumen, donde i vi 1 La relación LL es usualmente expresada en términos de la polarizabilidad i , la cual esta relacionada con la función dieléctrica macroscópica por la relación ClausiusMossotti : En el modelo MG1 el sustrato es insertado en un servidor hueco (Eh = 1) siendo idéntico al modelo LL. En el modelo MG2 los huecos son insertados en el sustrato. Si asumimos un medio hipotético, por ejemplo, de 50 % de huecos y 50 % de sustrato, los resultados LL y MG1 son idénticos pero son muy diferentes los resultados de MG2 a pesar del hecho que las fracciones de volumen relativas son idénticas. Los modelos MG1 y MG2 difieren solo en la opción del material del servidor. En el modelo de Bruggeman, se reemplaza h por < >, es decir, dejando que el medio efectivo actúe como medio servidor. Donde vi 1 i y <> es la solución numérica de la ecuación anterior. Las formulas de LL, MG y EMA se reducen simplemente a opciones diferentes de la función dieléctrica del material servidor Eh. Para elegir el modelo de medio efectivo correcto a usar, depender de las condiciones del sistema. PROYECTO FINAL DE CARRERA página 27 de 98 PFC: OPTIMIZACIÓN Y EXTRACCIÓN DE PARAMETROS ÓPTICOS DE ESTRUCTURAS MULTICAPA Memoria descriptiva Figura 3.8: Comparación de la parte imaginaria 2 de la función dieléctrica efectiva para una mezcla con 50% de sustrato y 50% de huecos calculada con los modelos LL, MG1, EMA y MG2. Para el caso en que L « λ, siendo L la longitud característica de la rugosidad, se modela el medio rugoso o poroso como una mezcla física de material y vacío, con < > efectiva. Para una superficie dada y mediciones de elipsometría tan exp , cos exp, se pueden hacer modelos y obtener tan calc y cos calc . La última parte del proceso es comparar los valores medidos con las predicciones del modelo basadas en las ecuaciones de Fresnel. El procedimiento de análisis usualmente se denomina ajuste de datos, ya que los parámetros ajustables del modelo se varan para encontrar el mejor ajuste de los datos generados a los datos experimentales reales. Los parámetros de ajuste a utilizar acordes al modelo seleccionado pueden ser: los grosores de las películas, los coeficientes de la relación de dispersión para sus constantes ópticas, fracciones de volumen, etc. Existen diferentes algoritmos de ajuste para el análisis de datos ópticos. El objetivo es determinar rápidamente el modelo que exhibe la menor diferencia (mejor ajuste) entre los datos medidos y los calculados. La raíz del error cuadrático medio se utiliza para cuantificar la diferencia entre los datos experimentales y los predichos, considerando las desviaciones estándar de las cantidades experimentalmente medidas, exp. Para mediciones espectroscópicas con un elipsometro de analizador rotatorio, el cual determina los valores de tan( ) y cos(Δ), el valor se calcula Donde N es el número de datos experimentales (a distintas ), P es el número de parámetros desconocidos. Vemos algunos resultados para el Si. PROYECTO FINAL DE CARRERA página 28 de 98 PFC: OPTIMIZACIÓN Y EXTRACCIÓN DE PARAMETROS ÓPTICOS DE ESTRUCTURAS MULTICAPA Memoria descriptiva Figura 3.9: Pseudo ε del Si con la corrección de la rugosidad simulada con la teoría del medio efectivo. [Adachi, 1999]. En la Figura se presenta el espectro de para el silicio obtenido por espectroscopia elipsométrica. Las transiciones electrónicas (puntos críticos) ocurren para energías cercanas a los 3.4 y 4.3 eV, y se manifiestan como máximos en 2. Este espectro puede representarse adecuadamente con una generalización del modelo de oscilador armónico. La rugosidad puede determinarse independientemente mediante AFM [Adachi et al, J. Appl. Phys. 80, 5422 (1996)] y comprobar de acuerdo con las mediciones ópticas. 3.4. Figuras originales. 3.4.1. Efectos de interferencia en capas delgadas. 3.4.2. Efectos de película de óxido. 3.4.3. Rugosidad. PROYECTO FINAL DE CARRERA página 29 de 98 PFC: OPTIMIZACIÓN Y EXTRACCIÓN DE PARAMETROS ÓPTICOS DE ESTRUCTURAS MULTICAPA Memoria descriptiva Figura 3.10: a) Esquema de polarizaciones de la luz para el cálculo de los coeficientes de Fresnel. b) Elipsometro. c) Reflectancia en función del ángulo de incidencia. Figura 3.11: Reflexión en múltiples intercaras y su efecto en la transmitancia de una película delgada (T=1-R). PROYECTO FINAL DE CARRERA página 30 de 98 PFC: OPTIMIZACIÓN Y EXTRACCIÓN DE PARAMETROS ÓPTICOS DE ESTRUCTURAS MULTICAPA Memoria descriptiva Figura 3.12: a)Pseudo 2 del GaAs con la corrección por la capa de óxido. [Aspnes and Studna, PRB 27, 985 (1983)]. b) Pseudo del Si con la corrección por la capa de óxido. [Adachi, 1999]. Figura 3.13: Imagen AFM de superficie de Cu(110) [Stahrenberg et al, PRB64, 115111 (2001)]. PROYECTO FINAL DE CARRERA página 31 de 98 PFC: OPTIMIZACIÓN Y EXTRACCIÓN DE PARAMETROS ÓPTICOS DE ESTRUCTURAS MULTICAPA Memoria descriptiva Figura 3.14: Esquema de la rugosidad superficial. [Adachi, 1999]. Figura 3.15: Pseudo del Si con la corrección de la rugosidad simulada con la teoría del medio efectivo. [Adachi, 1999]. 3.5 Transiciones Interbanda. 3.5.1. Teoría de Transiciones Interbanda. Vamos a estar enmarcados en la Aproximación monoelectrónica. Consideremos un Hamiltoniano monoelectrónico : De ac V ( r ) ) es el potencial ocasionado por los núcleos y los demás electrones, y conocemos del Hamiltoniano sus autofunciones ψn ( r ) ) y autoenergías En y su ocupación f(Ei) (probabilidad de que este ocupado el estado E i ) que por lo general es de la forma 1 f ( Ei Ef ) En donde: e 1 PROYECTO FINAL DE CARRERA página 32 de 98 PFC: OPTIMIZACIÓN Y EXTRACCIÓN DE PARAMETROS ÓPTICOS DE ESTRUCTURAS MULTICAPA Memoria descriptiva Sea un campo electromagnético, caracterizado por : Donde cc. es el complejo conjugado del primer término, también e q , con esto tenemos que nuestro Hamiltoniano toma la forma: De esta forma, cortando términos de orden Ao2 tenemos : Con Teoría de perturbaciones, la probabilidad de absorción de un fotón, que es igual a la probabilidad de transición, esta dada por : Reemplazando W nos queda : Así también tenemos la probabilidad de emisión inducida: La probabilidad de Transmisión neta de pasar del estado i al estado j esta dada por: entonces : Veamos lo que ocurre con el término PROYECTO FINAL DE CARRERA página 33 de 98 PFC: OPTIMIZACIÓN Y EXTRACCIÓN DE PARAMETROS ÓPTICOS DE ESTRUCTURAS MULTICAPA Recordando que : entonces : Utilizando ahora el hecho de que e q , nos queda que : . Por lo tanto P P . i j j i Además f ( Ei )(1 f ( Ej )) f ( Ej )(1 f ( Ei )) f ( Ei ) f ( Ej ) De esta manera nos queda: Finalmente, la energía absorbida por unidad de tiempo es: Por otra parte : La energía disipada por unidad de tiempo, por un campo eléctrico : con PROYECTO FINAL DE CARRERA página 34 de 98 PFC: OPTIMIZACIÓN Y EXTRACCIÓN DE PARAMETROS ÓPTICOS DE ESTRUCTURAS MULTICAPA Memoria descriptiva en donde: El termino J·E , queda: Promediando : Donde 21 = + ∗. Ahora integramos esto, lo que nos deja : Recordemos que : con esto es decir, tenemos la parte imaginaria de la constante dieléctrica. Entonces: PROYECTO FINAL DE CARRERA página 35 de 98 PFC: OPTIMIZACIÓN Y EXTRACCIÓN DE PARAMETROS ÓPTICOS DE ESTRUCTURAS MULTICAPA Finalmente: Este resultado lleva un factor 2 adicional causado por la degeneración de spin. Si queremos calcular la parte real de la constante dieléctrica, nos basta usar las relaciones de KramersKrönig. 3.5.2. Transiciones banda-banda. Cuando existen condiciones de simetría periódica, como en sólidos, las funciones de onda se pueden escribir de la forma (Teorema de Bloch): Donde Para cada k , hay una secuencia de soluciones para uk( k ) y E( k ). Entonces de la ecuación de Schrödinger, tenemos que : Lo que nos lleva a: Para k dado, E=En( k ) u=unk ( r ) El conjunto de todos los puntos En( k ) para n dado y todos los PROYECTO FINAL DE CARRERA página 36 de 98 k posibles, se llama banda. PFC: OPTIMIZACIÓN Y EXTRACCIÓN DE PARAMETROS ÓPTICOS DE ESTRUCTURAS MULTICAPA Memoria descriptiva El conjunto de puntos k que dan soluciones linealmente independientes esta limitado a la primera zona de Brillouin (1ZB). La 1ZB es la región del espacio, tal que | k | < | k - G | para todo G h b1 k b2 l b3 ,vector de la llamada red recíproca (RR). Con esto entonces nos estamos acercando a nuestro valor de la constante dieléctrica, recordemos que 1 puede obtenerse va Kramers-Krönig. Para continuar entonces, se puede usar la relación : Por tanto para tener la constante dieléctrica total, basta reemplazar la delta, quedándonos: El decaimiento espontáneo del estado excitado Ej se puede tener en cuenta mediante: con tiempo de vida medio. h La expresión ( q , ω) puede ser reducida, bajo ciertas aproximaciones, a la ( q , w) que se obtiene de la ecuación de Boltzmann. Además dentro de la 1ZB, k toma valores: Donde mi=0, 1, 2,……, ( Ni Ni 1), 2 2 Siendo Ni el numero de celdas cristalinas en la dirección i. Para un cristal infinito, Ni → ∞ y k . toma los valores continuos. PROYECTO FINAL DE CARRERA página 37 de 98 PFC: OPTIMIZACIÓN Y EXTRACCIÓN DE PARAMETROS ÓPTICOS DE ESTRUCTURAS MULTICAPA Memoria descriptiva Entonces las ψi y ψj se pueden denotar como : ψi = ψv, k i( r ) Banda v (valencia o core). ψj = ψc, k j( r ) Banda c (conducción). Para el caso de los aislantes, f(Ei ) = 1, f(Ej) = 0. Veamos la integral: Recordemos que la derivada de una función periódica es otra función periódica. en donde G ih Gu (G )e i G r una función periódica. ki Entonces, nuestro término de la constante dieléctrica nos queda de la forma donde el último término de la integral pude escribirse de la forma (Recordemos procedimiento similar realizado en la sección anterior) : De esta forma entonces, el término de la constante dieléctrica nos queda : en donde: PROYECTO FINAL DE CARRERA página 38 de 98 PFC: OPTIMIZACIÓN Y EXTRACCIÓN DE PARAMETROS ÓPTICOS DE ESTRUCTURAS MULTICAPA Memoria descriptiva es una función periódica. La integral del termino de la constante dieléctrica no se anula, solo si el argumento de la exponencial ( q kj ki ) G ki) donde G RR (red reciproca). ~ Ahora bien, como k i y k j estan en la 1ZB, entonces podemos tener que q 0 y k i = k j Cuando q 0 hablamos de la aproximación Dipolar, y cuando k i = k j se habla de transiciones verticales. Lo anterior es una regla de selección ocasionada por la simetría de traslación del cristal. Con esta regla de selección se simplifica el valor de la parte imaginaria de la constante dieléctrica . con k 1ZB , esta es la fórmula fundamental de las transiciones ópticas en cristales o sistemas periódicos. mi ko bi , tenemos que un punto k ocupa un volumen: i Ahora como Ni Con esto k V 3 d k ,, quedándonos la constante dieléctrica de la forma: (2 ) 3 Donde pcv( k ) ck · p · . ck 3.5.3. Algunos Casos. Hay materiales en los que los electrones están muy ligados, 2 depende de la topología de las bandas, y en particular, de las diferencias entre Evk y Eck. Las regiones particularmente importantes, son las regiones de la 1ZB en donde Eck-Evk ≈ cte. PROYECTO FINAL DE CARRERA página 39 de 98 PFC: OPTIMIZACIÓN Y EXTRACCIÓN DE PARAMETROS ÓPTICOS DE ESTRUCTURAS MULTICAPA Memoria descriptiva Para continuar recordemos que pcv( k ) · p · ck . , y usando el hecho de que ck mi V ko bi 3 i k (2 ) 3 d k donde Ni , con esto obtenemos la ecuación: En general e · p cv ( k ) es una función suave de k y (ω) tiene una gran correlación con la llamada Densidad Conjunta de Estados (JDOS). En donde se utiliza la formula mas conveniente dado el problema. Los puntos k en que k ( Eck Evk ) 0 se llaman puntos críticos. La integral mata las singularidades, pero hay variaciones rápidas, es decir, en estos puntos críticos, pueden integrarse analíticamente. Consideremos el caso de los semiconductores. 3.6. Punto crítico M0. En el borde de absorción, las energías de las bandas de conducción (c) y de valencia (v) son de la forma Con esto la diferencia de energía esta dada por: Donde La superficie de integración es: Esto conforma un elipsoide, donde su ecuación analítica esta dada por : PROYECTO FINAL DE CARRERA página 40 de 98 PFC: OPTIMIZACIÓN Y EXTRACCIÓN DE PARAMETROS ÓPTICOS DE ESTRUCTURAS MULTICAPA Memoria descriptiva con Ahora el área del elipsoide que este descrito por la ecuación anterior nos facilita el cálculo de la integral de volumen que esta dada por: haciendo cambio de coordenadas: Con esto tenemos entonces : Utilizando: Obtenemos : Entonces tenemos que J cv h Eg . Este es el llamado punto crítico M0. PROYECTO FINAL DE CARRERA página 41 de 98 PFC: OPTIMIZACIÓN Y EXTRACCIÓN DE PARAMETROS ÓPTICOS DE ESTRUCTURAS MULTICAPA Memoria descriptiva 3.6.1 Transiciones prohibidas en el punto crítico M0. Puede darse el caso de que en el punto crítico ko , ocurra que p cv (ko) 0 . En este caso es importante la variación de p cv . Expandiendo en serie tenemos : entonces : es un vector, y e · p cv Mcv( Ko)· k , con esto tenemos entonces que la parte imaginaria de la función dieléctrica es : Punto critico M0 en -.k0 = 0. Contribución de bandas c v. Entonces, es mas complicado. En el caso en que 1 = 2 = 3, se obtiene que : 3.7. Punto de Ensilladura M1. Tomemos el caso: PROYECTO FINAL DE CARRERA página 42 de 98 PFC: OPTIMIZACIÓN Y EXTRACCIÓN DE PARAMETROS ÓPTICOS DE ESTRUCTURAS MULTICAPA Memoria descriptiva Sea 3 < 0; 1, 2 > 0, entonces q3 h2 k 3 , entonces tenemos : 2 3 Utilizamos ahora coordenadas cilíndricas, q1 q cos , q 2 q sin , q3=q3 y d 3. q = q dq ddq 3 . Entonces tenemos que: Se debe notar que la superficie de integración no puede salirse de la 1ZB, y la dependencia cuadrática con qi esta limitada a puntos cercanos, esto es una tendencia. Entonces : Donde Θ(x) es la función escalón de Heavyside. Finalmente nuestro resultado queda: PROYECTO FINAL DE CARRERA página 43 de 98 PFC: OPTIMIZACIÓN Y EXTRACCIÓN DE PARAMETROS ÓPTICOS DE ESTRUCTURAS MULTICAPA Memoria descriptiva 3.8. Cristales Bidimensionales. Lo siguiente es válido para superficies, pozos quánticos o estructuras de capas, en que los fenómenos ocurren confinados en ciertos planos cristalinos. El grafito es un ejemplo de esto. Se deriva principalmente de un cristal 3D para el caso en que 3→ ∞. Tabla I : Resultados para cristales bidimensionales. 3.9. Cristales Unidimensionales. Un ejemplo clásico de este caso, son los nanotubos. Tenemos entonces que : PROYECTO FINAL DE CARRERA página 44 de 98 PFC: OPTIMIZACIÓN Y EXTRACCIÓN DE PARAMETROS ÓPTICOS DE ESTRUCTURAS MULTICAPA Memoria descriptiva 3.10. Constante dieléctrica de un sistema de osciladores quánticos. Finalmente : Para el caso en que µ < 0 tenemos que : Tenemos un punto crítico 0-dimensional donde Eck - Evk E0. Donde D0 incluye las constantes, esto es un oscilador y coincide con el modelo de Lorentz. Corresponde a bandas paralelas en una amplia región del espacio. 2 E ( E j E i h ) , h se hace uso explícito de que h > 0 y se desprecian términos de menor orden. Si no se desprecian estos términos y se considera el tiempo de vida finito, se obtiene : Notemos que en la deducción de la regla de oro de Fermi Pi j Con > 0. Esta forma cumple la propiedad ()∗ = (-) 3.11. Radiación en la materia. Si la materia es expuesta a la radiación electromagnética, por ejemplo a la luz infrarroja, la radiación puede ser absorbida, transmitida, reflejada, dispersada o puede sufrir la fotoluminiscencia. La fotoluminiscencia es un término que se usó para designar un tipo de efectos como la fosforescencia y la dispersión de Raman. PROYECTO FINAL DE CARRERA página 45 de 98 PFC: OPTIMIZACIÓN Y EXTRACCIÓN DE PARAMETROS ÓPTICOS DE ESTRUCTURAS MULTICAPA Memoria descriptiva Reflexión Figura 3.11.1. Reflexión. Transmisión Figura 3.11.2. Transmisión Absorción Figura 3.11.3. Absorción PROYECTO FINAL DE CARRERA página 46 de 98 PFC: OPTIMIZACIÓN Y EXTRACCIÓN DE PARAMETROS ÓPTICOS DE ESTRUCTURAS MULTICAPA Memoria descriptiva Dispersión Figura 3.11.4. Dispersión 3.12.Ecuaciones de dispersión del índice de refracción. 3.12.1. La ecuación de Cauchy. La ecuación de Cauchy es una relación empírica entre el índice de refracción n y la longitud de onda de la luz para un material transparente λ. La forma general de la ecuación de Cauchy de la es: Donde A, B, C, etc, son los coeficientes que se pueden determinar para un material determinado de la ecuación para medir índices de refracción conocidas las longitudes de onda. Por lo general, es suficiente con utilizar un par de términos de la ecuación: Donde A y B son los coeficientes de antes. La tabla de coeficientes de los materiales ópticos se muestra a continuación: PROYECTO FINAL DE CARRERA página 47 de 98 PFC: OPTIMIZACIÓN Y EXTRACCIÓN DE PARAMETROS ÓPTICOS DE ESTRUCTURAS MULTICAPA Memoria descriptiva La teoría de la interacción luz-materia en la que se basa esta ecuación de Cauchy puede dar valores incorrectos. En particular, la ecuación es válida sólo para las regiones de dispersión normal en la región de longitud de onda visible. En el infrarrojo, la ecuación será inexacta, y no puede representar a las regiones de dispersión anómala. A pesar de ello, su sencillez matemática le hace útil en algunas aplicaciones. La ecuación Sellmeier es posterior al desarrollo de los trabajos de Cauchy anormalmente dispersivo que se ocupa de las regiones, y más exactamente de los modelos de un material de índice de refracción en todo rango de ultravioletas, visibles e infrarrojos del espectro. Figura 3.12.1 Gráfica de índice de refracción frente a la longitud de onda de vidrio BK7. Cruces rojas muestran los valores medidos. Más de la región visible (rojo sombreado), la ecuación de Cauchy (línea azul) y de acuerdo con la medición de índices de refracción y la Sellmeier parcela (verde línea discontinua). Se desvía en el ultravioleta y el infrarrojo regiones PROYECTO FINAL DE CARRERA página 48 de 98 PFC: OPTIMIZACIÓN Y EXTRACCIÓN DE PARAMETROS ÓPTICOS DE ESTRUCTURAS MULTICAPA Memoria descriptiva 3.12.2. Ecuación de sellmeier. En óptica la ecuación Sellmeier es una relación empírica entre el índice de refracción n y λ la longitud de onda para un medio transparente. La forma usual de la ecuación de las lentes es Donde B 1,2,3 y C 1,2,3 son determinado experimentalmente Sellmeier coeficientes Estos coeficientes suelen ser citado para. λ en micrómetros. Tenga en cuenta que esta λ es la longitud de onda de vacío, que no en el propio material, que es λ y n (λ). La ecuación se utiliza para determinar la dispersión de la luz en un medio refractantes. Una forma diferente de la ecuación a veces se utiliza para algunos tipos de materiales, por ejemplo los cristales. La ecuación fue deducida en 1871 por W. Sellmeier, y es un desarrollo de los trabajos de Cauchy Augustin Cauchy en la ecuación para la elaboración de modelos de dispersión. A modo de ejemplo, los coeficientes de una corona de vidrio borosilicato conocido como BK7 se muestran a continuación: El Sellmeier coeficientes para muchos lentes ópticas comunes se pueden encontrar en el catálogo de vidrio Schott, o en el Catálogo de Ohara. Para lentes ópticas comunes, el índice de refracción calculado con tres coeficientes de la ecuación Sellmeier se desvía de la actual índice de refracción en menos de 5 × 10 -6 más de la gama de longitudes de onda de 365 nm a 2,3 μ m [1], que es del orden de la homogeneidad de una muestra de vidrio [2]. Términos adicionales se añade a veces para hacer el cálculo más preciso. En su forma más general, la ecuación de Sellmeier se da como Con cada término de la suma que representa una absorción de fuerza de resonancia B, en una longitud de onda i √ C i. Por ejemplo, los coeficientes de BK7 anteriormente PROYECTO FINAL DE CARRERA página 49 de 98 PFC: OPTIMIZACIÓN Y EXTRACCIÓN DE PARAMETROS ÓPTICOS DE ESTRUCTURAS MULTICAPA Memoria descriptiva corresponden a dos resonancias de absorción en el ultravioleta, y una en la región del infrarrojo medio. Cerca de absorción de cada pico, la ecuación no da física de los valores n = ± ∞, y, en estas regiones de longitud de onda de manera más precisa el modelo de dispersión, como la Helmholtz debe utilizarse. Si todos los términos se especifican para un material, a las longitudes de onda larga lejos de los picos de absorción el valor de n tiende a donde ε es la constante dieléctrica del medio. La ecuación de Sellmeier también puede administrarse en otra forma: Aquí, el coeficiente A es una aproximación de la longitud de onda corta (por ejemplo, ultravioleta), la absorción de las contribuciones para el índice de refracción en longitudes de onda más largo. Otras variantes de la ecuación de Sellmeier cuenta que pueden existir para un índice de refracción del material de cambio, debido a la temperatura, la presión, y otros parámetros. PROYECTO FINAL DE CARRERA página 50 de 98 PFC: OPTIMIZACIÓN Y EXTRACCIÓN DE PARAMETROS ÓPTICOS DE ESTRUCTURAS MULTICAPA Memoria descriptiva Coeficientes Figura 3.12.2 Un gráfico de índice de refracción frente a la longitud de onda de vidrio BK7, mostrando los puntos medidos (cruces azules) y una porción de la ecuación Sellmeier (línea roja). PROYECTO FINAL DE CARRERA página 51 de 98 PFC: OPTIMIZACIÓN Y EXTRACCIÓN DE PARAMETROS ÓPTICOS DE ESTRUCTURAS MULTICAPA Entorno MATLAB 4. Entorno MATLAB. 4.1. Entorno gráfico GUIDE con MATLAB. 4.1.1. Herramienta GUIDE. GUIDE es un entorno de programación visual disponible en MATLAB para realizar y ejecutar programas que necesiten ingreso continuo de datos. Tiene las características básicas de todos los programas visuales como Visual Basic o Visual C++. 4.1.2. Inicio Para iniciar nuestro proyecto, lo podemos hacer de dos maneras: Ejecutando la siguiente instrucción en la ventana de comandos: >> guide Haciendo un click en el ícono que muestra la figura: Fig. 4.1. Icono GUIDE. Se presenta el siguiente cuadro de diálogo: Fig. 4.2. Ventana de inicio de GUI. Se presentan las siguientes opciones: PROYECTO FINAL DE CARRERA página 52 de 98 PFC: OPTIMIZACIÓN Y EXTRACCIÓN DE PARAMETROS ÓPTICOS DE ESTRUCTURAS MULTICAPA Entorno MATLAB a) Blank GUI (Default) La opción de interfaz gráfica de usuario en blanco (viene predeterminada), nos presenta un formulario nuevo, en el cual podemos diseñar nuestro programa. b) GUI with Uicontrols Esta opción presenta un ejemplo en el cual se calcula la masa, dada la densidad y el volumen, en alguno de los dos sistemas de unidades. Podemos ejecutar este ejemplo y obtener resultados. c) GUI with Axes and Menu Esta opción es otro ejemplo el cual contiene el menú File con las opciones Open, Print y Close. En el formulario tiene un Popup menu, un push button y un objeto Axes, podemos ejecutar el programa eligiendo alguna de las seis opciones que se encuentran en el menú despegable y haciendo click en el botón de comando. d) Modal Question Dialog Con esta opción se muestra en la pantalla un cuadro de diálogo común, el cual consta de una pequeña imagen, una etiqueta y dos botones Yes y No, dependiendo del botón que se presione, el GUI retorna el texto seleccionado (la cadena de caracteres ‘Yes’ o ‘No’). Elegimos la primera opción, Blank GUI, y tenemos: Fig. 4.3. Entorno de diseño de GUI PROYECTO FINAL DE CARRERA página 53 de 98 PFC: OPTIMIZACIÓN Y EXTRACCIÓN DE PARAMETROS ÓPTICOS DE ESTRUCTURAS MULTICAPA Entorno MATLAB La interfaz gráfica cuenta con las siguientes herramientas: Para obtener la etiqueta de cada elemento de la paleta de componentes ejecutamos: File>>Preferentes y seleccionamos Show names in component palette. Tenemos la siguiente presentación: Fig. 4.4. Entorno de diseño: componentes etiquetados. La siguiente tabla muestra una descripción de los componentes: PROYECTO FINAL DE CARRERA página 54 de 98 54 PFC: OPTIMIZACIÓN Y EXTRACCIÓN DE PARAMETROS ÓPTICOS DE ESTRUCTURAS MULTICAPA Entorno MATLAB 4.1.3. Propiedades de los componentes. Cada uno de los elementos de GUI, tiene un conjunto de opciones que podemos acceder con click derecho. Fig.4.5. Opciones del componente. Fig.4.6. Entorno Property Inspector. Permite ver y editar las propiedades de un objeto. La opción Property Inspector nos permite personalizar cada elemento. PROYECTO FINAL DE CARRERA página 55 de 98 55 PFC: OPTIMIZACIÓN Y EXTRACCIÓN DE PARAMETROS ÓPTICOS DE ESTRUCTURAS MULTICAPA Entorno MATLAB Al hacer click derecho en el elemento ubicado en el área de diseño, una de las opciones más importantes es View Callbacks, la cual, al ejecutarla, abre el archivo .m asociado a nuestro diseño y nos posiciona en la parte del programa que corresponde a la subrutina que se ejecutará cuando se realice una determinada acción sobre el elemento que estamos editando. Por ejemplo, al ejecutar View Callbacks>>Callbacks en el Push Button, nos ubicaremos en la parte del programa: function pushbutton1_Callback(hObject, eventdata, handles) %hObject handle to pushbutton1 (see GCBO) %eventdata reserved-to be defined in a future version of MATLAB %handles structure with handles and user data (see GUIDATA) 4.1.4. Funcionamiento de una aplicación GUI. Una aplicación GUIDE consta de dos archivos: .m y .fig. El archivo .m es el que contiene el código con las correspondencias de los botones de control de la interfaz y el archivo .fig contiene los elementos gráficos. Cada vez que se adicione un nuevo elemento en la interfaz gráfica, se genera automáticamente código en el archivo .m. Para ejecutar una Interfaz Gráfica, si la hemos etiquetado con el nombre curso.fig, simplemente ejecutamos en la ventana de comandos >> curso. O haciendo click derecho en el m-file y seleccionando la opción RUN. 4.1.5. Manejo de datos entre los elementos de la aplicación y el archivo .M. Todos los valores de las propiedades de los elementos (color, valor, posición, string…) y los valores de las variables transitorias del programa se almacenan en una estructura, los cuales son accedidos mediante un único y mismo identificador para todos éstos. Tomando el programa listado anteriormente, el identificador se asigna en: handles.output = hObject; handles, es nuestro identificador a los datos de la aplicación. Esta definición de identificador es salvada con la siguiente instrucción: guidata(hObject, handles); guidata, es la sentencia para salvar los datos de la aplicación. Aviso: guidata es la función que guarda las variables y propiedades de los elementos en la estructura de datos de la aplicación, por lo tanto, como regla general, en cada subrutina se debe escribir en la última línea lo siguiente: guidata(hObject,handles); PROYECTO FINAL DE CARRERA página 56 de 98 56 PFC: OPTIMIZACIÓN Y EXTRACCIÓN DE PARAMETROS ÓPTICOS DE ESTRUCTURAS MULTICAPA Entorno MATLAB Esta sentencia nos garantiza que cualquier cambio o asignación de propiedades o variables quede almacenado. Por ejemplo, si dentro de una subrutina una operación dio como resultado una variable diego para poder utilizarla desde el programa u otra subrutina debemos salvarla de la siguiente manera: handles.diego=diego; guidata(hObject,handles); La primera línea crea la variable diego a la estructura de datos de la aplicación apuntada por handles y la segunda graba el valor. 4.1.6. Sentencias GET y SET. La asignación u obtención de valores de los componentes se realiza mediante las sentencias get y set. Por ejemplo si queremos que la variable utpl tenga el valor del Slider escribimos: utpl= get(handles.slider1,'Value'); Notar que siempre se obtienen los datos a través de los identificadores handles. Para asignar el valor a la variable utpl al statictext etiquetada como text1 escribimos: set(handles.text1,'String',utpl);%Escribe el valor del Slider... %en static- text PROYECTO FINAL DE CARRERA página 57 de 98 PFC: OPTIMIZACIÓN Y EXTRACCIÓN DE PARAMETROS ÓPTICOS DE ESTRUCTURAS MULTICAPA Entorno MATLAB 4.2 Matlab optimización. 4.2.1.LSQNONLIN. Resuelve los mínimos cuadrados no lineales (datos de montaje no lineales) problemas 4.2.1.1 Ecuación. Resuelve problemas no lineales de mínimos cuadrados de ajuste de curvas de la forma 4.2.1.2 Sintaxis. x = lsqnonlin(fun,x0) x = lsqnonlin(fun,x0,lb,ub) x = lsqnonlin(fun,x0,lb,ub,options) x = lsqnonlin(problem) [x,resnorm] = lsqnonlin(...) [x,resnorm,residual] = lsqnonlin(...) [x,resnorm,residual,exitflag] = lsqnonlin(...) [x,resnorm,residual,exitflag,output] = lsqnonlin(...) [x,resnorm,residual,exitflag,output,lambda] = lsqnonlin(...) [x,resnorm,residual,exitflag,output,lambda,jacobian] = lsqnonlin(...) 4.2.1.3 Descripción. Lsqnonlin resuelve problemas de mínimos cuadrados no lineales, incluyendo los datos de montaje de problemas no lineales. En lugar de calcular el valor , (La suma de los cuadrados), lsqnonlin requiere la función definida por el usuario para calcular el valor del vector función PROYECTO FINAL DE CARRERA página 58 de 98 PFC: OPTIMIZACIÓN Y EXTRACCIÓN DE PARAMETROS ÓPTICOS DE ESTRUCTURAS MULTICAPA Entorno MATLAB En términos de vectores, puede repetir este problema de optimización como Donde x es un vector y f (x) es una función que devuelve un vector de valor. x = lsqnonlin(fun,x0) se inicia en el punto x0 y encuentra un mínimo de la suma de los cuadrados de las funciones descritas en la función. Fun debe devolver un vector de valores, y no la suma de los cuadrados de los valores. x = lsqnonlin(fun,x0,lb,ub) define un conjunto de límites inferior y superior en el diseño de las variables en x, de manera que la solución está siempre en el rango de lb ≤ x ≤ ub. x = lsqnonlin(fun,x0,lb,ub,options) minimiza con las opciones de optimización especificadas en la estructura de las opciones. Utilice optimset para establecer estas opciones. Pass vacía matrices de lb y ub en caso de que no existan límites. x = lsqnonlin(problem) considera que el mínimo de problema, es un problema que se describe en la estructura de entrada de argumentos. Crear la estructura de la exportación de un problema de optimización de la herramienta, tal y como se describe en Exportación MATLAB de trabajo. [x,resnorm] = lsqnonlin(...) devuelve el valor del cuadrado de 2 de la norma residual a x: suma (fun (x). ^ 2). [x,resnorm,residual] = lsqnonlin(...) devuelve el valor residual de la función(x) en la solución x. [x,resnorm,residual,exitflag] = lsqnonlin(...) exitflag devuelve un valor que describe la condición de salida. [x,resnorm,residual,exitflag,output] = lsqnonlin(...) devuelve una estructura de la producción que contiene información acerca de la optimización. [x,resnorm,residual,exitflag,output,lambda] = lsqnonlin(...) devuelve una estructura lambda cuyos campos contienen los multiplicadores de Lagrange en la solución x. [x,resnorm,residual,exitflag,output,lambda,jacobian] = lsqnonlin(...)devuelve el Jacobiano de la función en la solución x. PROYECTO FINAL DE CARRERA página 59 de 98 PFC: OPTIMIZACIÓN Y EXTRACCIÓN DE PARAMETROS ÓPTICOS DE ESTRUCTURAS MULTICAPA Nota Si la entrada de los límites especificados por un problema son incompatibles, la salida x es x0 y los productos residuales y se resnorm .Componentes de x0 que violan los límites lb≤ x ≤ ub se restablecerá en el interior del cuadro definido por los límites. Componentes que respetan los límites no cambian. 4.2.1.3 Argumentos de entrada. función de argumentos contiene descripciones generales de los argumentos pasados en lsqnonlin. Esta sección proporciona la función de los detalles específicos para la fun, opciones, y el problema: fun La función de las plazas cuya suma es mínima. fun es una función que acepta un vector x y devuelve un vector F, el objetivo funciones evaluadas en x. La función de la fun puede especificarse como una función para manejar un Marchivo de la función x = lsqnonlin(@myfun,x0) Donde myfun MATLAB es una función, como function F = myfun(x) función F = F (x)Cálculo de los valores en función de x fun puede ser también una función para manejar una función anónima. x = lsqnonlin(@(x)sin(x.*x),x0); Si los valores definidos por el usuario para x y F son matrices, que se convierten en un vector lineal utilizando la indexación. Si el Jacobiano también puede calcularse y el Jacobiano opción es 'on', que de forma. options = optimset('Jacobian','on') Entonces, la función debe devolver la diversión, en una segunda salida argumento, el valor Jacobiano J, una matriz, a x.Tenga en cuenta que por el control de la nargout valor de la función de informática puede evitar J fun cuando se llama con un único argumento de salida (en el caso en que el algoritmo de optimización sólo necesita el valor de F, pero no J). function [F,J] = myfun(x)(x) = F ... función objetivo de los valores a x si nargout> 1 de la producción de dos argumentos J = ... % Jacobiano% de los evaluados en función de x final Si la fun devuelve un vector (matriz) de m componentes y ha longitud x n, donde n es la longitud de x0, entonces el Jacobiano J es una mxn matriz donde J (i, j) es la derivada parcial de F (I) con respecto a x (j).(Tenga en cuenta que el Jacobiano J es la transposición de la gradiente de F.) Opciones Options ofrece la función de los detalles específicos de las opciones valores. PROYECTO FINAL DE CARRERA página 60 de 98 PFC: OPTIMIZACIÓN Y EXTRACCIÓN DE PARAMETROS ÓPTICOS DE ESTRUCTURAS MULTICAPA Objetivo La función objetivo Problema X0 Punto inicial para x lb Vector de límites más bajos ub Vector de límites superior Solver 'Lsqnonlin' options Options de la estructura creada con optimset 4.2.1.4 Argumentos de salida. Función de argumentos contiene descripciones generales de los argumentos devueltos por lsqnonlin. Esta sección proporciona la función de los detalles específicos para exitflag, lambda, y de salida: Exitflag Sirve para identificar la razón porque ha terminado el algoritmo. La siguiente es una lista de los valores de exitflag y los correspondientes motivos, el algoritmo finalizados: 1 Función convergido a una solución x. 2 Cambio en la x era inferior a la tolerancia especificada. 3 Cambio en el residual era menos de la tolerancia especificada. 4 Magnitud de la búsqueda dirección fue menor que la tolerancia especificada. 0 Número de iteraciones superado options.MaxIter o el número de evaluaciones de la función superado options.FunEvals. -1 Algoritmo fue rescindido por la salida de la función. -2 Problema es: los límites lb y ub son incompatibles. -4 Línea de búsqueda no puede disminuir suficientemente el residual de búsqueda a lo largo de la actual dirección. Lambda Estructura que contiene los multiplicadores de Lagrange en la solución x (separados por tipo de limitación).Los campos son Output lower Lower lb límite bajo upper Upper ub límite alto Estructura que contiene información acerca de la optimización.Los campos de la estructura son PROYECTO FINAL DE CARRERA página 61 de 98 PFC: OPTIMIZACIÓN Y EXTRACCIÓN DE PARAMETROS ÓPTICOS DE ESTRUCTURAS MULTICAPA firstorderopt Medida de primer orden de optimalidad (en gran escala algoritmo, [] para otros) iterations Número de iteraciones adoptadas funcCount El número de función de las evaluaciones cgiterations Número total de iteraciones PCG (algoritmo de gran escala, para los demás [])) Stepsize Final desplazamiento en x (mediana escala algoritmo solamente) Algorithm Algoritmo de optimización utilizado Message Salir mensaje Nota La suma de los cuadrados no debe ser formado explícitamente. En cambio, su función debe devolver un vector de la función de los valores. 4.2.1.5. Opciones. Optimization options. Puede configurar o cambiar los valores de estas opciones utilizando la función optimset. Algunas opciones se aplican a todos los algoritmos, algunos son sólo relevantes cuando se utiliza el algoritmo de gran escala, y otros son sólo relevantes cuando se utiliza el algoritmo de mediana escala. La opción LargeScale especifica una preferencia por que el algoritmo a utilizar. Es sólo una preferencia, porque deben cumplirse algunas condiciones para el uso en gran escala o mediana escala algoritmo. Para el algoritmo de gran escala, el sistema de ecuaciones no lineales no se puede indeterminar, es decir, el número de ecuaciones (el número de elementos de F devuelto por función) debe ser de al menos tanto como la longitud de x. Además, sólo la gran escala algoritmo maneja obligado limitaciones: LargeScale Uso de gran escala, es posible cuando el algoritmo establecido para 'activar'. Uso de mediana escala algoritmo cuando esta en 'off'. El algoritmo de gran escala es un algoritmo más moderno que el algoritmo de mediana escala. 4.2.1.4.1. Algoritmos de mediana i larga escala. Estas opciones son utilizadas por ambas: PROYECTO FINAL DE CARRERA página 62 de 98 PFC: OPTIMIZACIÓN Y EXTRACCIÓN DE PARAMETROS ÓPTICOS DE ESTRUCTURAS MULTICAPA Entorno MATLAB DerivativeCheck Comparar el usuario suministra derivados (Jacobiano) finitodiferenciando a los derivados. Diagnostics Mostrar información de diagnóstico acerca de la función que se reducen al mínimo. DiffMaxChange Máximo cambio en las variables de diferenciando finito. DiffMinChange Mínimo cambio en las variables de diferenciando finito. Display Nivel de la pantalla. "Off" muestra ninguna salida; 'iter' muestra la producción en cada iteración; 'final' (por defecto) muestra sólo el producto final. Jacobina Si 'on’, lsqnonlin utiliza un Jacobiano definidas por el usuario (definido en la fun o Jacobiano información (cuando se usa JacobMult), de la función objetivo. Si "off", se aproxima a la lsqnonlin Jacobiano usando diferencias finitas. MaxFunEvals El número máximo de la función evaluaciones permitido. MaxIter Número máximo de iteraciones permitido. OutputFcn Especifique una o más funciones definidas por el usuario que una llamada a función de optimización en cada iteración. Vease la función de salida. PlotFcns Plotea diversas medidas de progreso mientras se ejecuta el algoritmo, seleccione una de las parcelas predefinidos o crear uno propio. lots the step size; @optimplotfirstorderopt plots the first-order of optimality. Especificar @ optimplotx parcelas de la actual punto; @ optimplotfunccount parcelas de la función de contar; @ optimplotfval parcelas el valor de la función; @ optimplotresnorm parcelas en la norma de los residuos; @ optimplotstepsize dimensiones de los pasos de las parcelas; @ optimplotfirstorderopt las parcelas de primer orden de optimalidad. TolFun Rescisión tolerancia en el valor de la función. TolX Tolerancia. x TypicalX Típico x valores. 4.2.1.4.1.1. Solo algoritmo de larga escala. Estas opciones sólo se utilizan por la gran escala algoritmo: JacobMult PROYECTO FINAL DE CARRERA Función para manejar Jacobiano multiplicar función. Para gran escala estructurada problemas, esta función calcula la matriz producto Jacobiano J * Y, J '* Y, J o' * (J * Y), pero sin que formen J. La página 63 de 98 PFC: OPTIMIZACIÓN Y EXTRACCIÓN DE PARAMETROS ÓPTICOS DE ESTRUCTURAS MULTICAPA Entorno MATLAB función es de la forma W = jmfun(Jinfo,Y,flag,p1,p2,...) W = jmfun (Jinfo, Y, bandera, p1, p2 ,...) Donde Jinfo y los parámetros adicionales p1, p2, ... contener las matrices utilizadas para calcular J * Y (o J '* Y, J o' * (J * Y)). El primer argumento Jinfo debe ser el mismo que el segundo argumento devuelto por la función objetivo la diversión, por ejemplo, [F,Jinfo] = fun(x) [F, Jinfo] = fun (x) Y es una matriz que tiene el mismo número de filas, ya que hay dimensiones en el problema. También determina que para calcular el producto: Si flag== 0 entonces W = J '* (J * Y). Si flag> 0 entonces W = J * Sí. Si flag <0 entonces W = J '* Sí. En cada caso, no está formado J explícitamente. Lsqnonlin usos Jinfo para calcular la preconditioner. Los parámetros opcionales p1, p2, ... puede ser cualquier parámetros adicionales necesarios por jmfun. Nota 'Jacobiano' debe estar configurado para 'activar' para Jinfo que se pasó de fun a jmfun. JacobPattern Patrón de la Jacobiano para diferenciado finito. Si no es conveniente para calcular la matriz Jacobiano J, en la fun, lsqnonlin puede aproximar a través de J escasa diferencias finitas, a condición de la estructura de J, es decir, lugares de la nonzeros, se presenta en el valor de JacobPattern. En el peor de los casos, si la estructura es desconocida, se puede establecer que JacobPattern es una densa matriz y una plena aproximación por diferencias finitas, se calcula en cada iteración (esto es el valor por defecto si no se establece JacobPattern).Esto puede ser muy costoso para los grandes problemas, por lo que está vale la pena el esfuerzo para determinar la estructura de la escasez. MaxPCGIter El número máximo de PCG (gradiente precondicionado conjugado) iteraciones. PrecondBandWidth El valor por defecto es PrecondBandWidth 'Inf », que significa una directa factorización (Cholesky) se utiliza en lugar de los gradientes conjugados (CG). La factorización directa es computacionalmente más dificil que el CG, pero produce una mejor calidad paso hacia la solución. Set PrecondBandWidth to 0 para precondicionamiento diagonal (ancho de banda de 0).Para algunos problemas, un ancho de banda intermedia reduce el número de iteraciones PCG. TolPCG PROYECTO FINAL DE CARRERA Rescisión tolerancia en el PCG iteración. página 64 de 98 PFC: OPTIMIZACIÓN Y EXTRACCIÓN DE PARAMETROS ÓPTICOS DE ESTRUCTURAS MULTICAPA Entorno MATLAB 4.2.1.4.1.2 Solo para algoritmo de mediana escala. Estas opciones sólo se utilizan por el algoritmo de mediana escala: LevenbergMarquardt Elija Levenberg-Marquardt más de algoritmo de Gauss-Newton. LineSearchType Línea algoritmo de búsqueda elección. 4.2.1.4.2. Ejemplos. Buscar x que minimiza Comenzando en el punto x = [0,3, 0,4]. Porque lsqnonlin asume que la cantidad de plazas no está explícitamente formada en la función definida por el usuario, la función pasa a lsqnonlin debe calcular el vector-valorada función Para k = 1 a 10 (es decir, M debería haber k componentes). En primer lugar, escribir un M-archivo para calcular el componente de vectores k-F. function F = myfun(x) k = 1:10; F = 2 + 2*k-exp(k*x(1))-exp(k*x(2)); Myfun función F = (x) k = 1:10; F = 2 + 2 * k-exp (k * x (1))-exp (k * x (2)); A continuación, invocar una rutina de optimización. x0 = [0,3 0,4]% A partir fun [x, resnorm] = lsqnonlin (@ myfun, x0)% optimizador Después de cerca de 24 evaluaciones de la función, este ejemplo le da la solución X = 0,2578 0,2578% resnorm residual o suma de los cuadrados resnorm = 124,3622 PROYECTO FINAL DE CARRERA página 65 de 98 PFC: OPTIMIZACIÓN Y EXTRACCIÓN DE PARAMETROS ÓPTICOS DE ESTRUCTURAS MULTICAPA Entorno MATLAB 4.2.1.4.2.1 Optimización de gran escala. Por defecto lsqnonlin elige el algoritmo de gran escala. Este algoritmo es un subespacio confianza de la región y el método se basa en el método Newton reflexivo interior que se describe en 1 y 2 Cada iteración implica la solución aproximada de un gran sistema lineal mediante el método de gradientes precondicionada conjugada (PCG). 4.2.1.4.2.2 Optimización mediana escala. Si establece la opción de LargeScale 'off' con optimset, lsqnonlin utiliza el método de Levenberg-Marquardt con la línea de búsqueda [4], [5] y [6]. Si lo prefiere, puede seleccionar un método de Gauss-Newton [6] con la línea de búsqueda mediante el establecimiento de la LevenbergMarquardt opción de 'off' (y LargeScale a "off") con optimset. El método de Gauss-Newton es generalmente más rápido en el residual pequeño. 4.2.1.4.3 Limitaciones. Las funciones que se reduzcan al mínimo deben ser continuas. Lsqnonlin sólo puede dar soluciones locales. Lsqnonlin sólo se ocupa de las variables reales. Cuando x tiene variables complejas, las variables deben ser divididas en partes real e imaginaria. 4.2.1.4.3.1. Optimización a gran escala. El método a gran escala para lsqnonlin no resuelve indeterminados sistemas, requiere que el número de ecuaciones (es decir, el número de elementos de F) ser al menos tan grande como el número de variables. En el caso indeterminado, el algoritmo de mediana escala se utiliza en su lugar. (Si existen limitaciones vinculadas, se emite una advertencia y se resuelve el problema con los límites ignorados.) Véase problema grande de cobertura y requisitos para obtener más información sobre qué problema formulaciones están cubiertos y el tipo de información que debe proporcionarse. El precondicionadores utilizados en el gradiente conjugado previamente parte de la gran escala de las formas método J T J (donde J es la matriz Jacobiano) precondicionó antes de la computación, por lo que una fila de J con muchas nonzeros, lo que resulta en una densa cerca de producto J T J, puede conducir a un costoso proceso de solución para los grandes problemas. Si los componentes de x no tienen superior (o inferior) límites, entonces lsqnonlin prefiere que los correspondientes componentes de la ub (o lb) a establecer que inf (o-inf para límites inferiores), frente a una arbitrariedad muy grande, pero positivo (o negativo Para los límites inferiores) 4.2.1.4.3.2. Optimización de mediana escala. PROYECTO FINAL DE CARRERA página 66 de 98 PFC: OPTIMIZACIÓN Y EXTRACCIÓN DE PARAMETROS ÓPTICOS DE ESTRUCTURAS MULTICAPA Entorno MATLAB El algoritmo de mediana escala no maneja obligado limitaciones. Debido a la gran escala algoritmo no maneja indeterminados sistemas y el algoritmo de mediana escala no maneja obligados los obstáculos, los problemas con estas dos características no pueden ser resueltos por lsqnonlin. PROYECTO FINAL DE CARRERA página 67 de 98 PFC: OPTIMIZACIÓN Y EXTRACCIÓN DE PARAMETROS ÓPTICOS DE ESTRUCTURAS MULTICAPA Medidas experimentales 5. Medidas experimentales. En la segunda planta en el laboratorio 234 he estado trabajando en la adquisición de muestras para la comprobación del comportamiento óptico de diversos materiales. Entre ellos he realizado pruebas de transmitancia i reflectancia a materiales tales como la Alumina i el oro. Siempre en finas capas. Para medida de frecuencias comprendidas entre 450nm i 1100nm hemos utilizado el espectrofotómetro siguiente: Monocromador Lámpara de tungsteno Cámara de medidas ópticas Figura 5.1. Los materiales experimentales son los siguientes: Alumina: Muestra 1 Figura 5.2. capa de alumina densa PROYECTO FINAL DE CARRERA página 68 de 98 PFC: OPTIMIZACIÓN Y EXTRACCIÓN DE PARAMETROS ÓPTICOS DE ESTRUCTURAS MULTICAPA Medidas experimentales Muestra 3 Figura 5.3. capa de alumina poco densa Muestra 4 Figura 5.4. muestra de alumina con capa de aluminio pegada Estas muestras han sido elegidas de entre varias muestras mas por considerarse lo suficiente significativas. Figura 5.5. placa de petri con muestras de Alumina También se ha experimentado con otros materiales como el oro: PROYECTO FINAL DE CARRERA página 69 de 98 PFC: OPTIMIZACIÓN Y EXTRACCIÓN DE PARAMETROS ÓPTICOS DE ESTRUCTURAS MULTICAPA Medidas experimentales Figura 5.6. placas de petri con diversas placas de oro de diversa densidad 5.1. Espectrofotómetro de Infrarrojo por transformada de Fourier VERTEX 70. El Vertex 70 es un espectrofotómetro FT-IR totalmente digital usado para mediciones mediante funciones automáticas que permiten reconocer parámetros químicos de manera rápida. Sus componentes ópticos tales como la fuente, el detector y el separador de haz de luz, están controlados electrónicamente de modo que el firmware del espectrofotómetro puede reconocerlos. Esta información se pasa al software de la aplicación que a su tiempo carga los parámetros experimentales apropiados automáticamente. El chequeo permanente online de los componentes del espectrofotómetro facilita información continuada por defecto. Figura 5.7. La adquisición de datos se basa en un convertidor A/D de 24 bits de rango dinámico. El convertidor A/D esta integrado en su detector electrónico de preamplificación. La tecnología DigiTec asegura una transmisión de señal libre de interferencias y garantiza el mayor proporción signal-to-noise ratio. PROYECTO FINAL DE CARRERA página 70 de 98 PFC: OPTIMIZACIÓN Y EXTRACCIÓN DE PARAMETROS ÓPTICOS DE ESTRUCTURAS MULTICAPA Medidas experimentales El Vertex 70 se controla por un equipo en el que su sistema operativo es Microsft Windows y tiene instalado el software espectroscópico OPUS. La conexión Ethernet permite la posibilidad de controlar el espectrofotómetro vía Internet La configuración estándar del espectrofotómetro esta pensada para la adquisición de datos en la región media del IR. Opcionalmente, el Vertex 70 puede ser equipado con óptica adicional para cubrir todo el rango espectral desde el infrarrojo lejano a 30 cm-1 hasta el canal visible a 25000 cm-1. El rango espectral puede ser cambiado fácilmente gracias a los componentes ópticos prealineados y al espectrofotómetro alineado permanentemente. 5.1.1. Características VERTEX 70. El es un espectrofotómetro versátil para aplicaciones exigentes en laboratorios analíticos y de investigación. Su rango estándar es de 7.800cm-1 a 370cm-1 con posibilidad de expansión a IR lejano y cercano de 25.000cm-1 a 30cm-1. Su resolución es de 0,5cm-1 con opción para 0,2cm-1 . Con 8 velocidades de barrido del espejo móvil seleccionadas mediante OPUS. Su opción "Rapid-scan" permite realizar hasta 40 espectros por segundo a 8cm-1 de resolución. Posee la opción de "Step scan" para experimentos de modulación de fase y resolución temporal. El equipo incluye una conexión ethernet con el PC de control del laboratorio. Admite hasta dos detectores MCT en el compartimiento de detectores y dispone de compartimentos internos para fuentes y divisores de haz. Figura 5.8. Vertex 70 Para la experimentación en un rango mas alto de frecuencias tenemos que irnos a un espectrofotómetro que sea capaz de realizar esas muestras en las frecuencias comprendidas entre 1000nm i los 4000nm. lse ha procedido a la realización de las medidas PROYECTO FINAL DE CARRERA página 71 de 98 PFC: OPTIMIZACIÓN Y EXTRACCIÓN DE PARAMETROS ÓPTICOS DE ESTRUCTURAS MULTICAPA Medidas experimentales experimentales utilizando el correspondiente software OPUS for QA/QC y el espectrofotómetro vertex 70 de Bruker. Figura 5.9. espectrofotómetro VERTEX Ambos aparatos van acompañados de un software específico para la captura de los experimentos realizados. Mediante el puerto serie RS-232 se realiza la captura de datos desde los dos espectrofotómetros. Una vez capturadas las muestras experimentales con los comportamientos de los materiales se realiza una manipulación de los datos para obtener los valores en relación a las magnitudes buscadas i no en relación a la intensidad de luz. Primero de nada es imprescindible realizar una muestra en vacío para que nos sirva de patrón a posteriori. Así el error incorporado por el medidor será siempre proporcional y podremos eliminarlo para la obtención del resultado buscado, es lo nombramos línea de base. Figura 5.10 espectrofotómetro preparado para transmisión PROYECTO FINAL DE CARRERA página 72 de 98 PFC: OPTIMIZACIÓN Y EXTRACCIÓN DE PARAMETROS ÓPTICOS DE ESTRUCTURAS MULTICAPA Medidas experimentales En función del comportamiento del cristal que queramos encontrar necesitaremos configurar también los elementos de colocación de los cristales dentro de la cámara. Es decir, que necesitaremos parar el muestreo y colocar el mecanismo interno necesario para poder medir por ejemplo reflectancia en vez de transmitancia. En la figura de arriba podemos ver el aparato preparado para la medición de transmitancia. También es importante pensar en el lugar mas adecuado para la colocación de la pieza a medir ya que no obtendremos los mismos resultados si la colocamos en la parte de detrás del mecanismo que si la ponemos delante. A continuación muestro el comportamiento de diversos materiales muestreados con el espectrofotómetro VERTEX y el software de aplicación OPUS. 5.1.2. Puesta a punto del sistema de medida con el espectrofotómetro IR del DEEEA. 5.1.2.1. Información Espectral. El diseño de la mayoría de interferómetros que se usan para la espectrometría IR están basados en el interferómetro original de dos rayos de luz originalmente diseñado por Michelson en 1891. Muchos otros interferómetros de dos rayos de luz han sido diseñados subsecuencialmente desde entonces y muy seguramente estos hayan sido dotados de mayor funcionalidad y aplicabilidad que el interferómetro original de Michelson. La forma mas simple del interferómetro de Michelson se muestra en la siguiente figura. Figura 5.11 Interferómetro de Michelson Consta de dos espejos perpendiculares. El espejo móvil se puede mover sobre el eje paralelo al plano del espejo fijo. El espejo móvil se mueve a una velocidad constante o se posiciona en diversos puntos sobre su eje durante periodos cortos de tiempo pasando de unos a otros a gran velocidad. Entre el espejo fijo y el móvil se encuentra el separador de luz, donde un haz de luz IR procedente de una fuente externa se refleja parcialmente hacia el espejo fijo (F). El resto de la luz se transmite parcialmente al espejo móvil (M). Cuando los haces de luz retornan al separador de luz, estos interfieren y son reflejados y transmitidos parcialmente. A causa del efecto de la interferencia, la intensidad del haz de luz que llega al detector y la intensidad del haz de luz que se devuelve a la fuente depende de la distancia que recorren los haces en los dos brazos del interferómetro. La variación entre la intensidad del haz de PROYECTO FINAL DE CARRERA página 73 de 98 PFC: OPTIMIZACIÓN Y EXTRACCIÓN DE PARAMETROS ÓPTICOS DE ESTRUCTURAS MULTICAPA Medidas experimentales luz que llega al detector y la intensidad del haz de luz que retorna a la fuente como función de la distancia recorrida produce la información espectral. La información espectral se ve concretada en los espectros. Un espectro es el conjunto de ondas o más concretamente, la radiación lumínica que transmite la sustancia analizada. Dicha radiación puede ser usada para identificar la sustancia analizada. Los espectros se pueden observar mediante espectroscopios basados en el interferómetro original de Michelson que, además de permitirnos observar el espectro, permite realizar medidas sobre éste, como la longitud de onda o la frecuencia de la radiación. Desde la creación del primer interferómetro, a principios del siglo XX, se ha producido un desarrollo tecnológico rápido y considerable. Los espectrofotómetros de primera generación eran todos dispersivos. Inicialmente, los elementos dispersivos eran prismas, y posteriormente se cambiaron por rejillas. A mitad de los años 60, la espectroscopia IR fue testigo de un mejoría puesto a que se empezó a utilizar la espectroscopia IR por transformada de Fourier (FT-IR). Esos fueron los espectrofotómetros de segunda generación. En su interior estaban provistos de un interferómetro de Michelson. Estaban dotados de grandes ventajas respecto a los espectrofotómetros dispersivos. Ventajas del FT-IR sobre los Dispersivos: - Mayor velocidad y sensibilidad. Un espectro completo se puede obtener mediante un solo barrido, ya que el detector observa todas las frecuencias de manera simultanea. - Láser interno de referencia. La utilización de un láser de helio-neon como referencia interna proporciona una calibración automática con exactitud superior a 0.01 cm-1.Esto evita la necesidad de utilizar una calibración externa. - Sistema de diseño sencillo, con pocas partes en movimiento que minimizan el desgaste. - Elimina la mayor parte de las interferencias obteniéndose unos espectros mucho más limpios. - Poseen sistemas informáticos con librerías y con procesamiento de datos rápido y eficaz. Hoy en día, todos los espectroscopios que realizan espectroscopia en el infrarrojo cercano lo hacen por transformada de Fourier. Su uso esta destinado a campos como la química analítica, la ciencia de la vida, procesos y muchos otros campos más. 5.2. Software OPUS 5.0 for QA/QC. El software OPUS ofrece un sistema extenso de rutinas útiles para proceso espectrales tales como calculadora de espectro, rutina de conversión de la absorbencia a transmitancia, rutina de corrección automática de la línea de fondo, rutina de búsqueda de máximos y mínimos y el muchísimos más. Todas las funciones pueden ser usadas para espectros múltiples y se pueden manipular al mismo tiempo. El rastreo y el manejo de los datos espectrales obtenidos en el laboratorio del DEEEA es muy sencillo y útil y este software posee una variedad de funciones interactivas que hacen del OPUS la herramienta ideal a parte de ser extremadamente fácil de utilizar. Las funciones básicas de manipulación y de evaluación de los espectros, tales como selección de máximos y de mínimos, corrección de la línea de fondo, integración y substracción espectral para el trabajo cuantitativo de zonas de los espectros, son herramientas que se han usado a la hora de extraer la características de los espectros obtenidos. El OPUS ha proporcionado las rutinas de proceso que han resuelto las demandas en el laboratorio. En la siguiente captura se puede ver el comportamiento de la Alumina y de una capa de vidrio a la transmisión para longitudes de onda de entre 1000nm y 4000nm. PROYECTO FINAL DE CARRERA página 74 de 98 PFC: OPTIMIZACIÓN Y EXTRACCIÓN DE PARAMETROS ÓPTICOS DE ESTRUCTURAS MULTICAPA Medidas experimentales Figura 5.12 Pantalla del software aplicativo OPUS adquiriendo de muestras PROYECTO FINAL DE CARRERA página 75 de 98 PFC: OPTIMIZACIÓN Y EXTRACCIÓN DE PARAMETROS ÓPTICOS DE ESTRUCTURAS MULTICAPA Programa principal 6. Programa principal. 6.1 Menu principal. Figura 6.1 El menu principal tiene dos partes muy marcas. En gris oscuro tenemos todo el panel de control y en gris claro tenemos las visualizaciones de las muestras obtenidas. A continuación vamos a comentar mas detenidamente el panel de control del programa. Angulo de incidencia Figura 6.2 Nuestros cristales son muestreados a diferentes ángulos para detectar que comportamiento óptico tienen los diversos materiales con los que trabajamos. Las muestras obtenidas son a 12º y obtenemos la respuesta a la reflexión óptica Numero de bicapas Figura 6.3 Podemos determinar el numero de bicapas de las que consta el experimento. PROYECTO FINAL DE CARRERA página 76 de 98 PFC: OPTIMIZACIÓN Y EXTRACCIÓN DE PARAMETROS ÓPTICOS DE ESTRUCTURAS MULTICAPA Programa principal Figura 6.4 En la figura anterior podemos ver el aspecto que tendrá el programa si ponemos un experimento que consta de 3 bicapas. Estas salen de manera emergente en el menu principal. Datos a grafiar Figura 6.5 Figura 6.6 PROYECTO FINAL DE CARRERA página 77 de 98 PFC: OPTIMIZACIÓN Y EXTRACCIÓN DE PARAMETROS ÓPTICOS DE ESTRUCTURAS MULTICAPA Programa principal En la figura anterior podemos ver que a partir de este menu desplegable podemos elegir el tipo de dato a trabajar. Es decir, si trabajaremos con resultados de reflexión, transmitancia o absorbancia. También podemos combinarlos entre ellos como se puede apreciar en el menú emergente. Figura 6.7 Este cuadro del menu principal nos permite fijar los índices de reflexión del substrato y del medio donde realizamos el experimento. Rango de longitud de onda Figura 6.8 En cada experimento estamos trabajando entre varias longitudes de onda para ver el comportamiento de los cristales a estas longitudes. También en el cuadro menú fijamos cada cuanto se realizará la medida del comportamiento de los cristales. parámetros de optimización del índice de refracción. Figura 6.9 A partir de la elección de una de estas dos opciones el programa podrá pasar al ajuste del índice de refracción a partir de un sistema de mínimos cuadrados para la obtención de la aproximación al índice de refracción mas optimo a partir del experimento capturado. Para ello lo hacemos con los parámetros de dispersión de Sellmeier o de Cauchy Figura 6.10 Este cuadro nos sirve para fijar los parámetros tanto de Cauchy como de Sellmeier. Son los datos de inicio del cálculo de optimización del programa. Estos parámetros hacen referencia a las dos siguientes expresiones matemáticas: Cauchy: Sellmeier: Tratamiento de datos PROYECTO FINAL DE CARRERA página 78 de 98 PFC: OPTIMIZACIÓN Y EXTRACCIÓN DE PARAMETROS ÓPTICOS DE ESTRUCTURAS MULTICAPA Programa principal Figura 6.11 En el menu también tenemos la posibilidad sumar dos respuestas, guardar los datos obtenidos en formato txt y ponerle un encabezamiento al fichero. Para la optimización de resultados es necesario tener activada la opción siguiente load dates. Figura 6.12 Por ultimo en el panel de control de nuestro menú principal tenemos la posibilidad de filtrar los datos que entramos para que en la optimización el proceso vaya mas rápido y también tenemos que indicar de cuantas capas consta el experimento realizado. Hemos trabajado básicamente con capas simples pero también en alguna ocasión se realizaron optimizaciones en doble capa. Para hacer funcionar el programa en optimización tenemos que dejar pulsados las opciones de Cauchy o Sellmeier valors i el load dates. Es aconsejable poner valores a los parámetros de Cauchy o Sellmeier que estén cerca de los valores deseados así la optimización será exitosa. En la parte derecha del programa tenemos las gráficas resultantes de los datos obtenidos: Error, TM, TE y n(). 6.2 Funcionamiento del programa. El programa funciona de la siguiente manera modular: Figura 6.13 PROYECTO FINAL DE CARRERA página 79 de 98 PFC: OPTIMIZACIÓN Y EXTRACCIÓN DE PARAMETROS ÓPTICOS DE ESTRUCTURAS MULTICAPA Programa principal En la figura anterior tenemos de forma modular el funcionamiento del programa. Primero le introducimos los parámetros de entrada. También tenemos que leer el fichero de datos experimental para el posterior tratamiento de datos. Una vez tenemos estos datos leídos y almacenados en la variable matriun21. De esta variable tipo matriz sacamos los datos de la primera columna para el cálculo nos da los datos de la longitud de onda capturada de los datos experimentales y la segunda columna es la reflectividad. Con la primera columna calcularemos y guardaremos los datos tanto en la función Sellmeier como en la función Cauchy. Calculamos en la columna 2 de la variable matriz matriun21teorica el índice de dispersión de Cauchy o de Sellmeier según se haya fijado en el menú principal. Con esta variable i la anterior trabajaremos en la función calculartransmisión-i-reflexión. En la función calcular transmisión y reflexión se le introducen los parámetros de entrada necesarios para le calculo y nos devuelve calculados la reflectividad i la transmitancia. Una vez calculadas estas variables se llevan los valores a la optimización mediante un bucle se calculan los valores óptimos de las variables A B C I D y del espesor del material. Se vuelve a calcular Cauchy o Sellmeier y se vuelve a calcular la transmitancia y la reflectancia. Así lo ira haciendo hasta que lleguemos a la tolerancia error ajustada en la función de ajuste optimo por mínimos cuadrados para funciones no lineales utilizado. Esta función es el lsqnonlin. A esta función le tenemos que pasar un función a optimizar en este caso serán las funciones Sellmeier, Cauchy y el desfase provocado por el grosor de la capa que nos permite tener esta formula relacionada la variable grosor de capa. De esta manera se vuelve a calcular por mínimos cuadrados hasta que se obtienen los valores óptimos de las variables buscadas. Durante la elaboración del proyecto hemos ido contemplando como el ajuste de las variables se acercaba bastante a los valores predefinidos por diseño por lo tanto estamos delante de un sistema de optimización fiable para márgenes de funcionamiento conocidos. Por ultimo sobre el menú principal se hace un volcado de los datos calculados a partir de cuatro graficas que nos permiten ver la reflectancia, el índice de refracción n(lambda) y el error obtenido a lo largo de las medidas. PROYECTO FINAL DE CARRERA página 80 de 98 PFC: OPTIMIZACIÓN Y EXTRACCIÓN DE PARAMETROS ÓPTICOS DE ESTRUCTURAS MULTICAPA Resultados obtenidos 7 Resultados obtenidos. 7.1 Pruebas con una sola lámina de cristal. Cauchy Muestra 9a: n=1.99 d=1.30 um Ajuste a 4 variables, optimizando también el espesor de la capa. PROYECTO FINAL DE CARRERA página 81 de 98 PFC: OPTIMIZACIÓN Y EXTRACCIÓN DE PARAMETROS ÓPTICOS DE ESTRUCTURAS MULTICAPA Resultados obtenidos Sellmeier Muestra 9a: n=1.99 d=1.30 um Ajuste a 4 variables, optimizando también el espesor de la capa. PROYECTO FINAL DE CARRERA página 82 de 98 PFC: OPTIMIZACIÓN Y EXTRACCIÓN DE PARAMETROS ÓPTICOS DE ESTRUCTURAS MULTICAPA Resultados obtenidos Cauchy Muestra 9b: n=1.99 d=0.92 um Ajuste a 4 variables, optimizando también el espesor de la capa PROYECTO FINAL DE CARRERA página 83 de 98 PFC: OPTIMIZACIÓN Y EXTRACCIÓN DE PARAMETROS ÓPTICOS DE ESTRUCTURAS MULTICAPA Resultados obtenidos Sellmeier Muestra 9b: n=1.99 d=0.92 um Ajuste a 4 variables, optimizando también el espesor de la capa PROYECTO FINAL DE CARRERA página 84 de 98 PFC: OPTIMIZACIÓN Y EXTRACCIÓN DE PARAMETROS ÓPTICOS DE ESTRUCTURAS MULTICAPA Resultados obtenidos Cauchy Muestra 9c: n=1.99 d=1.72 um Ajuste a 4 variables, optimizando también el espesor de la capa PROYECTO FINAL DE CARRERA página 85 de 98 PFC: OPTIMIZACIÓN Y EXTRACCIÓN DE PARAMETROS ÓPTICOS DE ESTRUCTURAS MULTICAPA Resultados obtenidos Sellmeier Muestra 9c: n=1.99 d=1.72 um Ajuste a 4 variables, optimizando también el espesor de la capa PROYECTO FINAL DE CARRERA página 86 de 98 PFC: OPTIMIZACIÓN Y EXTRACCIÓN DE PARAMETROS ÓPTICOS DE ESTRUCTURAS MULTICAPA Resultados obtenidos Cauchy Muestra 10c: n=2.09 d=1.36 um Ajuste a 4 variables, optimizando también el espesor de la capa PROYECTO FINAL DE CARRERA página 87 de 98 PFC: OPTIMIZACIÓN Y EXTRACCIÓN DE PARAMETROS ÓPTICOS DE ESTRUCTURAS MULTICAPA Resultados obtenidos Sellmeier Muestra 10c: n=2.09 d=1.36 um Ajuste a 4 variables, optimizando también el espesor de la capa PROYECTO FINAL DE CARRERA página 88 de 98 PFC: OPTIMIZACIÓN Y EXTRACCIÓN DE PARAMETROS ÓPTICOS DE ESTRUCTURAS MULTICAPA Resultados obtenidos Cauchy Muestra 10a: naprox=1.91 grueso=2.44 um Ajuste a 4 variables, optimizando también el espesor de la capa PROYECTO FINAL DE CARRERA página 89 de 98 PFC: OPTIMIZACIÓN Y EXTRACCIÓN DE PARAMETROS ÓPTICOS DE ESTRUCTURAS MULTICAPA Resultados obtenidos Sellmeier Muestra 10a: naprox=1.91 grueso=2.44 um Ajuste a 4 variables, optimizando también el espesor de la capa PROYECTO FINAL DE CARRERA página 90 de 98 PFC: OPTIMIZACIÓN Y EXTRACCIÓN DE PARAMETROS ÓPTICOS DE ESTRUCTURAS MULTICAPA Resultados obtenidos Cauchy 10b naprox=1.72 grueso=3.28 um Ajuste a 4 variables, optimizando también el espesor de la capa PROYECTO FINAL DE CARRERA página 91 de 98 PFC: OPTIMIZACIÓN Y EXTRACCIÓN DE PARAMETROS ÓPTICOS DE ESTRUCTURAS MULTICAPA Resultados obtenidos Sellmeier 10b naprox=1.72 grueso=3.28 um Ajuste a 4 variables, optimizando también el espesor de la capa PROYECTO FINAL DE CARRERA página 92 de 98 PFC: OPTIMIZACIÓN Y EXTRACCIÓN DE PARAMETROS ÓPTICOS DE ESTRUCTURAS MULTICAPA Resultados obtenidos Cauchy 11a naprox=1.47 grueso=3.5-3.7 um (valor de n aproximado) Ns=3,6 Ajuste a 4 variables, optimizando también el espesor de la capa PROYECTO FINAL DE CARRERA página 93 de 98 PFC: OPTIMIZACIÓN Y EXTRACCIÓN DE PARAMETROS ÓPTICOS DE ESTRUCTURAS MULTICAPA Resultados obtenidos Sellmeier 11a naprox=1.47 grueso=3.5-3.7 um (valor de n aproximado) Ns=3,6 Ajuste a 4 variables, optimizando también el espesor de la capa PROYECTO FINAL DE CARRERA página 94 de 98 PFC: OPTIMIZACIÓN Y EXTRACCIÓN DE PARAMETROS ÓPTICOS DE ESTRUCTURAS MULTICAPA Resultados obtenidos Cauchy 12d naprox=1.47 espesor de capa=2.28um (valor de n aproximado) Sellmeier 12d naprox=1.47 espesor de capa=2.28um (valor de n aproximado) PROYECTO FINAL DE CARRERA página 95 de 98 PFC: OPTIMIZACIÓN Y EXTRACCIÓN DE PARAMETROS ÓPTICOS DE ESTRUCTURAS MULTICAPA Resultados obtenidos 7.2 Optimizacion de doble capa. 11b cauchy N1=1.82 D1=620nm N2=1.49 D2= 1290nm Sellmeier N1=1.82 D1=620nm N2=1.49 D2= 1290nm PROYECTO FINAL DE CARRERA página 96 de 98 PFC: OPTIMIZACIÓN Y EXTRACCIÓN DE PARAMETROS ÓPTICOS DE ESTRUCTURAS MULTICAPA Resultados obtenidos Cauchy: 11c N2=1.82 D2=620nm N1=1.49 D1= 1290nm Sellmeier 11c N2=1.82 D2=620nm N1=1.49 D1= 1290nm PROYECTO FINAL DE CARRERA página 97 de 98 PFC: OPTIMIZACIÓN Y EXTRACCIÓN DE PARAMETROS ÓPTICOS DE ESTRUCTURAS MULTICAPA Referencias bibliográficas 8. Referencias bibliográficas. 1. J. D. Jackson, Classical Electrodynamics. 2. M. Brédov, V. Rumiántsev y I. Toptiguin, Electrodinámica clásica (Mir, Moscú, 1986). 4. S. Adachi, Optical Properties of Crystalline and Amorphous Semiconductors (Kluwer, Boston, 1999). 5. N. W. Ashcroft and N. D. Mermin, Solid State Physics (Thomson, New York, 1976). 6. M. Born and E. Wolf, Principles of optics (Pergamon Press, Oxford, 1965). 7. R. M. A. Azzam and N. M. Bashara, Ellipsometry and Polarized Light (North-Holland, Amsterdam, 1977). 8. E. Burnstein, en Elementary excitations in solids, editado por A. A. Maradudin y G. F. Nardelli, (New York, Plenum Press, 1969). 10. F. Abeles (ed.), Optical Properties of Solids (North Holland, Amsterdam, 1972). 11. Artículos.visualizados por Internet. 12. Aprenda Matlab 7.0 como si estuviera en primero Javier García de Jalón, José Ignacio Rodríguez, Jesús Vidal. 13.Manual de GUIDE de matlab bajado de la pagina www.lawebdelprogramador.com. PROYECTO FINAL DE CARRERA página 98 de 98 Anexo PFC Codigo del programa Multilayers.m function varargout = Multilayers(varargin) % MULTILAYERS M-file for Multilayers.fig % MULTILAYERS, by itself, creates a new MULTILAYERS or raises the existing % singleton*. % % H = MULTILAYERS returns the handle to a new MULTILAYERS or the handle to % the existing singleton*. % % MULTILAYERS('CALLBACK',hObject,eventData,handles,...) calls the local % function named CALLBACK in MULTILAYERS.M with the given input arguments. % % MULTILAYERS('Property','Value',...) creates a new MULTILAYERS or raises the % existing singleton*. Starting from the left, property value pairs are % applied to the GUI before Multilayers_OpeningFunction gets called. An % unrecognized property name or invalid value makes property application % stop. All inputs are passed to Multilayers_OpeningFcn via varargin. % % *See GUI Options on GUIDE's Tools menu. Choose "GUI allows only one % instance to run (singleton)". % % See also: GUIDE, GUIDATA, GUIHANDLES % Edit the above text to modify the response to help Multilayers % Last Modified by GUIDE v2.5 06-May-2008 22:27:51 %********v2 % Begin initialization code - DO NOT EDIT gui_Singleton = 1; gui_State = struct('gui_Name', mfilename, ... 'gui_Singleton', gui_Singleton, ... 'gui_OpeningFcn', @Multilayers_OpeningFcn, ... 'gui_OutputFcn', @Multilayers_OutputFcn, ... 'gui_LayoutFcn', [] , ... 'gui_Callback', []); if nargin & isstr(varargin{1}) gui_State.gui_Callback = str2func(varargin{1}); end if nargout [varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:}); else gui_mainfcn(gui_State, varargin{:}); end % End initialization code - DO NOT EDIT % --- Executes just before Multilayers is made visible. Pagina: 1 de 72 Anexo PFC function Multilayers_OpeningFcn(hObject, eventdata, handles, varargin) % This function has no output args, see OutputFcn. % hObject handle to figure % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % varargin command line arguments to Multilayers (see VARARGIN) handles.data_n21 = 1; handles.var_n21=0; handles.data_n31 = 1; handles.var_n31=0; handles.data_un21 = 0; handles.var_un21=0; handles.data_bn21 = 0; handles.var_bn21=0; handles.data_cn21 = 0; handles.var_cn21=0; handles.data_n22 = 1; handles.var_n22=0; handles.data_n32 = 1; handles.var_n32=0; handles.data_n23 = 1; handles.var_n23=0; handles.data_n33 = 1; handles.var_n33=0; handles.DataP=1; handles.nestruc=1; handles.n21string handles.n31string handles.n22string handles.n32string handles.n23string handles.n33string = = = = = = 'a'; 'a'; 'a'; 'a'; 'a'; 'a'; set(handles.text123,'Visible','off'); set(handles.text124,'Visible','off'); set(handles.k23_input,'Visible','off'); set(handles.k33_input,'Visible','off'); set(handles.text125,'Visible','off'); set(handles.text126,'Visible','off'); set(handles.n22_input,'Visible','off'); set(handles.n32_input,'Visible','off'); set(handles.k22_input,'Visible','off'); set(handles.k32_input,'Visible','off'); set(handles.h22_input,'Visible','off'); set(handles.h32_input,'Visible','off'); set(handles.n22varpop_input,'Visible','off'); set(handles.n32varpop_input,'Visible','off'); set(handles.N2_input,'Visible','off'); set(handles.text76,'Visible','off'); set(handles.text77,'Visible','off'); set(handles.text78,'Visible','off'); set(handles.text79,'Visible','off'); set(handles.text80,'Visible','off'); set(handles.text81,'Visible','off'); set(handles.text82,'Visible','off'); Pagina: 2 de 72 Anexo PFC set(handles.text83,'Visible','off'); set(handles.frame26,'Visible','off'); set(handles.n23_input,'Visible','off'); set(handles.n33_input,'Visible','off'); set(handles.h23_input,'Visible','off'); set(handles.h33_input,'Visible','off'); set(handles.n23varpop_input,'Visible','off'); set(handles.n33varpop_input,'Visible','off'); set(handles.N3_input,'Visible','off'); set(handles.text84,'Visible','off'); set(handles.text85,'Visible','off'); set(handles.text86,'Visible','off'); set(handles.text87,'Visible','off'); set(handles.text88,'Visible','off'); set(handles.text89,'Visible','off'); set(handles.text108,'Visible','off'); set(handles.text115,'Visible','off'); set(handles.frame21,'Visible','off'); % Choose default command line output for Multilayers handles.output = hObject; % Update handles structure guidata(hObject, handles); % UIWAIT makes Multilayers wait for user response (see UIRESUME) % uiwait(handles.figure1); % --- Outputs from this function are returned to the command line. function varargout = Multilayers_OutputFcn(hObject, eventdata, handles) % varargout cell array for returning output args (see VARARGOUT); % hObject handle to figure % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % Get default command line output from handles structure varargout{1} = handles.output; % --- Executes on button press in Calculate. function Calculate_Callback(hObject, eventdata, handles) % ini variables global n21 global tet2 global matriun21 global Parametres global lnostra global long global lleguir global D1M global var21 global slcauchy global slsellmeier global matriun21teorica global matriun22teorica global matriun31 global matriun22 global var22 global var32 Pagina: 3 de 72 Anexo global global global global global global global global global global global global global global global global global global global global global global global global global global global PFC var23 var31 nestruc; var33; matriun33; rugoso; phi1; DsM; ns; phis; n1; D1E; DsE; RE; un21; bn21; cn21; dn21; un22; bn22; cn22; dn22; polnum; h21 n31 phi2 n1 cla(handles.TEaxes); cla(handles.TMaxes); cla(handles.NLAMaxes); cla(handles.ERRORaxes); matriun31=0; matriun22=0; var22=0; var32=0; var31=0; nestruc=0; var33=0; matriun33=0; rugoso=0; phi1=0; DsM=0; ns=0; phis=0; n1=0; D1E=0; DsE=0; un21 = str2double(get(handles.un21_input,'String')); bn21 = str2double(get(handles.bn21_input,'String')); cn21 = str2double(get(handles.cn21_input,'String')); dn21 = str2double(get(handles.dn21_input,'String')); un22 bn22 cn22 dn22 = = = = str2double(get(handles.un22,'String')); str2double(get(handles.bn22,'String')); str2double(get(handles.cn22,'String')); str2double(get(handles.dn22,'String')); fd = str2double(get(handles.filtrodatos,'String')); polnum = str2double(get(handles.polnum,'String')); slcauchy=get(handles.slcauchy,'Value'); Pagina: 4 de 72 Anexo PFC slsellmeier=get(handles.slsellmeier,'Value'); lleguir=get(handles.loaddates,'Value'); n21Re = str2double(get(handles.n21_input,'String')); k21 = str2double(get(handles.k21_input,'String')); n21=n21Re+i*k21; h21 = str2double(get(handles.h21_input,'String')); h21=h21*1e-9; n31Re = str2double(get(handles.n31_input,'String')); k31 = str2double(get(handles.k31_input,'String')); n31=n31Re+i*k31; h31 = str2double(get(handles.h31_input,'String')); h31=h31*1e-9; N1 = str2double(get(handles.N1_input,'String')); n22Re = str2double(get(handles.n22_input,'String')); k22 = str2double(get(handles.k22_input,'String')); n22=n22Re+i*k22; h22 = str2double(get(handles.h22_input,'String')); h22=h22*1e-9; n32Re = str2double(get(handles.n32_input,'String')); k32 = str2double(get(handles.k32_input,'String')); n32=n32Re+i*k32; h32 = str2double(get(handles.h32_input,'String')); h32=h32*1e-9; N2 = str2double(get(handles.N2_input,'String')); n23Re = str2double(get(handles.n23_input,'String')); k23 = str2double(get(handles.k23_input,'String')); n23=n23Re+i*k23; h23 = str2double(get(handles.h23_input,'String')); h23=h23*1e-9; n33Re = str2double(get(handles.n33_input,'String')); k33 = str2double(get(handles.k33_input,'String')); n33=n33Re+i*k33; h33 = str2double(get(handles.h33_input,'String')); h33=h33*1e-9; N3 = str2double(get(handles.N3_input,'String')); lambdai = str2double(get(handles.lambdai_input,'String')); lambdainicial=lambdai; lambdai=lambdai*1e-9; lambdaf = str2double(get(handles.lambdaf_input,'String')); lambdafinal=lambdaf; lambdaf=lambdaf*1e-9; angle = str2double(get(handles.angle_input,'String')); n1 = str2double(get(handles.nambient_input,'String')); ns = str2double(get(handles.nsubs_input,'String')); step = str2double(get(handles.step_input,'String')); stepini=step; step=step*1e-9; %inicialitzar variables matrius file=[]; pathname=[]; Pagina: 5 de 72 Anexo PFC %Llegir les dades en un fitxer de text if lleguir==1 [col1,col2]=lectura; end %modificacion del programa principal para la realizacion de la grafica %de la n(lambda) en funcion de las variables A B i C. if (slcauchy==1) [matriun21,matriun21teorica,matriun22teorica]=calcularncauchy(fd,col1, col2,un21,bn21,cn21,dn21,un22,bn22,cn22,dn22); axes(handles.NLAMaxes) %figure(7); hold on; plot(matriun21teorica(:,1),matriun21teorica(:,2)); xlabel('\lambda (nm)') set(handles.NLAMaxes,'XMinorTick','on'); set(handles.NLAMaxes,'YMinorTick','on'); set(handles.NLAMaxes,'XLimMode','manual'); set(handles.NLAMaxes,'XLim',[(lambdai/1e-9) (lambdaf/1e-9)]); set(handles.NLAMaxes,'YLimMode','auto'); %set(handles.NLAMaxes,'YLim',[0 0.5]); n21= matriun21teorica(1,2); grid on hold off; axes(handles.NLAMaxes) hold on; plot(matriun22teorica(:,1),matriun22teorica(:,2)); xlabel('\lambda (nm)') set(handles.NLAMaxes,'XMinorTick','on'); set(handles.NLAMaxes,'YMinorTick','on'); set(handles.NLAMaxes,'XLimMode','manual'); set(handles.NLAMaxes,'XLim',[(lambdai/1e-9) (lambdaf/1e-9)]); set(handles.NLAMaxes,'YLimMode','auto'); %set(handles.NLAMaxes,'YLim',[0 0.5]); grid on hold off; end if (slsellmeier==1) [matriun21,matriun21teorica,matriun22teorica]=calcularnsellmeier(fd,co l1,col2,un21,bn21,cn21,dn21,un22,bn22,cn22,dn22); %figure(7); axes(handles.NLAMaxes) hold on; plot(matriun21teorica(:,1),matriun21teorica(:,2)); xlabel('\lambda (nm)') set(handles.NLAMaxes,'XMinorTick','on'); set(handles.NLAMaxes,'YMinorTick','on'); set(handles.NLAMaxes,'XLimMode','manual'); set(handles.NLAMaxes,'XLim',[(lambdai/1e-9) (lambdaf/1e-9)]); set(handles.NLAMaxes,'YLimMode','auto'); %set(handles.NLAMaxes,'YLim',[0 0.5]); grid on hold off; axes(handles.NLAMaxes) hold on; plot(matriun22teorica(:,1),matriun22teorica(:,2)); xlabel('\lambda (nm)') set(handles.NLAMaxes,'XMinorTick','on'); Pagina: 6 de 72 Anexo PFC set(handles.NLAMaxes,'YMinorTick','on'); set(handles.NLAMaxes,'XLimMode','manual'); set(handles.NLAMaxes,'XLim',[(lambdai/1e-9) (lambdaf/1e-9)]); set(handles.NLAMaxes,'YLimMode','auto'); %set(handles.NLAMaxes,'YLim',[0 0.5]); grid on hold off; n21= matriun21teorica(1,2); end %Calcul del desfas optic produit en funcio de d el espesor de la capa for h=1:1:length(matriun21) phi1=angle*pi/180; %angle incidencia phi2=asin((n1/matriun21teorica(h,2))*(sin(phi1))); p2=n21*cos(phi2); k2x=(2*pi*matriun21teorica(h,2)*cos(phi2))/(1E-9*matriun21(h,1)); tet2(h)=k2x*h21; end %nestruc=str2double(get(handles.nestruc_input,'String')) nestruc=handles.nestruc; rugoso=zeros(1,nestruc); p1=[n21 h21 n31 h31 N1]; p2=[n22 h22 n32 h32 N2]; p3=[n23 h23 n33 h33 N3]; Parametres=zeros(nestruc,5); switch (nestruc) case 1 Parametres=[p1]; case 2 Parametres=[p1;p2]; case 3 Parametres=[p1;p2;p3]; otherwise, r=sprintf('3 is the maximum number of structures ') end p1=n1*cos(phi1); D1M=[cos(phi1) cos(phi1);n1 -n1]; D1E=[1 1;p1 -p1]; phis=asin((n1/ns)*(sin(phi1))); ps=ns*cos(phis); DsM=[cos(phis) cos(phis);ns -ns]; DsE=[1 1;ps -ps]; %Ja es tenen tots els paràmetres per al càlcul de MultiYeh step = str2double(get(handles.step_input,'String')); step=step*1e-9; lnostra=lambdai:step:lambdaf; long=length(lnostra); if lleguir==1 long=length(matriun21); end Pagina: 7 de 72 Anexo PFC %Mira si n es variable i en cas de que ho sigui carrega la matriu de %valors de n en funcio de lambda var21=handles.var_n21; var31=handles.var_n31; var22=handles.var_n22; var32=handles.var_n32; var23=handles.var_n23; var33=handles.var_n33; if var21==1 if (slcauchy==0)|(slsellmeier==0)&(polnum==1) matriun21data=handles.data_n21; for h=1:1:length(matriun21data)/fd matriun21teorica(h,1)=matriun21data(h,1); %lambda matriun21teorica(h,2)=matriun21data(h*fd,2); %n matriun21teorica(h,3)=matriun21data(h*fd,3); %ik end for h=1:1:length(matriun21data) phi1=angle*pi/180; %angle incidencia phi2=asin((n1/matriun21teorica(h,2))*(sin(phi1))); p2=n21*cos(phi2); k2x=(2*pi*matriun21teorica(h,2)*cos(phi2))/(1E9*matriun21data(h,1)); tet2(h)=k2x*h21; end end end if var31==1 if (slcauchy==0)|(slsellmeier==0)&(polnum==2) matriun31=handles.data_n31; end end if var22==1 matriun22=handles.data_n22; end if var32==1 matriun32=handles.data_n32; end if var23==1 matriun23=handles.data_n23; end if var33==1 matriun33=handles.data_n33; end %**************************************************** % Càlcul de la transmissió i reflexió a partir de les matrius %***************************************************** [RE,TE,RM,TM]= calculdetransmissioireflexio(Parametres,lnostra,long,lleguir,matriun21 ,D1M,var21,slcauchy,matriun21teorica,matriun22teorica,matriun31,matriu n22,var22,var32,var31,nestruc,var33,matriun33,rugoso,phi1,DsM,ns,phis, n1,D1E,DsE,var23); if lleguir==1 [x,RE,TE,RM,TM]= fminquad(Parametres,lnostra,long,lleguir,matriun21,D1M,var21,slcauchy, matriun21teorica,matriun22teorica,matriun31,matriun22,var22,var32,var3 Pagina: 8 de 72 Anexo PFC 1,nestruc,var33,matriun33,rugoso,phi1,DsM,ns,phis,n1,D1E,DsE,RE,TE,RM, TM,var23,polnum); set(handles.un21_input,'string',un21); set(handles.bn21_input,'string',bn21); set(handles.cn21_input,'string',cn21); set(handles.dn21_input,'string',dn21); set(handles.un22,'string',un22); set(handles.bn22,'string',bn22); set(handles.cn22,'string',cn22); set(handles.dn22,'string',dn22); set(handles.h21_input,'string',h21*1E9); axes(handles.NLAMaxes) hold on; plot(matriun21teorica(:,1),matriun21teorica(:,2),'m'); hold off; fi2=(RE')-(matriun21(:,2)); errorlin=median(fi2) set(handles.error,'string',errorlin); axes(handles.ERRORaxes) hold on; plot(fi2); hold off; end % Create TE plot valor=handles.DataP; axes(handles.TEaxes) switch valor case 2 plot(lnostra/1e-9,TE,'r'); legend('T'); case 3 plot(lnostra/1e-9,RE,lnostra/1e-9,TE,'r'); legend('R','T') case 4 AE=1-RE-TE; plot(lnostra/1e-9,AE,'g'); legend('A') case 5 AE=1-RE-TE; plot(lnostra/1e-9,RE,lnostra/1e-9,AE,'g'); legend('R','A') case 6 AE=1-RE-TE; plot(lnostra/1e-9,TE,'r',lnostra/1e-9,AE,'g'); legend('T','A') case 7 AE=1-RE-TE; plot(lnostra/1e-9,RE,lnostra/1e-9,TE,'r',lnostra/1e9,AE,'g'); legend('R','T','A') otherwise, if lleguir ==0 plot(lnostra/1e-9,RE,'b'); legend('R'); else plot(matriun21(:,1),RE,'b') legend('R'); hold on; plot(matriun21(:,1),matriun21(:,2),'m') Pagina: 9 de 72 Anexo PFC legend('R'); hold off; end end xlabel('\lambda (nm)') % title('TE'); set(handles.TEaxes,'XMinorTick','on'); set(handles.TEaxes,'YMinorTick','on'); set(handles.TEaxes,'XLimMode','manual'); set(handles.TEaxes,'XLim',[(lambdai/1e-9) (lambdaf/1e-9)]); set(handles.TEaxes,'YLimMode','auto'); %set(handles.TEaxes,'YLim',[0 0.5]); grid on % Create TM plot axes(handles.TMaxes) switch valor case 2 plot(lnostra/1e-9,TM,'r'); legend('T'); case 3 plot(lnostra/1e-9,RM,lnostra/1e-9,TM,'r'); legend('R','T') case 4 AM=1-RM-TM; plot(lnostra/1e-9,AM,'g'); legend('A') case 5 AM=1-RM-TM; plot(lnostra/1e-9,RM,lnostra/1e-9,AM,'g'); legend('R','A') case 6 AM=1-RM-TM; plot(lnostra/1e-9,TM,'r',lnostra/1e-9,AM,'g'); legend('T','A') case 7 AM=1-RM-TM; plot(lnostra/1e-9,RM,lnostra/1e-9,TM,'r',lnostra/1e9,AM,'g'); legend('R','T','A') otherwise, if lleguir ==0 plot(lnostra/1e-9,RM,'b'); legend('R'); else plot(matriun21(:,1),RM,'b') legend('R'); hold on; plot(matriun21(:,1),matriun21(:,2),'m') legend('R'); hold off; end end xlabel('\lambda (nm)') %title('TM'); % plot(t,x) set(handles.TMaxes,'XMinorTick','on'); set(handles.TMaxes,'YMinorTick','on'); set(handles.TMaxes,'XLimMode','manual'); Pagina: 10 de 72 Anexo PFC set(handles.TMaxes,'XLim',[(lambdai/1e-9) (lambdaf/1e-9)]); set(handles.TMaxes,'YLimMode','auto'); %set(handles.TMaxes,'YLim',[0 0.5]); grid on %Figura apart o no TEaparte = get(handles.TEsep,'Value'); TMaparte = get(handles.TMsep,'Value'); if (TEaparte==1) & (TMaparte==1) figure; subplot(2,1,1); switch valor case 2 plot(lnostra/1e-9,TE,'r'); legend('T'); case 3 plot(lnostra/1e-9,RE,lnostra/1e-9,TE,'r'); legend('R','T') case 4 AE=1-RE-TE; plot(lnostra/1e-9,AE,'g'); legend('A') case 5 AE=1-RE-TE; plot(lnostra/1e-9,RE,lnostra/1e-9,AE,'g'); legend('R','A') case 6 AE=1-RE-TE; plot(lnostra/1e-9,TE,'r',lnostra/1e-9,AE,'g'); legend('T','A') case 7 AE=1-RE-TE; plot(lnostra/1e-9,RE,lnostra/1e-9,TE,'r',lnostra/1e9,AE,'g'); legend('R','T','A') otherwise, if lleguir ==0 plot(lnostra/1e-9,RE,'b'); else plot(matriun21(:,1),RE,'b') plot(matriun21(:,1),matriun21(:,2),'m') end legend('R'); end xlabel('Wavelength (nm)'); ylabel('Reflectivity'); title('TE') grid on; axis([lambdai/1e-9 lambdaf/1e-9 0 1.05]); % ttext=sprintf('nH=%0.5g nL=%0.5g hH=%0.5g hL=%0.5g N=%0.5g',n21,n31,h21,h31,N1); % title(ttext); subplot(2,1,2); switch valor case 2 plot(lnostra/1e-9,TM,'r'); legend('T'); case 3 plot(lnostra/1e-9,RM,lnostra/1e-9,TM,'r'); legend('R','T') Pagina: 11 de 72 Anexo PFC case 4 AM=1-RM-TM; plot(lnostra/1e-9,AM,'g'); legend('A') case 5 AM=1-RM-TM; plot(lnostra/1e-9,RM,lnostra/1e-9,AM,'g'); legend('R','A') case 6 AM=1-RM-TM; plot(lnostra/1e-9,TM,'r',lnostra/1e-9,AM,'g'); legend('T','A') case 7 AM=1-RM-TM; plot(lnostra/1e-9,RM,lnostra/1e-9,TM,'r',lnostra/1e9,AM,'g'); legend('R','T','A') otherwise, plot(lnostra/1e-9,RM,'b'); legend('R'); end xlabel('Wavelength (nm)'); ylabel('Reflectivity'); grid on; title('TM'); axis([lambdai/1e-9 lambdaf/1e-9 0 1.05]); elseif (TEaparte==1) figure switch valor case 2 plot(lnostra/1e-9,TE,'r'); legend('T'); case 3 plot(lnostra/1e-9,RE,lnostra/1e-9,TE,'r'); legend('R','T') case 4 AE=1-RE-TE; plot(lnostra/1e-9,AE,'g'); legend('A') case 5 AE=1-RE-TE; plot(lnostra/1e-9,RE,lnostra/1e-9,AE,'g'); legend('R','A') case 6 AE=1-RE-TE; plot(lnostra/1e-9,TE,'r',lnostra/1e-9,AE,'g'); legend('T','A') case 7 AE=1-RE-TE; plot(lnostra/1e-9,RE,lnostra/1e-9,TE,'r',lnostra/1e9,AE,'g'); legend('R','T','A') otherwise, if lleguir ==0 plot(lnostra/1e-9,RE,'b'); else plot(matriun21(:,1),RE,'b') plot(matriun21(:,1),matriun21(:,2),'m') end legend('R'); Pagina: 12 de 72 Anexo PFC end xlabel('Wavelength (nm)'); ylabel('Reflectivity'); title('TE'); grid on; axis([lambdai/1e-9 lambdaf/1e-9 0 1.05]); figure wavenumber=1e7./(lnostra/1e-9); plot(wavenumber,RE,'r'); xlabel('wavenumber'); ylabel('Reflectivity'); grid on; axis([min(wavenumber) max(wavenumber) 0 1.05]); elseif (TMaparte==1) figure switch valor case 2 plot(lnostra/1e-9,TM,'r'); legend('T'); case 3 plot(lnostra/1e-9,RM,lnostra/1e-9,TM,'r'); legend('R','T') case 4 AM=1-RM-TM; plot(lnostra/1e-9,AM,'g'); legend('A') case 5 AM=1-RM-TM; plot(lnostra/1e-9,RM,lnostra/1e-9,AM,'g'); legend('R','A') case 6 AM=1-RM-TM; plot(lnostra/1e-9,TM,'r',lnostra/1e-9,AM,'g'); legend('T','A') case 7 AM=1-RM-TM; plot(lnostra/1e-9,RM,lnostra/1e-9,TM,'r',lnostra/1e9,AM,'g'); legend('R','T','A') otherwise, plot(lnostra/1e-9,RM,'b'); legend('R'); end xlabel('Wavelength (nm)'); ylabel('Reflectivity'); title('TM'); grid on; axis([lambdai/1e-9 lambdaf/1e-9 0 1.05]); end % % % % %Fa una figura apart amb la suma de les reflectivitats de TE i TM sumaTETM = get(handles.sumaTETM_check,'Value'); if sumaTETM==1 suma=0.5*RE+0.5*RM; FigAparte = get(handles.separateFig_check,'Value'); if FigAparte==1 figure % end wavenum=1e7./(lnostra/1e-9); plot(wavenum,suma); Pagina: 13 de 72 Anexo % % PFC xlabel('Wavenumber (cm-1)'); plot(lnostra/1e-9,suma); xlabel('Wavelength (nm)'); ylabel('R average'); title('0.5TE+0.5TM'); grid on; axis([min(wavenum) max(wavenum) 0 1.05]); axis([lambdai/1e-9 lambdaf/1e-9 0 1.05]); end cabecera = get(handles.cabecera_input,'Value'); escriure = get(handles.exportData,'Value'); %Escriu les dades en un fitxer de text if (escriure==1) escriuredades(lleguir,lnostra,cabecera,valor,matriun21,matriun21teoric a,RE,n23,h23,n33,h33,N3,var21,var31,nestruc,h21,h31,N1,n31,TE,TM,RM); end % --- Executes during object creation, after setting all properties. function nambient_input_CreateFcn(hObject, eventdata, handles) % hObject handle to nambient_input (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles empty - handles not created until after all CreateFcns called % Hint: edit controls usually have a white background on Windows. % See ISPC and COMPUTER. if ispc set(hObject,'BackgroundColor','white'); else set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor') ); end function nambient_input_Callback(hObject, eventdata, handles) % hObject handle to nambient_input (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % Hints: get(hObject,'String') returns contents of nambient_input as text % str2double(get(hObject,'String')) returns contents of nambient_input as a double % --- Executes during object creation, after setting all properties. function nsubs_input_CreateFcn(hObject, eventdata, handles) % hObject handle to nsubs_input (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles empty - handles not created until after all CreateFcns called % Hint: edit controls usually have a white background on Windows. % See ISPC and COMPUTER. if ispc set(hObject,'BackgroundColor','white'); else Pagina: 14 de 72 Anexo PFC set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor') ); end function nsubs_input_Callback(hObject, eventdata, handles) % hObject handle to nsubs_input (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % Hints: get(hObject,'String') returns contents of nsubs_input as text % str2double(get(hObject,'String')) returns contents of nsubs_input as a double % --- Executes during object creation, after setting all properties. function angle_input_CreateFcn(hObject, eventdata, handles) % hObject handle to angle_input (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles empty - handles not created until after all CreateFcns called % Hint: edit controls usually have a white background on Windows. % See ISPC and COMPUTER. if ispc set(hObject,'BackgroundColor','white'); else set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor') ); end function angle_input_Callback(hObject, eventdata, handles) % hObject handle to angle_input (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % Hints: get(hObject,'String') returns contents of angle_input as text % str2double(get(hObject,'String')) returns contents of angle_input as a double % --- Executes during object creation, after setting all properties. function lambdai_input_CreateFcn(hObject, eventdata, handles) % hObject handle to lambdai_input (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles empty - handles not created until after all CreateFcns called % Hint: edit controls usually have a white background on Windows. % See ISPC and COMPUTER. if ispc set(hObject,'BackgroundColor','white'); else set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor') ); Pagina: 15 de 72 Anexo PFC end function lambdai_input_Callback(hObject, eventdata, handles) % hObject handle to lambdai_input (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % Hints: get(hObject,'String') returns contents of lambdai_input as text % str2double(get(hObject,'String')) returns contents of lambdai_input as a double % --- Executes during object creation, after setting all properties. function lambdaf_input_CreateFcn(hObject, eventdata, handles) % hObject handle to lambdaf_input (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles empty - handles not created until after all CreateFcns called % Hint: edit controls usually have a white background on Windows. % See ISPC and COMPUTER. if ispc set(hObject,'BackgroundColor','white'); else set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor') ); end function lambdaf_input_Callback(hObject, eventdata, handles) % hObject handle to lambdaf_input (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % Hints: get(hObject,'String') returns contents of lambdaf_input as text % str2double(get(hObject,'String')) returns contents of lambdaf_input as a double % --- Executes during object creation, after setting all properties. function DataP_CreateFcn(hObject, eventdata, handles) % hObject handle to DataP (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles empty - handles not created until after all CreateFcns called % Hint: popupmenu controls usually have a white background on Windows. % See ISPC and COMPUTER. if ispc set(hObject,'BackgroundColor','white'); else set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor') ); end Pagina: 16 de 72 Anexo PFC % --- Executes on selection change in DataP. function DataP_Callback(hObject, eventdata, handles) % hObject handle to DataP (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % Hints: contents = get(hObject,'String') returns DataP contents as cell array % contents{get(hObject,'Value')} returns selected item from DataP val = get(hObject,'Value'); str = get(hObject, 'String'); switch str{val}; case 'R' handles.DataP=1; case 'T' handles.DataP=2; case 'R and T' handles.DataP=3; case 'A' handles.DataP=4; case 'R and A' handles.DataP=5; case 'T and A' handles.DataP=6; case 'R,T and A' handles.DataP=7; end guidata(hObject,handles) % --- Executes during object creation, after setting all properties. function n21_input_CreateFcn(hObject, eventdata, handles) % hObject handle to n21_input (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles empty - handles not created until after all CreateFcns called % Hint: edit controls usually have a white background on Windows. % See ISPC and COMPUTER. if ispc set(hObject,'BackgroundColor','white'); else set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor') ); end function un21_input_CreateFcn(hObject, eventdata, handles) % hObject handle to n21_input (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles empty - handles not created until after all CreateFcns called % Hint: edit controls usually have a white background on Windows. % See ISPC and COMPUTER. if ispc set(hObject,'BackgroundColor','white'); else Pagina: 17 de 72 Anexo PFC set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor') ); end function n21_input_Callback(hObject, eventdata, handles) % hObject handle to n21_input (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % Hints: get(hObject,'String') returns contents of n21_input as text % str2double(get(hObject,'String')) returns contents of n21_input as a double function un21_input_Callback(hObject, eventdata, handles) % hObject handle to n21_input (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % Hints: get(hObject,'String') returns contents of n21_input as text % str2double(get(hObject,'String')) returns contents of n21_input as a double % --- Executes during object creation, after setting all properties. function h21_input_CreateFcn(hObject, eventdata, handles) % hObject handle to h21_input (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles empty - handles not created until after all CreateFcns called % Hint: edit controls usually have a white background on Windows. % See ISPC and COMPUTER. if ispc set(hObject,'BackgroundColor','white'); else set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor') ); end function h21_input_Callback(hObject, eventdata, handles) % hObject handle to h21_input (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % Hints: get(hObject,'String') returns contents of h21_input as text % str2double(get(hObject,'String')) returns contents of h21_input as a double % --- Executes during object creation, after setting all properties. function n31_input_CreateFcn(hObject, eventdata, handles) % hObject handle to n31_input (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles empty - handles not created until after all CreateFcns called Pagina: 18 de 72 Anexo PFC % Hint: edit controls usually have a white background on Windows. % See ISPC and COMPUTER. if ispc set(hObject,'BackgroundColor','white'); else set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor') ); end function n31_input_Callback(hObject, eventdata, handles) % hObject handle to n31_input (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % Hints: get(hObject,'String') returns contents of n31_input as text % str2double(get(hObject,'String')) returns contents of n31_input as a double % --- Executes during object creation, after setting all properties. function N1_input_CreateFcn(hObject, eventdata, handles) % hObject handle to N1_input (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles empty - handles not created until after all CreateFcns called % Hint: edit controls usually have a white background on Windows. % See ISPC and COMPUTER. if ispc set(hObject,'BackgroundColor','white'); else set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor') ); end function N1_input_Callback(hObject, eventdata, handles) % hObject handle to N1_input (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % Hints: get(hObject,'String') returns contents of N1_input as text % str2double(get(hObject,'String')) returns contents of N1_input as a double % --- Executes during object creation, after setting all properties. function h31_input_CreateFcn(hObject, eventdata, handles) % hObject handle to h31_input (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles empty - handles not created until after all CreateFcns called % Hint: edit controls usually have a white background on Windows. % See ISPC and COMPUTER. if ispc Pagina: 19 de 72 Anexo PFC set(hObject,'BackgroundColor','white'); else set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor') ); end function h31_input_Callback(hObject, eventdata, handles) % hObject handle to h31_input (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % Hints: get(hObject,'String') returns contents of h31_input as text % str2double(get(hObject,'String')) returns contents of h31_input as a double % --- Executes during object creation, after setting all properties. function n21varpop_input_CreateFcn(hObject, eventdata, handles) % hObject handle to n21varpop_input (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles empty - handles not created until after all CreateFcns called % Hint: popupmenu controls usually have a white background on Windows. % See ISPC and COMPUTER. if ispc set(hObject,'BackgroundColor','white'); else set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor') ); end % --- Executes on selection change in n21varpop_input. function n21varpop_input_Callback(hObject, eventdata, handles) % hObject handle to n21varpop_input (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) val = get(hObject,'Value'); str = get(hObject, 'String'); switch str{val}; case 'No selection' handles.var_n21=0; set(handles.n21_input,'String','1'); set(handles.k21_input,'String','0'); case 'Ag' handles.data_n21 = IndexnAg(1); handles.var_n21=1; set(handles.n21_input,'String','____'); set(handles.k21_input,'String','____'); handles.n21string='Ag'; case 'Al' handles.data_n21 = IndexnAl(1); handles.var_n21=1; set(handles.n21_input,'String','____'); set(handles.k21_input,'String','____'); handles.n21string='Al'; Pagina: 20 de 72 Anexo PFC case 'Au' handles.data_n21 = IndexnAu(1); handles.var_n21=1; set(handles.n21_input,'String','____'); set(handles.k21_input,'String','____'); handles.n21string='Au'; case 'Cu' handles.data_n21 = IndexnCu(1); handles.var_n21=1; set(handles.n21_input,'String','____'); set(handles.k21_input,'String','____'); handles.n21string='Cu'; case 'H2O' handles.data_n21 = IndexnH2O(1); handles.var_n21=1; set(handles.n21_input,'String','____'); set(handles.k21_input,'String','____'); handles.n21string='H2O'; case 'MgF2' handles.data_n21 = IndexnMgF2(1); handles.var_n21=1; set(handles.n21_input,'String','____'); set(handles.k21_input,'String','____'); handles.n21string='MgF2'; case 'Ni' handles.data_n21 = IndexnNi(1); handles.var_n21=1; set(handles.n21_input,'String','____'); set(handles.k21_input,'String','____'); handles.n21string='Ni'; case 'Si3N4' handles.data_n21 = IndexnSi3N4(1); handles.var_n21=1; set(handles.n21_input,'String','____'); set(handles.k21_input,'String','____'); handles.n21string='Si3N4'; case 'SiO2' handles.data_n21 = IndexnSiO2(1); handles.var_n21=1; set(handles.n21_input,'String','____'); set(handles.k21_input,'String','____'); handles.n21string='SiO2'; otherwise, x=10000; end guidata(hObject,handles) % Hints: contents = get(hObject,'String') returns n21varpop_input contents as cell array % contents{get(hObject,'Value')} returns selected item from n21varpop_input % --- Executes during object creation, after setting all properties. function n31varpop_input_CreateFcn(hObject, eventdata, handles) % hObject handle to n31varpop_input (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles empty - handles not created until after all CreateFcns called Pagina: 21 de 72 Anexo PFC % Hint: popupmenu controls usually have a white background on Windows. % See ISPC and COMPUTER. if ispc set(hObject,'BackgroundColor','white'); else set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor') ); end % --- Executes on selection change in n31varpop_input. function n31varpop_input_Callback(hObject, eventdata, handles) % hObject handle to n31varpop_input (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) val = get(hObject,'Value'); str = get(hObject, 'String'); switch str{val}; case 'No selection' handles.var_n31=0; set(handles.n31_input,'String','1'); set(handles.k31_input,'String','0'); case 'Ag' handles.data_n31 = IndexnAg(1); handles.var_n31=1; set(handles.n31_input,'String','____'); set(handles.k31_input,'String','____'); handles.n31string='Ag'; case 'Al' handles.data_n31 = IndexnAl(1); handles.var_n31=1; set(handles.n31_input,'String','____'); set(handles.k31_input,'String','____'); handles.n31string='Al'; case 'Au' handles.data_n31 = IndexnAu(1); handles.var_n31=1; set(handles.n31_input,'String','____'); set(handles.k31_input,'String','____'); handles.n31string='Au'; case 'Cu' handles.data_n31 = IndexnCu(1); handles.var_n31=1; set(handles.n31_input,'String','____'); set(handles.k31_input,'String','____'); handles.n31string='Cu'; case 'H2O' handles.data_n31 = IndexnH2O(1); handles.var_n31=1; set(handles.n31_input,'String','____'); set(handles.k31_input,'String','____'); handles.n31string='H2O'; case 'MgF2' handles.data_n31 = IndexnMgF2(1); handles.var_n31=1; set(handles.n31_input,'String','____'); set(handles.k31_input,'String','____'); handles.n31string='MgF2'; case 'Ni' Pagina: 22 de 72 Anexo PFC handles.data_n31 = IndexnNi(1); handles.var_n31=1; set(handles.n31_input,'String','____'); set(handles.k31_input,'String','____'); handles.n31string='Ni'; case 'Si3N4' handles.data_n31 = IndexnSi3N4(1); handles.var_n31=1; set(handles.n31_input,'String','____'); set(handles.k31_input,'String','____'); handles.n31string='Si3N4'; case 'SiO2' handles.data_n31 = IndexnSiO2(1); handles.var_n31=1; set(handles.n31_input,'String','____'); set(handles.k31_input,'String','____'); handles.n31string='SiO2'; end guidata(hObject,handles) % Hints: contents = get(hObject,'String') returns n31varpop_input contents as cell array % contents{get(hObject,'Value')} returns selected item from n31varpop_input % --- Executes during object creation, after setting all properties. function n22_input_CreateFcn(hObject, eventdata, handles) % hObject handle to n22_input (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles empty - handles not created until after all CreateFcns called % Hint: edit controls usually have a white background on Windows. % See ISPC and COMPUTER. if ispc set(hObject,'BackgroundColor','white'); else set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor') ); end function n22_input_Callback(hObject, eventdata, handles) % hObject handle to n22_input (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % Hints: get(hObject,'String') returns contents of n22_input as text % str2double(get(hObject,'String')) returns contents of n22_input as a double % --- Executes during object creation, after setting all properties. function h22_input_CreateFcn(hObject, eventdata, handles) % hObject handle to h22_input (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles empty - handles not created until after all CreateFcns called Pagina: 23 de 72 Anexo PFC % Hint: edit controls usually have a white background on Windows. % See ISPC and COMPUTER. if ispc set(hObject,'BackgroundColor','white'); else set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor') ); end function h22_input_Callback(hObject, eventdata, handles) % hObject handle to h22_input (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % Hints: get(hObject,'String') returns contents of h22_input as text % str2double(get(hObject,'String')) returns contents of h22_input as a double % --- Executes during object creation, after setting all properties. function n32_input_CreateFcn(hObject, eventdata, handles) % hObject handle to n32_input (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles empty - handles not created until after all CreateFcns called % Hint: edit controls usually have a white background on Windows. % See ISPC and COMPUTER. if ispc set(hObject,'BackgroundColor','white'); else set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor') ); end function n32_input_Callback(hObject, eventdata, handles) % hObject handle to n32_input (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % Hints: get(hObject,'String') returns contents of n32_input as text % str2double(get(hObject,'String')) returns contents of n32_input as a double % --- Executes during object creation, after setting all properties. function N2_input_CreateFcn(hObject, eventdata, handles) % hObject handle to N2_input (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles empty - handles not created until after all CreateFcns called % Hint: edit controls usually have a white background on Windows. % See ISPC and COMPUTER. Pagina: 24 de 72 Anexo PFC if ispc set(hObject,'BackgroundColor','white'); else set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor') ); end function N2_input_Callback(hObject, eventdata, handles) % hObject handle to N2_input (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % Hints: get(hObject,'String') returns contents of N2_input as text % str2double(get(hObject,'String')) returns contents of N2_input as a double % --- Executes during object creation, after setting all properties. function h32_input_CreateFcn(hObject, eventdata, handles) % hObject handle to h32_input (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles empty - handles not created until after all CreateFcns called % Hint: edit controls usually have a white background on Windows. % See ISPC and COMPUTER. if ispc set(hObject,'BackgroundColor','white'); else set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor') ); end function h32_input_Callback(hObject, eventdata, handles) % hObject handle to h32_input (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % Hints: get(hObject,'String') returns contents of h32_input as text % str2double(get(hObject,'String')) returns contents of h32_input as a double % --- Executes during object creation, after setting all properties. function n22varpop_input_CreateFcn(hObject, eventdata, handles) % hObject handle to n22varpop_input (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles empty - handles not created until after all CreateFcns called % Hint: popupmenu controls usually have a white background on Windows. % See ISPC and COMPUTER. if ispc set(hObject,'BackgroundColor','white'); else Pagina: 25 de 72 Anexo PFC set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor') ); end % --- Executes on selection change in n22varpop_input. function n22varpop_input_Callback(hObject, eventdata, handles) % hObject handle to n22varpop_input (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % Hints: contents = get(hObject,'String') returns n22varpop_input contents as cell array % contents{get(hObject,'Value')} returns selected item from n22varpop_input val = get(hObject,'Value'); str = get(hObject, 'String'); switch str{val}; case 'No selection' handles.var_n22=0; set(handles.n22_input,'String','1'); set(handles.k22_input,'String','0'); case 'Ag' handles.data_n22 = IndexnAg(1); handles.var_n22=1; set(handles.n22_input,'String','____'); set(handles.k22_input,'String','____'); handles.n22string='Ag'; case 'Al' handles.data_n22 = IndexnAl(1); handles.var_n22=1; set(handles.n22_input,'String','____'); set(handles.k22_input,'String','____'); handles.n22string='Al'; case 'Au' handles.data_n22 = IndexnAu(1); handles.var_n22=1; set(handles.n22_input,'String','____'); set(handles.k22_input,'String','____'); handles.n22string='Au'; case 'Cu' handles.data_n22 = IndexnCu(1); handles.var_n22=1; set(handles.n22_input,'String','____'); set(handles.k22_input,'String','____'); handles.n22string='Cu'; case 'H2O' handles.data_n22 = IndexnH2O(1); handles.var_n22=1; set(handles.n22_input,'String','____'); set(handles.k22_input,'String','____'); handles.n22string='H2O'; case 'MgF2' handles.data_n22 = IndexnMgF2(1); handles.var_n22=1; set(handles.n22_input,'String','____'); set(handles.k22_input,'String','____'); handles.n22string='MgF2'; case 'Ni' handles.data_n22 = IndexnNi(1); Pagina: 26 de 72 Anexo PFC handles.var_n22=1; set(handles.n22_input,'String','____'); set(handles.k22_input,'String','____'); handles.n22string='Ni'; case 'Si3N4' handles.data_n22 = IndexnSi3N4(1); handles.var_n22=1; set(handles.n22_input,'String','____'); set(handles.k22_input,'String','____'); handles.n22string='Si3N4'; case 'SiO2' handles.data_n22 = IndexnSiO2(1); handles.var_n22=1; set(handles.n22_input,'String','____'); set(handles.k22_input,'String','____'); handles.n22string='SiO2'; otherwise, x=10000; end guidata(hObject,handles) % --- Executes during object creation, after setting all properties. function n32varpop_input_CreateFcn(hObject, eventdata, handles) % hObject handle to n32varpop_input (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles empty - handles not created until after all CreateFcns called % Hint: popupmenu controls usually have a white background on Windows. % See ISPC and COMPUTER. if ispc set(hObject,'BackgroundColor','white'); else set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor') ); end % --- Executes on selection change in n32varpop_input. function n32varpop_input_Callback(hObject, eventdata, handles) % hObject handle to n32varpop_input (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) val = get(hObject,'Value'); str = get(hObject, 'String'); switch str{val}; case 'No selection' handles.var_n32=0; set(handles.n32_input,'String','1'); set(handles.k32_input,'String','0'); case 'Ag' handles.data_n32 = IndexnAg(1); handles.var_n32=1; set(handles.n32_input,'String','____'); set(handles.k32_input,'String','____'); handles.n32string='Ag'; case 'Al' handles.data_n32 = IndexnAl(1); handles.var_n32=1; Pagina: 27 de 72 Anexo PFC set(handles.n32_input,'String','____'); set(handles.k32_input,'String','____'); handles.n32string='Al'; case 'Au' handles.data_n32 = IndexnAu(1); handles.var_n32=1; set(handles.n32_input,'String','____'); set(handles.k32_input,'String','____'); handles.n32string='Au'; case 'Cu' handles.data_n32 = IndexnCu(1); handles.var_n32=1; set(handles.n32_input,'String','____'); set(handles.k32_input,'String','____'); handles.n32string='Cu'; case 'H2O' handles.data_n32 = IndexnH2O(1); handles.var_n32=1; set(handles.n32_input,'String','____'); set(handles.k32_input,'String','____'); handles.n32string='H2O'; case 'MgF2' handles.data_n32 = IndexnMgF2(1); handles.var_n32=1; set(handles.n32_input,'String','____'); set(handles.k32_input,'String','____'); handles.n32string='MgF2'; case 'Ni' handles.data_n32 = IndexnNi(1); handles.var_n32=1; set(handles.n32_input,'String','____'); set(handles.k32_input,'String','____'); handles.n32string='Ni'; case 'Si3N4' handles.data_n32 = IndexnSi3N4(1); handles.var_n32=1; set(handles.n32_input,'String','____'); set(handles.k32_input,'String','____'); handles.n32string='Si3N4'; case 'SiO2' handles.data_n32 = IndexnSiO2(1); handles.var_n32=1; set(handles.n32_input,'String','____'); set(handles.k32_input,'String','____'); handles.n32string='SiO2'; otherwise, x=10000; end guidata(hObject,handles) % Hints: contents = get(hObject,'String') returns n32varpop_input contents as cell array % contents{get(hObject,'Value')} returns selected item from n32varpop_input % --- Executes during object creation, after setting all properties. function n23_input_CreateFcn(hObject, eventdata, handles) % hObject handle to n23_input (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB Pagina: 28 de 72 Anexo % handles called PFC empty - handles not created until after all CreateFcns % Hint: edit controls usually have a white background on Windows. % See ISPC and COMPUTER. if ispc set(hObject,'BackgroundColor','white'); else set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor') ); end function n23_input_Callback(hObject, eventdata, handles) % hObject handle to n23_input (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % Hints: get(hObject,'String') returns contents of n23_input as text % str2double(get(hObject,'String')) returns contents of n23_input as a double % --- Executes during object creation, after setting all properties. function h23_input_CreateFcn(hObject, eventdata, handles) % hObject handle to h23_input (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles empty - handles not created until after all CreateFcns called % Hint: edit controls usually have a white background on Windows. % See ISPC and COMPUTER. if ispc set(hObject,'BackgroundColor','white'); else set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor') ); end function h23_input_Callback(hObject, eventdata, handles) % hObject handle to h23_input (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % Hints: get(hObject,'String') returns contents of h23_input as text % str2double(get(hObject,'String')) returns contents of h23_input as a double % --- Executes during object creation, after setting all properties. function n33_input_CreateFcn(hObject, eventdata, handles) % hObject handle to n33_input (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles empty - handles not created until after all CreateFcns called Pagina: 29 de 72 Anexo PFC % Hint: edit controls usually have a white background on Windows. % See ISPC and COMPUTER. if ispc set(hObject,'BackgroundColor','white'); else set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor') ); end function n33_input_Callback(hObject, eventdata, handles) % hObject handle to n33_input (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % Hints: get(hObject,'String') returns contents of n33_input as text % str2double(get(hObject,'String')) returns contents of n33_input as a double % --- Executes during object creation, after setting all properties. function N3_input_CreateFcn(hObject, eventdata, handles) % hObject handle to N3_input (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles empty - handles not created until after all CreateFcns called % Hint: edit controls usually have a white background on Windows. % See ISPC and COMPUTER. if ispc set(hObject,'BackgroundColor','white'); else set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor') ); end function N3_input_Callback(hObject, eventdata, handles) % hObject handle to N3_input (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % Hints: get(hObject,'String') returns contents of N3_input as text % str2double(get(hObject,'String')) returns contents of N3_input as a double % --- Executes during object creation, after setting all properties. function h33_input_CreateFcn(hObject, eventdata, handles) % hObject handle to h33_input (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles empty - handles not created until after all CreateFcns called % Hint: edit controls usually have a white background on Windows. % See ISPC and COMPUTER. if ispc Pagina: 30 de 72 Anexo PFC set(hObject,'BackgroundColor','white'); else set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor') ); end function h33_input_Callback(hObject, eventdata, handles) % hObject handle to h33_input (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % Hints: get(hObject,'String') returns contents of h33_input as text % str2double(get(hObject,'String')) returns contents of h33_input as a double % --- Executes during object creation, after setting all properties. function n23varpop_input_CreateFcn(hObject, eventdata, handles) % hObject handle to n23varpop_input (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles empty - handles not created until after all CreateFcns called % Hint: popupmenu controls usually have a white background on Windows. % See ISPC and COMPUTER. if ispc set(hObject,'BackgroundColor','white'); else set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor') ); end % --- Executes on selection change in n23varpop_input. function n23varpop_input_Callback(hObject, eventdata, handles) % hObject handle to n23varpop_input (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) val = get(hObject,'Value'); str = get(hObject, 'String'); switch str{val}; case 'No selection' handles.var_n23=0; set(handles.n23_input,'String','1'); set(handles.k23_input,'String','0'); case 'Ag' handles.data_n23 = IndexnAg(1); handles.var_n23=1; set(handles.n23_input,'String','____'); set(handles.k23_input,'String','____'); handles.n23string='Ag'; case 'Al' handles.data_n23 = IndexnAl(1); handles.var_n23=1; set(handles.n23_input,'String','____'); set(handles.k23_input,'String','____'); handles.n23string='Al'; Pagina: 31 de 72 Anexo PFC case 'Au' handles.data_n23 = IndexnAu(1); handles.var_n23=1; set(handles.n23_input,'String','____'); set(handles.k23_input,'String','____'); handles.n23string='Au'; case 'Cu' handles.data_n23 = IndexnCu(1); handles.var_n23=1; set(handles.n23_input,'String','____'); set(handles.k23_input,'String','____'); handles.n23string='Cu'; case 'H2O' handles.data_n23 = IndexnH2O(1); handles.var_n23=1; set(handles.n23_input,'String','____'); set(handles.k23_input,'String','____'); handles.n23string='H2O'; case 'MgF2' handles.data_n23 = IndexnMgF2(1); handles.var_n23=1; set(handles.n23_input,'String','____'); set(handles.k23_input,'String','____'); handles.n23string='MgF2'; case 'Ni' handles.data_n23 = IndexnNi(1); handles.var_n23=1; set(handles.n23_input,'String','____'); set(handles.k23_input,'String','____'); handles.n23string='Ni'; case 'Si3N4' handles.data_n23 = IndexnSi3N4(1); handles.var_n23=1; set(handles.n23_input,'String','____'); set(handles.k23_input,'String','____'); handles.n23string='Si3N4'; case 'SiO2' handles.data_n23 = IndexnSiO2(1); handles.var_n23=1; set(handles.n23_input,'String','____'); set(handles.k23_input,'String','____'); handles.n23string='SiO2'; otherwise, x=10000; end guidata(hObject,handles) % Hints: contents = get(hObject,'String') returns n23varpop_input contents as cell array % contents{get(hObject,'Value')} returns selected item from n23varpop_input % --- Executes during object creation, after setting all properties. function n33varpop_input_CreateFcn(hObject, eventdata, handles) % hObject handle to n33varpop_input (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles empty - handles not created until after all CreateFcns called % Hint: popupmenu controls usually have a white background on Windows. Pagina: 32 de 72 Anexo PFC % See ISPC and COMPUTER. if ispc set(hObject,'BackgroundColor','white'); else set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor') ); end % --- Executes on selection change in n33varpop_input. function n33varpop_input_Callback(hObject, eventdata, handles) % hObject handle to n33varpop_input (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) val = get(hObject,'Value'); str = get(hObject, 'String'); switch str{val}; case 'No selection' handles.var_n33=0; set(handles.n33_input,'String','1'); set(handles.k33_input,'String','0'); case 'Ag' handles.data_n33 = IndexnAg(1); handles.var_n33=1; set(handles.n33_input,'String','____'); set(handles.k33_input,'String','____'); handles.n33string='Ag'; case 'Al' handles.data_n33 = IndexnAl(1); handles.var_n33=1; set(handles.n33_input,'String','____'); set(handles.k33_input,'String','____'); handles.n33string='Al'; case 'Au' handles.data_n33 = IndexnAu(1); handles.var_n33=1; set(handles.n33_input,'String','____'); set(handles.k33_input,'String','____'); handles.n33string='Au'; case 'Cu' handles.data_n33 = IndexnCu(1); handles.var_n33=1; set(handles.n33_input,'String','____'); set(handles.k33_input,'String','____'); handles.n33string='Cu'; case 'H2O' handles.data_n33 = IndexnH2O(1); handles.var_n33=1; set(handles.n33_input,'String','____'); set(handles.k33_input,'String','____'); handles.n33string='H2O'; case 'MgF2' handles.data_n33 = IndexnMgF2(1); handles.var_n33=1; set(handles.n33_input,'String','____'); set(handles.k33_input,'String','____'); handles.n33string='MgF2'; case 'Ni' handles.data_n33 = IndexnNi(1); handles.var_n33=1; Pagina: 33 de 72 Anexo PFC set(handles.n33_input,'String','____'); set(handles.k33_input,'String','____'); handles.n33string='Ni'; case 'Si3N4' handles.data_n33 = IndexnSi3N4(1); handles.var_n33=1; set(handles.n33_input,'String','____'); set(handles.k33_input,'String','____'); handles.n33string='Si3N4'; case 'SiO2' handles.data_n33 = IndexnSiO2(1); handles.var_n33=1; set(handles.n33_input,'String','____'); set(handles.k33_input,'String','____'); handles.n33string='SiO2'; otherwise, x=10000; end guidata(hObject,handles) % Hints: contents = get(hObject,'String') returns n33varpop_input contents as cell array % contents{get(hObject,'Value')} returns selected item from n33varpop_input % --- Executes during object creation, after setting all properties. function nestruc_input_CreateFcn(hObject, eventdata, handles) % hObject handle to nestruc_input (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles empty - handles not created until after all CreateFcns called % Hint: popupmenu controls usually have a white background on Windows. % See ISPC and COMPUTER. if ispc set(hObject,'BackgroundColor','white'); else set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor') ); end % --- Executes on selection change in nestruc_input. function nestruc_input_Callback(hObject, eventdata, handles) % hObject handle to nestruc_input (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) val = get(hObject,'Value'); str = get(hObject, 'String'); switch str{val}; case '1' handles.nestruc=1; case '2' handles.nestruc=2; case '3' handles.nestruc=3; end guidata(hObject,handles) %nestruc= str2double(get(handles.nestruc_input,'String')) Pagina: 34 de 72 Anexo PFC if handles.nestruc==1 set(handles.n22_input,'Visible','off'); set(handles.k22_input,'Visible','off'); set(handles.n32_input,'Visible','off'); set(handles.k32_input,'Visible','off'); set(handles.h22_input,'Visible','off'); set(handles.h32_input,'Visible','off'); set(handles.n22varpop_input,'Visible','off'); set(handles.n32varpop_input,'Visible','off'); set(handles.N2_input,'Visible','off'); set(handles.text76,'Visible','off'); set(handles.text77,'Visible','off'); set(handles.text78,'Visible','off'); set(handles.text79,'Visible','off'); set(handles.text80,'Visible','off'); set(handles.text81,'Visible','off'); set(handles.text82,'Visible','off'); set(handles.text83,'Visible','off'); set(handles.text123,'Visible','off'); set(handles.text124,'Visible','off'); set(handles.frame26,'Visible','off'); % set(handles.rug22_check,'Visible','off'); % set(handles.rug32_check,'Visible','off'); % set(handles.nrug22_input,'Visible','off'); % set(handles.hrug22_input,'Visible','off'); % set(handles.nrug32_input,'Visible','off'); % set(handles.hrug32_input,'Visible','off'); % set(handles.text131,'Visible','off'); % set(handles.text133,'Visible','off'); % set(handles.text132,'Visible','off'); % set(handles.text134,'Visible','off'); % % % % % % % % % % set(handles.rug23_check,'Visible','off'); set(handles.rug33_check,'Visible','off'); set(handles.nrug23_input,'Visible','off'); set(handles.hrug23_input,'Visible','off'); set(handles.nrug33_input,'Visible','off'); set(handles.hrug33_input,'Visible','off'); set(handles.text135,'Visible','off'); set(handles.text137,'Visible','off'); set(handles.text136,'Visible','off'); set(handles.text138,'Visible','off'); set(handles.n23_input,'Visible','off'); set(handles.k23_input,'Visible','off'); set(handles.n33_input,'Visible','off'); set(handles.k33_input,'Visible','off'); set(handles.h23_input,'Visible','off'); set(handles.h33_input,'Visible','off'); set(handles.n23varpop_input,'Visible','off'); set(handles.n33varpop_input,'Visible','off'); set(handles.N3_input,'Visible','off'); set(handles.text84,'Visible','off'); set(handles.text85,'Visible','off'); set(handles.text86,'Visible','off'); set(handles.text87,'Visible','off'); set(handles.text88,'Visible','off'); set(handles.text89,'Visible','off'); set(handles.text108,'Visible','off'); set(handles.text115,'Visible','off'); set(handles.text125,'Visible','off'); Pagina: 35 de 72 Anexo PFC set(handles.text126,'Visible','off'); set(handles.frame21,'Visible','off'); % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % set(handles.Picl1,'Visible','on'); set(handles.Picl2,'Visible','on'); set(handles.Picl3,'Visible','on'); set(handles.Picl4,'Visible','on'); set(handles.Picl5,'Visible','on'); set(handles.Picl6,'Visible','on'); set(handles.Picl7,'Visible','on'); set(handles.Picl8,'Visible','on'); set(handles.Picl9,'Visible','on'); set(handles.Picl10,'Visible','on'); set(handles.Picl11,'Visible','on'); set(handles.Picl12,'Visible','on'); set(handles.Picl13,'Visible','on'); set(handles.Picl14,'Visible','on'); set(handles.Picl15,'Visible','on'); set(handles.Picl16,'Visible','on'); set(handles.Picl17,'Visible','on'); set(handles.Picl18,'Visible','on'); set(handles.Picl19,'Visible','on'); set(handles.Picl20,'Visible','on'); set(handles.Picl21,'Visible','on'); set(handles.Picnamb,'Visible','on'); set(handles.Picnsubs,'Visible','on'); set(handles.Pic1,'Visible','on'); set(handles.Pic2,'Visible','on'); set(handles.Pic3,'Visible','on'); set(handles.Pic4,'Visible','on'); set(handles.Pic5,'Visible','on'); set(handles.Pic6,'Visible','on'); set(handles.Pic7,'Visible','on'); set(handles.Pic8,'Visible','on'); set(handles.Pic9,'Visible','on'); set(handles.Pic10,'Visible','on'); set(handles.Pic11,'Visible','on'); set(handles.Pic12,'Visible','on'); set(handles.Pic13,'Visible','on'); set(handles.Pic14,'Visible','on'); set(handles.Pic15,'Visible','on'); set(handles.Pic16,'Visible','on'); set(handles.Pictit,'Visible','on'); end if handles.nestruc==2 set(handles.n22_input,'Visible','on'); set(handles.k22_input,'Visible','on'); set(handles.n32_input,'Visible','on'); set(handles.k32_input,'Visible','on'); set(handles.h22_input,'Visible','on'); set(handles.h32_input,'Visible','on'); set(handles.n22varpop_input,'Visible','on'); set(handles.n32varpop_input,'Visible','on'); set(handles.N2_input,'Visible','on'); set(handles.text76,'Visible','on'); set(handles.text77,'Visible','on'); set(handles.text78,'Visible','on'); set(handles.text79,'Visible','on'); set(handles.text80,'Visible','on'); Pagina: 36 de 72 Anexo PFC set(handles.text81,'Visible','on'); set(handles.text82,'Visible','on'); set(handles.text83,'Visible','on'); set(handles.text123,'Visible','on'); set(handles.text124,'Visible','on'); set(handles.frame26,'Visible','on'); % % % % % % % % % % % % % set(handles.rug22_check,'Visible','on'); set(handles.rug32_check,'Visible','on'); set(handles.rug23_check,'Visible','off'); set(handles.rug33_check,'Visible','off'); set(handles.nrug23_input,'Visible','off'); set(handles.hrug23_input,'Visible','off'); set(handles.nrug33_input,'Visible','off'); set(handles.hrug33_input,'Visible','off'); set(handles.text135,'Visible','off'); set(handles.text137,'Visible','off'); set(handles.text136,'Visible','off'); set(handles.text138,'Visible','off'); set(handles.n23_input,'Visible','off'); set(handles.k23_input,'Visible','off'); set(handles.n33_input,'Visible','off'); set(handles.k33_input,'Visible','off'); set(handles.h23_input,'Visible','off'); set(handles.h33_input,'Visible','off'); set(handles.n23varpop_input,'Visible','off'); set(handles.n33varpop_input,'Visible','off'); set(handles.N3_input,'Visible','off'); set(handles.text84,'Visible','off'); set(handles.text85,'Visible','off'); set(handles.text86,'Visible','off'); set(handles.text87,'Visible','off'); set(handles.text88,'Visible','off'); set(handles.text89,'Visible','off'); set(handles.text108,'Visible','off'); set(handles.text115,'Visible','off'); set(handles.text125,'Visible','off'); set(handles.text126,'Visible','off'); set(handles.frame21,'Visible','off'); % % % % % % % % % % % % % % % % % % % set(handles.Picl1,'Visible','off'); set(handles.Picl2,'Visible','off'); set(handles.Picl3,'Visible','off'); set(handles.Picl4,'Visible','off'); set(handles.Picl5,'Visible','off'); set(handles.Picl6,'Visible','off'); set(handles.Picl7,'Visible','off'); set(handles.Picl8,'Visible','off'); set(handles.Picl9,'Visible','off'); set(handles.Picl10,'Visible','off'); set(handles.Picl11,'Visible','off'); set(handles.Picl12,'Visible','off'); set(handles.Picl13,'Visible','off'); set(handles.Picl14,'Visible','off'); set(handles.Picl15,'Visible','off'); set(handles.Picl16,'Visible','off'); set(handles.Picl17,'Visible','off'); set(handles.Picl18,'Visible','off'); set(handles.Picl19,'Visible','off'); Pagina: 37 de 72 Anexo % % % % % % % % % % % % % % % % % % % % % % end PFC set(handles.Picl20,'Visible','off'); set(handles.Picl21,'Visible','off'); set(handles.Picnamb,'Visible','off'); set(handles.Picnsubs,'Visible','off'); set(handles.Pic1,'Visible','off'); set(handles.Pic2,'Visible','off'); set(handles.Pic3,'Visible','off'); set(handles.Pic4,'Visible','off'); set(handles.Pic5,'Visible','off'); set(handles.Pic6,'Visible','off'); set(handles.Pic7,'Visible','off'); set(handles.Pic8,'Visible','off'); set(handles.Pic9,'Visible','off'); set(handles.Pic10,'Visible','off'); set(handles.Pic11,'Visible','off'); set(handles.Pic12,'Visible','off'); set(handles.Pic13,'Visible','off'); set(handles.Pic14,'Visible','off'); set(handles.Pic15,'Visible','off'); set(handles.Pic16,'Visible','off'); set(handles.Pictit,'Visible','off'); %end if handles.nestruc==3 set(handles.n22_input,'Visible','on'); set(handles.k22_input,'Visible','on'); set(handles.n32_input,'Visible','on'); set(handles.k32_input,'Visible','on'); set(handles.h22_input,'Visible','on'); set(handles.h32_input,'Visible','on'); set(handles.n22varpop_input,'Visible','on'); set(handles.n32varpop_input,'Visible','on'); set(handles.N2_input,'Visible','on'); set(handles.text76,'Visible','on'); set(handles.text77,'Visible','on'); set(handles.text78,'Visible','on'); set(handles.text79,'Visible','on'); set(handles.text80,'Visible','on'); set(handles.text81,'Visible','on'); set(handles.text82,'Visible','on'); set(handles.text83,'Visible','on'); set(handles.text123,'Visible','on'); set(handles.text124,'Visible','on'); set(handles.frame26,'Visible','on'); % % % % % set(handles.rug22_check,'Visible','on'); set(handles.rug32_check,'Visible','on'); set(handles.rug23_check,'Visible','on'); set(handles.rug33_check,'Visible','on'); set(handles.n23_input,'Visible','on'); set(handles.k23_input,'Visible','on'); set(handles.n33_input,'Visible','on'); set(handles.k33_input,'Visible','on'); set(handles.h23_input,'Visible','on'); set(handles.h33_input,'Visible','on'); set(handles.n23varpop_input,'Visible','on'); set(handles.n33varpop_input,'Visible','on'); Pagina: 38 de 72 Anexo PFC set(handles.N3_input,'Visible','on'); set(handles.text84,'Visible','on'); set(handles.text85,'Visible','on'); set(handles.text86,'Visible','on'); set(handles.text87,'Visible','on'); set(handles.text88,'Visible','on'); set(handles.text89,'Visible','on'); set(handles.text108,'Visible','on'); set(handles.text115,'Visible','on'); set(handles.text125,'Visible','on'); set(handles.text126,'Visible','on'); set(handles.frame21,'Visible','on'); % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % set(handles.Picl1,'Visible','off'); set(handles.Picl2,'Visible','off'); set(handles.Picl3,'Visible','off'); set(handles.Picl4,'Visible','off'); set(handles.Picl5,'Visible','off'); set(handles.Picl6,'Visible','off'); set(handles.Picl7,'Visible','off'); set(handles.Picl8,'Visible','off'); set(handles.Picl9,'Visible','off'); set(handles.Picl10,'Visible','off'); set(handles.Picl11,'Visible','off'); set(handles.Picl12,'Visible','off'); set(handles.Picl13,'Visible','off'); set(handles.Picl14,'Visible','off'); set(handles.Picl15,'Visible','off'); set(handles.Picl16,'Visible','off'); set(handles.Picl17,'Visible','off'); set(handles.Picl18,'Visible','off'); set(handles.Picl19,'Visible','off'); set(handles.Picl20,'Visible','off'); set(handles.Picl21,'Visible','off'); set(handles.Picnamb,'Visible','off'); set(handles.Picnsubs,'Visible','off'); set(handles.Pic1,'Visible','off'); set(handles.Pic2,'Visible','off'); set(handles.Pic3,'Visible','off'); set(handles.Pic4,'Visible','off'); set(handles.Pic5,'Visible','off'); set(handles.Pic6,'Visible','off'); set(handles.Pic7,'Visible','off'); set(handles.Pic8,'Visible','off'); set(handles.Pic9,'Visible','off'); set(handles.Pic10,'Visible','off'); set(handles.Pic11,'Visible','off'); set(handles.Pic12,'Visible','off'); set(handles.Pic13,'Visible','off'); set(handles.Pic14,'Visible','off'); set(handles.Pic15,'Visible','off'); set(handles.Pic16,'Visible','off'); set(handles.Pictit,'Visible','off'); end guidata(hObject,handles) % Hints: contents = get(hObject,'String') returns nestruc_input contents as cell array % contents{get(hObject,'Value')} returns selected item from nestruc_input Pagina: 39 de 72 Anexo PFC % --- Executes on button press in TEsep. function TEsep_Callback(hObject, eventdata, handles) % hObject handle to TEsep (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % Hint: get(hObject,'Value') returns toggle state of TEsep % --- Executes on button press in TMsep. function TMsep_Callback(hObject, eventdata, handles) % hObject handle to TMsep (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % Hint: get(hObject,'Value') returns toggle state of TMsep % --- Executes during object creation, after setting all properties. function step_input_CreateFcn(hObject, eventdata, handles) % hObject handle to step_input (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles empty - handles not created until after all CreateFcns called % Hint: edit controls usually have a white background on Windows. % See ISPC and COMPUTER. if ispc set(hObject,'BackgroundColor','white'); else set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor') ); end function step_input_Callback(hObject, eventdata, handles) % hObject handle to step_input (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % Hints: get(hObject,'String') returns contents of step_input as text % str2double(get(hObject,'String')) returns contents of step_input as a double % --- Executes on button press in exportData. function exportData_Callback(hObject, eventdata, handles) % hObject handle to exportData (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % Hint: get(hObject,'Value') returns toggle state of exportData % --- Executes during object creation, after setting all properties. function k21_input_CreateFcn(hObject, eventdata, handles) % hObject handle to k21_input (see GCBO) Pagina: 40 de 72 Anexo % eventdata % handles called PFC reserved - to be defined in a future version of MATLAB empty - handles not created until after all CreateFcns % Hint: edit controls usually have a white background on Windows. % See ISPC and COMPUTER. if ispc set(hObject,'BackgroundColor','white'); else set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor') ); end function k21_input_Callback(hObject, eventdata, handles) % hObject handle to k21_input (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % Hints: get(hObject,'String') returns contents of k21_input as text % str2double(get(hObject,'String')) returns contents of k21_input as a double % --- Executes during object creation, after setting all properties. function k31_input_CreateFcn(hObject, eventdata, handles) % hObject handle to k31_input (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles empty - handles not created until after all CreateFcns called % Hint: edit controls usually have a white background on Windows. % See ISPC and COMPUTER. if ispc set(hObject,'BackgroundColor','white'); else set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor') ); end function k31_input_Callback(hObject, eventdata, handles) % hObject handle to k31_input (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % Hints: get(hObject,'String') returns contents of k31_input as text % str2double(get(hObject,'String')) returns contents of k31_input as a double % --- Executes during object creation, after setting all properties. function k22_input_CreateFcn(hObject, eventdata, handles) % hObject handle to k22_input (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles empty - handles not created until after all CreateFcns called Pagina: 41 de 72 Anexo PFC % Hint: edit controls usually have a white background on Windows. % See ISPC and COMPUTER. if ispc set(hObject,'BackgroundColor','white'); else set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor') ); end function k22_input_Callback(hObject, eventdata, handles) % hObject handle to k22_input (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % Hints: get(hObject,'String') returns contents of k22_input as text % str2double(get(hObject,'String')) returns contents of k22_input as a double % --- Executes during object creation, after setting all properties. function k32_input_CreateFcn(hObject, eventdata, handles) % hObject handle to k32_input (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles empty - handles not created until after all CreateFcns called % Hint: edit controls usually have a white background on Windows. % See ISPC and COMPUTER. if ispc set(hObject,'BackgroundColor','white'); else set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor') ); end function k32_input_Callback(hObject, eventdata, handles) % hObject handle to k32_input (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % Hints: get(hObject,'String') returns contents of k32_input as text % str2double(get(hObject,'String')) returns contents of k32_input as a double % --- Executes during object creation, after setting all properties. function k23_input_CreateFcn(hObject, eventdata, handles) % hObject handle to k23_input (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles empty - handles not created until after all CreateFcns called % Hint: edit controls usually have a white background on Windows. % See ISPC and COMPUTER. Pagina: 42 de 72 Anexo PFC if ispc set(hObject,'BackgroundColor','white'); else set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor') ); end function k23_input_Callback(hObject, eventdata, handles) % hObject handle to k23_input (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % Hints: get(hObject,'String') returns contents of k23_input as text % str2double(get(hObject,'String')) returns contents of k23_input as a double % --- Executes during object creation, after setting all properties. function k33_input_CreateFcn(hObject, eventdata, handles) % hObject handle to k33_input (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles empty - handles not created until after all CreateFcns called % Hint: edit controls usually have a white background on Windows. % See ISPC and COMPUTER. if ispc set(hObject,'BackgroundColor','white'); else set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor') ); end function k33_input_Callback(hObject, eventdata, handles) % hObject handle to k33_input (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % Hints: get(hObject,'String') returns contents of k33_input as text % str2double(get(hObject,'String')) returns contents of k33_input as a double % % % % % % % % % % % % --- Executes on button press in rug21_check. function rug21_check_Callback(hObject, eventdata, handles) % hObject handle to rug21_check (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) ver= get(handles.rug21_check,'Value'); if ver==1 set(handles.nrug21_input,'Visible','on'); set(handles.hrug21_input,'Visible','on'); set(handles.text127,'Visible','on'); set(handles.text129,'Visible','on'); else Pagina: 43 de 72 Anexo % % % % % PFC set(handles.nrug21_input,'Visible','off'); set(handles.hrug21_input,'Visible','off'); set(handles.text127,'Visible','off'); set(handles.text129,'Visible','off'); end % Hint: get(hObject,'Value') returns toggle state of rug21_check % % % % % % % % % % % % % % % % % % % --- Executes on button press in rug31_check. function rug31_check_Callback(hObject, eventdata, handles) % hObject handle to rug31_check (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) ver= get(handles.rug31_check,'Value'); if ver==1 set(handles.nrug31_input,'Visible','on'); set(handles.hrug31_input,'Visible','on'); set(handles.text128,'Visible','on'); set(handles.text130,'Visible','on'); else set(handles.nrug31_input,'Visible','off'); set(handles.hrug31_input,'Visible','off'); set(handles.text128,'Visible','off'); set(handles.text130,'Visible','off'); end Hint: get(hObject,'Value') returns toggle state of rug31_check % --- Executes during object creation, after setting all properties. % function nrug21_input_CreateFcn(hObject, eventdata, handles) % % hObject handle to nrug21_input (see GCBO) % % eventdata reserved - to be defined in a future version of MATLAB % % handles empty - handles not created until after all CreateFcns called % % % Hint: edit controls usually have a white background on Windows. % % See ISPC and COMPUTER. % if ispc % set(hObject,'BackgroundColor','white'); % else % set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor') ); % end % % function nrug21_input_Callback(hObject, eventdata, handles) % % hObject handle to nrug21_input (see GCBO) % % eventdata reserved - to be defined in a future version of MATLAB % % handles structure with handles and user data (see GUIDATA) % % % Hints: get(hObject,'String') returns contents of nrug21_input as text % % str2double(get(hObject,'String')) returns contents of nrug21_input as a double % % % % --- Executes during object creation, after setting all properties. Pagina: 44 de 72 Anexo PFC % function nrug31_input_CreateFcn(hObject, eventdata, handles) % % hObject handle to nrug31_input (see GCBO) % % eventdata reserved - to be defined in a future version of MATLAB % % handles empty - handles not created until after all CreateFcns called % % % Hint: edit controls usually have a white background on Windows. % % See ISPC and COMPUTER. % if ispc % set(hObject,'BackgroundColor','white'); % else % set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor') ); % end % % % % function nrug31_input_Callback(hObject, eventdata, handles) % % hObject handle to nrug31_input (see GCBO) % % eventdata reserved - to be defined in a future version of MATLAB % % handles structure with handles and user data (see GUIDATA) % % % Hints: get(hObject,'String') returns contents of nrug31_input as text % % str2double(get(hObject,'String')) returns contents of nrug31_input as a double % % % % --- Executes during object creation, after setting all properties. % function hrug21_input_CreateFcn(hObject, eventdata, handles) % % hObject handle to hrug21_input (see GCBO) % % eventdata reserved - to be defined in a future version of MATLAB % % handles empty - handles not created until after all CreateFcns called % % % Hint: edit controls usually have a white background on Windows. % % See ISPC and COMPUTER. % if ispc % set(hObject,'BackgroundColor','white'); % else % set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor') ); % end % % % % function hrug21_input_Callback(hObject, eventdata, handles) % % hObject handle to hrug21_input (see GCBO) % % eventdata reserved - to be defined in a future version of MATLAB % % handles structure with handles and user data (see GUIDATA) % % % Hints: get(hObject,'String') returns contents of hrug21_input as text % % str2double(get(hObject,'String')) returns contents of hrug21_input as a double % % % % --- Executes during object creation, after setting all properties. % function hrug31_input_CreateFcn(hObject, eventdata, handles) Pagina: 45 de 72 Anexo PFC % % hObject handle to hrug31_input (see GCBO) % % eventdata reserved - to be defined in a future version of MATLAB % % handles empty - handles not created until after all CreateFcns called % % % Hint: edit controls usually have a white background on Windows. % % See ISPC and COMPUTER. % if ispc % set(hObject,'BackgroundColor','white'); % else % set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor') ); % end % % % % function hrug31_input_Callback(hObject, eventdata, handles) % % hObject handle to hrug31_input (see GCBO) % % eventdata reserved - to be defined in a future version of MATLAB % % handles structure with handles and user data (see GUIDATA) % % % Hints: get(hObject,'String') returns contents of hrug31_input as text % % str2double(get(hObject,'String')) returns contents of hrug31_input as a double % % % % --- Executes on button press in rug22_check. % function rug22_check_Callback(hObject, eventdata, handles) % % hObject handle to rug22_check (see GCBO) % % eventdata reserved - to be defined in a future version of MATLAB % % handles structure with handles and user data (see GUIDATA) % ver= get(handles.rug22_check,'Value'); % if ver==1 % set(handles.nrug22_input,'Visible','on'); % set(handles.hrug22_input,'Visible','on'); % set(handles.text131,'Visible','on'); % set(handles.text133,'Visible','on'); % else % set(handles.nrug22_input,'Visible','off'); % set(handles.hrug22_input,'Visible','off'); % set(handles.text131,'Visible','off'); % set(handles.text133,'Visible','off'); % end % % % Hint: get(hObject,'Value') returns toggle state of rug22_check % % % % --- Executes on button press in rug32_check. % function rug32_check_Callback(hObject, eventdata, handles) % % hObject handle to rug32_check (see GCBO) % % eventdata reserved - to be defined in a future version of MATLAB % % handles structure with handles and user data (see GUIDATA) % ver= get(handles.rug32_check,'Value'); % if ver==1 % set(handles.nrug32_input,'Visible','on'); % set(handles.hrug32_input,'Visible','on'); % set(handles.text132,'Visible','on'); % set(handles.text134,'Visible','on'); % else Pagina: 46 de 72 Anexo PFC % set(handles.nrug32_input,'Visible','off'); % set(handles.hrug32_input,'Visible','off'); % set(handles.text132,'Visible','off'); % set(handles.text134,'Visible','off'); % end % % % Hint: get(hObject,'Value') returns toggle state of rug32_check % % % % --- Executes during object creation, after setting all properties. % function nrug22_input_CreateFcn(hObject, eventdata, handles) % % hObject handle to nrug22_input (see GCBO) % % eventdata reserved - to be defined in a future version of MATLAB % % handles empty - handles not created until after all CreateFcns called % % % Hint: edit controls usually have a white background on Windows. % % See ISPC and COMPUTER. % if ispc % set(hObject,'BackgroundColor','white'); % else % set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor') ); % end % % % % function nrug22_input_Callback(hObject, eventdata, handles) % % hObject handle to nrug22_input (see GCBO) % % eventdata reserved - to be defined in a future version of MATLAB % % handles structure with handles and user data (see GUIDATA) % % % Hints: get(hObject,'String') returns contents of nrug22_input as text % % str2double(get(hObject,'String')) returns contents of nrug22_input as a double % % % % --- Executes during object creation, after setting all properties. % function nrug32_input_CreateFcn(hObject, eventdata, handles) % % hObject handle to nrug32_input (see GCBO) % % eventdata reserved - to be defined in a future version of MATLAB % % handles empty - handles not created until after all CreateFcns called % % % Hint: edit controls usually have a white background on Windows. % % See ISPC and COMPUTER. % if ispc % set(hObject,'BackgroundColor','white'); % else % set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor') ); % end % % % % function nrug32_input_Callback(hObject, eventdata, handles) % % hObject handle to nrug32_input (see GCBO) % % eventdata reserved - to be defined in a future version of MATLAB Pagina: 47 de 72 Anexo PFC % % handles structure with handles and user data (see GUIDATA) % % % Hints: get(hObject,'String') returns contents of nrug32_input as text % % str2double(get(hObject,'String')) returns contents of nrug32_input as a double % % % % --- Executes during object creation, after setting all properties. % function hrug22_input_CreateFcn(hObject, eventdata, handles) % % hObject handle to hrug22_input (see GCBO) % % eventdata reserved - to be defined in a future version of MATLAB % % handles empty - handles not created until after all CreateFcns called % % % Hint: edit controls usually have a white background on Windows. % % See ISPC and COMPUTER. % if ispc % set(hObject,'BackgroundColor','white'); % else % set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor') ); % end % % % % function hrug22_input_Callback(hObject, eventdata, handles) % % hObject handle to hrug22_input (see GCBO) % % eventdata reserved - to be defined in a future version of MATLAB % % handles structure with handles and user data (see GUIDATA) % % % Hints: get(hObject,'String') returns contents of hrug22_input as text % % str2double(get(hObject,'String')) returns contents of hrug22_input as a double % % % % --- Executes during object creation, after setting all properties. % function hrug32_input_CreateFcn(hObject, eventdata, handles) % % hObject handle to hrug32_input (see GCBO) % % eventdata reserved - to be defined in a future version of MATLAB % % handles empty - handles not created until after all CreateFcns called % % % Hint: edit controls usually have a white background on Windows. % % See ISPC and COMPUTER. % if ispc % set(hObject,'BackgroundColor','white'); % else % set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor') ); % end % % % % function hrug32_input_Callback(hObject, eventdata, handles) % % hObject handle to hrug32_input (see GCBO) % % eventdata reserved - to be defined in a future version of MATLAB % % handles structure with handles and user data (see GUIDATA) Pagina: 48 de 72 Anexo PFC % % % Hints: get(hObject,'String') returns contents of hrug32_input as text % % str2double(get(hObject,'String')) returns contents of hrug32_input as a double % % % % --- Executes on button press in rug23_check. % function rug23_check_Callback(hObject, eventdata, handles) % % hObject handle to rug23_check (see GCBO) % % eventdata reserved - to be defined in a future version of MATLAB % % handles structure with handles and user data (see GUIDATA) % ver= get(handles.rug23_check,'Value'); % if ver==1 % set(handles.nrug23_input,'Visible','on'); % set(handles.hrug23_input,'Visible','on'); % set(handles.text135,'Visible','on'); % set(handles.text137,'Visible','on'); % else % set(handles.nrug23_input,'Visible','off'); % set(handles.hrug23_input,'Visible','off'); % set(handles.text135,'Visible','off'); % set(handles.text137,'Visible','off'); % end % % % Hint: get(hObject,'Value') returns toggle state of rug23_check % % % % --- Executes on button press in rug33_check. % function rug33_check_Callback(hObject, eventdata, handles) % % hObject handle to rug33_check (see GCBO) % % eventdata reserved - to be defined in a future version of MATLAB % % handles structure with handles and user data (see GUIDATA) % ver= get(handles.rug33_check,'Value'); % if ver==1 % set(handles.nrug33_input,'Visible','on'); % set(handles.hrug33_input,'Visible','on'); % set(handles.text136,'Visible','on'); % set(handles.text138,'Visible','on'); % else % set(handles.nrug33_input,'Visible','off'); % set(handles.hrug33_input,'Visible','off'); % set(handles.text136,'Visible','off'); % set(handles.text138,'Visible','off'); % end % % % Hint: get(hObject,'Value') returns toggle state of rug33_check % % % % --- Executes during object creation, after setting all properties. % function nrug23_input_CreateFcn(hObject, eventdata, handles) % % hObject handle to nrug23_input (see GCBO) % % eventdata reserved - to be defined in a future version of MATLAB % % handles empty - handles not created until after all CreateFcns called % % % Hint: edit controls usually have a white background on Windows. % % See ISPC and COMPUTER. % if ispc % set(hObject,'BackgroundColor','white'); % else Pagina: 49 de 72 Anexo PFC % set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor') ); % end % % % % function nrug23_input_Callback(hObject, eventdata, handles) % % hObject handle to nrug23_input (see GCBO) % % eventdata reserved - to be defined in a future version of MATLAB % % handles structure with handles and user data (see GUIDATA) % % % Hints: get(hObject,'String') returns contents of nrug23_input as text % % str2double(get(hObject,'String')) returns contents of nrug23_input as a double % % % % --- Executes during object creation, after setting all properties. % function nrug33_input_CreateFcn(hObject, eventdata, handles) % % hObject handle to nrug33_input (see GCBO) % % eventdata reserved - to be defined in a future version of MATLAB % % handles empty - handles not created until after all CreateFcns called % % % Hint: edit controls usually have a white background on Windows. % % See ISPC and COMPUTER. % if ispc % set(hObject,'BackgroundColor','white'); % else % set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor') ); % end % % % % function nrug33_input_Callback(hObject, eventdata, handles) % % hObject handle to nrug33_input (see GCBO) % % eventdata reserved - to be defined in a future version of MATLAB % % handles structure with handles and user data (see GUIDATA) % % % Hints: get(hObject,'String') returns contents of nrug33_input as text % % str2double(get(hObject,'String')) returns contents of nrug33_input as a double % % % % --- Executes during object creation, after setting all properties. % function hrug23_input_CreateFcn(hObject, eventdata, handles) % % hObject handle to hrug23_input (see GCBO) % % eventdata reserved - to be defined in a future version of MATLAB % % handles empty - handles not created until after all CreateFcns called % % % Hint: edit controls usually have a white background on Windows. % % See ISPC and COMPUTER. % if ispc % set(hObject,'BackgroundColor','white'); % else Pagina: 50 de 72 Anexo PFC % set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor') ); % end % % % % function hrug23_input_Callback(hObject, eventdata, handles) % % hObject handle to hrug23_input (see GCBO) % % eventdata reserved - to be defined in a future version of MATLAB % % handles structure with handles and user data (see GUIDATA) % % % Hints: get(hObject,'String') returns contents of hrug23_input as text % % str2double(get(hObject,'String')) returns contents of hrug23_input as a double % % % % --- Executes during object creation, after setting all properties. % function hrug33_input_CreateFcn(hObject, eventdata, handles) % % hObject handle to hrug33_input (see GCBO) % % eventdata reserved - to be defined in a future version of MATLAB % % handles empty - handles not created until after all CreateFcns called % % % Hint: edit controls usually have a white background on Windows. % % See ISPC and COMPUTER. % if ispc % set(hObject,'BackgroundColor','white'); % else % set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor') ); % end % % % % function hrug33_input_Callback(hObject, eventdata, handles) % % hObject handle to hrug33_input (see GCBO) % % eventdata reserved - to be defined in a future version of MATLAB % % handles structure with handles and user data (see GUIDATA) % % % Hints: get(hObject,'String') returns contents of hrug33_input as text % % str2double(get(hObject,'String')) returns contents of hrug33_input as a double % % % % --- Executes during object creation, after setting all properties. % function hrug33_CreateFcn(hObject, eventdata, handles) % % hObject handle to hrug33 (see GCBO) % % eventdata reserved - to be defined in a future version of MATLAB % % handles empty - handles not created until after all CreateFcns called % % % Hint: edit controls usually have a white background on Windows. % % See ISPC and COMPUTER. % if ispc % set(hObject,'BackgroundColor','white'); % else Pagina: 51 de 72 Anexo PFC % set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor') ); % end % % % % function hrug33_Callback(hObject, eventdata, handles) % % hObject handle to hrug33 (see GCBO) % % eventdata reserved - to be defined in a future version of MATLAB % % handles structure with handles and user data (see GUIDATA) % % % Hints: get(hObject,'String') returns contents of hrug33 as text % % str2double(get(hObject,'String')) returns contents of hrug33 as a double % --- Executes on button press in sumaTETM_check. function sumaTETM_check_Callback(hObject, eventdata, handles) % hObject handle to sumaTETM_check (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % Hint: get(hObject,'Value') returns toggle state of sumaTETM_check % --- Executes on button press in cabecera_input. function cabecera_input_Callback(hObject, eventdata, handles) % hObject handle to cabecera_input (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % Hint: get(hObject,'Value') returns toggle state of cabecera_input % --- Executes during object creation, after setting all properties. function bn21_input_CreateFcn(hObject, eventdata, handles) % hObject handle to bn21_input (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles empty - handles not created until after all CreateFcns called % Hint: edit controls usually have a white background on Windows. % See ISPC and COMPUTER. if ispc set(hObject,'BackgroundColor','white'); else set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor') ); end function bn21_input_Callback(hObject, eventdata, handles) % hObject handle to bn21_input (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % Hints: get(hObject,'String') returns contents of bn21_input as text Pagina: 52 de 72 Anexo PFC % str2double(get(hObject,'String')) returns contents of bn21_input as a double % --- Executes during object creation, after setting all properties. function cn21_input_CreateFcn(hObject, eventdata, handles) % hObject handle to cn21_input (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles empty - handles not created until after all CreateFcns called % Hint: edit controls usually have a white background on Windows. % See ISPC and COMPUTER. if ispc set(hObject,'BackgroundColor','white'); else set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor') ); end function cn21_input_Callback(hObject, eventdata, handles) % hObject handle to cn21_input (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % Hints: get(hObject,'String') returns contents of cn21_input as text % str2double(get(hObject,'String')) returns contents of cn21_input as a double function slsellmeier_Callback(hObject, eventdata, handles) % hObject handle to slcauchy (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % Hint: get(hObject,'Value') returns toggle state of slcauchy % --- Executes on button press in slcauchy. function slcauchy_Callback(hObject, eventdata, handles) % hObject handle to slcauchy (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % Hint: get(hObject,'Value') returns toggle state of slcauchy % --- Executes on button press in loaddates. function loaddates_Callback(hObject, eventdata, handles) % hObject handle to loaddates (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % Hint: get(hObject,'Value') returns toggle state of loaddates % --- Executes during object creation, after setting all properties. function filtrodatos_CreateFcn(hObject, eventdata, handles) % hObject handle to filtrodatos (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB Pagina: 53 de 72 Anexo % handles called PFC empty - handles not created until after all CreateFcns % Hint: edit controls usually have a white background on Windows. % See ISPC and COMPUTER. if ispc set(hObject,'BackgroundColor','white'); else set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor') ); end function filtrodatos_Callback(hObject, eventdata, handles) % hObject handle to filtrodatos (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % Hints: get(hObject,'String') returns contents of filtrodatos as text % str2double(get(hObject,'String')) returns contents of filtrodatos as a double % --- Executes during object creation, after setting all properties. function polnum_CreateFcn(hObject, eventdata, handles) % hObject handle to polnum (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles empty - handles not created until after all CreateFcns called % Hint: edit controls usually have a white background on Windows. % See ISPC and COMPUTER. if ispc set(hObject,'BackgroundColor','white'); else set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor') ); end function polnum_Callback(hObject, eventdata, handles) % hObject handle to polnum (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % Hints: get(hObject,'String') returns contents of polnum as text % str2double(get(hObject,'String')) returns contents of polnum as a double % --- Executes during object creation, after setting all properties. function dn21_input_CreateFcn(hObject, eventdata, handles) % hObject handle to dn21_input (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles empty - handles not created until after all CreateFcns called Pagina: 54 de 72 Anexo PFC % Hint: edit controls usually have a white background on Windows. % See ISPC and COMPUTER. if ispc set(hObject,'BackgroundColor','white'); else set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor') ); end function dn21_input_Callback(hObject, eventdata, handles) % hObject handle to dn21_input (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % Hints: get(hObject,'String') returns contents of dn21_input as text % str2double(get(hObject,'String')) returns contents of dn21_input as a double % --- Executes on button press in visualitzacio. function visualitzacio_Callback(hObject, eventdata, handles) % hObject handle to visualitzacio (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) [col1,col2]=lectura; figure(5); hold on; plot(col1,col2); end % --- Executes during object creation, after setting all properties. function error_CreateFcn(hObject, eventdata, handles) % hObject handle to error (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles empty - handles not created until after all CreateFcns called % Hint: edit controls usually have a white background on Windows. % See ISPC and COMPUTER. if ispc set(hObject,'BackgroundColor','white'); else set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor') ); end function error_Callback(hObject, eventdata, handles) % hObject handle to error (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % Hints: get(hObject,'String') returns contents of error as text % str2double(get(hObject,'String')) returns contents of error as a double Pagina: 55 de 72 Anexo PFC % --- Executes during object creation, after setting all properties. function un22_CreateFcn(hObject, eventdata, handles) % hObject handle to un22 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles empty - handles not created until after all CreateFcns called % Hint: edit controls usually have a white background on Windows. % See ISPC and COMPUTER. if ispc set(hObject,'BackgroundColor','white'); else set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor') ); end function un22_Callback(hObject, eventdata, handles) % hObject handle to un22 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % Hints: get(hObject,'String') returns contents of un22 as text % str2double(get(hObject,'String')) returns contents of un22 as a double % --- Executes during object creation, after setting all properties. function bn22_CreateFcn(hObject, eventdata, handles) % hObject handle to bn22 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles empty - handles not created until after all CreateFcns called % Hint: edit controls usually have a white background on Windows. % See ISPC and COMPUTER. if ispc set(hObject,'BackgroundColor','white'); else set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor') ); end function bn22_Callback(hObject, eventdata, handles) % hObject handle to bn22 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % Hints: get(hObject,'String') returns contents of bn22 as text % str2double(get(hObject,'String')) returns contents of bn22 as a double % --- Executes during object creation, after setting all properties. Pagina: 56 de 72 Anexo PFC function cn22_CreateFcn(hObject, eventdata, handles) % hObject handle to cn22 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles empty - handles not created until after all CreateFcns called % Hint: edit controls usually have a white background on Windows. % See ISPC and COMPUTER. if ispc set(hObject,'BackgroundColor','white'); else set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor') ); end function cn22_Callback(hObject, eventdata, handles) % hObject handle to cn22 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % Hints: get(hObject,'String') returns contents of cn22 as text % str2double(get(hObject,'String')) returns contents of cn22 as a double % --- Executes during object creation, after setting all properties. function dn22_CreateFcn(hObject, eventdata, handles) % hObject handle to dn22 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles empty - handles not created until after all CreateFcns called % Hint: edit controls usually have a white background on Windows. % See ISPC and COMPUTER. if ispc set(hObject,'BackgroundColor','white'); else set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor') ); end function dn22_Callback(hObject, eventdata, handles) % hObject handle to dn22 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % Hints: get(hObject,'String') returns contents of dn22 as text % str2double(get(hObject,'String')) returns contents of dn22 as a double % --- Executes on button press in alumina. function alumina_Callback(hObject, eventdata, handles) % hObject handle to alumina (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB Pagina: 57 de 72 Anexo PFC % handles structure with handles and user data (see GUIDATA) open grosorlayers.fig lectura.m function [col1,col2]=lectura [file,pathname] = uigetfile('*.*');%Pide el fichero a abrir file_dades=[pathname file];%Guardem l'arxiu a llegir i el cami dados=fopen(file_dades,'r'); [col1, col2] = textread(file_dades,'%f%f%*[^\n]','delimiter',','); end calcularncauchy.m function [matriun21,matriun21teorica,matriun22teorica]=calcularncauchy(fd,col1, col2,un21,bn21,cn21,dn21,un22,bn22,cn22,dn22); m=length(col1); for h=1:1:m/fd matriun21(h,1)=10000000/col1(h*fd); matriun21(h,2)=col2(h*fd); %lambda nm %Reflectancia %matriun21teorica(h,2)=un21+(bn21/(matriun21(h,1)*matriun21(h,1)))+(cn 21/(matriun21(h,1)*matriun21(h,1)*matriun21(h,1)*matriun21(h,1))); %matriun21teorica(h,2)=un21+(bn21/(matriun21(h,1).^2))+(cn21/(matriun2 1(h,1).^4)); matriun21teorica(h,2)=un21+(bn21/(matriun21(h,1).^2))+(cn21/(matriun21 (h,1).^4))+(dn21/(matriun21(h,1).^8)); matriun22teorica(h,2)=un22+(bn22/(matriun21(h,1).^2))+(cn22/(matriun21 (h,1).^4))+(dn22/(matriun21(h,1).^8)); matriun21teorica(h,1)=matriun21(h,1); matriun22teorica(h,1)=matriun21(h,1); Ko=10E-3; Di=2000E-9; matriun21(h,3)=0; matriun21teorica(h,3)=Ko*exp(Di/matriun21(h,1)); matriun22teorica(h,3)=0; end calcularnsellmeier.m function [matriun21,matriun21teorica,matriun22teorica]=calcularncauchy(fd,col1, col2,un21,bn21,cn21,dn21,un22,bn22,cn22,dn22) m=length(col1); for h=1:1:m/fd matriun21(h,1)=10000000/col1(h*fd); matriun21(h,2)=col2(h*fd); matriun21teorica(h,2)=sqrt((1+(un21*matriun21(h,1).^2)/((matriun21(h,1 ).^2)-bn21)+(cn21*matriun21(h,1).^2)/((matriun21(h,1).^2)-dn21))); matriun22teorica(h,2)=sqrt((1+(un22*matriun21(h,1).^2)/((matriun21(h,1 ).^2)-bn22)+(cn22*matriun21(h,1).^2)/((matriun21(h,1).^2)-dn22))); Pagina: 58 de 72 Anexo PFC matriun21teorica(h,1)=matriun21(h,1); matriun22teorica(h,1)=matriun21(h,1); matriun21(h,3)=0; matriun21teorica(h,3)=0; matriun22teorica(h,3)=0; end calculartransmisioreflexio.m %**************************************************** % Càlcul de la transmissió i reflexió a partir de les matrius %***************************************************** function [RE,TE,RM,TM]= calculdetransmissioireflexio(Parametres,lnostra,long,lleguir,matriun21 ,D1M,var21,slcauchy,matriun21teorica,matriun22teorica,matriun31,matriu n22,var22,var32,var31,nestruc,var33,matriun33,rugoso,phi1,DsM,ns,phis, n1,D1E,DsE,var23) inc=1; global slsellmeier; global polnum; global un21 global bn21 global cn21 global dn21 global un22 global bn22 global cn22 global dn22 global tet2 global h21 global n21 global n1 global h21 for cont=1:1:long if (lleguir==1) l=matriun21(cont,1)*1E-9; else l=lnostra(cont); end lambda=l/1e-9; %Càlcul de TM MtotM=inv(D1M);%Inicialització de les matrius if ((var21==1)|(slcauchy==1)|(slsellmeier==1))&(polnum==1) if (slcauchy==1)|(slsellmeier==1) Parametres(1,1)=Calculan(matriun21(cont,1),matriun21teorica); else Parametres(1,1)=Calculan(matriun21(cont,1),matriun21teorica); end end if ((var31==1)|(slcauchy==1)|(slsellmeier==1))&(polnum==2) if (slcauchy==1)|(slsellmeier==1) Parametres(1,3)=Calculan(matriun21(cont,1),matriun22teorica); else Parametres(1,3)=Calculan(lambda,matriun31); end end if nestruc==2 Pagina: 59 de 72 Anexo PFC if var22==1 Parametres(2,1)=Calculan(lambda,matriun22); end if var32==1 Parametres(2,3)=Calculan(lambda,matriun32); end elseif nestruc==3 if var22==1 Parametres(2,1)=Calculan(lambda,matriun22); end if var32==1 Parametres(2,3)=Calculan(lambda,matriun32); end if var23==1 Parametres(3,1)=Calculan(lambda,matriun23); end if var33==1 Parametres(3,3)=Calculan(lambda,matriun33); end end % for val=1:1:nestruc %Parametres(val,3)=1; %Parametres(val,4)=1; %Parametres(val,5)=1; Parametres(val,1)=nag; if rugoso(val)==1 MM=CalculaMBragMRug(n1,phi1,Parametres(val,1),Parametres(val,2),Parame tres(val,3),Parametres(val,4),Parametres(val,5),l,rug2(val),nrug2(val) ,hrug2(val),rug3(val),nrug3(val),hrug3(val)); else MM=CalculaMBragM(n1,phi1,Parametres(val,1),Parametres(val,2),Parametre s(val,3),Parametres(val,4),Parametres(val,5),l,tet2(cont)); end MtotM=MtotM*MM; end MtotM=MtotM*DsM; M21M=MtotM(2,1); M11M=MtotM(1,1); rM=M21M/M11M; tM=1/M11M; ReflectanceM=(abs(rM))^2; TransmittanceM=((ns*cos(phis))/(n1*cos(phi1)))*((abs(tM))^2); RM(cont)=ReflectanceM; TM(cont)=TransmittanceM; %Càlcul de TE MtotE=inv(D1E); for val=1:1:nestruc if rugoso(val)==1 ME=CalculaMBragERug(n1,phi1,Parametres(val,1),Parametres(val,2),Parame tres(val,3),Parametres(val,4),Parametres(val,5),l,rug2(val),nrug2(val) ,hrug2(val),rug3(val),nrug3(val),hrug3(val)); Pagina: 60 de 72 Anexo PFC else ME=CalculaMBragE(n1,phi1,Parametres(val,1),Parametres(val,2),Parametre s(val,3),Parametres(val,4),Parametres(val,5),l,tet2(cont)); end MtotE=MtotE*ME; end MtotE=MtotE*DsE; M21E=MtotE(2,1); M11E=MtotE(1,1); rE=M21E/M11E; tE=1/M11E; ReflectanceE=(abs(rE))^2; TransmittanceE=((ns*cos(phis))/(n1*cos(phi1)))*((abs(tE))^2); RE(cont)=ReflectanceE; TE(cont)=TransmittanceE; end end fminquad.m % inicio del archivo fminquad.m % % codigo para calcular los coeficientes de una funcion % por el metodo de minimos cuadrados % 2.8 del libro de Edgar, Himmelblau & Lasdon (2001) % optimization of chemical processes % function [x,RE,TE,RM,TM]= fminquad(Parametres,lnostra,long,lleguir,matriun21,D1M,var21,slcauchy, matriun21teorica,matriun22teorica,matriun31,matriun22,var22,var32,var3 1,nestruc,var33,matriun33,rugoso,phi1,DsM,ns,phis,n1,D1E,DsE,RE,TE,RM, TM,var23,polnum); global tet2; global matriun21 global Parametres global lnostra global long global lleguir global D1M global var21 global slcauchy global slsellmeier global matriun21teorica global matriun22teorica global matriun31 global matriun22 global var22 global var23 global var32 global var31 global nestruc global var33 global matriun33 global rugoso global phi1 global DsM global ns Pagina: 61 de 72 Anexo global global global global global global global global global global global global global global global global global global global PFC phis n1 D1E DsE RE un21; bn21; cn21; dn21; un22; bn22; cn22; dn22; polnum; h21 n31 phi2 n1 n21 if (polnum==2) x0=[un21 bn21 cn21 dn21 un22 bn22 cn22 dn22 h21]; lb = [1 0 0 0 1 0 0 0 0]; ub = [700 100000 100000 100000 700 100000 100000 100000 2000]; options=optimset('LargeScale','on','Display','iter','MaxFunEvals',1000 ,'TolFun',1e-20,'TolX',1e-20); %[x,resnorm,residual,exitflag,output,lambda,jacobian]= lsqnonlin(fun,x0,lb,ub,options) [x,funx2,fun,flag,output,lambda,jacobian]= lsqnonlin(@xyquad2,x0,lb,ub,options); c0=x(1); c1=x(2); c2=x(3); c3=x(4); c4=x(5); c5=x(6); c6=x(7); c7=x(8);% reasignacion de parametros c8=x(9); else x0=[un21 bn21 cn21 dn21 h21]; lb = [1 0 0 0 0]; ub = [700 100000 100000 100000 2000]; options=optimset('LargeScale','on','Display','iter','MaxFunEvals',1000 ,'TolFun',1e-18,'TolX',1e-18); %[x,resnorm,residual,exitflag,output,lambda,jacobian]= lsqnonlin(fun,x0,lb,ub,options) [x,funx2,fun,flag,output,lambda,jacobian]= lsqnonlin(@xyquad2,x0,lb,ub,options); c0=x(1); c1=x(2); c2=x(3); c3=x(4); c4=x(5); end if (slcauchy==1) for h=1:1:length(matriun21) matriun21teorica(h,2)=c0+(c1/(matriun21(h,1).^2))+(c2/(matriun21(h,1). ^4))+(c3/(matriun21(h,1).^8)); if (polnum==2) Pagina: 62 de 72 Anexo PFC matriun22teorica(h,2)=c4+(c5/(matriun21(h,1).^2))+(c6/(matriun21(h,1). ^4))+(c7/(matriun21(h,1).^8)); end end end if (slsellmeier==1) for h=1:1:length(matriun21) matriun21teorica(h,2)=sqrt((1+(c0*matriun21(h,1).^2)/((matriun21(h,1). ^2)-c1)+(c2*matriun21(h,1).^2)/((matriun21(h,1).^2)-c3))); if (polnum==2) matriun22teorica(h,2)=sqrt((1+(c4*matriun21(h,1).^2)/((matriun21(h,1). ^2)-c5)+(c6*matriun21(h,1).^2)/((matriun21(h,1).^2)-c7))); end end end if (polnum==2) for conta=1:1:length(matriun21) phi2=asin((n1/matriun21teorica(conta,2))*(sin(phi1))); p2=n21*cos(phi2); k2x=(2*pi*matriun21teorica(conta,2)*cos(phi2))/(1E9*matriun21(conta,1)); tet2(conta)=k2x*c8; end else for conta=1:1:length(matriun21) phi2=asin((n1/matriun21teorica(conta,2))*(sin(phi1))); p2=n21*cos(phi2); k2x=(2*pi*matriun21teorica(conta,2)*cos(phi2))/(1E9*matriun21(conta,1)); tet2(conta)=k2x*c4; end end un21=x(1); bn21=x(2); cn21=x(3); dn21=x(4); h21= x(5); if (polnum==2) un22=x(5); bn22=x(6); cn22=x(7); dn22=x(8); h21=x(9); end [RE,TE,RM,TM]= calculdetransmissioireflexio(Parametres,lnostra,long,lleguir,matriun21 ,D1M,var21,slcauchy,matriun21teorica,matriun22teorica,matriun31,matriu n22,var22,var32,var31,nestruc,var33,matriun33,rugoso,phi1,DsM,ns,phis, n1,D1E,DsE,var23); % fin del archivo fminquad.m Xyquad2.m % % % % inicio del archivo xyquad.m codigo para calcular los coeficientes de una funcion por el metodo de minimos cuadrados 2.8 del libro de Edgar, Himmelblau & Lasdon (2001) Pagina: 63 de 72 Anexo PFC % optimization of chemical processes % function [fi2]=xyquad(x,Parametres,lnostra,long,lleguir,matriun21,D1M,var21,slc auchy,matriun21teorica,matriun22teorica,matriun31,matriun22,var22,var3 2,var31,nestruc,var33,matriun33,rugoso,phi1,DsM,ns,phis,n1,D1E,DsE,var 23); global h21 global tet2 global matriun21 global Parametres global lnostra global long global lleguir global D1M global var21 global slcauchy global slsellmeier global matriun21teorica global matriun22teorica global matriun31 global matriun22 global var22 global var23 global var32 global var31 global nestruc; global var33; global matriun33; global rugoso; global phi1; global DsM; global ns; global phis; global n1; global D1E; global DsE;32 global RE; global un21; global bn21; global cn21; global dn21; global un22; global bn22; global cn22; global dn22; global polnum; global n31; global phi2; global n1 global n21 if (polnum==2) c0=x(1); c1=x(2); c2=x(3); c3=x(4); c4=x(5); c5=x(6); c6=x(7); c7=x(8);c8= x(9); else c0=x(1); c1=x(2); c2=x(3); c3=x(4);c4=x(5); end if (slcauchy==1) if (polnum==1) for h=1:1:length(matriun21) Pagina: 64 de 72 Anexo PFC matriun21teorica(h,2)=c0+(c1/(matriun21(h,1).^2))+(c2/(matriun21(h,1). ^4))+(c3/(matriun21(h,1).^8)); end else for h=1:1:length(matriun21) matriun21teorica(h,2)=c0+(c1/(matriun21(h,1).^2))+(c2/(matriun21(h,1). ^4))+(c3/(matriun21(h,1).^8)); matriun22teorica(h,2)=c4+(c5/(matriun21(h,1).^2))+(c6/(matriun21(h,1). ^4))+(c7/(matriun21(h,1).^8)); end end end if (slsellmeier==1) for h=1:1:length(matriun21) matriun21teorica(h,2)=sqrt((1+(c0*matriun21(h,1).^2)/((matriun21(h,1). ^2)-c1)+(c2*matriun21(h,1).^2)/((matriun21(h,1).^2)-c3))); if (polnum==2) matriun22teorica(h,2)=sqrt((1+(c4*matriun21(h,1).^2)/((matriun21(h,1). ^2)-c5)+(c6*matriun21(h,1).^2)/((matriun21(h,1).^2)-c7))); end end end %calcul de tetha en funcio del espesor de la capa if (polnum==2) for conta=1:1:length(matriun21) phi2=asin((n1/matriun21teorica(conta,2))*(sin(phi1))); p2=n21*cos(phi2); k2x=(2*pi*matriun21teorica(conta,2)*cos(phi2))/(1E9*matriun21(conta,1)); tet2(conta)=k2x*c8; end else for conta=1:1:length(matriun21) phi2=asin((n1/matriun21teorica(conta,2))*(sin(phi1))); p2=n21*cos(phi2); k2x=(2*pi*matriun21teorica(conta,2)*cos(phi2))/(1E9*matriun21(conta,1)); tet2(conta)=k2x*c4; end end [RE,TE,RM,TM]= calculdetransmissioireflexio(Parametres,lnostra,long,lleguir,matriun21 ,D1M,var21,slcauchy,matriun21teorica,matriun22teorica,matriun31,matriu n22,var22,var32,var31,nestruc,var33,matriun33,rugoso,phi1,DsM,ns,phis, n1,D1E,DsE,var23); fi2=(RE')-(matriun21(:,2)); % fin del archivo xyquad.m calculaMbragE.m function MNperE=CalculaMBragE(n1,phi1,n2,h2,n3,h3,N,l,tet2) Pagina: 65 de 72 Anexo PFC global polnum M2E=CalculaMTE(n1,phi1,n2,h2,l,tet2); if polnum==2 M3E=CalculaMTE(n1,phi1,n3,h3,l,tet2); else M3E=[1 0;0 1]; end M1perE=M2E*M3E; MNperE=(M1perE)^N; calculaMbragM.m function MNperM=CalculaMBragM(n1,phi1,n2,h2,n3,h3,N,l,tet2) global polnum M2M=CalculaMTM(n1,phi1,n2,h2,l,tet2); if polnum==2 M3M=CalculaMTM(n1,phi1,n3,h3,l,tet2); else M3M=[1 0;0 1]; end M1perM=M2M*M3M; MNperM=(M1perM)^N; CalculaMTE.m function M=CalculaMTE(n1,phi1,n2,h2,l,tet2) global polnum phi2=asin((n1/n2)*(sin(phi1))); p2=n2*cos(phi2); if polnum==2 k2x=(2*pi*n2*cos(phi2))/l; tet2=k2x*h2; end D2=[1 1;p2 -p2]; P211=exp(i*tet2); P222=exp(-i*tet2); P2mat=[P211 0;0 P222]; M=D2*P2mat*(inv(D2)); CalculaMTM.m function M=CalculaMTM(n1,phi1,n2,h2,l,tet2) global polnum phi2=asin((n1/n2)*(sin(phi1))); p2=n2*cos(phi2); %k2x=(2*pi*n2*cos(phi2))/l; %tet2=k2x*h2; if polnum==2 k2x=(2*pi*n2*cos(phi2))/l; tet2=k2x*h2; end D2=[cos(phi2) cos(phi2);n2 -n2]; P211=exp(i*tet2); P222=exp(-i*tet2); P2mat=[P211 0;0 P222]; Pagina: 66 de 72 Anexo PFC M=D2*P2mat*(inv(D2)); Calculan.m function n3=Calculan(lambda,matriun3) %Lambda en nm %Se le pasa la tabla donde la primera columna es lambda y la segunda y %tercera son la n y la k respectivamente y te devuelve la n=n-iK %correspondiente a la lambda que le pides (util para las tablas de PAlik) long2=length(matriun3); var=1; while ((matriun3(var,1)<lambda)&(var<long2)) var=var+1; end if (matriun3(var,1))==lambda n3=matriun3(var,2)-i*matriun3(var,3); elseif (((var==long2)&(matriun3(var,1)<lambda)))|(var==1) n3=matriun3(var,2)-i*matriun3(var,3); else a=matriun3(var-1,1); b=matriun3(var,1); c=matriun3(var-1,2); d=matriun3(var,2); n=c+(((d-c)*(lambda-a))/(b-a)); c=matriun3(var-1,3); d=matriun3(var,3); k=c+(((d-c)*(lambda-a))/(b-a)); n3=n-i*k; end escriuredades.m function escriuredades(lleguir,lnostra,cabecera,valor,matriun21,matriun21teoric a,RE,n23,h23,n33,h33,N3,var21,var31,nestruc,h21,h31,N1,n31,TE,TM,RM) %if escriure==1 [OutputFile path]=uiputfile('*.dat','Save as',' .dat'); if OutputFile==0 return; % if no chosen file else, InFilePath=[path, OutputFile]; end, InPath=path; if length(path)>3, InPath(end)=32; %erase the backslash at the end InPath=setstr(InPath); end, cd (InPath); [fid, message]=fopen(InFilePath,'w'); if fid<0 ErrorH=errordlg( ['Can not write to file: ',upper(InFilePath)], 'ERROR!', 'modal'); uiwait(ErrorH); return; Pagina: 67 de 72 Anexo PFC else, % if cabecera==1 if strcmp(modeSaving,'with'), fprintf(fid,'\r\nSimulation of the multilayer structure\n'); 1st layer= %s periods: %g ', 1st layer= %s periods: %g ', 1st layer= %g periods: %g ', 1st layer= %g periods: %g ', 1st layer= %s periods: %g ', 1st layer= %s periods: %g ', 1st layer= %g periods: %g ', 1st layer= %g periods: %g ', 1st layer= %s periods: %g ', 1st layer= %s periods: %g ', 1st layer= %g periods: %g ', 1st layer= %g periods: %g ', fprintf(fid,'\r\n\r\nParameters: '); switch (nestruc) case 1 if (var21==1) & (var31==1) fprintf(fid,'\r\n Bilayer structure 1: n h 1st layer= %g nm n 2nd layer= %s h 2nd layer= %g nm handles.n21string,h21,handles.n31string,h31,N1 ); elseif var21==1 fprintf(fid,'\r\n Bilayer structure 1: n h 1st layer= %g nm n 2nd layer= %g h 2nd layer= %g nm handles.n21string,h21,n31,h31,N1 ); elseif var31==1 fprintf(fid,'\r\n Bilayer structure 1: n h 1st layer= %g nm n 2nd layer= %s h 2nd layer= %g nm n21,h21,handles.n31string,h31,N1 ); else fprintf(fid,'\r\n Bilayer structure 1: n h 1st layer= %g nm n 2nd layer= %g h 2nd layer= %g nm n21,h21,n31,h31,N1 ); end case 2 if (var21==1) & (var31==1) fprintf(fid,'\r\n Bilayer structure 1: n h 1st layer= %g nm n 2nd layer= %s h 2nd layer= %g nm handles.n21string,h21,handles.n31string,h31,N1 ); elseif var21==1 fprintf(fid,'\r\n Bilayer structure 1: n h 1st layer= %g nm n 2nd layer= %g h 2nd layer= %g nm handles.n21string,h21,n31,h31,N1 ); elseif var31==1 fprintf(fid,'\r\n Bilayer structure 1: n h 1st layer= %g nm n 2nd layer= %s h 2nd layer= %g nm n21,h21,handles.n31string,h31,N1 ); else fprintf(fid,'\r\n Bilayer structure 1: n h 1st layer= %g nm n 2nd layer= %g h 2nd layer= %g nm n21,h21,n31,h31,N1 ); end if (var22==1) & (var32==1) fprintf(fid,'\r\n Bilayer structure 2: n h 1st layer= %g nm n 2nd layer= %s h 2nd layer= %g nm handles.n22string,h22,handles.n32string,h32,N2 ); elseif var22==1 fprintf(fid,'\r\n Bilayer structure 2: n h 1st layer= %g nm n 2nd layer= %g h 2nd layer= %g nm handles.n22string,h22,n32,h32,N2 ); elseif var32==1 fprintf(fid,'\r\n Bilayer structure 2: n h 1st layer= %g nm n 2nd layer= %s h 2nd layer= %g nm n22,h22,handles.n32string,h32,N2 ); else fprintf(fid,'\r\n Bilayer structure 2: n h 1st layer= %g nm n 2nd layer= %g h 2nd layer= %g nm n22,h22,n32,h32,N2 ); end Pagina: 68 de 72 Anexo 1st layer= %s periods: %g ', 1st layer= %s periods: %g ', 1st layer= %g periods: %g ', 1st layer= %g periods: %g ', 1st layer= %s periods: %g ', 1st layer= %s periods: %g ', 1st layer= %g periods: %g ', 1st layer= %g periods: %g ', 1st layer= %s periods: %g ', 1st layer= %s periods: %g ', 1st layer= %g periods: %g ', 1st layer= %g periods: %g ', PFC case 3 if (var21==1) & (var31==1) fprintf(fid,'\r\n Bilayer structure 1: n h 1st layer= %g nm n 2nd layer= %s h 2nd layer= %g nm handles.n21string,h21,handles.n31string,h31,N1 ); elseif var21==1 fprintf(fid,'\r\n Bilayer structure 1: n h 1st layer= %g nm n 2nd layer= %g h 2nd layer= %g nm handles.n21string,h21,n31,h31,N1 ); elseif var31==1 fprintf(fid,'\r\n Bilayer structure 1: n h 1st layer= %g nm n 2nd layer= %s h 2nd layer= %g nm n21,h21,handles.n31string,h31,N1 ); else fprintf(fid,'\r\n Bilayer structure 1: n h 1st layer= %g nm n 2nd layer= %g h 2nd layer= %g nm n21,h21,n31,h31,N1 ); end if (var22==1) & (var32==1) fprintf(fid,'\r\n Bilayer structure 2: n h 1st layer= %g nm n 2nd layer= %s h 2nd layer= %g nm handles.n22string,h22,handles.n32string,h32,N2 ); elseif var22==1 fprintf(fid,'\r\n Bilayer structure 2: n h 1st layer= %g nm n 2nd layer= %g h 2nd layer= %g nm handles.n22string,h22,n32,h32,N2 ); elseif var32==1 fprintf(fid,'\r\n Bilayer structure 2: n h 1st layer= %g nm n 2nd layer= %s h 2nd layer= %g nm n22,h22,handles.n32string,h32,N2 ); else fprintf(fid,'\r\n Bilayer structure 2: n h 1st layer= %g nm n 2nd layer= %g h 2nd layer= %g nm n22,h22,n32,h32,N2 ); end if (var23==1) & (var33==1) fprintf(fid,'\r\n Bilayer structure 3: n h 1st layer= %g nm n 2nd layer= %s h 2nd layer= %g nm handles.n23string,h23,handles.n33string,h33,N3 ); elseif var23==1 fprintf(fid,'\r\n Bilayer structure 3: n h 1st layer= %g nm n 2nd layer= %g h 2nd layer= %g nm handles.n23string,h23,n33,h33,N3 ); elseif var33==1 fprintf(fid,'\r\n Bilayer structure 3: n h 1st layer= %g nm n 2nd layer= %s h 2nd layer= %g nm n23,h23,handles.n33string,h33,N3 ); else fprintf(fid,'\r\n Bilayer structure 3: n h 1st layer= %g nm n 2nd layer= %g h 2nd layer= %g nm n23,h23,n33,h33,N3 ); end end switch valor case 1 fprintf(fid,'\r\n\r\n Wavelength (nm) Reflectivity (TE) Reflectivity (TM) '); fprintf(fid,'\r\n----------------------------------------------------------------------------------------------------------\r\n\r\n'); Pagina: 69 de 72 Anexo PFC if (lleguir==1) wavelen=matriun21(:,1); else wavelen=lnostra/1e-9; end for contpos=1:1:length(wavelen) fprintf(fid,' %12.3f %5.4f %5.4f',wavelen(contpos),RE(contpos),RM(contpos)); fprintf(fid,'\r\n'); end case 2 fprintf(fid,'\r\n\r\n Wavelength (nm) Transmission (TE) Transmission (TM) '); fprintf(fid,'\r\n----------------------------------------------------------------------------------------------------------\r\n\r\n'); if (lleguir==1) wavelen=matriun21(:,1); else wavelen=lnostra/1e-9; end for contpos=1:1:length(wavelen) fprintf(fid,' %12.3f %5.4f %5.4f',wavelen(contpos),TE(contpos),TM(contpos)); fprintf(fid,'\r\n'); end case 3 fprintf(fid,'\r\n\r\n Wavelength (nm) Reflectivity (TE) Reflectivity (TM) Transmission (TE) Transmission (TM)'); fprintf(fid,'\r\n----------------------------------------------------------------------------------------------------------\r\n\r\n'); if (lleguir==1) wavelen=matriun21(:,1); else wavelen=lnostra/1e-9; end for contpos=1:1:length(wavelen) fprintf(fid,' %12.3f %5.4f %5.4f %5.4f %5.4f',wavelen(contpos),RE(contpos),RM(contpos),TE(contpos),TM(contpos )); fprintf(fid,'\r\n'); end case 4 fprintf(fid,'\r\n\r\n Wavelength (nm) Absorption (TE) Absorption (TM) '); fprintf(fid,'\r\n----------------------------------------------------------------------------------------------------------\r\n\r\n'); if (lleguir==1) wavelen=matriun21(:,1); else wavelen=lnostra/1e-9; end for contpos=1:1:length(wavelen) fprintf(fid,' %12.3f %5.4f %5.4f',wavelen(contpos),AE(contpos),AM(contpos)); fprintf(fid,'\r\n'); end Pagina: 70 de 72 Anexo Reflectivity (TE) (TM)'); PFC case 5 fprintf(fid,'\r\n\r\n Wavelength (nm) Reflectivity (TM) Absorption (TE) Absorption fprintf(fid,'\r\n----------------------------------------------------------------------------------------------------------\r\n\r\n'); if (lleguir==1) wavelen=matriun21(:,1); else wavelen=lnostra/1e-9; end for contpos=1:1:length(wavelen) fprintf(fid,' %12.3f %5.4f %5.4f %5.4f %5.4f',wavelen(contpos),RE(contpos),RM(contpos),AE(contpos),AM(contpos )); fprintf(fid,'\r\n'); end case 6 fprintf(fid,'\r\n\r\n Wavelength (nm) Transmission (TE) Transmission (TM) Absorption (TE) Absorption (TM) '); fprintf(fid,'\r\n----------------------------------------------------------------------------------------------------------\r\n\r\n'); if (lleguir==1) wavelen=matriun21(:,1); else wavelen=lnostra/1e-9; end for contpos=1:1:length(wavelen) fprintf(fid,' %12.3f %5.4f %5.4f %5.4f %5.4f',wavelen(contpos),TE(contpos),TM(contpos),AE(contpos),AM(contpos )); fprintf(fid,'\r\n'); end case 7 fprintf(fid,'\r\n\r\n Wavelength (nm) Reflectivity (TE) Reflectivity (TM) Transmission (TE) Transmission (TM) Absorption (TE) Absorption (TM)'); fprintf(fid,'\r\n----------------------------------------------------------------------------------------------------------------------------\r\n\r\n'); if (lleguir==1) wavelen=matriun21(:,1); else wavelen=lnostra/1e-9; end for contpos=1:1:length(wavelen) fprintf(fid,' %12.3f %5.4f %5.4f %5.4f %5.4f %5.4f %5.4f',wavelen(contpos),RE(contpos),RM(contpos),TE(contpos),TM(contpos ),AE(contpos),AM(contpos)); fprintf(fid,'\r\n'); end end fclose(fid); else %Slo para (Rte+Rtm)*0.5 if (lleguir==1) Pagina: 71 de 72 Anexo PFC wavelen=matriun21(:,1); else wavelen=lnostra/1e-9; end for contpos=1:1:length(wavelen) fprintf(fid,'%12.6f\t%5.6f',wavelen(contpos),(0.5*RE(contpos)+0.5*RM(c ontpos))); fprintf(fid,'\r\n'); end fclose(fid); end end end Pagina: 72 de 72