Funciones de EES

3 FUNCIONES Y PROCEDIMIENTOS Una función de EES es un segmento de código que acepta una o más entradas y devuelve un

Views 58 Downloads 1 File size 531KB

Report DMCA / Copyright

DOWNLOAD FILE

Recommend stories

Citation preview

3

FUNCIONES

Y

PROCEDIMIENTOS Una función de EES es un segmento de código que acepta una o más entradas y devuelve un único resultado asociado con el nombre de función. Un procedimiento de EES es similar a una función, pero puede devolver uno o más resultados y se accede a ella por la instrucción Call. El código que se emplea en funciones y procedimientos es dramáticamente diferente del código utilizado en la parte principal de un programa de EES; funciones y procedimientos utilizan instrucciones de asignación en lugar de igualdades. Funciones y procedimientos proporcionan varias ventajas importantes. En primer lugar, hacen que sea más fácil para programar un modelo grande al permitir que el código que se divide en varias partes más pequeñas que son cada uno más fácil de entender y depurar. En segundo lugar, EES funciones y procedimientos permite el uso de sentencias de lógica de programación, como por ejemplo, la repetición, hasta e instrucciones GOTO If-Then-Else, que no se pueden utilizar en el cuerpo principal de EES. En tercer lugar, las funciones y procedimientos se pueden guardar en un archivo después de que hayan sido depurado y comprobado, que les permite ser re-utilizados en otros programas de la EEE o en un archivo de biblioteca, como se explica en el capítulo 11. Este capítulo presenta las capacidades básicas de las funciones y procedimientos. Subprogramas y módulos comparten algunas de las ventajas de las funciones y procedimientos, pero utilizan ecuaciones en lugar de asignaciones como se discutió en el capítulo 10.

3.1Ecuaciones y Instrucciones de asignación Las instrucciones que se introducen en el cuerpo principal de un programa de EES proporcionan un conjunto de ecuaciones en lugar de instrucciones de asignación. instrucciones de asignación se utilizan en la mayoría de los lenguajes de programación de alto nivel. La diferencia entre una ecuación y una instrucción de asignación puede ser entendido con la declaración siguiente simple: X = X + 1

Esta declaración no puede ser una ecuación válida, ya que la variable X no puede ser igual a X + 1. Si se introduce este contenido en la ventanilla de las ecuaciones EES, intentará resolver numéricamente, usando los métodos descritos en la sección 5.1. Con los criterios de parada por defecto, EES encontrará una solución de X = 5x1017. Con este valor de X, el residual (que está relacionada con la diferencia entre el lados izquierdo y derecho de la ecuación) es menor que la tolerancia predeterminada; Por lo tanto, parece EES ser una solución válida. Sin embargo, esto probablemente no es la solución que se pretendía. La ecuación X = X + 1 es una instrucción de asignación. Las sentencias de asignación asignan explícitamente el valor de la variable en el lado izquierdo del signo igual (en este caso X) con el valor de la expresión en el lado derecho del signo igual (en este caso X + 1). Todas las variables que aparecen en el lado derecho del signo igual en una instrucción de asignación deben tener valores definidos previamente. Por ejemplo, si el valor actual de X es 8 a continuación, la ejecución de esta instrucción de asignación lo cambiaría a ser 9.

82

Capítulo 3: Funciones y Procedimientos

El operador de asignación Todas las ecuaciones que aparecen en las funciones y procedimientos de la EEE debe haber instrucciones de asignación en lugar de ecuaciones. Las primeras versiones de EES requieren que las instrucciones de asignación utilizan el operador de asignación (: =) en lugar de un signo igual. Por lo tanto, la instrucción de asignación anterior aparecería como: X: = X +1

Este requisito se ha relajado en las versiones actuales de EES por la aplicación de la opción Permitir = diálogo en la función / procedimiento ecuaciones que se pueden seleccionar en la pestaña Opciones de las preferencias como se muestra en La Figura 3-1. Esta opción está seleccionada por defecto y provoca EES para aceptar tanto el signo igual y el operador de asignación de funciones y procedimientos.

Figura 3-1: Preferencias de diálogo que muestra la opción que permite el signo = para instrucciones de asignación.

Las sentencias de asignación son mucho más estructurados que las ecuaciones. Cada declaración incluida en una función o procedimiento debe estar dispuesto de manera que la variable que se está asignando un valor aparece por sí mismo en el lado izquierdo de la declaración. Las instrucciones se ejecutan exactamente en el orden en que se introducen. Una ventaja principal de instrucciones de asignación es que permiten el uso de construcciones lógicas, tales como estados de Si-THEN-ELSE, como se describe en la Sección 3.4.

3.2funciones EES funciones internas se pueden escribir directamente en la ventana de ecuaciones. Las funciones externas pueden ser escritos en cualquier lenguaje compilado, como se discutió en el Capítulo 19. Formato de las funciones Las funciones internas deben tener el formato como se muestra a continuación:

Capítulo 3: Funciones y Procedimientos

83

Function_Name función (Entrada 1, Entrada 2, ..., N de entrada) instrucción de asignación (s) - nota de que uno de ellos debe tener la forma: Function_Name = ... Fin al

Las declaraciones de funciones deben aparecer en la parte superior de la ventana de ecuaciones, antes que cualquiera de las ecuaciones en el cuerpo principal del programa EES. Las declaraciones de funciones deben empezar con la función de la palabra clave. El nombre de la función (Function_Name) y los argumentos (Entrada 1, etc.) siguen en la misma línea. Los argumentos están encerrados entre paréntesis y separados por un delimitador de lista (que es la coma para el sistema de Estados Unidos y el punto y coma para el sistema europeo). La declaración de la función se termina mediante la palabra clave final. Las declaraciones que aparecen en las funciones (y procedimientos) deben ser instrucciones de asignación (como se discute en la Sección 3.1) o estados lógicos (discutidos en la Sección 3.4). EES procesa estas declaraciones en el orden en que aparecen a menos que se lo indique las instrucciones lógicas. Las funciones se denominan mediante el uso de su nombre en una ecuación: X = Function_Name (Entrada 1, Entrada 2, ..., N de entrada)

Una función debe tener al menos un argumento y debe ser llamado con el mismo número de argumentos que aparecen en la declaración de la función. Los nombres de los argumentos en la necesidad declaración llamando no coincidir con el nombre de los argumentos de la declaración de la función; Sólo su orden importa. Los estados dentro de la función sólo puede referirse a variables que se pasan a la función como argumentos de entrada o previamente definidos dentro de la función en sí. Todas las variables utilizadas en el cuerpo de una función local de la función, excepto las variables globales en el cuerpo principal de un programa de EES que se han definido usando la directiva $ Común, que se describe en la Sección 14.3. Las funciones devuelven el valor asignado en la declaración Function_Name = ... en el cuerpo de la función. Las funciones pueden referirse a cualquier otra función incorporada, procedimiento o otras entidades de programas que se han cargado mediante un archivo de biblioteca (véase el Capítulo 11). Sin embargo funciones no pueden llamarse a sí mismos, es decir, que no se pueden utilizar de forma recursiva. Las funciones no pueden llamar a un módulo pero pueden llamar subprogramas (descritos en el Capítulo 10). Funciones (y procedimientos) debe utilizar la configuración del sistema unidad que se establecen en el programa principal. sistema de unidad diferente para cada función o procedimiento no se puede especificar. En primer ejemplo de una función El formato y la utilidad de las funciones serán demostradas con unos pocos ejemplos. El primer ejemplo se devuelve el factor de fricción Darcy (f) para las entradas de flujo dada internos de número de Reynolds (Re) y la rugosidad relativa (RR). La correlación que vamos a utilizar fue desarrollado por Churchill (1977) y se muestra en la Ec. (3-1).

84 

Capítulo 3: Funciones y Procedimientos   F 8  8

  2.457 En

1

  37530



(3-1) 

La función que devuelve el factor de fricción f será llamado f_Darcy. Un listado de la función sigue. Función f_Darcy (Re, RR) f = 8 * ((8 / Re) ^ 12 + ((2.457 * ln (1 / ((7 / Re) ^ 0.9 + 0.27 * (RR)))) ^ 16+ (37530 /Re)^16)^(-1.5))^(1/12) f_Darcy = extremo f

La función que deben aparecer en la parte superior de la ventana de ecuaciones, antes que cualquiera de las ecuaciones de la sección principal del programa EES. La función se accede por su nombre con los valores previstos número de Reynolds y la rugosidad relativa. El siguiente código, introducida después de la declaración de la función: Re = 5000 [-] "Número de Reynolds" RR = 0,001 [-] "Rugosidad relativa" f = f_Darcy (Re, RR) "Factor de fricción Darcy"

dará lugar a la solución mostrada en la ventana Figura 3-2(un). Tenga en cuenta que además de la lengüeta principal que muestra las variables en la ventana de ecuaciones ahora hay una segunda pestaña con una etiqueta que corresponde al área de trabajo de función. Al seleccionar la pestaña f_Darcy muestra la ventana se muestra en SolucionesFigura 3-2(B), que contiene los valores de las variables en el espacio de trabajo de función durante la última llamada a la función.

(a) (si) Figura 3-2: Soluciones de ventana que muestra (a) principal y (b) f_Darcy pestañas.

85

Capítulo 3: Funciones y Procedimientos

Segundo ejemplo de una función Como un segundo ejemplo, vamos a desarrollar una función que implementa la ecuación de PengRobinson de estado, mostrados en la Ec. (3-2), con el fin de estimar la presión de un fluido (P) dado su volumen específico (V) y la temperatura (T). VerKlein y Nellis (2012) para más información sobre esta y otras ecuaciones de estado. RT un PAG    v - b v  v si si  v - b

(3-2)

Para el fluido de interés, los parámetros en la ecuación de Peng-Robinson de estado son R = 188,9 J / kg-K, a = 70,89 N-m4 / kg2 y b = 0,0006059 m3 / kg. La función se llama PR y se coloca en la parte superior de la ventana de ecuaciones: Función PR (v, T) R = 188,9 [J / kg-K] a = 70,89 [Nm ^ 4 / kg ^ 2] b = 0,0006059 [m ^ 3 / kg] PR = R * T / (vb) -a / (v * (v + b) + b * (VB)) End

Tenga en cuenta que las unidades de las constantes se especifican entre corchetes, como se discute en la Sección 1.5. La función de PR se llama con el fin de estimar la presión en v = 0,1 m3 / kg y T = 325 K con el código siguiente: v = 0,1 [m ^ 3 / kg] "volumen específico" T = 325 [K] "temperatura" P = PR (v, T) "La presión, estimada a partir de la ecuación de Peng-Robinson de Estado"

Ajuste y comprobación de las unidades de las variables de función Una vez más, la ventana Solución tendrá dos pestañas: una para la ventana principal Ecuaciones y otra para el espacio de trabajo de relaciones públicas de funciones. funciones o procedimientos adicionales resultarán en fichas adicionales. Las unidades de cada variable en el programa principal se pueden ajustar haciendo clic derecho sobre el nombre de la variable en la pestaña principal de la ventana de soluciones, que es la demostraciónn en la Figura 3-3(un).

(a) (si) Figura 3-3: (a) pestaña principal de la ventana Soluciones que muestra advertencias unitarios y (b) PR lengüeta de la función que muestra las unidades establecidas para cada variable.

86

Capítulo 3: Funciones y Procedimientos

Tenga en cuenta que incluso con las unidades de todas las variables en la ventana de ecuaciones ajustado correctamente, EES sigue reportando varios problemas posibles de la unidad. Elija la fecha de unidades con el fin de visualizar las unidades de diálogo Check muestran enLa Figura 34. Las advertencias unidad del resultado del hecho de que las unidades de las variables utilizadas en el espacio de trabajo de la función de PR no se han fijado y por lo tanto son incompatibles entre sí y también incompatibles con las unidades de los argumentos que se pasan hacia atrás y adelante entre la función y la Ventana de ecuaciones . cheques EES la consistencia unidad de las variables en las funciones y procedimientos (y los módulos y subprogramas, que se analizan en el Capítulo 10), así como las variables en la ventana de ecuaciones. Seleccione la pestaña de PR en la ventana de Soluciones y especificar las unidades de cada una de las variables en el espacio de trabajo de relaciones públicas, como se muestra enFigura 3-3(si). Tenga en cuenta que las unidades de cada una de las variables internas al espacio de trabajo PR (a, b, y R), así como los argumentos de entrada (V y T) y la salida (PR) deben estar ajustados en la advertencia consistencia unidad de evitar.

Figura 3-4: Comprobar diálogo Unidades.

Información sobre la variable de página para la función También hay una página en el cuadro de diálogo Información de la variable correspondiente a cada función y procedimiento definido. Abrir la ventana de información variable (seleccione Información variable en el menú Opciones) y luego seleccione Función PR desde el menú desplegable para acceder al diálogo que se muestra en Figura 3-5. Las unidades de cada variable en el espacio de trabajo de relaciones públicas también se pueden configurar utilizando la ventana de información variable al igual que el formato de visualización. Guess valores y límites no son aplicables en una función o procedimiento, ya que utilizan instrucciones de asignación en lugar de ecuaciones.

Capítulo 3: Funciones y Procedimientos

87

Figura 3-5: PR Página de la función del cuadro de diálogo de información variable.

3.3procedimientos procedimientos EES son muy similares a las funciones de la EEE, a excepción de que permiten múltiples salidas y deben ser accedidos usando el comando Llamar. Formato de Procedimientos El formato de un procedimiento se muestra a continuación: Procedimiento procedure_name (Entrada 1, Entrada 2, ..., N Entrada: Salidas 1, 2, ..., M salida) sentencia (s) Asignación - Tenga en cuenta que algunos de estos debe tener la forma: Salida 1 = 2 = salida ... ... ... Salida M = Fin ...

declaraciones de procedimiento deben aparecer en la parte superior de la ventana de ecuaciones, junto con las declaraciones de funciones y tienen que empezar con el Procedimiento de palabras clave. El nombre del procedimiento (procedure_name) y la lista de argumentos siguen en la misma línea. La lista de argumentos se encierra entre paréntesis. El primer conjunto de argumentos son entradas (entrada 1, entrada 2, etc.); estos son valores que típicamente son conocidos y especificados en el momento que el procedimiento se llama. La lista de entrada se termina por dos puntos que es seguido por la lista de salida (Output 1, la salida 2, etc.). Las salidas deben ser calculados dentro del cuerpo del procedimiento. El procedimiento se termina por la finalización de palabras clave. Al igual que las funciones, que se analizan en la sección 3.2, el código utilizado para procedimientos de escritura debe ser instrucciones de asignación o instrucciones lógicas. EES procesa estas declaraciones en el orden en que aparecen. Los procedimientos se accede utilizando el comando Llamar: Llamada procedure_name (Entrada 1, Entrada 2, ..., N Entrada: Salidas 1, 2, ..., M salida)

88

Capítulo 3: Funciones y Procedimientos

Siguiendo el comando de llamadas, los valores de las variables de salida (salida 1, la salida 2, etc.) serán asignados por el procedimiento. Un procedimiento debe ser llamado con el mismo número de argumentos que aparecen en la sentencia de procedimiento. El nombre de los argumentos en la necesidad declaración llamando no coincidir con el nombre de los argumentos de la sentencia de procedimiento; Sólo su orden importa. Los argumentos pueden ser constantes, variables de cadena, variables numéricas, o expresiones algebraicas. Al igual que con una función, el procedimiento tiene su propio espacio de trabajo local. Declaraciones dentro del procedimiento no puede referirse a variables que no se pasan al procedimiento, previamente definidos en el procedimiento en sí, o definido a ser global usando la directiva $ Común. Las funciones pueden referirse a cualquier otra función incorporada, procedimiento o otras entidades de programas que se han cargado utilizando un archivo de biblioteca (Capítulo 11). Sin embargo procedimientos, como funciones, no pueden llamarse a sí mismos. Los procedimientos no pueden llamar a un módulo pero pueden llamar a subprogramas (descritos en el capítulo 10). Ejemplo de un Procedimiento Vamos a ilustrar el uso de un procedimiento con un ejemplo sencillo que se encuentra el producto, ratio, suma y diferencia (M, D, A, S) de dos valores (X e Y): Procedimiento de prueba (X, Y: M, D, A, S) M: = X * Y D: = X / Y A: = X + Y S: = XY final

"multiplicar" "dividir" "añadir" "sustraer"

Una instrucción Call válida para Procedimiento de prueba se muestra más arriba es: Llamada de Prueba (33,44: producto, cociente, suma, la diferencia) "Llamada a Procedimiento de la Prueba"

Cuando se ejecuta este código, EES asignará X e Y en Procedimiento de prueba a ser 33 y 44, respectivamente. Se evaluará cada una de las cuatro salidas y asignarlos a los cuatro valores en la lista de salida: producto, cociente, Suma y Diferencia. Una pestaña en la ventana de Soluciones muestra las variables de la ventana principal Ecuaciones y el espacio de trabajo para el procedimiento de prueba, como se muestra en Figura 3-6.

Capítulo 3: Funciones y Procedimientos

89

(a) (si) Figura 3-6: fichas de la ventana solución para (a) Ventana Ecuación principal y (b) el espacio de trabajo para el procedimiento de Prueba.

Aunque un procedimiento normalmente se escribe para aceptar entradas y salidas de retorno, también es posible llamar al procedimiento de las ecuaciones Ventana, subprograma o módulo con el suministro de algunos de los valores de salida con el fin de tenerlo calcular una o más de las valores de entrada. Esto es posible porque EES interpreta el procedimiento como un conjunto de ecuaciones que relacionan cada salida a las entradas. Por lo tanto, intentará resolver el conjunto de ecuaciones resultante de forma iterativa. Por ejemplo, el Procedimiento de prueba podría ser llamado en la siguiente forma: Llamada de Prueba (X, Y: producto, cociente, 88, 32) "Llamada alternativa al procedimiento de prueba"

En este caso, se especifican los valores de las dos últimas salidas. Estas salidas son la suma y diferencia de las entradas, X y Y. EES intentará determinar los valores de las entradas X e Y que proporcionan las salidas especificadas, utilizando iteración si es necesario. Después de la resolución, la ventana Solución aparecerá como se muestran en la Figura 3-7.

Figura 3-7: Ventana Solución que muestra los resultados locales para el Procedimiento Prueba.

Cuando un procedimiento se llama desde dentro de una función o de otro procedimiento, se interpreta como un conjunto de instrucciones de asignación, una para cada salida. En este caso, no es posible proporcionar valores de cualquiera de las salidas con el fin de determinar una o más de las entradas. Al igual que las funciones de la EEE, los procedimientos se pueden guardar por separado y utilizados en otros programas de EES. La manera más conveniente de hacerlo es guardar el procedimiento como un archivo de biblioteca, como se detalla en el capítulo 11. EES soporta ambos procedimientos internos y externos. Los procedimientos internos se introducen directamente en la parte superior de la ventana de ecuaciones, como se describe en esta sección. Los procedimientos externos están escritos en un lenguaje de alto nivel como C, Pascal o FORTRAN y llamaron de EES. La instrucción Call para ambos tipos de procedimientos es idéntico. Capítulo 19 proporciona instrucciones para la escritura y el uso de funciones y procedimientos externos.

90

Capítulo 3: Funciones y Procedimientos

3.4Las declaraciones lógicas Una ventaja principal de las instrucciones de asignación que se utilizan en las funciones y procedimientos de EES es que pueden incluir estados lógicos con el fin de controlar el orden de la ejecución de las instrucciones de asignación. funciones y procedimientos EES reconocen varios tipos de estados lógicos, como se describe en esta sección. Estas afirmaciones lógicas no se pueden utilizar en módulos, subprogramas o en el cuerpo principal de un programa de EES. Las declaraciones IFTHEN-ELSE La declaración más común es la lógica de la instrucción If-Then-Else. EES ofrece dos formatos para este tipo de declaraciones, que se conocen como la de una sola línea y los formatos de varias líneas. El formato de una sola línea tiene la siguiente forma: Si (prueba condicional) Declaración Entonces 1 Else 2

La continuación de palabras clave y están obligados Declaración 1. Declaración 1 puede ser o bien una instrucción de asignación o una instrucción GoTo, como se describe a continuación. La palabra clave Else y Declaración 2 son opcionales. Una sola línea If-Then-Else declaración debe ser colocado en una línea con ningún salto de línea; Sin embargo, no hay límite en el número de caracteres que se pueden utilizar en esta línea. El formato de varias líneas tiene la siguiente forma: Si (prueba condicional) Declaración Entonces (s) Más Declaración (s) EndIf

La principal diferencia entre estos dos formatos es que el formato de varias líneas permite que una o más sentencias de asignación o instrucciones lógicas que se ejecutarán en función del resultado de la prueba condicional, mientras que el formato de una sola línea permite sólo una instrucción a ser ejecutada. Las palabras clave más y EndIf que aparecen en el formato de varias líneas cada uno debe aparecer en una línea por sí mismo, como se muestra arriba. La sangría puede ser utilizado para hacer la lógica fluya más clara. Múltiple línea Si-then-else puede incluir declaraciones If-Then-Else adicional, que prevé la evaluación condicional anidada. La prueba condicional produce ya sea un resultado verdadero o falso utilizando operadores relacionales. Los operadores relacionales son reconocidos por EES Resumird en la Tabla 3-1.

91

Capítulo 3: Funciones y Procedimientos Tabla 3-1: Los operadores relacionales reconocidos en pruebas condicionales. operador relacional Descripción < menos que > mas grande que = igual a

Mayor qué o igual a =

no igual a y Y lógico entre dos pruebas relacionales o lógica O entre dos pruebas relacionales

Los paréntesis alrededor de la prueba condicional suelen ser opcionales, pero se recomiendan para la lectura de la claridad. Sin embargo, hay situaciones en las cuales se requieren los paréntesis con el fin de obtener el resultado deseado. EES procesa las operaciones lógicas de izquierda a derecha a menos paréntesis se proporcionan con el fin de cambiar el orden de análisis. Tenga en cuenta que los paréntesis alrededor del (x> 0) y (y 3) se requieren en el siguiente de una sola línea IfThen-Else comunicado con el fin de reemplazar el valor predeterminado orden de izquierda a derecha procesamiento lógico: Si (x> y) o ((x