如何用MATLAB生成满足A^T*A=I的m×n高斯随机矩阵
关于生成满足正交条件的随机高斯矩阵的问题
首先明确一个线性代数结论:当矩阵$A \in \mathbb{R}^{m \times n}$且$m < n$时,不可能满足$A^T A = I_n$。原因是$A^T A$是$n \times n$矩阵,其秩最多为$\min(m,n)=m$,而$n$阶单位矩阵的秩为$n$,$m < n$时秩不匹配,因此这样的矩阵不存在。
如果你的实际需求是以下两种情况之一,可以用对应的MATLAB代码实现:
情况1:生成行正交归一的$m \times n$矩阵(满足$A A^T = I_m$)
即矩阵的$m$个行向量两两正交且均为单位向量($n > m$时可行),代码如下:
m = 3; n = 10; % 示例维度,m远小于n A = randn(m, n); % 生成随机m×n高斯矩阵 A = orth(A.').'; % orth(A.')得到A行空间的正交归一基(列向量),转置后得到行正交归一的矩阵
注:orth函数返回的矩阵本身就是列正交归一的,因此转置后得到的矩阵行向量自然正交归一,无需额外的归一化步骤(你之前代码中的bsxfun是多余的)。
情况2:生成列正交归一的$n \times m$矩阵(满足$A^T A = I_m$,$n >> m$)
如果你的需求实际是构造$n$行$m$列的矩阵,使得其$m$个列向量两两正交归一(此时$A^T A = I_m$),代码如下:
m = 3; n = 10; % 示例维度,n远大于m A = randn(n, m); % 生成随机n×m高斯矩阵 A = orth(A); % orth直接返回列正交归一的矩阵,满足A^T*A=I_m
验证正交性
可以用以下代码验证结果是否符合要求:
- 对于情况1:
norm(A*A' - eye(m)),结果应接近0 - 对于情况2:
norm(A'*A - eye(m)),结果应接近0
内容的提问来源于stack exchange,提问作者livia
相关产品推荐
相关产品推荐

