miércoles, 22 de agosto de 2012

Convolución

Convolución es el operador matemático que convierte dos funciones f y g en una tercera función que representa la magnitud en la que se superponen f y una versión trasladada e invertida de g.

Es decir convolución nos da la magnitud del recorrido que hace una funcion f desplazandose en otra funcion g.

Exactamente como la siguiente imagen:


Se representa f(t)*g(t) y la definimos como la integral del producto de ambas funciones después de desplazar alguna de ellas una distancia n.



Una vez entendida esta definición ahora si estoy lista para comenzar a hacer un ejemplo, que yo misma inventé.
Necesitamos recordar una fórmula básica de integración:


Para escribir las ecuaciones utilicé la herramienta en línea de LATEX.

Así comenzamos definiendo f(t) y g(t):


Ahora sustituimos:



Ahora elevamos al cuadrado y multiplicamos :



Separamos para integrar:



Y ahora saco las constantes:



Integramos:



Y el resultado:



Entonces la convolución es la magnitud de el recorrido que hace una función cuando se desplaza sobre la otra, para tener una idea más clara les dejo dos gráficas de las funciones:

La función f(t) = t

La función f(t) = t ** 2


Les dejo un vídeo que me ayudo a entender la definición de la convolución:




Uso de la convolución
  • En estadística, como un promedio móvil ponderado.
  • En teoría de la probabilidad, la distribución de probabilidad de la suma de variables aleatorias independientes, es la convolución de sus distribuciones de probabilidad.
  • Muchas manchas se describen con convoluciones, en óptica.
  • En acústica, un eco es la convolución del sonido original con una función que represente los objetos variados que lo reflejan.
Tipos de convolución

Convolución discreta

Se trata de hacer un procesamiento digital de señal, ya que no tiene mucho sentido hablar de convoluciones aplicando estrictamente la definición ya que solo contamos con valores en instantes discretos de tiempo. Entonces es necesario, la aproximación numérica.
En convolución discreta usamos la siguiente fórmula:


Hay en numpy una función que nos permite obtener la convolución discreta, numpy.convolve(a, v, mode='full'), en donde "a" y "v" son listas que contienen los valores de "y", es decir en vez de tener dos funciones tenemos dos arreglos con los puntos en y. Y nos regresa el arreglo con la convolución discreta de las dos secuencias que pusimos de entradas.

Aquí dos pequeños ejemplos:




Gráfica de la primer lista de los argmentos:


Gráfica de la segunda lista:

Referencias:




One-time pad

For this hw I have created a program that first reads a message from a file called "Message" then convert it to numbers, and then to binary.
Then I create a random key with the length of the binary string (that is saved in a file), and I apply XOR.
The result is encrypted message, now I created decrypt functions, and you can read the original message.
The code is all commented to understand him better.
I leave screenshot of several runs to see how it changes the encrypted message can fit the key.




Code:


Results:







martes, 21 de agosto de 2012

Función sigmoidal

Para no olvidar, aquí dejo una entrada con una gráfica sigmoidal en GNUPLOT.
En gnuplot:

 La gráfica


domingo, 19 de agosto de 2012

Tautología

Tautología

La palabra tautología quiere decir “decir lo mismo”, es una fórmula de un sistema de lógica proposicional que resulta ser verdadero para cualquier combinación.

El siguiente ejercicio consiste en hacer una tautología con las siguientes características:

  • 3 variables
  • Por lo menos cuatro ocurrencias de conectivos
  • Por lo menos usar una vez or, and y negación.

Para comenzar hice la tabla con los posibles valores de mis tres variables, y comencé por usar cualquier conector decidí “or” a las letras A y C.

ABCA or C
1111
1101
1011
1001
0111
0100
0011
0000


Después tomé otras dos letras “B” y “C” con el conector “and

ABCA or CB and C
11111
11010
10110
10010
01111
01000
00110
00000


Y cree otra combinación ahora con el conector “->” y las letras B y A
ABCA or CB and CB -> A
111111
110101
101101
100101
011110
010000
001101
000001


Y ahora sí llegó el momento de pensar un poquito para poder hacer que todas las combinaciones nos den como resultado puros valores positivos, pero hay otra cosa que considerar aún no he usado la negación “¬” , he decidido usarla en alguna combinación de las que ya hice que me dio menos valores positivos (B and C)

ABCA or CB and CB -> Anot (B and C )
1111110
1101011
1011011
1001011
0111100
0100001
0011011
0000011



Después utilicé un and para conectar (A or C) and ¬(B and C), porque ya noté que si utilizo el conector de “implicación” con (B -> A) podré obtener valores positivos.

ABCA or CB and CB -> Anot (B and C )(A orC) and ¬(B and C)
11111100
11010111
10110111
10010111
01111000
01000010
00110111
00000110


Y ahora si puedo conectar la combinación que aun no relaciono (B -> A) con mi última combinación.

ABCA or CB and CB -> Anot (B and C )(A orC) and ¬(B and C)((A orC) and ¬(B and C)) -> (B->A)
111111001
110101111
101101111
100101111
011110001
010000101
001101111
000001101


Y he logrado hacer una tautología, es fácil hacerla si nos vamos paso por paso con la tabla de verdad.

Y por último les muestro el árbol de mi tautología: