2012-07-26 1022 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