【发布时间】:2014-09-19 04:16:59
【问题描述】:
我想在 MATLAB 中生成具有以下约束的 M*N 矩阵(M 不等于 N):
步骤 1. 将矩阵的每个条目设置为 i.i.d。 N(0,1) 值。
步骤 2. 使用 Gram-Schmidt 算法正交化矩阵的 M 行。
步骤 3. 将矩阵的行标准化为单位长度。
我不知道如何实现上面的第二步。
感谢任何帮助。
【问题讨论】:
标签: algorithm matlab matrix orthogonal
我想在 MATLAB 中生成具有以下约束的 M*N 矩阵(M 不等于 N):
步骤 1. 将矩阵的每个条目设置为 i.i.d。 N(0,1) 值。
步骤 2. 使用 Gram-Schmidt 算法正交化矩阵的 M 行。
步骤 3. 将矩阵的行标准化为单位长度。
我不知道如何实现上面的第二步。
感谢任何帮助。
【问题讨论】:
标签: algorithm matlab matrix orthogonal
你可能想看看orth:
A = randn( m, n ); % random iid ~N(0,1)
oA = orth( A.' ).'; % orthogonal rows
nA = bsxfun( @rdivide, oA, sqrt( sum( oA.^2, 2 ) ) ); % normalize to unit length
【讨论】:
oA 已经标准化 - 这是orth 的输出。因此,第三阶段是多余的,我只是出于有条理的原因才放它。你可以忽略它。
qr(A) ~= orth(A)。这里math.purdue.edu/~wang838/teaching/GramSchmidt.pdf 实现了一个 G-S 算法。注意s(:,1)/norm(s(:,1)) ~= orth(s)(:,1)
orth 也适用于非方阵。