【问题标题】:How to find a fitting power law?如何找到合适的幂律?
【发布时间】:2015-05-26 19:32:18
【问题描述】:

给定以下一组 xs 和 ys:

xs = [8294400, 2073600, 921600, 409920]

ys = [124, 433, 853, 1449]

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

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

【问题讨论】:

标签: c# mathnet-numerics


【解决方案1】:

你想要的方程是这样的:

y = a*x^b

取两边的自然对数:

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

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

【讨论】:

    【解决方案2】:

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

    非线性函数: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

    【讨论】:

    • 这是不正确的;您遗漏了 ln(a) 项。我写的是对的。
    • 对。这是一个错字。
    猜你喜欢
    • 2021-06-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-24
    相关资源
    最近更新 更多