0

私の問題が何であるかを理解できないようです。私は 2D ランダム ウォーク シミュレーションを書いています。私の考えでは、2D 配列を使用して、それが置かれているグリッドをシミュレートすることです。ただし、私のコードでは、配列内の特定のセルを参照してその値をインクリメントしようとすると、たとえばbin [3] [4]、インデックス全体の値、つまりbin [1] [4]、bin [がインクリメントされます2][4]、ビン[3][4]など これを修正する方法、または私が間違っていることについてのアイデアはありますか? ありがとう。

#include <stdio.h>
#include <math.h>

#define total 10.  /*total iterations*/
#define walk 5  /*total # of steps in a walk*/
#define lambda 1.0 /*step size*/
#define binsize 0.1
/*current chosen values are for bug checking simplicity*/

main()
{
  float range = walk*lambda*2.; /*2 times max range, all positive*/
  int n,prob,i,k,j,placex,placey,bins;
  double valuex,valuey, a; /*value starts at half range so all values are +*/
  bins=(range/binsize);

  int bin[bins][bins];
  for(i=0;i<=bins;i++) /*zero out bin*/
  {
    for(j=0;j<=bins;j++)
    {
      bin[i][j]=0;
    }
  }

  for(k=0;k<total;k++)
  {
    valuex=range/2.;
    valuey=range/2.;

    for(n=1;n<=walk;n++)
    {
      prob= rand(4) % 100+1;
      if(prob<=25)
      {
        valuex=valuex+pow(lambda,n);
      }
      else if(prob>25 && prob<=50)
      {
        valuex=valuex-pow(lambda,n);
      }
      else if(prob>50 && prob<=75)
      {
        valuey=valuey+pow(lambda,n);
      }
      else if(prob>75)
      {
        valuey=valuey-pow(lambda,n);
      }
    }   

    placex=floor(valuex/binsize+0.5);
    placey=floor(valuey/binsize+0.5);

    bin[placex][placey]=++bin[placex][placey];

    printf("%d %d %d\n",placex,placey,bin[placex][placey]); /* for bug checking. it prints the bin numbers where the value should go and then the value of that element.*/
  }

  for(i=0;i<=bins;i++)
  {
    for(j=0;j<=bins;j++)
    {
      a=bin[i][j]/total;
      //printf("%lf %lf %lf\n",i*binsize-range/2.,j*binsize-range/2.,a); /*format for input into IGOR*/
    }
  }
}
4

1 に答える 1