15 votos

Detección de matrices simétricas de la forma (matriz de bajo rango + diagonal)

Dejemos que $\Sigma$ sea una matriz simétrica positiva definida de dimensiones $n \times n$ . ¿Existe una forma numéricamente robusta de comprobar si se puede descomponer como $\Sigma = \mathcal{D} + v^t.v$ donde $v$ tiene unas dimensiones $r \times n$ con $r < n-1$ y $\mathcal{D}$ es diagonal con elementos positivos?

Hasta ahora, teniendo en cuenta $\Sigma$ Estoy comprobando si hay un mínimo de $k$ para el cual las soluciones positivas para la matriz diagonal de $\mathrm{rank}(\Sigma -\mathcal{D}) = k$ existe.

Tengo que añadir que, incluso cuando la solución existe, puede no ser única.

Ejemplo:

$$ \Sigma = \left( \begin{array}{cccc} 6 & 6 & 7 & 0 \\ 6 & 11 & 12 & -3 \\ 7 & 12 & 20 & -6 \\ 0 & -3 & -6 & 9 \\ \end{array} \right) \, \text{ where } \mathcal{D} = \left( \begin{array}{cccc} 1 & 0 & 0 & 0 \\ 0 & 2 & 0 & 0 \\ 0 & 0 & 3 & 0 \\ 0 & 0 & 0 & 4 \\ \end{array} \right) \text{ and } v^t = \left( \begin{array}{cc} 2 & 1 \\ 3 & 0 \\ 4 & -1 \\ -1 & 2 \\ \end{array} \right) $$

$\Sigma$ también admite una representación diferente, de hecho es una de la familia 1-paramétrica:

$$ \mathcal{D} = \mathrm{diag}\left(\frac{31}{39}, \frac{403}{203}, \frac{79}{29}, \frac{84}{19} \right) \text{ and } v^t = \left( \begin{array}{cc} 0 & 679 \\ -78 & 696 \\ -156 & 812 \\ 97 & 0 \\ \end{array} \right) \cdot \left( \begin{array}{cc} \sqrt{2522} & 0 \\ 0 & 2 \sqrt{19691} \\ \end{array} \right)^{-1} $$

Tengo dos preguntas. ¿Por qué hay una familia paramétrica de soluciones? ¿Se puede encontrar una solución por métodos de álgebra lineal?

Gracias

7voto

Si se acepta la precisión numérica en torno al orden de $[10^{-14},10^{-10}]$ , entonces la siguiente solución de la desigualdad de la matriz lineal es robusta:

He intentado resolver el problema relacionado : Encontrar una matriz diagonal $D\succ 0$ tal que $$S:=\Sigma-D \succeq 0,\quad \ \operatorname{rank}(S)\leq n-2$$ Las restricciones de rango son siempre problemáticas (no convexas) ya que subir (aumentar el rango) es fácil pero bajar es típicamente muy difícil (Ya que el rango de una matriz es semicontinuo superior..)

De todos modos, he planteado un sencillo problema LMI con una matriz diagonal $D$ como sigue $$ \min_{\displaystyle\substack{ D\succ 0,\\S\succeq 0}} \ \ \operatorname{tr(S)}$$ En otras palabras, simplemente minimicé la suma de los valores propios de $S$ esperando que algunos de ellos se acerquen a cero. Y para mi sorpresa, (salvo algunos casos que terminaron en uno, hasta ahora) dos de ellos suelen resultar arbitrariamente cercanos a cero. Esto también equivale a maximizar las entradas de $D$ manteniendo la semidefinición positiva de $S$ .

Si tienes MATLAB y Robust Control Toolbox puedes probarlo por ti mismo con el siguiente código ( cualquier solucionador de LMI podría hacerlo ):

%Generate some pos def matrix
n = 5;
Sr = rand(n);
Sr = 2*(Sr+Sr');
Sr = 2.5*max(abs(eig(Sr)))*eye(n)+Sr;
% Uncomment the next line for the particular matrix in the question
%Sr = [6 6 7 0;6 11 12 -3;7 12 20 -6;0 -3 -6 9]; n=4;

%Declare LMIs
setlmis([])
D=lmivar(1,[ones(n,1) zeros(n,1)]);
lmiterm([1 1 1 D],1,1);
lmiterm([-1 1 1 0],Sr);
lmis = getlmis;
c = mat2dec(lmis,-eye(n))
[cop,xop] = mincx(lmis,c,[1e-12 200 1e9 20 0]);
Dnum= dec2mat(lmis,xop,D);
disp('The eigenvalues of the difference')
eig(Sr-Dnum)
disp('The rank of the difference')
rank(Sr-Dnum)
disp('The condition number of the difference')
rcond(Sr-Dnum)

Pero como podemos esperar $(S_r-D_{num})$ es una matriz de rango completo, pero su número de condición es generalmente alrededor de $10^{-14}$ .

Finalmente, he probado su matriz y he terminado con $$ D = \begin{pmatrix} 0.75669 &0 &0 &0\\ 0 &2.1392 &0 &0\\ 0 &0 &2.6752 &0\\ 0 &0 &0 &4.4885 \end{pmatrix} $$ Después de asegurarse de que m de los valores propios son efectivamente cercanos a cero, la obtención de la variable de bajo rango es simplemente un masaje numérico. (Esta parte puede mejorarse sustancialmente en mi opinión)

[K,L,M] = svd(Sr-Dnum);
M = M';
m=2; %Select how many eigs are close to zero
K = K(:,1:n-m);
L = L(1:n-2,1:n-m);
M = M(1:n-m,:);
T = K*L*M
disp('The rank of V^T V ' )
rank(T) %indeed n-m
V = K*sqrt(L);
% Testing the result
disp('The error of \Sigma = D - v^T v' )
Sr-Dnum-V*V'

Resultado numérico de su variable $v^t$ (redondeado aún más por la pantalla) $$ v^t = \begin{pmatrix} -1.826 &1.3817\\ -2.9418 &0.45479\\ -4.1423 & -0.40799\\ 1.2817 & 1.6938 \end{pmatrix} $$

También tenemos una condición necesaria utilizando el complemento ortogonal $V_\perp$ de $v^t$ : $$ V_\perp^T\Sigma V_\perp = V_\perp^T D V_\perp $$ Y esta diferencia también adolece de errores numéricos (alrededor de $10^{-12}$ . Sin embargo, si buscas una aproximación rápida y sucia, esto se acerca bastante. Jugando con la solución $D_{num}$ (lo que significa trabajo manual), puede incluso obtener resultados exactos.

Respecto a la teoría, no sé por qué el número de eigs que se acercan a cero es $n-2$ en general, pero no más. Intentaré volver a esto si tengo algo de tiempo más tarde.

No creo que una solución analítica conduzca a un resultado directo ya que el rango es excesivamente dependiente de las entradas de la matriz y sería realmente difícil (y genial, por supuesto) obtener algo más que aproximaciones.

Por último, no entendí lo que quiso decir con $1$ -familia paramétrica, así que no tengo ningún comentario al respecto :).

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