对于方阵Z, 我知道Z = z * z' Matlab中是否已经定义了一个函数,可以从Z中提取z? (注意z是向量)
答案 0 :(得分:3)
由于您提到了Z=z*z'
,因此您假设z
为列向量。
现在,如果手动执行乘法,假设列向量z
中有一些值,然后执行Z=z*z'
,则会注意到对角元素是向量元素的正方形。
您可以使用此属性从z
返回Z
,首先获取Z
的对角元素diag
,然后对sqrt
的对角元素执行平方根{1}}。下面的代码完成了所有这些 -
z = sqrt(diag(Z))
答案 1 :(得分:1)
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意义上的最佳排名:这是在L2范数中最接近Z
的排名第一的矩阵。