鑑於以下一組X和Y的:如何找到合適的冪律?
XS = [8294400,2073600,921600,409920]
YS = [124,433,853,1449]
與電源件這在Excel中的法律產生了良好的近似值:
Excel中發現的形式a(x^b)
的功能。如何確定C#中的a
和b
?我嘗試使用Math.Net數字,但我沒有看到任何方法可用於此窗體的功能。 Linear Regression module中的所有功能只是找到各種形式函數的線性係數,但似乎無法確定指數。
鑑於以下一組X和Y的:如何找到合適的冪律?
XS = [8294400,2073600,921600,409920]
YS = [124,433,853,1449]
與電源件這在Excel中的法律產生了良好的近似值:
Excel中發現的形式a(x^b)
的功能。如何確定C#中的a
和b
?我嘗試使用Math.Net數字,但我沒有看到任何方法可用於此窗體的功能。 Linear Regression module中的所有功能只是找到各種形式函數的線性係數,但似乎無法確定指數。
你想要的公式是這樣的:
y = a*x^b
以雙方的自然對數:
ln(y) = ln(a*x^b) = ln(a) + b*ln(x)
現在你可以在新的轉換變量(ln(x), ln(y))
使用線性迴歸和計算兩個你想要的參數:ln(a)
和b
。
在指數系統中,進行迴歸的最好方法可能是通過對數尺度進行線性迴歸。爲了澄清,即使你的函數不是線性的,取方程兩邊的自然對數將導致更線性系統
非線性函數: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.html和http://numerics.mathdotnet.com/api/MathNet.Numerics/Fit.htm
這是不正確的;你忽略了ln(a)的術語。我寫的是正確的。 – duffymo
正確。這是一個錯字。 –
這是因爲你想要的迴歸是非線性的。 –
您可能需要http://metanumerics.codeplex.com/和文檔http://metanumerics.codeplex.com/wikipage?title=Tests&referringTitle=Documentation – gtzinos
這種情況實際上是在鏈接頁面上描述的:http:// numerics .mathdotnet.com/Regression.html#線性化 - 非線性模型轉換 –