这可能更像是一个数学问题而不是直接编程问题。
我正在尝试创建一条曲线,在我的剧本中模拟市场对您产品的兴趣(我正在制作模拟游戏)。
必须满足一些标准
考虑以下图片作为我正在尝试实现
的示范我最初的想法是,对于每个步骤,我会用随机数增加或减少它,当前步骤越高,曲线下降的几率就越高,但是这个想法有一些错误,比如这一步骤发生了重大变化。
我编码这是PHP,但理论应该适用于任何编程语言,关于如何生成随机图的最佳方法的任何想法如上所示?
最后,我只需要图表的实际数字,这样我就可以存储数据。我在想一个多维数组,所以我可以在一个数组中存储多个图形,如下所示: (免责声明,打击示例,不是基于图表)
$graph = array('Americas' => array(0, 15, 20, 33, 34, 38, 47, 52, 60, 65, 73, 23, 18, 12, 16, 18, 22));
答案 0 :(得分:3)
您可能想要的以及在市场描述中常规使用的是几何布朗运动。在抽象术语中,它由随机微分方程定义
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 :(得分:1)
您可以将其设为Markov Chain
/ random walk
(虽然原则上两者都相似)
对于马尔可夫链 - 您需要一个100x100矩阵,其转换概率根据您的要求(步长,变化率等)
对于随机游走 - 将下一步模型作为根据要求从适当分布中抽取的随机变量。
答案 2 :(得分:0)
LutzL和Nishanth给出的答案是完全正确的。我在这里提供的只是简化。实现其建议的一种方法是:生成随机数列表,然后通过保持运行总计来构建要绘制的数据。即:给定列表x[0], x[1], x[2], ..., x[n - 1]
,计算x[0], x[0] + x[1], x[0] + x[1] + x[2], ..., x[0] + x[1] + x[2] + ... + x[n - 1]
并绘制该图。
随机数x[0], x[1], x[2], ..., x[n - 1]
可以从几乎任何分布中得出;为了您的目的,均匀分布是好的(可能将数字乘以比例因子以使它们更大或更小)并且可能将x[0]
设置为某个恒定偏移(否则绘图以x轴为中心)。选择不同的分布会改变构造的部分和的理论属性,但这对您的目的无关紧要。