这可能更多的是一个数学问题,而不是一个直接的编程问题。
我正在尝试创建一条曲线,在我的脚本中模拟市场对您的产品的兴趣(我正在制作模拟游戏)。
必须满足一些标准
- 曲线必须随机生成
- 曲线在 x 轴上有 16 个步长,每步曲线都可以增加或减少
- 曲线在 y 轴上有 100 个步长
- 曲线可以从 y 轴上的任意位置开始,但必须从 x 轴的步长 0 开始
- 增量和减量应该切合实际,这意味着它们应该在每一步中稍微增加或减少,尽管发生较大/较小增量/减量的可能性较小。
将下图视为我想要实现的目标的演示
我最初的想法是,对于每一步,我都会用一个随机数来增加或减少它,当前步数越高,曲线下降的机会就越大,但这个想法有一些错误,比如步骤发生巨大变化。
我正在用 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]
关于php - 生成随机曲线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22169004/