Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/269.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 生成随机曲线_Php_Math_Random_Graph_Curve - Fatal编程技术网

Php 生成随机曲线

Php 生成随机曲线,php,math,random,graph,curve,Php,Math,Random,Graph,Curve,这可能更像是一个数学问题,而不是一个直接的编程问题 我试图创建一条曲线,在我的脚本中模拟市场对你的产品的兴趣(我正在制作一个模拟游戏) 必须满足一些标准 曲线必须随机生成 曲线在x轴上有16个台阶,其中曲线每一个台阶都可以增加或减少 曲线在y轴上有100个台阶 曲线可以从y轴的任何位置开始,但必须从x轴的第0步开始 增量和减量应该是现实的,这意味着它们应该在每一步略微增加或减少,尽管出现较大/较小增量/减量的可能性较小 考虑下面的图片作为我试图实现的演示 我最初的想法是,对于每一步,我都会用

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

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

必须满足一些标准

  • 曲线必须随机生成
  • 曲线在x轴上有16个台阶,其中曲线每一个台阶都可以增加或减少
  • 曲线在y轴上有100个台阶
  • 曲线可以从y轴的任何位置开始,但必须从x轴的第0步开始
  • 增量和减量应该是现实的,这意味着它们应该在每一步略微增加或减少,尽管出现较大/较小增量/减量的可能性较小
考虑下面的图片作为我试图实现的演示

我最初的想法是,对于每一步,我都会用一个随机数来增加或减少它,当前的步数越高,曲线下降的可能性就越大,但是这个想法有一些错误,比如对步数的急剧改变

我正在编写这是PHP,但是这个理论应该适用于任何编程语言,有没有关于生成如上所示的随机图的最佳方法的想法

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


您可以将其实现为
马尔可夫链
/
随机游走
(尽管原则上两者相似)

对于马尔可夫链-您需要一个100x100矩阵,根据您的要求(步长、变化率等)具有转移概率


对于随机游走-根据要求,将下一步建模为从适当分布中提取的随机变量。

您可以将其实现为
马尔可夫链
/
随机游走
(尽管原则上两者相似)

对于马尔可夫链-您需要一个100x100矩阵,根据您的要求(步长、变化率等)具有转移概率


对于随机游走-将下一步建模为根据要求从适当分布中提取的随机变量。

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

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]‎

你可能想要的,以及在描述市场时经常使用的是几何布朗运动。抽象地说,它是由一个随机微分方程定义的

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]‎

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轴为中心)。选择不同的分布会改变构造的部分和的理论性质,但这与您的目的无关。

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轴为中心)。选择不同的分布会改变构造的部分和的理论属性,但这与您的目的无关。

您必须使用PHP来实现这一点吗?有很多
Javascript
框架和插件可以很好地处理图形。即使您不想要
javascript
,也有