Ruby中的Gompertz函数

时间:2014-01-15 17:09:25

标签: ruby math

我不是数学家,但是我试图生成一系列数字,这些数字在绘制时会产生一个从x = 0开始的Gompertz曲线。我希望能够指定渐近线和该曲线的长度

Wikipedia说公式是:

  

Y(T)= AE ^ {是^ {克拉}}

     

其中a是上渐近线

     

b,c是负数

     

b设置沿x轴的位移(将图形向左或向右平移)

     

c设定增长率(y缩放)

     

e是Euler的数字(e = 2.71828 ......)

这就是我所拥有的,

def gompertz(asymptote, length)
  seq = (0..length) # these will be my y values
  seq.map do |t|  
    asymptote * Math::E ** # ae to the power of...
      (-1 * Math::E) ** # be, to the power of...
      (t * -1) # ct
  end
end

但是当我输入维基百科插图中的数字(渐近线= 1,b = -4,c = -2),长度为10时我得到了这个:

gompertz(1, 10)
=> [2.718281828459045, 1.0184843989442722, 1.0003355189017822, 1.0000061442312291,     1.000000112535181, 1.0000000020611537, 1.0000000000377514, 1.0000000000006914, 1.0000000000000127, 1.0000000000000002, 1.0]

Obv,第一个情节高于渐近线!我在这里遇到了严重的错误。你能帮忙吗?

1 个答案:

答案 0 :(得分:1)

看起来你是b取幂(t * -1)。你想要的是

b * (Math::E ** (t * -1) )

而不是

(b * Math::E ** (t * -1) )