Diferencia entre revisiones de «Función signo»

De Wikipedia, la enciclopedia libre
Contenido eliminado Contenido añadido
SuperBraulio13 (discusión · contribs.)
m Revertidos los cambios de 190.207.70.189 a la última edición de 79.109.222.212
Línea 1: Línea 1:
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'')).
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'')).


== Definición ==
[[Archivo:[[Archivo:Ejemplo.jpg]]<nowiki>Introduce aquí texto sin formato</nowiki>]]== Definición ==
[[Image:Signum.png|thumb|300px|Función signo representada en un [[plano cartesiano]].]]
[[Image:Signum.png|thumb|300px|Función signo representada en un [[plano cartesiano]].]]
La función signo puede definirse de las siguientes maneras:
La función signo puede definirse de las siguientes maneras:

Revisión del 22:59 18 abr 2010

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)).

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}.

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}

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

Propiedades

  • 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.
  • Para , una aproximación suave de la función signo es:

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.

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.

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

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

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

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

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

Véase también