Для квадратной матрицы Z, Я знаю, что Z = z * z ' Есть ли уже определенная функция в Matlab, которая позволяет мне извлечь z из Z? (обратите внимание, что z является вектором)Извлечь вектор из матрицы в Matlab
ответ
Divakar's method очень простой и элегантный, но имеет несколько недостатков:
Он способен реконструировать элементы
z
до знака, то есть, вы 'нужно проверить сZ(ii,jj)
, что именно находятся вывески отz(ii)
иz(jj)
.В случае шума, то есть
Z = z*z' + noise
реконструкция может быть далеко ...
Таким образом, можно было бы хотеть использовать немного более надежный метод, с помощью singular value decomposition (SVD):
[U S V] = svd(Z);
z = U(:,1) * sqrt(S(1,1));
Это даст вам оптимальный ранг-один в смысле L2: это матрица ранга один, ближайшая к Z
в норме L2.
Поскольку вы упомянули Z=z*z'
, вы принимаете z
в качестве вектора столбца.
Теперь, если вы вручную выполняете умножение, предполагая некоторые значения в векторе столбца z
, а затем, если вы выполняете Z=z*z'
, вы заметите, что диагональные элементы являются квадратами векторных элементов.
Вы можете использовать это свойство, чтобы получить обратно z
из Z
, сначала получают диагональные элементы Z
с diag
, а затем выполняя квадратный корень на тех, с sqrt
. Приведенный ниже код делает все это -
z = sqrt(diag(Z))
будет ли это иметь смысл, если я уже знаю, что diag (Z) - все это? –
@AmiraAkra Тогда ваш 'z' должен быть все тоже. На самом деле они могут быть и отрицательными, потому что квадрат как '-x', так и' + x' приводит к x^2. – Divakar
+1 для СВД. Это тоже будет мой ответ. –