Blogia
petalofucsia

FILOSOFÍA9: LA CASA 10. LA DETERMINACIÓN, EL VALOR, EL VIDRIO, EL SIGNO + Ó -, ESTÁ TODO DESORDENADO: AL ORDENARLO, EL SUPERIOR SUBORDINADO AL INFERIOR, . + - X, CUATRO ELEMENTOS MÁS EL QUINTO (LA ESENCIA), LA NATURALEZA (ERA LO MÁS PURO), LO MÁS COTIZADO, TENÍA UN PRECIO MUY ALTO, VALOR PECUNIARIO, RELATIVO AL DINERO, MONEDA CORRIENTE, LO SABIDO LO ADMITIDO COMUNMENTE, LO AUTORIZADO POR EL USO O LA COSTUMBRE, EL MOVIMIENTO DE LAS AGUAS EN DIMENSIÓN DETERMINADA, EL MOVIMIENTO DE LA ELECTRICIDAD, EL AGUA, EL ORO, LA SATÍRICA, LA LUZ (LA ILUSTRACIÓN Y LA CULTURA), QUE BRILLE TODO LO BUENO. En matemática, la función signo es una función matemática especial, que obtiene el signo de cualquier número real que se tome por entrada. Se representa generalmente mediante sgn(x), y no debe confundirse con la función seno(sen(x) ó sin(x)).

Función signo

De Wikipedia, la enciclopedia libre

En matemática, la función signo es una función matemática especial, que obtiene el signo de cualquier número real que se tome por entrada. Se representa generalmente mediante sgn(x), y no debe confundirse con la función seno(sen(x) ó sin(x)).

Contenido

[ocultar]

[editar] Definición

Función signo representada en un plano cartesiano.

La función signo puede definirse de las siguientes maneras:

1. Donde su dominio de definición es R y su conjunto imagen {-1;0;1}.

sgn (x) = left{begin{matrix} 1, & mbox{si }x > 0  0, & mbox{si }x = 0  -1, & mbox{si }x < 0 end{matrix}right.

2. Como la derivada de la función valor absoluto. Su dominio de definición es R - {0} y su conjunto imagen Im={-1;1}

sgn (x) = dfrac {d|x|} {dx} = left{begin{matrix} 1, & mbox{si }x > 0  -1, & mbox{si }x < 0 end{matrix}right.

3. sgn(x) = 2u(x) - 1 donde u es la función escalón unitario o Heaviside Step definida de la siguiente manera:

u(x) = left{begin{matrix} 1, & mbox{si }x > 0  frac {1} {2}, & mbox{si }x = 0  0, & mbox{si }x < 0 end{matrix}right.

[editar] Propiedades

sgn(-x)=-sgn(x) ,!  x = sgn(x) cdot |x|, qquad x in mathbb{R}  {d |x| over dx} =  sgn(x) ,.
  • La función signo es derivable con derivada 0 para todo su dominio excepto en 0. No es derivable en 0 en el sentido ordinario de derivada, pero bajo una noción más general de derivada dentro de la teoría de distribuciones, la derivada de la función signo es dos veces la función delta de Dirac.
 {d  sgn(x) over dx} = 2 delta(x) ,.
  • Para k gg 0, una aproximación suave de la función signo es:
 sgn x approx tanh(kx) ,.

[editar] Uso en computación

En computación, el concepto es idéntico al ya expresado, pero la oportuna explicación aquí dada a continuación resulta más asequible de entender para programadores no expertos en matemáticas.

El signo es una función que devuelve un valor de acuerdo a si un número o el resultado de una expresión es mayor, menor o igual a 0. Suele representarse en la forma SGN(número).

La mayoría de lenguajes de programación implementan esta función. No obstante si no la implementan es fácil construirla uno mismo, más abajo se proveen tres métodos.

Es habitual que sobre una variable o el resultado de una expresión, nos interese en un momento dado saber si es mayor, menor o igual a 0, sea para controlar el flujo según ese dato o para condicionar determinados valores o acciones.

[editar] Implementaciones de la función

Cuando un lenguaje no posee dicha función puede proveerse fácilmente con alguno de los métodos que se muestra a continuación en pseudocodigo.

Se proveen 3 métodos para implementar la función. Dado que en computación es importante la velocidad se hace referencia a las mismas.

  • El método basado en lógica y aritmética tarda lo mismo para cualquiera que sea el valor de un número.
  • El método basado en comparaciones, tarda distinto según sea el valor positivo, negativo ó 0 y consecuentemente según el orden en que se realicen las comprobaciones para dichos casos. Es ligeramente más rápido que el anterior.
  • Finalmente para el método del valor absoluto, el tiempo también es diferente según sea 0 ó distinto de 0 (no discrimina si es positivo o negativo). En cualquier caso este método es más lento que los anteriores, debido a la operacón de división que es más costosa.

[editar] Usando lógica y aritmética (caso 1)

En lenguajes donde TRUE = -1 y FALSE = 0 En lenguajes de programación se aprovecha la mitad alta de la gama de datos para expresar números negativos cuando el tipo de datos elegido admite esa posibilidad.

     Funcion Signo(N)
Devolver (N < 0) - (N > 0)
Fin Funcion

Examinado el código se observa que las expresiones de comparación devuelve TRUE= -1 o FALSE=0

  • Caso N Mayor que 0: si un número es mayor que 0 luego éste resultado = -1, y por lo tanto no puede ser cierta la expresión (n<0), entonces al restar, se resta -1. Se verifica que: 0 -(-1) = 1
  • Caso N igual a 0: Si N vale 0, ambas expresiones son falsas, dan por resultado 0, luego su resta también dará 0. Se verifica que: 0 - 0 = 0
  • Caso N menor que 0: Si n<0 entonces esta expresión = TRUE = -1, por tanto la otra expresión no puede ser cierta, entonces se le resta 0, que es el resultado de la expresión final (n<0). Se verifica que: -1 - 0 = -1

[editar] Usando lógica y aritmética (caso 2)

En lenguajes donde TRUE = 1 y FALSE = 0 En lenguaje natural (y cálculo mental), nos resulta más evidente así)

     Funcion Signo(N)
Devolver (N > 0) - (N < 0)
Fin Funcion

Examinado el código se observa que las expresiones de comparación devuelve TRUE = 1 ó FALSE = 0

  • Caso N Mayor que 0: si un número es mayor que 0 luego el resultado de esta expresión = 1, y por lo tanto no puede ser cierta la expresión (n<0), entonces al restar, se resta 0. Se verifica que: 1 - 0 = 1
  • Caso N igual a 0: Si N vale 0, ambas expresiones dan por su lado un resultado de 0, luego su resta también dará 0. Se verifica que: 0 - 0 = 0
  • Caso N menor que 0: Si n<0 entonces devuelve TRUE = 1, y la expresión (n>0) da 0, por tanto se le resta 1 resultado de la expresión final (n<0). Se verifica que: 0 - 1 = -1

[editar] Usando comparaciones

Se puede conseguir mayor velocidad de cálculo, al preguntar por el signo de una gran cantidad de números, si se sabe a priori si existe una mayor cantidad de números con valores positivos, negativos ó a 0, modificando la función de modo que se compruebe en primer lugar la posibilidad más frecuente. En este ´pseudocódigo, por tanto se da prioridad a valores positivos luego negativos y por último a números cuyo valor es 0.

     Funcion Signo(N)
Si N > 0 luego
devolver 1
En otro caso
Si N < 0 luego
devolver -1
En otro caso
devolver 0
Fin condición
Fin condición
Fin Funcion

[editar] Usando el Valor Absoluto

Esta función es la más lenta de todas las aquí mostradas. Puede sin embargo, si se sabe a priori que el valor de los números a evaluar son mayoritariamente 0 ó distinto de 0, modificar la función para que al evaluar la comprobación realice en primer lugar el caso más frecuente.

     Funcion Signo(N)
Si N <> 0 luego
devolver N ABS(N) - se hace una división entera, que es más rápida
En otro caso
devolver 0
Fin condición
Fin Funcion

[editar] Ejemplos

  • Obtener el signo de una variable. En el ejemplo ponemos directamente el valor, puede asumirse que la variable en un momento dado contiene tal valor.
    • Signo de un número positivo: SGN(25) = 1
    • Signo de un número negativo: SGN(-23) = -1
    • Signo de 0: SGN(0) = 0
  • Obtener el signo de una variable, para condicionar un bucle: Si necesitamos realizar un ciclo de operaciones desde un punto inicial hasta un punto final, necesitamos saber si el punto final es mayor o menor que el inicial para determinar si la cuenta de ciclos es creciente, decreciente o nulo.

En pseudocódigo:

    Direccion = SGN(Inicio - Final)
Decidir que hacer cuando Direccion = 0 - Un bucle con un incremento de 0 es un bucle infinito
Iniciar ciclo para todo elemento en la lista comenzando en Inicio hasta Final con incremento de Direccion
hacer las operaciones deseadas al elemento apuntado
Fin ciclo

Un ejemplo de código en VB:

  • Nótese como el bucle iniciaría en 586 e iría hacia atrás hasta llegar a 236. La función signo interviene para determinar cómo es el incremento, creciente, decreciente o nulo. Siendo este último caso debe decidirse la acción a tomar, tal como se detalla en el siguiente párrafo.
  • Si inicio y final tuvieran el mismo valor el incremento de cada ciclo sería 0. Esto provocaría un ciclo infinito que se remedia con la condición previa al bucle, permitiendo ejecutarse 1 vez el bucle. Si cuando son iguales se desea omitir la ejecución se debe condicionar a usar el bucle sólo si Direccion es distinto de 0. Ambos situaciones están reflejadas en el código
    DIM direccion AS INTEGER, Inicio AS LONG, Final AS LONG, K AS LONG

Inicio = 586
Final = 234
Direccion = SGN(Inicio - Final)

- Si direccion = 0 , lo condicionamos para que el bucle se ejecute 1 vez
IF Direccion = 0 THEN Direccion = 1 - Este es un ejemplo de condicionado de variables
FOR K = Inicio TO Final STEP Direccion - este es un ejemplo que determina si la cuenta de los ciclos es creciente o decreciente
- las operaciones que se necesite realizar
NEXT

- Si direccion = 0 , lo condicionamos para que el bucle no se ejecute ninguna vez.
IF Direccion <> 0 THEN - Este es un ejemplo de control del flujo
For K = Inicio TO Final STEP Direccion - este es un ejemplo que determina si la cuenta de los ciclos es creciente o decreciente
- las operaciones que se necesite realizar
Next
END IF

[editar] Véase también

0 comentarios