3

我正在开始我的第一个 C# 项目——需要找到适合多个 xy 数据点的曲线。

例如:

x: 1,2,3,4,5,6 y: 0.5,5,0.5,2.5,5,0.5

碰巧的是,根据 excel,我需要对这些点进行适当的曲线拟合是六阶多项式。

如何获得该曲线的系数和指数以在 C# 中编写正确的表达式?我想远离图书馆,因为这很可能最终会被转换为 C 用于微处理器。

我是 C# 新手,对硬件/软件集成知之甚少。

也就是说,我现在正在阅读数值方法……这个项目的第二步将是采用曲线并在连续最小值之间进行数值积分……

非常感谢任何建议/指针。

输入将由六个 xy 坐标给出...

问题#1: 给定六个坐标,我如何写一个多项式?

4

3 回答 3

3

给定在某个x i处评估的n个点,找到多项式的系数的问题称为多项式插值问题。您可以在此处阅读问题的详细信息及其解决方案(wikipedia.org)。

您应该密切关注Constructing the interpolation polynomial部分,他们提到如果您使用高斯消元法,您需要反转的矩阵会引入很大的错误,并查看牛顿插值(wikipedia.org) 以获得更好的方法。仅仅六分可能无关紧要,但值得了解。

至于实现,您有两个选择:使用支持线性代数的第三方库 - 例如Science Code .Net (sciencecode.com),或者开始为向量和矩阵编写一些基本抽象,并实现基本操作,例如如乘法、加法和求逆。过去,我们使用了一个名为“C 中的数值食谱”的库,它们很可能有一个 C# 端口。可能值得一试。

于 2012-05-15T17:31:01.367 回答
0

如果您认为六阶多项式最适合六个数据点,那么您似乎严重过度拟合,我很好奇您是否真的意味着实际数据中只有六个点(在这种情况下拟合不会有意义)或者您只有六个样本点,并且预计可以预测数据的实际形状。

https://www.coursera.org/course/ml有一个关于机器学习的优秀课程,更具体相关,因为它教授自动选择多项式的正确阶数、划分数据和更基本的方面,例如底层的矩阵数学整个东西。

这不是那种你可以指出“算法 X”并希望它正确出现的东西...... ML 课程涵盖了人们犯的很多错误(过度拟合、拟合不足、数据采样不佳等)。 ..) 在对数据进行拟合时。它还讨论了如何避免它们。

于 2012-05-15T17:34:20.670 回答
0

为此,我成功地使用了 MathNET.Numerics库。它可以作为 Nuget 包安装,并且似乎得到了积极的维护。曲线拟合在此处的文档中进行了描述。

于 2021-05-14T12:16:45.310 回答