2015-05-26 55 views
1

鑑於以下一組X和Y的:如何找到合適的冪律?

XS = [8294400,2073600,921600,409920]

YS = [124,433,853,1449]

與電源件這在Excel中的法律產生了良好的近似值:

enter image description here

Excel中發現的形式a(x^b)的功能。如何確定C#中的ab?我嘗試使用Math.Net數字,但我沒有看到任何方法可用於此窗體的功能。 Linear Regression module中的所有功能只是找到各種形式函數的線性係數,但似乎無法確定指數。

+0

這是因爲你想要的迴歸是非線性的。 –

+0

您可能需要http://metanumerics.codeplex.com/和文檔http://metanumerics.codeplex.com/wikipage?title=Tests&referringTitle=Documentation – gtzinos

+0

這種情況實際上是在鏈接頁面上描述的:http:// numerics .mathdotnet.com/Regression.html#線性化 - 非線性模型轉換 –

回答

4

你想要的公式是這樣的:

y = a*x^b 

以雙方的自然對數:

ln(y) = ln(a*x^b) = ln(a) + b*ln(x) 

現在你可以在新的轉換變量(ln(x), ln(y))使用線性迴歸和計算兩個你想要的參數:ln(a)b

1

在指數系統中,進行迴歸的最好方法可能是通過對數尺度進行線性迴歸。爲了澄清,即使你的函數不是線性的,取方程兩邊的自然對數將導致更線性系統

非線性函數:y = a x^b

然後,它將成爲ln(y) = ln(a x^b) = ln(a) b ln(x)

在Math.NET數字,一個很好的方式來編碼則可能是:

var y = y.Select(r => Math.Log(r)).ToArray(); // transform y = ln(z) 
double[] w = Fit.LinearCombination(xy, z_hat, 
    d => 1.0, 
    d => Math.Log(d[0]), 
    d => Math.Log(d[1])) 

或者,如果你想擁有它返回一個功能,您可以使用LinearCombinationFunc()

來源:http://numerics.mathdotnet.com/Regression.htmlhttp://numerics.mathdotnet.com/api/MathNet.Numerics/Fit.htm

+0

這是不正確的;你忽略了ln(a)的術語。我寫的是正確的。 – duffymo

+0

正確。這是一個錯字。 –