在Matlab中从矩阵中提取矢量

时间:2014-09-07 10:00:03

标签: matlab

对于方阵Z, 我知道Z = z * z' Matlab中是否已经定义了一个函数,可以从Z中提取z? (注意z是向量)

2 个答案:

答案 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非常简单而优雅,但有一些缺点:

  1. 能够重建z符号的元素,也就是说,您必须与Z(ii,jj)核对符号究竟是什么> z(ii)z(jj)

  2. 如果是噪音,那就是Z = z*z' + noise重建可能会有所不同......

  3. 因此,人们可能希望使用singular value decomposition (SVD)

    稍微更健壮的方法
    [U S V] = svd( Z );
    z = U(:,1) * sqrt(S(1,1));
    

    这将为您提供L2意义上的最佳排名:这是在L2范数中最接近Z的排名第一的矩阵。