C# 如何找到合适的幂律?

C# 如何找到合适的幂律?,c#,mathnet-numerics,C#,Mathnet Numerics,给定以下一组X和Y: xs=[829440020736092160409920] ys=[1244338531449] 用Excel中的幂律拟合得到一个很好的近似值: Excel找到了一个函数,其形式为a(x^b)。如何确定C中的a和b?我试着使用Math.Net数值计算,但我没有看到任何方法适用于这种形式的函数。中的所有函数都只找到各种形式函数的线性系数,但似乎没有一个函数能够确定指数。您想要的方程如下所示: y = a*x^b 以双方的天然原木为例: ln(y) = ln(a*x^b)

给定以下一组X和Y:

xs=[829440020736092160409920]

ys=[1244338531449]

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


Excel找到了一个函数,其形式为
a(x^b)
。如何确定C中的
a
b
?我试着使用Math.Net数值计算,但我没有看到任何方法适用于这种形式的函数。中的所有函数都只找到各种形式函数的线性系数,但似乎没有一个函数能够确定指数。

您想要的方程如下所示:

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(ax^b)=ln(a)bln(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()


资料来源:这是因为你想要的回归类型是非线性的。你可能需要,链接页面上实际描述了这种情况的文档:这是不正确的;你漏掉了ln(a)项。我写的是对的。那是个打字错误。