0

我有等式A * x = b

A的大小是矩阵大小 nxm,x是 mx 1,b是 nx 1。A 的行数多于列数 (n < m)。

我的未知数是A,因为 n != m,A没有逆。我知道的是两个向量xb。基本上,我想找到使 ( A * x - b ) 接近于零的A。

最小二乘似乎合适,但我不确定如何进行,因为它似乎不符合我的教科书或维基百科条目;通常矩阵A是已知的。如果 OLS 不合适,那会是什么?奇异值分解?再次,请指点,我的线性代数生锈了。

希望能够实现这个(python/C)。指向良好可读代码的指针?

4

1 回答 1

1

对此有无数种解决方案,不需要像奇异值分解这样复杂的解决方案。

如果 n = m,那么 A 可能只是一个对角矩阵,但你有 n > m。所以我们不能这么简单。

我们可以将其视为寻找 n 个独立向量(A 的行)的问题,这样当您与 x 形成它们的点积时,它们会产生 b 的相应元素。因此 A*x=b(解将是精确的)等价于找到 A 的行,如果 A_i 是 A 的第 i 行,则 dot(A_i,x) = b(i)。

这样看,解决办法就很明显了!显然,它说明了为什么没有“解决方案”,但有无数这样的解决方案,所有这些都是微不足道的。

因此,例如,选择 x 的任何非零元素。说它是第k个元素。然后创建 A_i 作为全为零的向量,除了 x 的相应选择的非零元素。

A_i(k) = b(i)/x(k)

A_i 的所有其他元素都为零。所以现在,形成点积。看到 A*x = b 是由一个矩阵 X 精确求解的,该矩阵只有一个非零列,而该列是一个相当微不足道的列。

于 2012-04-13T11:35:34.330 回答