2012-02-07 83 views
1

随机游走是一个随机过程,粒子在结构化空间中从一个状态移动一个状态到一个状态。对于我们来说,状态空间是Z,整数集合。粒子以初始状态S [0]∈Z开始。如果i≥0步后粒子处于状态S [i],那么在步骤i + 1中,它移动到状态S [i] +1概率p,并以概率q表示状态S [i] - 1;它不能静止不动。当然,p + q = 1。如果S [0] = 5并且0,则序列5,4,3,4,3,2,3,2,3,4是可能的序列如果粒子移动9次,则为粒子声明状态。Java中的随机游动

编写一个程序,该程序将模拟随机游走给定数量的步骤,并将计算随机游走的某些统计数据。模拟参数来自标准输入作为单行参数,包括(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++; 
+1

究竟是什么问题? – 2012-02-07 02:27:08

+0

它只打印出一个值。我需要它打印出粒子的所有值,直到nSteps等于numSteps! – helloimbarbara 2012-02-07 02:28:44

回答

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

+0

我对你的意思有点困惑。程序只在(numSteps> = 0)时运行? – helloimbarbara 2012-02-07 04:00:51

+0

正确...因为否则,您会试图以小于零的步骤运行您的程序,最终会导致“完全没有运行”。 – 2012-02-07 04:02:25

+0

谢谢你!!!!! – helloimbarbara 2012-02-07 04:26:48

1

在为while循环声明条件后,您有一个分号。简单地删除它,它应该工作。

while (nSteps<numSteps); 
1

看你的分号!

while (nSteps<numSteps); {应该是while (nSteps<numSteps) {

+0

呃,愚蠢的分号。 – helloimbarbara 2012-02-07 02:40:53

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个变量来表示相同的事物。