8 votos

Dado el inverso de un bloque de matriz Completa del problema

Dado $X$ a una cuadra de la matriz

$$\pmatrix{A&B}$$

donde$A$$m \times n$$B$$m \times (n−m)$.
Sé que a priori el valor de $X \times (X^{T} \times X)^{-1}$.

Sustituyendo $X$:

$$\pmatrix{A&B} \times \pmatrix{A^{T}A&A^{T}B\\B^{T}A&B^{T}B}^{-1}$$

Quiero obtener el valor de $A \times (A^{T} \times A)^{-1}$.
He probado muchos artículos y herramientas, por ejemplo,

http://en.wikipedia.org/wiki/Block_matrix_pseudoinverse

y la Inversión de matrices Lema, pero no he logrado encontrar una solución.

Alguna idea? Gracias!

2voto

BarryBostwick Puntos 12

Su $X$ es cuadrado y tiene la pseudo-inversa. O en este caso a la izquierda inversa. Bien para una matriz cuadrada este es justo el inverso. Así que voy a responder a la pregunta de cómo obtener la pseudo-inversa de una sub-parte de las columnas de una matriz cuadrada dada la inversa de esa matriz.

Datos: $$\pmatrix{A & B} = X$$ $$X^{-1} = \pmatrix{C \\ D}$$ de modo que $X^{-1}X = I$ da $$CA = I$$ a la izquierda de la inversa de la $A$ columna de la matriz. Dado un general (izquierda) inverso, para ser la pseudo-inversa, es necesario que el $C^\top$ tiene el mismo tamaño de columna como $A$ (ver mi página de perfil para un enlace donde muestro esto acerca de la pseudo-inversa). Esto no es cierto en general, por lo que utilizar las otras filas de la matriz inversa ( $D$ $DA = \mathbf{0}$ ) para hacer que suceda. Si $C^\top$ compartido el mismo espacio como $A$, debido a $D$ es el espacio complementario a $A$ entonces tendríamos $C^\top D = \mathbf{0}$. Por tanto, el problema de encontrar la pseudo-inversa de a $A$ $X^{-1}$ es equivalente a orthogonalizing las filas de $C$ contra las filas de $D$.

Me disculpo si mi descripción no es perfectamente comprensible, por tanto, permítanme tratar algunos precisa de código. Mi código hábito es python, vamos a la matriz $X$ x ser una lista de listas, y x_i la inversa. La función dot() es la más obvia (producto escalar):

for k in range(m-1, n, -1): # the rows in D, counting down from the last
  z = dot(x_i[k][:], x_i[k][:]) # get the norm squared
  for j in range(k): # orthogonalize the previous rows
    cross = dot(x_i[k][:],x_i[j][:])
    t = cross/z
    for i in range(m): x_i[j][i] -= t*x_i[k][i] # orthogonalize row j with row k

Esto resultará en la pseudo-inversa en la primera $n$ filas de la (ahora modificado) inversa. Esto es menos de cálculo que la búsqueda de la pseudo-inversa a partir de cero.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X