Espacio nulo de una matriz densa rectangular


16

Dada una matriz densa

ARm×n,m>>n;max(m)100000
¿cuál es la mejor manera de encontrar su base de espacio nulo dentro de cierta tolerancia ?ϵ

Sobre esa base, ¿puedo decir que ciertos cols dependen linealmente de ? En otras palabras, al calcular la base de espacio nulo, ¿qué columnas de deben eliminarse para obtener una matriz no singular?AϵA

Las referencias son apreciadas.

Respuestas:


12

Los métodos estándar para determinar el espacio nulo de una matriz son usar una descomposición QR o una SVD. Si la precisión es primordial, se prefiere la SVD; La descomposición QR es más rápida.

Usando la SVD, si , entonces las columnas de correspondientes a pequeños valores singulares (es decir, pequeñas entradas diagonales de ) constituyen la base del espacio nulo. La tolerancia relevante aquí es lo que uno considera un valor singular "pequeño". MATLAB, por ejemplo, toma pequeño para ser , donde está relacionado con la precisión de la máquina (ver aquí en la documentación de MATLAB ).A=UΣVHVΣmax(m,n)εε

Usando la descomposición QR, si , y el rango de es , entonces las últimas columnas de forman el espacio nulo de , asumiendo que la descomposición QR es reveladora de rango. Para determinar , calcule el número de entradas en la diagonal principal de cuya magnitud excede una tolerancia (similar a la utilizada en el enfoque SVD).A r n - r Q A r RAT=QRArnrQArR

No use la descomposición LU. En aritmética exacta, es un enfoque viable, pero con la aritmética de coma flotante, la acumulación de errores numéricos lo hace inexacto.

Wikipedia cubre estos temas aquí .


Geoff, hablando en términos de QR, supongamos que tengo la descomposición, ¿cómo relaciono las bases de espacio nulo y las columnas en la matriz original? En otras palabras, ¿qué columnas debo eliminar de para deshacerme del espacio nulo? El punto aquí es trabajar con A y no con su descomposición. AA
Alexander

Las rutinas que calculan la descomposición QR normalmente incluyen una opción para devolver un vector de permutación que indica cómo se permutan las columnas para obtener la factorización QR. Las últimas entradas de ese vector de permutación corresponderían a las filas de A (columnas de A T ) que están en el espacio nulo. Las primeras r entradas de ese vector corresponden a las columnas de A T que son linealmente independientes. No estoy seguro de lo que quiere decir con "deshacerse del espacio nulo". ¿Quiere decir que desea eliminar las columnas de A para obtener una matriz no singular? nrAATrATA
Geoff Oxberry

Sí, quiero decir eso. Veré la permutación, gracias.
Alexander

Esa es una pregunta diferente. Lo que se puede hacer en su lugar a continuación, es calcular la descomposición QR (o SVD) de . Si calcula la descomposición QR de A , puede calcular el rango de A como en la respuesta anterior (no es necesario transponer la matriz), y luego las primeras entradas r (donde r es el rango de A ) del vector de permutación corresponden a las columnas independientes de a . El mismo tipo de algoritmo se aplica a la SVD; Si puede devolver un vector de permutación junto con la descomposición, eso debería proporcionar la información necesaria. AAArrAA
Geoff Oxberry

8

Si , ya que su pregunta indica, se puede ahorrar algo de trabajo por recoger por primera vez un conjunto de índices I de p 5 n (por ejemplo) y filas al azar usando la factorización ortogonal A T I : = Q R . (La factorización QR es aquella en la que Q es cuadrado y R es rectangular de rango r , y las columnas n - r restantes de R son cero. El uso de una factorización QR permutada mejorará la estabilidad; la permutación debe tenerse en cuenta en un receta más detallada.)mnIp5nAI:T=QRQRrnrR

Por lo general, esto le dará un subespacio mucho menor dimensión abarcada por las columnas de , la última n - r columnas de Q . Este subespacio contiene el espacio nulo de A . Ahora escoger otro, conjunto de índices azar disjuntos y calcular la factorización QR de ( A I : N ) T . Multiplique el espacio nulo resultante a la izquierda por N para obtener un N mejorado de una dimensión probablemente incluso más baja. Iterar hasta que la dimensión de N ya no disminuya. Entonces probablemente tenga el espacio nulo correcto y pueda verificarlo calculando A NNnrQA(AI:N)TNNNAN. Si esto aún no es insignificante, realice más iteraciones con las filas más significativas.

Editar: una vez que tenga , puede encontrar un conjunto máximo J de columnas linealmente independientes de A mediante una factorización ortogonal de N T = Q R con pivote. De hecho, el conjunto J de índices no elegidos como pivotes tendrá esta propiedad.NJANT=QRJ


+1 para una forma eficiente de determinar el espacio nulo de una matriz grande. Tendré que recordar consultar esta respuesta más adelante cuando la necesite.
Geoff Oxberry

De hecho, suena razonable, sin embargo, mis matrices se ajustan a 16 GB de RAM, por lo que me quedaría con el matlab qr estándar.
Alexander

Prof. Neumaier, he decidido probar ese algoritmo, pero no entiendo exactamente qué es y qué significa "calcular la factorización QR de ( A I : N ) T ". ¿Podría explicarme un poco más? N(AI:N)T
Alexander

Edité mi respuesta un poco. se calcula mediante la receta de Geoff Oxberry. N
Arnold Neumaier

Gracias. Lo implementé. Sin embargo, por lo que veo, este algoritmo no me permite definir un conjunto de columnas linealmente independientes de (ya que descomponemos A T I : en lugar de A I :) , ¿pero solo ayuda a estimar la base del espacio nulo en sí? AAI:TAI:
Alexander
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.