みその計算物理学
ホーム はじめに リンク集
ランダムウォークの数値計算例(Java)
  • プログラムソース

    2次元上の基本的なランダムウォーク。

    import java.io.*;
    
    class C 
    {
            static final int N=10000;
    }
    
    class Randomwalk
    {
            public static void main()
            {
                    int i;
                    double x,y,rn;
    
                    x=y=0.0;
    
                    try
                    {
                            File file = new File("output.data");
                            FileWriter fw=new FileWriter(file);
    
                            for(i=0;i<C.N;i++) 
                            {
                                    rn=Math.random();
    
                                    if(rn<0.25) x=x-1.0;
                                    else if(rn>=0.25 && rn<0.5) x=x+1.0;
                                    else if(rn>=0.5 && rn<0.75) y=y-1.0;
                                    else y=y+1.0;
    
                                    fw.write(+ x + " " + y + "\n");
                            }
                            fw.close();
                    }
                    catch(Exception e)
                    {
                            System.out.println(e);
                    }
    
            }
    }
  • GNUPLOT出力結果

    Javaのメソッドrandom()は、プログラム実行のたびに生成する数値が異なります。よって下と同じ画像は得られません。

  • プログラムソース

    ランダムウォークをm回繰り返し原点からの平均距離をだす。

    import java.io.*;
    
    class C 
    {
            static final int m=10000;
            static final int n=100;
    }
    
    class Randomwalk2
    {
            public static void main()
            {
                    int i,j;
                    double x,y,r,rn,sum,average;
    
                    x=y=0.0;
                    sum=0.0;
    
                    for(j=1;j<C.m;j++) 
                    {
                            x=y=0.0;
                            for(i=1;i<C.n;i++) 
                            {
                                    rn=Math.random();
    
                                    if(rn<0.25) x=x-1.0;
                                    else if(rn>=0.25 && rn<0.5) x=x+1.0;
                                    else if(rn>=0.5 && rn<0.75) y=y-1.0;
                                    else y=y+1.0;
                            }
    
                            r=Math.sqrt(x*x+y*y);
                            sum+=r;
                    }
    
                    average=sum/C.m;
    
                    System.out.println("平均距離は" + average);
            }
    }
  • 出力結果
    平均距離は8.8190842717381
    Press any key to continue

    ランダムウォーク繰り返し回数mを大きくするほど、原点から到達点までの距離が、移動回数nの平方根に近づいていく。またJavaのメソッドrandom()はプログラム実行のたびに異なる数値を生成するので同じ数値は得られる可能性は低い。