如何找到合适的幂律?

How to find a fitting power law?

给定以下一组 xs 和 ys:

xs = [8294400, 2073600, 921600, 409920]

ys = [124, 433, 853, 1449]

用 Excel 中的幂律拟合得到一个很好的近似值:

Excel 找到了 a(x^b) 形式的函数。如何在 C# 中确定 ab?我尝试使用 Math.Net 数字,但我没有看到任何适用于这种形式的功能的方法。 Linear Regression module中的所有函数都只是求各种形式函数的线性系数,但none似乎可以确定指数。

您想要的方程如下所示:

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]))

或者,如果您想要 return 一个函数,您可以使用 LinearCombinationFunc()

来源:http://numerics.mathdotnet.com/Regression.html and http://numerics.mathdotnet.com/api/MathNet.Numerics/Fit.htm