¿Qué es la convolución?
La convolución de dos funciones [matemática] f (t) [/ matemática] y [matemática] g (t) [/ matemática] da una tercera función [matemática] f (t) * g (t) [/ matemática] que es el integral de la multiplicación puntual de las dos funciones.
[matemáticas] f (t) * g (t) = \ displaystyle \ int _ {- \ infty} ^ {\ infty} f (\ tau) g (t- \ tau) \, \ text {d} \ tau [/ matemáticas]
- ¿Es posible desarrollar un algoritmo que pueda hacer predicciones perfectas en el mercado de valores?
- ¿Cuál es el propósito de estudiar pequeñas mejoras (como usar dos hilos o evitar la basura) mientras puedo reducir la complejidad de los algoritmos?
- ¿Cómo puede funcionar un algoritmo con un conjunto de datos pequeño pero da valores incorrectos en un conjunto de datos más grande?
- En el algoritmo O (n) para encontrar el elemento máximo en una matriz, ¿cuál es el valor esperado del número total de cambios en el valor de una variable que mantiene el máximo sobre el paso de una matriz?
- ¿Cuál es la diferencia entre las estructuras de datos de std :: vector y std :: deque?
La convolución es conmutativa, lo que significa [matemáticas] f (t) * g (t) = g (t) * f (t) [/ matemáticas].
(Fuente: Convolución – Wikipedia)
Convolución en MATLAB
[La convolución bidimensional generalizada usando la función ‘conv2’ de MATLAB se analiza a continuación. Lo mismo puede extenderse a las funciones ‘conv’ y ‘convn’ usadas para arreglos vectoriales y n-dimensionales.]
En MATLAB, una convolución se realiza mediante la implementación directa de la ecuación de convolución bidimensional discreta utilizando la función incorporada ‘conv2’. Si [matemática] A [/ matemática] y [matemática] B [/ matemática] son funciones de dos variables discretas, [matemática] m [/ matemática] y [matemática] n [/ matemática], entonces la fórmula para las dos- convolución dimensional [matemática] A * B [/ matemática] es
[matemáticas] C (m, n) = \ displaystyle \ sum_ {i = 1} ^ {p} \ sum_ {j = 1} ^ {p} A (i, j) B (m-i + 1, n- j + 1) [/ matemáticas]
donde, [math] A [/ math] es una matriz de tamaño [math] p \ times p [/ math]. La matriz [matemática] B [/ matemática] también se denomina matriz o núcleo de convolución .
La matriz resultante [matemática] C [/ matemática] puede visualizarse como resultado de barrer el núcleo [matemática] B [/ matemática] a través de la matriz [matemática] A [/ matemática] y calcular la suma ponderada y sabia de elemento de productos entre cada elemento en el núcleo y donde toca en la matriz.
Ejemplo: esta visualización se puede simplificar aún más si consideramos un ejemplo simple.
A = remodelar (1: 9,3,3) '. B = [1 1; 1 1] C = conv2 (A, B)
Salida:
A = [1 2 3] [4 5 6] [7 8 9] B = [1 1] [1 1] C = [1 3 5 3] [5 12 16 9] [11 24 28 15] [7 15 17 9]
Los elementos de convolución [matemática] C [/ matemática] se obtienen barriendo [matemática] B [/ matemática] incrementalmente a través de la matriz [matemática] A [/ matemática]. Por ejemplo, comenzamos con [matemática] C (1,1) [/ matemática] que se obtiene cuando la parte inferior derecha de [matemática] B [/ matemática] toca la parte superior izquierda de [matemática] A [/ matemática] como:
[1 1] [1 [1 * 1] 2 3] [4 5 6] [7 8 9]
que da, [matemáticas] C (1,1) = 1 [/ matemáticas]. Del mismo modo, [matemáticas] C (2,3) [/ matemáticas] se representa como:
[1 [1 * 2] [1 * 3]] [4 [1 * 5] [1 * 6]] [7 8 9]
lo que da, [matemáticas] C (2,3) = 2 + 3 + 5 + 6 = 16 [/ matemáticas]. Este barrido puede continuar para obtener la matriz completa [matemáticas] C [/ matemáticas].
Convolución 2-D rápida alternativa
Hay alternativas más rápidas disponibles para la función incorporada ‘conv2’ en MATLAB (Fuente).
- El método FFT (convolución 2-D usando FFT – Intercambio de archivos – MATLAB Central) se puede usar si las dos matrices a convolucionar tienen un tamaño similar, o
- La descomposición de valores singulares (convolución 2D rápida – Intercambio de archivos – MATLAB Central) se puede usar si una matriz es mucho más pequeña que la otra.