2012-02-07 3 views
1

ランダムウォークは、構造化された空間内の状態から状態へ一度に1ステップずつ移動する確率的プロセスです。私たちのために、状態空間は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 < p < 1の場合、配列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++; 

     } 

    } 

何かがが間違っているように見えるので、私はこだわっている: は、これまでのところ私が持っています。

EDIT:ありがとう、どういうわけか私はそのセミコロンをキャッチしませんでした。

// ------------------------------------------- ---------------------------------------------

編集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

正確には間違っていますか? –

+0

これは1つの値を印刷するだけです。 nStepsがnumStepsに等しくなるまで、パーティクルのすべての値を出力する必要があります。 – helloimbarbara

答えて

6

である私はあなたの問題はあなたがまたラインで

while (nSteps<numSteps); { 

をセミコロンを削除する必要があるということです、あなたはほぼ確実rand.nextInt() + 1のために反復したくないと思う手順は、rand.nextInt()は否定的な可能性があります。 rand.nextInt(n)の場合は、nが上限ですが、nに設定してください。

UPDATE:あなたは最小値、最大値、平均値を追跡する必要がある場合は、次に

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

+0

正しい...そうでないと、プログラムがゼロステップ未満で実行されてしまい、「全く実行されていません」ということになります。 –

+0

ありがとう!!!!! – helloimbarbara

1

whileループの条件を宣言した後に、セミコロンがあります。単にそれを削除し、それが動作するはずです。

while (nSteps<numSteps); 
1

セミコロンを見る!

while (nSteps<numSteps); {は、while (nSteps<numSteps) {である必要があります。

+0

うん、愚かなセミコロン。 – helloimbarbara

0

与えられたpおよびqに対してどの状態を移動するかを決定するための関数bernoulliを実装します。例えば、p = 0.6 =であるから)。 q = 0.4。 10個のボール、6個の赤、4個の青を使用してボールを選んで、それがどの色かを確認します。赤色の場合は状態+ 1に、青色の場合は状態-1になります。

したがって、赤を表す1-6と青を表す7-10で、1-10の乱数生成を行うことができます。

rand.nextInt(10)+1を使用してください。別の場所(istateとparticle)で使用しない場合は、同じものを表すために2つの変数を使用する必要はありません。

関連する問題