2012-07-26 1019 views

回答

5

我发现,返回相同的公式,Excel中给出了解决方案:

  1. 放在一起以最小二乘抛物线使用的值的增广矩阵。请参阅http://www.efunda.com/math/leastsquares/lstsqr2dcurve.cfm的求和公式

  2. 使用高斯消元法来求解矩阵。这里是C#代码,将这样做http://www.codeproject.com/Tips/388179/Linear-Equation-Solver-Gaussian-Elimination-Csharp

  3. 运行后,矩阵(M)中的剩余值将等于Excel中给出的系数。

也许我可以找到R^2,但我不需要它为我的目的。

0

这取决于,因为根据您提供的数据以及曲线通过这些点的重要性,有很多方法可以完成这样的工作。

我猜你比多项式中的系数有更多的点数(例如对于二阶曲线超过三个点)。

如果这是真的,那么您可以做的最好的是最小二乘拟合,它可以计算使所有点和结果曲线之间的均方误差最小的系数。

+0

你知道最小二乘拟合算法吗?我想把一些代码放在C#中。 – user1214135 2012-07-26 15:21:54

+0

http://stackoverflow.com/questions/350852/least-squares-c-sharp-library – Dan 2012-07-26 15:31:05

3

图表中的多项式趋势线使用基于QR分解方法(如LINEST工作表函数(http://support.microsoft.com/kb/828533))的最小二乘法。给定(x,y)数据的二阶或二次趋势可以使用=LINEST(y,x^{1,2})来计算。

您可以使用Worksheet.Evaluate方法从C#中调用工作表公式。

+0

+1直接申请 – brettdj 2012-07-27 03:49:11

+0

我知道最基本的工作表函数。我想知道的是linest使用的算法(或带有二阶多项式趋势线的图表)。我想通了,并在下面回答我自己的问题,http://stackoverflow.com/questions/11672385/excel-polynomial-curve-fitting-algorithm/11677949#11677949 – user1214135 2012-07-27 14:26:43

+0

如果你只是做一个二次趋势线,你的链接应该足够了但趋势线(LINEST)算法实际上实现了QR分解以获得更高的准确性 - 它并不像kb文章中所述的那样直接求解“Normal Equations”。 – 2012-07-27 15:50:44

0

既然这是第二顺序,我的建议只是创建该死的二阶项并做一个线性回归。

Ex。如果你正在做z〜second_order(x,y),它相当于做z_first_order(x,y,x^2,y^2,xy)。

+0

我将第二阶解释为y = c0 + c1 * x + c2 * x^2。你的二阶理念适合曲面,而不是曲线。 – duffymo 2012-07-26 17:11:20