php - 生成随机曲线

标签 php math random graph curve

这可能更多的是一个数学问题,而不是一个直接的编程问题。

我正在尝试创建一条曲线,在我的脚本中模拟市场对您的产品的兴趣(我正在制作模拟游戏)。

必须满足一些标准

  • 曲线必须随机生成
  • 曲线在 x 轴上有 16 个步长,每步曲线都可以增加或减少
  • 曲线在 y 轴上有 100 个步长
  • 曲线可以从 y 轴上的任意位置开始,但必须从 x 轴的步长 0 开始
  • 增量和减量应该切合实际,这意味着它们应该在每一步中稍微增加或减少,尽管发生较大/较小增量/减量的可能性较小。

将下图视为我想要实现的目标的演示 enter image description here

我最初的想法是,对于每一步,我都会用一个随机数来增加或减少它,当前步数越高,曲线下降的机会就越大,但这个想法有一些错误,比如步骤发生巨大变化。

我正在用 PHP 进行编码,但该理论应该适用于任何编程语言,关于生成如上所示的随机图的最佳方法有什么想法吗?

最后,我只需要图表的实际数字,这样我就可以存储数据。我正在考虑一个多维数组,这样我就可以将多个图形存储在一个数组中,如下所示: (免责声明,下图示例并非基于图表)

$graph = array('Americas' => array(0, 15, 20, 33, 34, 38, 47, 52, 60, 65, 73, 23, 18, 12, 16, 18, 22));

最佳答案

您可能想要的并且在市场描述中经常使用的是几何布朗运动。抽象地说,它是由随机微分方程定义的

dX(t)=X(t)*[ r*dt+s*dB(t) ]

其中 r 是漂移或平均增长,s 是方差或波动性,dB(t) 是遵循正态分布 N(0,dt) 的随机变量。我们可以将 t=t0+k*Δt 离散化为

X(t+Δt)=X(t)*[ 1+r*Δt±s*√(Δt) ]

其中符号是在每个方向上以 0.5 的概率随机选择的。这对于非常小的 Δt 值非常有效。对于较大的步长,请使用

X(t+Δt)=X(t)*[ 1+r*Δt+s*z(t)*√(Δt) ]

其中随机变量 z(t) 遵循标准正态分布。

有关更复杂的方法,请参阅“没有痛苦的财务计算”[1]

[1] http://cs.uwaterloo.ca/~paforsyt/agon.pdf

关于php - 生成随机曲线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22169004/

相关文章:

c++ - 在全双范围 std::uniform_real_distribution 总是返回 inf

javascript - 使用 Javascript 在 HTML5 Canvas 中随机化 RGB,为每个 fillRect 设置一个新值

php - PDO插入和执行

javascript - 对 HTML 表中的所有行运行 javascript

php - 如何使用 Rediska 创建列表的新实例?

php 和 mysqli SELECT 查询如果存在,则更新它,否则插入它

haskell - 在这篇 Kmett CRC 文章中,为什么 ab = a0^n + 0^m b?这个记号是什么意思?

algorithm - 绘制圆弧点

algorithm - 在 3D 空间中相对缩放对象集合

c - 显示随机生成的整数的频率