2014-09-07 2 views

ответ

1

Divakar's method очень простой и элегантный, но имеет несколько недостатков:

  1. Он способен реконструировать элементы z до знака, то есть, вы 'нужно проверить с Z(ii,jj), что именно находятся вывески от z(ii) и z(jj).

  2. В случае шума, то есть Z = z*z' + noise реконструкция может быть далеко ...

Таким образом, можно было бы хотеть использовать немного более надежный метод, с помощью singular value decomposition (SVD):

[U S V] = svd(Z); 
z = U(:,1) * sqrt(S(1,1)); 

Это даст вам оптимальный ранг-один в смысле L2: это матрица ранга один, ближайшая к Z в норме L2.

+0

+1 для СВД. Это тоже будет мой ответ. –

3

Поскольку вы упомянули Z=z*z', вы принимаете z в качестве вектора столбца.

Теперь, если вы вручную выполняете умножение, предполагая некоторые значения в векторе столбца z, а затем, если вы выполняете Z=z*z', вы заметите, что диагональные элементы являются квадратами векторных элементов.

Вы можете использовать это свойство, чтобы получить обратно z из Z, сначала получают диагональные элементы Z с diag, а затем выполняя квадратный корень на тех, с sqrt. Приведенный ниже код делает все это -

z = sqrt(diag(Z)) 
+0

будет ли это иметь смысл, если я уже знаю, что diag (Z) - все это? –

+0

@AmiraAkra Тогда ваш 'z' должен быть все тоже. На самом деле они могут быть и отрицательными, потому что квадрат как '-x', так и' + x' приводит к x^2. – Divakar