已知x与y,求解满足Ax=y的非方阵A的方法
求解满足Ax=y的非方阵A
已知向量x(10维)和y(8维),求8×10矩阵A使得Ax = y,核心要点如下:
问题本质分析
Ax = y展开后是8个线性方程:对A的第i行向量a_i,满足a_i · x = y_i(向量内积)。A共有80个元素,但仅受8个约束,因此存在无穷多个解,无法唯一确定原矩阵(除非额外添加约束,比如稀疏性、秩限制等)。
你之前尝试的A = BX^-1方法失效,是因为该公式仅适用于X为可逆方阵的场景——这里x是单个向量,对应的矩阵是10×1的列矩阵,不是方阵,无法求逆,因此不适用。
具体解法示例
方法1:最小范数解(行向量为x的倍数)
这是所有解中行向量范数最小的解,构造方式为:每个行向量是x的缩放版本,缩放系数由y_i和x的范数决定。
# 已知x和y x <- c(50,36,60,85,14,22,84,92,34,74) y <- matrix(c(0.51*50+0.42*36, 0.35*60+0.49*85+0.43*14, 0.43*22+0.31*84+0.97*92, 0.70*34+0.42*74, 50+60, 36+85+22, 14+84+34, 92+74), nrow=8) # 计算x的范数平方 norm_x_sq <- sum(x^2) # 构造解矩阵 A_min_norm <- t(y) %*% t(x) / norm_x_sq # 验证 all.equal(A_min_norm %*% x, y) # 返回TRUE,说明满足条件
方法2:稀疏解(仅保留单个非零元素)
选择x中任意非零元素(比如第一个元素x[1]=50),令每行仅该位置非零,直接计算满足方程的系数:
A_sparse <- matrix(0, nrow=8, ncol=10) for (i in 1:8) { A_sparse[i, 1] <- y[i, 1] / x[1] } # 验证 all.equal(A_sparse %*% x, y) # 返回TRUE
方法3:通解构造
每个行向量a_i可以表示为特解 + 齐次解:
- 特解:任意满足
a_i · x = y_i的向量(比如上述两种方法中的行向量) - 齐次解:任意与
x正交的10维向量(即满足v · x = 0的向量)
因此,完整通解为:A = A0 + Z,其中A0是任意一个特解矩阵,Z是任意8×10矩阵,且Z的每一行都与x正交。
关键结论
- 仅通过
x和y无法唯一确定原矩阵A,只能找到满足条件的一类矩阵。 - 若要还原原矩阵,需要额外信息(比如
A的稀疏结构、非零元素的位置等)。
内容的提问来源于stack exchange,提问作者Zac
相关产品推荐
相关产品推荐

