2

我有一个问题,我正在使用线性最小二乘拟合一个高阶多项式到(不是很)有噪声的数据。目前,我正在使用15到25左右的多项式阶数,这非常出色:相关性非常接近线性,但对“非常接近”进行建模的准确性至关重要。我使用Matlab的polyfit()函数,并且(显然)使x数据标准化。这通常工作正常,但我遇到了一些最近的数据集的问题。拟合多项式在x数据区间内具有极值。对于我正在处理的应用程序来说,这是一个不可能的。多项式模型在x间隔内必须没有平稳点。线性最小二乘法适合约束 - 任何想法?

所以我需要给最小二乘问题增加一个约束:拟合多项式的导数必须在已知的x范围内严格为正值(或者严格为负值 - 这取决于数据,但是一个简单的线性拟合将会快速告诉我它是什么)。我已经快速浏览了可用的优化工具箱函数,但我承认我不知道如何去做这件事。有没有人有什么建议?

[我欣赏有比多项式这个数据可能是更好的车型,但在短期内是不可行的改变模型的形式]

[A闭注:我终于拿到了继续取代这个可怕的多项式模型!我将采用非参数方法,样条平滑,使用Jonas Lundgren的优秀SPLINEFIT代码。这具有我已经在最终用户应用程序中使用样条模型的优点,所以我已经有C#代码可用于评估样条模型]

+0

高阶多项式并不总是答案,他们确实有[问题]的份额(http://blogs.mathworks.com/loren/2008/07/17/interpolating-polynomials/#9)。引用该帖子的作者(@ woodchips),有时它有助于“解决问题,并使用较小的低阶多项式段拼凑在一起”...... – Amro

+0

是的。尽管我近似,而不是插值,但多项式通常不是最好的选择。不幸的是,我的问题是“试图将一个相对较小的,平滑弯曲的基础物理过程的一部分建模成一个更加扩展的区域而”成长“。我的Matlab代码构建了一个由C#中的生产代码使用的模型,这个模型更加难以改变。我写了一个建议,使用径向基函数网络重新实现模型,但直到(如果)被采用,我需要一种方法来驯服我的多项式! – Max

+0

出于多种原因,高阶多项式不是一个好的解决方案。避免与惯性保持一致可能会在未来造成很多问题。我没有回答你的问题的原因是你拒绝改变。我的回应是使用一个建模工具,它可以让你指定诸如单调性,积极性,容易修复点等等。我的slmengine就是这么做的。但如果你不改变,没有理由浪费我的时间或你的时间。 – 2011-10-30 10:40:40

回答

0

您可以使用cftool并使用排除数据点选项。

+0

Naresh - 我正在使用优化工具箱,而不是曲线拟合工具箱。拟合过程是自动的(每个拟合大约有500个数据点),并且已经使用强大的技术来减少数据中的异常值 – Max