【问题标题】:Power law fitting with Ruby用 Ruby 拟合幂律
【发布时间】:2021-06-04 09:02:54
【问题描述】:

我有这些数据,需要像在 Excel 中那样执行“幂律曲线拟合”。

我尝试过使用 Ruby/GSl,但只有“指数拟合”。你知道适合功率曲线的库或其他东西吗?

文档:https://blackwinter.github.io/rb-gsl/rdoc/fit_rdoc.html#label-Exponential+fitting

# Fitting
a2, b2, = Fit.linear(x, Sf::log(y))
x2 = Vector.linspace(0, 5, 20)
A = Sf::exp(a2)
printf("Expect: a = %f, b = %f\n", a, b)
printf("Result: a = %f, b = %f\n", A, b2)
graph([x, y], [x2, A*Sf::exp(b2*x2)], "-C -g 3 -S 4")

【问题讨论】:

  • 尝试 log(y) 与 log(x) 的线性拟合,即您的模型是 log(y) = beta_0 + beta_1 * log(x) => y = exp(beta_0) * (x**beta_1)
  • 我投票决定关闭,因为 a) 你要求图书馆推荐,这是题外话; b)您的代码片段不是其他人可以运行的完整可验证示例。

标签: ruby curve-fitting gsl


【解决方案1】:

我解决了这个

 x = [  [1, 2, 3, 4], [1,1,1,1]  ]
 y = [3, 5, 7, 9]
 
 # Y = Cx^b
 # Log10 Y = Log C + b * Log X

   def regression_coefficients y, x
        y = Matrix.column_vector y.map { |i| i.to_f }
        x = Matrix.columns x.map { |xi| xi.map { |i| i.to_f }}
           
        (x.t * x).inverse * x.t * y
    end

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-06-24
    • 2020-05-07
    • 2020-05-15
    • 1970-01-01
    • 1970-01-01
    • 2015-11-23
    • 1970-01-01
    相关资源
    最近更新 更多