0

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

4

1 回答 1

1

我认为您的问题来自您使用 10 阶多项式这一事实,这通常会导致数值问题:

  • 首先,它们可能不适合,因为振荡很大。即使在对简单函数进行插值时,也会出现这些振荡,请参见著名的龙格示例
  • 其次,高阶多项式的拟合会导致山条件线性系统,这就是为什么您不能反转矩阵的原因(无论如何您都不应该这样做)。我做了一个简单的实验:我取了11个等距点(在区间[0,1]上),组装线性系统的矩阵来求解。Matlab给了我一个大约1e8的条件数,所以最小二乘矩阵的条件数是1e16。所以你的矩阵“接近奇异”,这意味着所有的数值精度都丢失了。

因此,摆脱问题的最佳方法是摆脱 10 阶多项式。您可能应该考虑低阶多项式、样条曲线或分段多项式逼近。

如果你真的需要 10 阶多项式(例如,如果你知道你的数据是由这样的多项式生成的),那么不要反转矩阵。使用良好的预条件子和迭代方法来求解系统,而不需要反转矩阵。

于 2013-01-31T09:29:25.253 回答