Así que tenemos una matriz $A$ tamaño de $M \times N$ con elementos $a_{i,j}$ . ¿Qué es un algoritmo paso a paso que devuelve la inversa de Moore-Penrose $A^+$ para un determinado $A$ (a nivel de manipulaciones/operaciones con $a_{i,j}$ elementos, no vectores)?
Respuestas
¿Demasiados anuncios?-
Realizar una descomposición del valor singular $\mathbf A=\mathbf U\mathbf \Sigma\mathbf V^\top$
-
Compruebe si hay valores singulares "diminutos" en $\mathbf \Sigma$ . Un criterio común es que todo lo que sea menos de $\|\mathbf A\|\epsilon$ es "pequeño". Poner esos valores singulares a cero.
-
Formulario $\mathbf \Sigma^+=\mathrm{diag}(1/\sigma_1,1/\sigma_2,\dots, 0)$ . Es decir, recíprocamente los valores singulares no nulos, y dejar los nulos sin tocar.
-
$\mathbf A^+=\mathbf V\mathbf \Sigma^+\mathbf U^\top$
Hasta donde yo sé y por lo que he leído, no existe una fórmula directa (o algoritmo) para el psuedo-inverso (izquierdo) de $A$ , además de la "famosa fórmula" $$(A^\top A)^{-1}A^\top$$ que es computacionalmente caro. Aquí describiré un algoritmo que sí lo calcula eficientemente. Como he dicho, creo que esto puede ser previamente no publicado Así que cítenme apropiadamente, o si saben de una referencia Por favor, lo diga. Este es mi algoritmo.
Establecer $B_0 = A$ y para cada paso de iteración, tomar una columna de $B_i$ y ortogonalizar contra las columnas de $A$ . Este es el algoritmo ( $A$ tiene $n$ columnas independientes):
1. Inicializar $B_0=A$ .
2. Para $j \in 1\ldots n$ hacer \begin {align} \mathbf {t} &= B_i^ \top A_{ \star j} \\ R \mathbf {t} &= e_j & \text {Encontrar tal $R$ , una matriz de operaciones de fila elemental} \\ B_{i+1}^ \top &= R B_i^ \top \\ \end {align}
Obsérvese que cada paso realiza una multiplicación de vectores/matrices y una operación elemental de filas de matrices. Esto requerirá mucho menos cálculo que la evaluación directa de $(A^\top A)^{-1}A^\top$ . Obsérvese también que aquí hay una buena oportunidad para el cálculo paralelo. (Una cosa más a tener en cuenta - esto puede calcular una inversa regular, a partir de $B_0=A$ o con $B_0=I$ .)
El paso que calcula $R$ puede parcialmente ser ortogonal en lugar de elemental (ortonormal/unitaria -por tanto, mejor en el sentido de la propagación del error) si se desea, pero debe no hacer uso de las filas previamente ortonormalizadas de $B$ ya que deben permanecer ortogonalizados en el proceso. Si se hace esto, el proceso se convierte en un "primo" del algoritmo QR, mientras que antes se consideraría un "primo" de la factorización LU. "Primo" porque las operaciones matriciales de aquellos son autorreferenciales, y este algoritmo hace referencia a la matriz $A$ . Lo que sigue es una descripción que esperamos sea esclarecedora descripción.
Véase la primera edición para una descripción más extensa. Pero creo que lo siguiente es más conciso y directo.
Consideremos la matriz conformable $B^\top$ tal que $B$ tiene la misma dimensión que $A$ y \begin {align} B^ \top A &= I \tag {1} \\ B &= A B_A \tag {2} \\ \end {align}
Aquí $B_A$ es arbitraria y sólo existe para garantizar que el matiz $B$ comparte el mismo espacio de columna que $A$ . (1) establece que $B^\top$ es un inverso de la izquierda (no necesariamente único) para $A$ . (2) establece que $B$ comparte el mismo espacio de columna que $A$ .
Reclamación : $B^\top$ es el pseudoinverso de Moore-Penrose para $A$ .
Prueba :
El pseudoinverso de Moore-Penrose para $A$ es $$A^\dagger = \left(A^\top A\right)^{-1}A^\top$$ Dado (1) y sustituyendo (2) tenemos \begin {align} \left (AB_A \right )^ \top A &= I \\ B_A^ \top A^ \top A &= I \\ B_A^ \top &= \left ( A^ \top A \right )^{-1} \\ B_A &= \left ( A^ \top A \right )^{-1} \\ \end {align} Ahora resolviendo para $B$ de (2): \begin {align} B &= A \left (B_A \right ) \\ B &= A \left ( A^ \top A \right )^{-1} \\ \Rightarrow B^ \top &= \left ( A^ \top A \right )^{-1}A^ \top \\ \end {align}
Q.E.D.
El primer paso es comprar Matlab. El segundo paso es escribir pinv
.
Edición: Aquí hay un aplicación .