2013-01-10 14 views
0

使用普通LSM(最小二乘法)解决方程组(多项式10度)的数值问题。我获得了具有巨大和非常小的值的参数 - 因此我无法在此方法中构建逆矩阵 - 即使在扩展变量中精度也很低。我试图在C++,Matlab,Delphi中做到这一点。 有人可以知道应用仪器,我可以用足够的准确性或数字提示做到这一点,并获得良好效果。矩阵的标准计算是不幸难以捉摸的。使用10次多项式解决方程组,LSM

+0

你的问题是关于使用最小二乘法拟合一个给定数据的10阶多项式吗?你有没有尝试用低阶多项式来使用你的代码?它工作吗?你有同样的问题吗? –

+0

具有较低阶多项式的代码工作正常。但我必须使用更复杂的功能模型,因此我尝试使用10阶多项式。 – Artik

+0

你的数据是什么?一个函数,你试图代表或云点? –

回答

1

我觉得你的问题来自于一个事实,即使用的是第10次多项式,这往往导致数值问题:

所有的
  • 首先,他们可以因为大振荡是不合适的。即使内插一个简单的功能,这些振荡也可以出现,请参阅着名的Runge's example。其次,高阶多项式的拟合可以导致山形线性系统,这就是为什么你不能反转矩阵(你应该反过来不这样做)。我做了一个简单的实验:我取11个等距点(在区间[0,1]上)并组装线性系统的矩阵来求解。 Matlab给我一个约为1e8的condition number,所以最小二乘矩阵的条件数为1e16。所以你的矩阵'接近单数',这意味着所有的数值精度都会丢失。

所以,摆脱你的问题的最好方法是摆脱10阶多项式。您应该考虑低阶多项式,样条或分段多项式近似。

如果您确实需要10阶多项式(例如,如果您知道您的数据是由这样的多项式生成的),则不要反转矩阵。使用一个好的预处理器和一个迭代方法来解决这个系统而不需要反转矩阵。

+0

谢谢你的回答。 – Artik