随机游走是随机过程,其中粒子在结构化空间中一次一步地从一个状态移动到另一个状态。对我们来说,状态空间将是Z,即整数集。粒子以初始状态S [0]∈Z开始。如果在i≥0步后,粒子处于状态S [i],则在步骤i + 1中,粒子移动到状态S [i] + 1概率p和状态S [i] - 1的概率为q;它不能停滞不前。当然,p + q = 1.如果S [0] = 5且0 <0。 p&lt; 1,然后序列5,4,3,4,3,2,3,2,3,4是粒子移动9次的可能状态序列。
编写一个程序,该程序将模拟给定步数的随机游走,并计算随机游走的某些统计数据。模拟参数来自标准输入作为单行参数,包括(1)初始状态S [0]; (2)p的值; (3)模拟的步骤数。
注意:我是用Java编写的。 到目前为止,我有:
public static void main(String[] args) {
Random rand = new Random();
int iState = rand.nextInt();
int particle = iState;
double pValue = 0.60;
int numSteps = rand.nextInt() + 1;
int nSteps = 0;
if (numSteps>=0) {
System.out.println(particle);
while (nSteps<numSteps); {
if (rand.nextDouble() < pValue)
particle++;
else
particle--;
System.out.println(particle);
nSteps++;
}
}
但是有些东西似乎出了问题,所以我被卡住了。
编辑:谢谢你们,不知怎的,我没有抓到那个分号。
// --------------------------------------------- -------------------------------------------
编辑2:好的,所以我让代码正常工作;但是,最后我应该列出最大值,最小值和平均值。这可能不为每个iState值创建一个新变量吗?我的新代码是
public static void main(String[] args) {
Random rand = new Random();
int iState = rand.nextInt();
double pValue = 0.60;
int numSteps = rand.nextInt(100) + 1;
int nSteps = 0;
if (numSteps>=0) {
System.out.println(iState);
while (nSteps<numSteps) {
if (rand.nextDouble() < pValue)
iState++;
else
iState--;
System.out.println(iState);
nSteps++;
答案 0 :(得分:6)
我认为你的问题是你需要删除行中的分号
while (nSteps<numSteps); {
此外,您几乎肯定不想迭代rand.nextInt() + 1
步骤,因为rand.nextInt()
可能是否定的。您可能意味着rand.nextInt(n)
其中n
是某个上限,或者您可能只是将其设置为n
。
更新:如果您需要跟踪最小值,最大值和平均值,您可能会执行类似
的操作 int min = iState; // initial value
int max = iState; // initial value
long total = iState; // initial value
然后,在每次迭代后,你说
min = Math.min(min, iState);
max = Math.max(max, iState);
total += iState;
然后在迭代结束时,您的最小值位于min
,最大值位于max
,平均值为(double) total / numSteps
。
答案 1 :(得分:1)
在声明while循环的条件后,您有一个分号。只需删除它就可以了。
while (nSteps<numSteps);
答案 2 :(得分:1)
注意你的分号!
while (nSteps<numSteps); {
应为while (nSteps<numSteps) {
。
答案 3 :(得分:0)
实施bernoulli函数以确定给定p和q移动的状态。例如)因为p = 0.6 =。 Q = 0.4。使用10个球,6个红色,4个蓝色并挑选球,看看它是什么颜色。如果是红色,则转到状态+ 1,如果是蓝色,则转到状态-1。
因此,您可以生成1-10的随机数,其中1-6代表红色,7-10代表蓝色。使用rand.nextInt(10)+1表示1到10。
此外,如果您不打算在其他地方使用它(istate和particle),则不必使用2个变量来表示相同的事物。