Universidad Tecnológica Nacional
Asignatura: Fundamentos de Informática
Facultad Regional Mendoza
Unidad Temática 7
Departamento de Ingeniería Química
Título: Derivación Numérica
DERIVACIÓN NUMÉRICA ASPECTOS GENERALES En el cálculo ingenieril es muy común la necesidad de obtener el valor de la derivada de funciones, la gran mayoría de las veces es la derivada primera, pero en otros casos también es necesario calcular derivadas de orden superior. El análisis matemático enseña cómo obtener las derivadas de cualquier función, haciendo uso de las reglas de derivación; sin embargo, en los casos reales, si bien muchas veces se tiene la expresión matemática de la función, en tanto otros se disponen de tablas donde las relaciones funcionales están tabuladas, y en otros casos, en lugar de funciones, se tienen algoritmos de cálculo, que incluyen múltiples funciones. De esta manera, la determinación analítica de una derivada no siempre es posible, por lo que se estudiará a continuación diversos 1 métodos numéricos para poder calcular las derivadas, sin importar la forma en la que se expresen las relaciones funcionales, ya sea como funciones, como algoritmos o tablas. Se hacen dos aclaraciones importantes: -
-
Los métodos numéricos dan resultados aproximados, por lo que siempre hay un error, el cual debe ser estimado, ya que existe la posibilidad de que el error sea lo suficientemente grande como para invalidar el resultado obtenido. El análisis del error cometido se lo verá desde un punto de vista práctico, ya que el estudio matemático riguroso del mismo escapa al alcance del presente curso.
EL ÉPSILON DEL MICROPROCESADOR Cuando se estudió el Modo Consola de Scilab, se hizo una breve discusión de la precisión numérica de la computadora. Cuando se comienzan a estudiar métodos numéricos, es necesario hacer un estudio más detallado del problema. Nunca se debe olvidar que las computadoras, de acuerdo al microprocesador que tengan, no tienen precisión infinita en la representación de los números, por lo que en general, la enorme mayoría de los valores numéricos, con parte decimal distinta de cero, incluyen un error de truncamiento. Para poder conocer el límite con el cual los números son almacenados con precisión, se debe determinar el llamado épsilon del microprocesador, que no es otra cosa que el menor valor numérico que sumado más uno, da como resultado un valor distinto de uno. Existen algoritmos para calcular dicho valor, sin embargo Scilab tiene una constante predefinida denominada 2 %eps que almacena justamente este dato . Para conocer este valor se escribe la siguiente instrucción en el Modo Consola: -->%eps %eps = 2.220D-16
Para poder trabajar con este valor numérico, se aumentará la cantidad de decimales que Scilab muestra en los resultados, de manera tal para que se representen 18 decimales; en formato de punto fijo, se escribirá la siguiente instrucción: -->format('v',21) 1
La diferencia entre una derivada analítica y una numérica, es que en el primer caso se obtiene la función derivada, mientras que en el segundo caso se obtiene el valor de la derivada en un único punto, además de incluir un error de cálculo, inherente al método numérico utilizado. 2 Se debe recordar que este valor depende del microprocesador, por lo que se pueden obtener resultados distintos en distintas computadoras.
Ing. Juan E. Núñez Mc Leod
Página 1 de 13
Universidad Tecnológica Nacional
Asignatura: Fundamentos de Informática
Facultad Regional Mendoza
Unidad Temática 7
Departamento de Ingeniería Química
Título: Derivación Numérica
Como se vio cuando se trató el tema del Modo Consola, a la cantidad de decimales se le tenía que agregar una posición por el punto decimal, otra por el valor de la parte entera (se trabajará con valores menores a 10) y una última posición para el signo. Una vez realizado el cambio de formato se hará el siguiente cálculo: -->1+%eps ans = 1.000000000000000222
Como se observa, el resultado es exacto, en los primeros 18 decimales. A continuación se realizará un cálculo similar, pero utilizando la mitad del valor de épsilon. -->1+%eps/2 ans = 1.
Con esto se verifica que el segundo sumando tiene un valor numérico que es menor a la precisión del microprocesador, por lo que se pierde la información.
EL LÍMITE DEL COCIENTE INCREMENTAL La definición matemática de la derivada se expresa mediante el siguiente límite: = lim
+ ℎ −
→
ℎ
Haciendo uso de esta definición, se puede evaluar una derivada en forma numérica, y la precisión de este cálculo será mejor tanto más pequeño sea el valor del incremento h . Sin embargo, este incremento no puede ser reducido en forma indefinida, ya que si se utiliza un valor por debajo de la precisión de la computadora, se llegaría a un cálculo en el cual + ℎ = , por este motivo el mínimo valor de h debe ser estimado, y va a depender de cada caso en particular. 3
Para estudiar estos aspectos, se usará la función = , siendo su función derivada primera = . Como se mencionó, cualquier método numérico devuelve como resultado una solución particular; es decir, un valor numérico, por lo tanto si se desea calcular la derivada de la función senoidal en x=1, se escribirá la siguiente instrucción: -->cos(1) ans = 0.540302305868139765
Este será el valor que se usará como valor verdadero de la derivada, para poder comparar los resultados obtenidos con los distintos valores de h . Para calcular el cociente incremental se debe asignar un valor a h , quizás el valor que brinde la mayor precisión sea el valor de épsilon, por lo que el primer cálculo que se hará será el siguiente: -->(sin(1+%eps)-sin(1))/%eps ans = 0.5
3
Se asume que el lector sabe la diferencia conceptual entre derivada en un punto y función derivada.
Ing. Juan E. Núñez Mc Leod
Página 2 de 13
Universidad Tecnológica Nacional
Asignatura: Fundamentos de Informática
Facultad Regional Mendoza
Unidad Temática 7
Departamento de Ingeniería Química
Título: Derivación Numérica
Sorprendentemente, el error de cálculo es muy elevado, lo cual se debe a que se está trabajando en el límite de precisión de la computadora, y es evidente que la pérdida de información (cifras significativas) es importante. Para poder calcular rápidamente varios valores de derivada para distintos incrementos, se utilizará la siguiente función: // Función para calcular la derivada de y=sen(x) con diferentes h // Variables de entrada // x: valor en el cual se calcula la derivada // h: valor inicial del incremento de la variable // n: cantidad de derivadas que se calcularán reduciendo en incremento // Variables de salida // La función escribirá en la consola una tabla con los valores calculados function derivSeno(x, h, n) dExac=cos(x) printf("Cálculo de la derivada de y=sen(x)\n\n") printf("Valor exacto: %21.18f\n\n",dExac) printf("\t h\t\t derivada\t\t error\n") for i=1:n dNum=(sin(x+h)-sin(x))/h er=dExac-dNum printf("%2d\t%10.2e\t%21.18f\t%21.18f\n",i,h,dNum,er) h=h/10 end endfunction
La instrucción printf utilizada en la función, permite escribir mensajes y valores en la consola directamente. Se debe especificar el formato a utilizar mediante los siguientes códigos:
Formato
Descripción
\t
Representa un tabulador, por lo que ubica la posición de escritura en la siguiente posición de tabulación. Su uso permite armar fácilmente tablas.
\n
Representa una nueva línea. Se ubica al final de cada línea, para indicar a Scilab que la próxima impresión se hará en la línea siguiente.
%xd
Simboliza la escritura de un número entero, donde x es el espacio que se utilizará para su representación en la consola; así por ejemplo, %4d , indica que serán cuatro los espacios utilizados, sin importar la cantidad real de cifras del número. De esta manera se logran armar columnas bien formateadas.
%x.yf
Este indicador de formato es similar al anterior, pero utilizado para valores en punto fijo. La x representa el espacio total para representar el número e y la cantidad de lugares destinados para los decimales. Ej: %8.2f indica que se utilizarán ocho lugares para representar los números, de los cuales dos posiciones serán para los decimales.
%x.ye
Idéntico al anterior, pero se lo utiliza para representar valores numéricos en punto flotante.
Los códigos de formato mencionados no constituyen una lista exhaustiva, sino simplemente representan los casos más ampliamente utilizados. Para analizar los resultados obtenidos con distintos valores de incremente, se verá como ejemplo el cálculo de la derivada en x=1, con un incremento inicial de h=0.1 y 20 cálculos de derivadas, en cada uno de los cuales se dividirá por diez el incremento, según se observa en el código. De esta manera, los resultados devueltos por Scilab son los siguientes:
Ing. Juan E. Núñez Mc Leod
Página 3 de 13
Universidad Tecnológica Nacional
Asignatura: Fundamentos de Informática
Facultad Regional Mendoza
Unidad Temática 7
Departamento de Ingeniería Química
Título: Derivación Numérica
-->derivSeno(1,0.1,20) Cálculo de la derivada de y=sen(x) Valor exacto:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
0.540302305868139770
h 1.00e-01 1.00e-02 1.00e-03 1.00e-04 1.00e-05 1.00e-06 1.00e-07 1.00e-08 1.00e-09 1.00e-10 1.00e-11 1.00e-12 1.00e-13 1.00e-14 1.00e-15 1.00e-16 1.00e-17 1.00e-18 1.00e-19 1.00e-20
derivada 0.497363752535388000 0.536085981011868990 0.539881480360326900 0.540260231418621120 0.540298098505864740 0.540301885121330260 0.540302262930225540 0.540302302898254430 0.540302358409405660 0.540302247387103200 0.540301137164078570 0.540345546085063580 0.539568389967825970 0.544009282066326590 0.555111512312578270 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000
error 0.042938553332751761 0.004216324856270770 0.000420825507812861 0.000042074449518648 0.000004207362275022 0.000000420746809504 0.000000042937914224 0.000000002969885338 -0.000000052541265894 0.000000058481036569 0.000001168704061194 -0.000043240216923812 0.000733915900313797 -0.003706976198186829 -0.014809206444438505 0.540302305868139770 0.540302305868139770 0.540302305868139770 0.540302305868139770 0.540302305868139770
Un breve análisis de los resultados demuestran como la precisión del cálculo aumenta, a medida que se reduce -8 el incremento, hasta llegar en la octava fila a un mínimo en h=10 , y de allí en adelante, a pesar de reducirse el incremento, el error aumenta en valor absoluto. Por otro lado, para incrementos muy pequeños, la diferencia entre la función incrementada y la función sin incrementar se hace nula, porque se excede la precisión numérica -16 de la computadora; por este motivo, a partir de incrementos de h=10 las derivadas valen cero, dando la falsa información de tener el caso de una función constante.
NÚMERO DE ORDEN Y EXACTITUD Cualquier resultado proveniente de un método numérico constituye una aproximación del resultado analítico exacto. Esta aproximación depende del método numérico utilizado, y con el objeto de tener una idea del grado de aproximación se habla del orden de precisión del método. Así por ejemplo, se puede decir que un método es de orden 1, mientras que otro es de orden 2. Esto significa, en términos generales, que si se reduce el valor del incremento a la mitad (valor de h), el error se reduce a la mitad si el orden es 1 y a la cuarta parte si el orden es 2. Esto se debe fundamentalmente a que la expresión de estimación del error es función del incremento elevado al orden de precisión, lo que se simboliza como ℎ para un método de orden uno u ℎ para un método de orden dos, etc. En términos generales se puede decir que mientras mayor sea el orden de un método numérico, tanto más preciso será el resultado mientras las condiciones de cálculo no cambien.
FÓRMULAS DE DIFERENCIAS CENTRADAS Para mejorar la precisión, en lugar de utilizarse la expresión de definición de la derivada, se utilizan expresiones 4 similares, pero que utilizar valores de la función por derecha e izquierda , de manera tal que el valor en que se desea estimar la derivada queda en el centro del intervalo, tal como se observa a continuación:
4
La demostración matemática de la exactitud de estas expresiones excede el alcance de este apunte.
Ing. Juan E. Núñez Mc Leod
Página 4 de 13
Universidad Tecnológica Nacional
Asignatura: Fundamentos de Informática
Facultad Regional Mendoza
Unidad Temática 7
Departamento de Ingeniería Química
Título: Derivación Numérica
Orden
Expresión de cálculo
2 4
≈ ≈
+ ℎ − − ℎ 2ℎ
− + 2ℎ + 8 + ℎ − 8 − ℎ + − 2ℎ 12 ℎ
Al utilizar la definición matemática de derivada, como se vio en el punto anterior, se lograba una aproximación de orden uno, mientras que con las expresiones centradas, se logran aproximaciones de orden dos y cuatro. Es importante mencionar que mientras mayor es el orden de la aproximación tanto más preciso es el resultado. Para analizar el comportamiento de la expresión de orden dos, se modificará el programa de cálculo de la derivada de la función senoidal, reemplazando la siguiente línea:
Instrucción actual
Nueva instrucción
dNum=(sin(x+h)-sin(x))/h
dNum=(sin(x+h)-sin(x-h))/(2*h)
Al ejecutar la nueva función, los resultados son los siguientes: -->derivSeno(1,0.1,20) Cálculo de la derivada de y=sen(x) Valor exacto:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
0.540302305868139770
h 1.00e-01 1.00e-02 1.00e-03 1.00e-04 1.00e-05 1.00e-06 1.00e-07 1.00e-08 1.00e-09 1.00e-10 1.00e-11 1.00e-12 1.00e-13 1.00e-14 1.00e-15 1.00e-16 1.00e-17 1.00e-18 1.00e-19 1.00e-20
derivada 0.539402252169759460 0.540293300874739040 0.540302215817689560 0.540302304968265370 0.540302305856998900 0.540302305840345440 0.540302305673811990 0.540302308449369550 0.540302302898254430 0.540302247387103200 0.540301137164078570 0.540345546085063580 0.540123501480138550 0.544009282066326590 0.555111512312578270 0.555111512312578160 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000
error 0.000900053698380310 0.000009004993400730 0.000000090050450208 0.000000000899874397 0.000000000011140866 0.000000000027794322 0.000000000194327776 -0.000000002581229785 0.000000002969885338 0.000000058481036569 0.000001168704061194 -0.000043240216923812 0.000178804388001219 -0.003706976198186829 -0.014809206444438505 -0.014809206444438394 0.540302305868139770 0.540302305868139770 0.540302305868139770 0.540302305868139770
Al analizar los resultados se observa que la máxima precisión se obtiene en la quinta línea, con un incremento de -5 h=10 , el cual es menor que el hallado en el caso visto previamente. Incluso el error cometido es menor; es decir, el valor de la derivada numérica tiene mayor precisión. Esto se aprecia mejor en la siguiente tabla:
Ing. Juan E. Núñez Mc Leod
Página 5 de 13
Universidad Tecnológica Nacional
Asignatura: Fundamentos de Informática
Facultad Regional Mendoza
Unidad Temática 7
Departamento de Ingeniería Química
Título: Derivación Numérica
Método
Derivada numérica
Error
Cociente incremental
0.540302302898254430
0.000000002969885338
Diferencia centrada orden 2
0.540302305856998900
0.000000000011140866
Valor verdadero
0.540302305868139770
A continuación se hará el análisis del comportamiento de la fórmula centrada de cuarto orden, para lo cual se reemplazará la expresión de cálculo, según lo que se expresa en la siguiente tabla:
Instrucción actual dNum=(sin(x+h)-sin(x-h))/(2*h)
Nueva instrucción dNum=(-sin(x+2*h)+8*sin(x+h)-8*sin(x-h)+sin(x2*h))/(12*h)
Los resultados obtenidos se observan a continuación: -->derivSeno(1,0.1,20) Cálculo de la derivada de y=sen(x) Valor exacto:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
0.540302305868139770
h 1.00e-01 1.00e-02 1.00e-03 1.00e-04 1.00e-05 1.00e-06 1.00e-07 1.00e-08 1.00e-09 1.00e-10 1.00e-11 1.00e-12 1.00e-13 1.00e-14 1.00e-15 1.00e-16 1.00e-17 1.00e-18 1.00e-19 1.00e-20
derivada 0.540300507003259270 0.540302305688049820 0.540302305868064160 0.540302305869303830 0.540302305869026280 0.540302305803338050 0.540302305581293330 0.540302308449369550 0.540302321401971430 0.540302247387103090 0.540302062349932390 0.540391805377756330 0.539660908553211470 0.544009282066326590 0.555111512312578270 0.462592926927148480 -1.850371707708594200 -18.503717077085941000 -185.037170770859400000 -1850.371707708594200000
error 0.000001798864880498 0.000000000180089943 0.000000000000075606 -0.000000000001164069 -0.000000000000886513 0.000000000064801720 0.000000000286846435 -0.000000002581229785 -0.000000015533831665 0.000000058481036680 0.000000243518207377 -0.000089499509616564 0.000641397314928294 -0.003706976198186829 -0.014809206444438505 0.077709378940991281 2.390674013576734100 19.044019382954080000 185.577473076727560000 1850.912010014462300000
Se observa claramente como se obtiene el resultado más preciso en la tercera línea, para un incremento de -3 h=10 , y con un error bastante menor que en los casos anteriormente analizados. En la siguiente tabla se transcriben todos los resultados para realizar una mejor comparación.
Método
Derivada numérica
Error
Cociente incremental
0.540302302898254430
0.000000002969885338
Diferencia centrada orden 2
0.540302305856998900
0.000000000011140866
Diferencia centrada orden 4
0.540302305868064160
0.000000000000075606
Valor verdadero
0.540302305868139770
Ing. Juan E. Núñez Mc Leod
Página 6 de 13
Universidad Tecnológica Nacional
Asignatura: Fundamentos de Informática
Facultad Regional Mendoza
Unidad Temática 7
Departamento de Ingeniería Química
Título: Derivación Numérica
Sin embargo, a diferencia de los casos anteriores, para valores muy pequeños el incremento, el error se incrementa de manera desproporcionada. Es importante recordar este resultado: un método numérico devuelve un resultado, pero a continuación el ingeniero debe analizarlo para determinar si ese resultado tiene correlato con la realidad o no.
DERIVADAS DE ORDEN SUPERIOR Hasta este momento se discutió el cálculo numérico de la derivada primera de una función. En la siguiente tabla se transcriben las expresiones de cálculo de derivadas de orden superior, mediante diferencias centradas de orden dos.
Derivada
Expresión de cálculo ≈
Segunda
≈
Tercera
≈
Cuarta
+ ℎ − 2 + − ℎ ℎ
+ 2ℎ − 2 + ℎ + 2 − ℎ − − 2ℎ 2 ℎ
+ 2ℎ − 4 + ℎ + − 4 − ℎ + − 2ℎ ℎ
En la siguiente tabla se transcriben las expresiones de cálculo de derivadas de orden superior, mediante diferencias centradas de orden cuatro.
Expresión de cálculo
Derivada ≈
Segunda
Tercera
Cuarta
≈
≈
− + 2ℎ + 1 + ℎ − !" + 1 − ℎ − − 2ℎ 12 ℎ
− + !ℎ + 8 + 2ℎ − 1! + ℎ + 1! − ℎ − 8 − 2ℎ + − !ℎ 8 ℎ
− + !ℎ + 12 + 2ℎ − !# + ℎ + $ − !# − ℎ + 12 − 2ℎ − − !ℎ ℎ4
FUNCIÓN DERIVATIVE DE SCILAB Scilab incluye dentro de su biblioteca de funciones una denominada derivative5, la cual permite obtener la derivada primera y segunda de cualquier función definida por el usuario. A los efectos de poder comparar con los cálculos hechos anteriormente, se definirá una función denominada 6 seno , la cual calculará el seno de un ángulo dado en radianes, según se puede observar a continuación. function [y]=seno(x) y=sin(x) endfunction 5 6
No se debe confundir con la función derivat que permite obtener la derivada de polinomios. Esta declaración es necesaria, ya que derivative no calcula derivadas de funciones propias de Scilab, como lo es la función sin.
Ing. Juan E. Núñez Mc Leod
Página 7 de 13
Universidad Tecnológica Nacional
Asignatura: Fundamentos de Informática
Facultad Regional Mendoza
Unidad Temática 7
Departamento de Ingeniería Química
Título: Derivación Numérica
Para calcular las derivadas primera y segunda de la función seno para x=1, mediante una aproximación de orden uno, similar al utilizar la definición matemática de derivada, se utilizaría la siguiente instrucción:
-->[dy1,dy2]=derivative(seno,1,order=1) dy2 = - 0.841475033883073653 dy1 = 0.540302298963069916
La función derivative tiene como primer argumento el nombre de la función que se desea derivar, a continuación el valor de la variable independiente, donde se quiere obtener la derivada, y finalmente el orden de la aproximación del cálculo numérico (1, 2 ó 4). El cálculo de la derivada primera y segunda de la función seno, en x=1, con una aproximación de orden dos y cuatro, ser logra mediante las siguientes instrucciones: -->[dy1,dy2]=derivative(seno,1,order=2) dy2 = - 0.841470981016755104 dy1 = 0.540302305863103238 -->[dy1,dy2]=derivative(seno,1,order=4) dy2 = - 0.841470984802402344 dy1 = 0.540302305868332611
Es importante aclarar que al aumentar el orden de precisión en el cálculo, se incrementa la cantidad de veces que se evalúa la función, por lo que es importante determinar si la precisión requerida justifica la cantidad de cálculos exigidos a Scilab.
CASO PRÁCTICO DE USO DE DERIVADAS NUMÉRICAS Una de las incumbencias más importantes del ingeniero químico es la de diseñar equipos en los cuales se realizan todo tipo de transformaciones físicas, químicas o fisicoquímicas. El diseño de los mismos se realiza en estado estacionario, lo que implica que elegido un punto cualquiera del equipo, las variables involucradas (presiones, temperaturas, concentraciones, etc.) se mantienen constantes a lo largo del tiempo. Después de diseñados los equipos son analizados y probados a escala piloto, si su complejidad así lo requiere, para finalmente ser construido a escala real. El equipo fue diseñado para funcionar en determinadas condiciones de estado estacionario; sin embargo, sería utópico pensar que esas condiciones se van a mantener inalteradas a los largo del tiempo. De hecho, continuamente se están produciendo perturbaciones que tienden a alterar el normal funcionamiento de los equipos. Para contrarrestar la acción perjudicial de las mencionadas perturbaciones, el ingeniero químico también diseña lazos de control automático, los cuales están preparados para compensarlas mediante acciones correctivas, las cuales se realizan sin intervención del hombre. En todas las plantas de procesos químicos, los diversos equipos tienen lazos de control automático, los cuales tienen la tarea de mantener las distintas variables del proceso dentro de rangos adecuados de funcionamiento, ya sea por ejemplo temperatura, nivel, caudal, presión, etc.
Ing. Juan E. Núñez Mc Leod
Página 8 de 13
Universidad Tecnológica Nacional
Asignatura: Fundamentos de Informática
Facultad Regional Mendoza
Unidad Temática 7
Departamento de Ingeniería Química
Título: Derivación Numérica
En la figura 1 se observa un equipo que contiene un fluido de proceso (color azul) que debe ser mantenido a una determinada temperatura, para lo cual se inyecta vapor de agua (color verde) en una camisa de calefacción. La relación entre el vapor inyectado en la camisa y la temperatura del fluido, es manejada por un lazo de control automático; el cual mide la temperatura del fluido mediante un sensor de temperatura (TT) y transmite la información a un controlador de temperatura (TC), el cual decide qué hacer con la válvula de control que maneja el caudal de vapor (mantenerla en posición, abrirla o cerrarla). De esta manera la temperatura del fluido se mantiene en un valor preestablecido denominado set point o punto de consigna. El ejemplo dado es uno de los cientos de lazos de control que se pueden encontrar en una planta química. Para poder gestionar adecuadamente el funcionamiento de los mismos, se envía toda la información a una computadora central.
Fig. 1. Lazo de control automático de temperatura.
Dicha computadora contiene un programa de gestión de información denominado SCADA, que en sus siglas en inglés significa Control Supervisor y Adquisición de Datos. En la figura 2 se puede ver un gráfico que constituye un ejemplo de lo que se puede observar en la pantalla de una computadora que está ejecutando un sistema SCADA. El mismo contiene una representación gráfica de todos los equipos de la planta, y los valores de las variables principales de cada uno de ellos (presión, temperatura, etc.). En muchos casos, los colores indican también el estado de los equipos, así por ejemplo, el color azul o verde significa válvula abierta o bomba en funcionamiento. A diferencia del color rojo que significa válvula cerrada o bomba apagada.
Fig. 2. Ejemplo de la pantalla de un sistema SCADA.
De esta manera el sistema SCADA permite inspeccionar el estado actual de la planta química; pero también, permite cambiar dicho estado, así por ejemplo, se pueden encender o apagar dispositivos, aumentar o disminuir los sets point de los lazos de control, etc. El sistema SCADA también almacena un historial de las principales variables del proceso, con el objeto de ser analizadas por el ingeniero, para poder tomar decisiones sobre el funcionamiento del mismo. Dicho historial no es otra cosa que un archivo que contiene básicamente el tiempo y el valor correspondiente de la variable monitoreada. Ing. Juan E. Núñez Mc Leod
Página 9 de 13
Universidad Tecnológica Nacional
Asignatura: Fundamentos de Informática
Facultad Regional Mendoza
Unidad Temática 7
Departamento de Ingeniería Química
Título: Derivación Numérica
Un uso práctico del cálculo de derivadas numéricas, consiste en la determinación de los extremos relativos de la variable dependiente en dichos archivos de historiales. De esta manera se pueden averiguar fácilmente los momentos en que la variable monitoreada alcanza un valor máximo o mínimo.
Determinación de extremos relativos en tablas de datos En un curso de análisis matemático se estudian distintos métodos para la determinación de extremos relativos, ya sean máximos o mínimos. Dichos métodos se basa en la determinación de la derivada primera, y en el cálculo de los valores de la variable independiente para los cuales dicha derivada se anula. Estos métodos son fáciles de implementar, en la medida que se conozca la relación funcional entre la variable independiente y la dependiente; pero en el caso ingenieril planteado, lo que se conoce es una tabla de datos no una función, por lo que se deberá recurrir a un método numérico para resolver el problema. El algoritmo propuesto se basa en la implementación de dos funciones en Scilab, las cuales realizan las siguientes tareas: a- La primera función sirve para calcular la derivada primera de una tabla de datos, utilizando una fórmula centrada de segundo orden. b- La segunda función realiza una búsqueda secuencial, determinando los puntos en los cuales la derivada primera se anula o cambia de signo. A continuación se observa la primera de las funciones mencionada, denominada derivaTabla, la cual necesita como datos dos vectores columna, el primero conteniendo la información de la variable independiente y el segundo los de la variable dependiente. Dicha información debe estar ordenada en sentido creciente de acuerdo a la variable independiente. La función devuelve como resultado un vector columna que contiene el valor de la derivada en cada uno de los puntos correspondientes. Es importante observar que al utilizarse una fórmula centrada, es necesario usar los valores funcionales i+1 e i-1 para obtener la derivada en el punto i; es decir, no es posible calcular las derivadas en el primer y último punto de la tabla. Por este motivo, y para evitar confusiones, se ha asignado a dichas ubicaciones en el vector de derivadas, el valor de la constante de Scilab %nan (not a number). // Función para calcular la derivada de una tabla dada por dos vectores columna // Se utiliza una fórmula centrada de orden 2 // Variables de entrada // x: vector fila que contiene la variable independiente // y: vector fila que contiene la variable dependiente // Variables de salida // dy: vector columna con los valores de la derivada en cada punto // er: código de error // 0: no hay error // 104: los vectores y y x no tienen las mismas dimensiones function [dy, er]=derivaTabla(x, y) er=0 dy=0 n=size(y,"r") m=size(x,"r") if n<>m then er=104 return end dy=zeros(n,1) dy(1)=%nan dy(n)=%nan for i=2:n-1 dy(i)=(y(i+1)-y(i-1))/(x(i+1)-x(i-1))
Ing. Juan E. Núñez Mc Leod
Página 10 de 13
Universidad Tecnológica Nacional
Asignatura: Fundamentos de Informática
Facultad Regional Mendoza
Unidad Temática 7
Departamento de Ingeniería Química
Título: Derivación Numérica
end endfunction
La segunda función, denominada buscaMinMax, utiliza como dato de entrada el vector columna obtenido de la función derivaTabla. La búsqueda de extremos relativos se realiza mediante una búsqueda secuencial (elemento por elemento, de principio a fin), individualizando los puntos en donde se anula la derivada o la misma cambia de signo. La ubicación donde esto sucede se va almacenando en el vector de salida de la función, denominado ndx, por lo que este vector contendrá tantos elementos como extremos relativos haya. // Función de búsqueda de un extremo relativo en un vector // Al utilizarse los valores de las derivadas de la tabla de datos // se desestiman el primer y último dato del vector, considerenco // que se ha utilizado una fórmula centrada de orden 2 para estimar // el valor de la derivada en cada punto // Variables de entrada // dy: Vector columna con los datos de las derivadas de los datos a evaluar // Variables de salida // ndx: vector columna que contiene los índice en donde en dy cambia el signo // er: código de error // 0: sin errores // 105: el vector dy tiene menos de tres valores function [ndx, er]=buscaMinMax(dy) er=0 ndx=0 n=size(dy,"r") if n<3 then er=105 return end j=1 for i=2:n-2 if dy(i)==0 then ndx(j)=i j=j+1 else if sign(dy(i))+sign(dy(i+1))==0 then ndx(j)=i+1 j=j+1 end end end endfunction
Para ejemplificar el uso de estas dos funciones se utilizará el archivo densSI.txt que se grabó en la Unidad Temática 6, el cual contiene la densidad del agua pura a distintas temperaturas, toda la información está expresada en el sistema internacional de unidades. Lo primero que se necesita es leer la información desde el archivo y transcribirla a dos vectores, escribiendo las siguientes instrucciones: -->datos=fscanfMat("d:/codigos/densSI.txt"); -->temper=datos(:,1); -->dens=datos(:,2);
A continuación se llama a la función de derivación de tablas, verificando que el código de error sea igual a cero, según se observa en las siguientes instrucciones:
Ing. Juan E. Núñez Mc Leod
Página 11 de 13
Universidad Tecnológica Nacional
Asignatura: Fundamentos de Informática
Facultad Regional Mendoza
Unidad Temática 7
Departamento de Ingeniería Química
Título: Derivación Numérica
-->[dy,er]=derivaTabla(temper,dens); -->er er = 0.
Cabe destacar que se utiliza un ; al final de la instrucción de llamada a la función debido a que la misma devuelve un vector columna, de esta manera se evita la reproducción innecesaria de la información del mismo en la consola. Después de esta última instrucción, en el vector dy se encuentran almacenadas las derivadas primeras de las densidades para cada una de las temperaturas conocidas. Con esta información se llama a la segunda función, y tras verificar que el código de error es cero, se consultan la temperatura y densidad del único índice que es devuelto como resultado, según se aprecia en las siguientes instrucciones: -->[ndx,er]=buscaMinMax(dy); -->er er = 0. -->ndx ndx = 15. -->temper(15) ans = 277.15 -->dens(15) ans = 1000.
En este caso el resultado obtenido corresponde a la máxima densidad del agua que se da a una temperatura de 4 ºC.
EL INGENIERO Y LOS MÉTODOS NUMÉRICOS Los métodos numéricos son una herramienta habitual en la vida profesional del ingeniero dedicado al diseño. Como se vio anteriormente, Scilab tiene una instrucción específica para el cálculo de derivadas, pero eso no significa que no se deban estudiar los pormenores del cálculo numérico de derivadas, ya que esto permite tener los criterios y los conocimientos adecuados para determinar los posibles errores cometidos en los cálculos, y seleccionar el método de cálculo adecuado en cada caso. Así por ejemplo, si se tiene una función que calcula algún valor con un error importante, no tiene ningún sentido hacer el cálculo de la derivada con alta precisión, exigiendo a Scilab un trabajo excesivo que no justifica el resultado obtenido.
COMPARACIÓN ENTRE MÉTODOS ANALÍTICOS Y NUMÉRICOS En los cursos de análisis matemático se estudian una gran cantidad de métodos analíticos de resolución, los cuales permiten conocer de manera precisa el resultado de diversos problemas científico - tecnológicos. La gran Ing. Juan E. Núñez Mc Leod
Página 12 de 13
Universidad Tecnológica Nacional
Asignatura: Fundamentos de Informática
Facultad Regional Mendoza
Unidad Temática 7
Departamento de Ingeniería Química
Título: Derivación Numérica
ventaja de obtener un resultado analítico es que el mismo permite realizar fácilmente un análisis del tipo “qué pasa si…”. Así por ejemplo, la expresión de cálculo analítico de la energía cinética de un móvil es: %& =
1 2
'(
Conociendo este resultado es fácil contestar las siguientes preguntas: a- ¿Qué pasa con la energía cinética si la masa aumenta al doble? Respuesta: la energía cinética aumenta también al doble. b- ¿Qué pasa con la energía cinética si la velocidad aumenta al doble? Respuesta: la energía cinética aumenta cuatro veces su valor original. Desde este punto de vista, la resolución analítica de los problemas ingenieriles tiene un enorme potencial al permitir el análisis y discusión de los resultados; sin embargo, en la práctica son pocos los problemas de interés ingenieril que se pueden resolver analíticamente. Por otro lado se tienen los métodos numéricos, cuya ventaja es la de permitir resolver cualquier problema ingenieril, sin importar su grado de complejidad, siendo la única limitación la potencia de cálculo y velocidad de la computadora utilizada en la resolución del problema. Sin embargo, un método numérico brinda como resultado un valor numérico, por lo que para poder responder la pregunta “qué pasa si…” se deberán resolver muchos casos, para poder ser analizados y obtener una conclusión. Si la cantidad de variables involucradas es importante, como sucede en general con cualquier problema ingenieril de importancia práctica, la cantidad de casos a resolver se vuelve prohibitiva. Una vez discutidas las ventajas y desventajas de los métodos analíticos y numéricos, se puede decir que ambos no se invalidan entre sí, sino que se complementan, y es el ingeniero el que va a preferir uno respecto del otro, según el objetivo buscado.
Ing. Juan E. Núñez Mc Leod
Página 13 de 13