如何找到合适的幂律?

时间:2015-05-26 19:32:18

标签: c# mathnet

给出以下xs和ys集:

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中的所有函数只能找到各种形式函数的线性系数,但似乎没有一个能够确定指数。

2 个答案:

答案 0 :(得分:5)

你想要的等式如下:

Response.Write

采取双方的自然日志:

y = a*x^b

现在,您可以对新变换后的变量ln(y) = ln(a*x^b) = ln(a) + b*ln(x) 使用线性回归,并计算出您想要的两个参数:(ln(x), ln(y))ln(a)

答案 1 :(得分:1)

在指数系统中,进行回归的最佳方法可能是在对数刻度上进行线性回归。为了澄清,即使你的函数不是线性的,采用等式两边的自然对数也会得到一个更线性的系统

非线性函数:y = a x^b

然后变为ln(y) = ln(a x^b) = ln(a) b ln(x)

在Math.NET Numerics中,编写代码的好方法可能是:

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