我正在开始我的第一个C#项目之一 - 需要找到适合几个x-y数据点的曲线。
例如:
x:1,2,3,4,5,6 y:0.5,5,0.5,2.5,5,0.5
实际上,根据excel,我需要的这些点的正确曲线拟合是六阶多项式。
如何在C#中编写正确的表达式来获取此曲线的系数和指数?我想远离库,因为这很可能最终被转换为C用于微处理器。
我是C#的新手,对硬件/软件集成知之甚少。
那就是说,我现在正在阅读数值方法论......这个项目的第二步是采用曲线并在连续的最小值之间进行数值积分......
非常感谢任何建议/指示。
输入将由六个x-y坐标给出......
问题#1: 如何给出六个坐标的多项式?
答案 0 :(得分:3)
在某些 x i 处求出 n 点的多项式系数的问题被称为多项式插值问题。您可以阅读问题的详细信息及其解决方案here(wikipedia.org)。
你应该密切注意构造插值多项式这一部分,他们提到你需要反转的矩阵如果你使用高斯消元就会引入大错误,并检查{{3} (wikipedia.org)提供更好的方法。只有六点可能无关紧要,但值得了解。
至于实现,您有两种选择:使用具有线性代数支持的第三方库 - 例如Newton interpolation(sciencecode.com),或者开始为向量和矩阵编写一些基本的抽象,以及实现乘法,加法和反演等基本操作。在当天,我们使用了一个名为“C中的数字食谱”的库,他们可能有一个C#端口。可能值得一试。
答案 1 :(得分:0)
如果您认为六阶多项式最适合六个数据点,看起来您是认真的overfitting我很好奇您是否真的意味着实际数据中只有六个点(在这种情况下,拟合没有意义)或者您只有六个样本点,并且预计会预测数据的实际形状。
https://www.coursera.org/course/ml有一个关于机器学习的优秀课程,更具体地说是相关的,因为它教会自动选择多项式的正确顺序,分割数据和更基本的方面,例如整个事物的基础数学。
这不是你可以指向“算法X”的东西,并希望它会出现正确...... ML课程涵盖了人们犯下的许多错误(过度拟合,拟合,差数据采样)等等...)在拟合数据时。它还讨论了如何避免它们。
答案 2 :(得分:0)
我为此成功使用了 MathNET.Numerics 库。它可以作为 Nuget 包安装,并且似乎得到了积极维护。曲线拟合在其文档 here 中进行了描述。