2012-04-13 78 views
0

我有方程 * X =的b使用普通最小二乘(OLS)

尺寸甲是矩阵尺寸的n×m个,X是MX 1和b是nx 1. A具有比列更多的行(n < m)。

我知道是一个和由于n!= M,一个没有逆。 我知道的是两个载体xb。基本上,我想找到接近于零的(A * x-b)的A

最小二乘看起来是合适的,但我不确定如何继续,因为它似乎不遵循我的课本或wikipedia entry;通常矩阵A是已知的。如果OLS不合适,会是什么? Singluar价值分解?请再次指出,我的线性代数是生锈的。

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

回答

1

对此有无限多的解决方案,没有什么像复杂的奇异值分解那样复杂。

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

我们可以把这看作是找到n个独立向量(A行)的问题,这样当你用x形成它们的点积时,它们就产生了b的对应元素。因此A * x = b(解决方案将是精确的)等同于查找A的行,使得如果A_i是A的第i行,则点(A_i,x)= b(i)。

以这种方式看,解决方案显而易见!显而易见,它显示了为什么没有“解决方案”,但无限多的这样的解决方案,所有这些都很微不足道。

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

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

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

+0

如果我期望A的任何一行大部分非零,我的问题会受到限制吗? – bushbo 2012-04-13 21:34:32

+1

不需要解决。您可以为A的大多数列提供几乎任何值,并且仍然有解决方案。事实上,你可以从任何你喜欢的发行版中选择随机数字,但只能选择一列。根据你的说法,根本没有可行的方法来选择智能解决方案。而且还不需要任何复杂的因子分解。 – 2012-04-14 01:50:29