数値計算法第3回レポート(ひこにゃん)

数値計算法第3回レポートです。前にオナーでやったやつだがどういうプログラムだか知らんかったので自分で作ってみた。相変わらず自分のプログラムが汚くて読む気しない。

スピンが全部と相互作用する場合は上のレポートに載せたので周り4つの場合をここに貼っておく。周期境界条件にするために、配列を20×20にしたのがミソのつもり。汚いのできっとみんな読む気なくす。ところで、乱数が初期化しないと使えないだなんてそんな意味分からん仕様なのは知らなかった。(2011.08.01)
  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #include<math.h>
  4. #include<time.h>
  5.  
  6. int main(){
  7. int cell[10][10];
  8. int oldcell[20][20];
  9. int kabuto[20][20];
  10. int tuno[20][20];
  11. int i,j,k,l;
  12. int J1,J2,J3,J4;
  13. int H1,H2;
  14. FILE *f1,*f2;
  15.  
  16. f1=fopen("initial.txt","w");
  17. f2=fopen("final.txt","w");
  18.  
  19. srand((unsigned)time(NULL)); /* 乱数の初期化はこう書くhttp://www.nmn.jp/~hidai/c/ */
  20.  
  21. for(i=0;i<10;i++){
  22. for(j=0;j<10;j++){
  23. cell[i][j]=(rand() %2)*2-1;
  24. }
  25. }
  26.  
  27. for(i=0;i<10;i++){
  28. for(j=0;j<10;j++){
  29. kabuto[i][j]=-1;
  30. tuno[i][j]=-1;
  31. }
  32. }
  33.  
  34. j=0;
  35. kabuto[3][j]=1;
  36. kabuto[4][j]=1;
  37. kabuto[6][j]=1;
  38. kabuto[7][j]=1;
  39. kabuto[8][j]=1;
  40. tuno[2][j]=1;
  41. j=1;
  42. kabuto[2][j]=1;
  43. kabuto[3][j]=1;
  44. kabuto[4][j]=1;
  45. kabuto[5][j]=1;
  46. kabuto[8][j]=1;
  47. kabuto[9][j]=1;
  48. tuno[3][j]=1;
  49. j=2;
  50. kabuto[1][j]=1;
  51. kabuto[2][j]=1;
  52. kabuto[5][j]=1;
  53. kabuto[7][j]=1;
  54. kabuto[9][j]=1;
  55. tuno[4][j]=1;
  56. j=3;
  57. kabuto[0][j]=1;
  58. kabuto[4][j]=1;
  59. kabuto[7][j]=1;
  60. kabuto[9][j]=1;
  61. for(i=0; i<10; i++){
  62. tuno[i][j]=1;
  63. }
  64.  
  65. j=4;
  66. kabuto[4][j]=1;
  67. kabuto[7][j]=1;
  68. kabuto[9][j]=1;
  69. kabuto[9][j]=1;
  70. j=5;
  71. kabuto[4][j]=1;
  72. kabuto[8][j]=1;
  73. kabuto[9][j]=1;
  74. j=6;
  75. kabuto[4][j]=1;
  76. kabuto[6][j]=1;
  77. kabuto[9][j]=1;
  78. j=7;
  79. kabuto[0][j]=1;
  80. kabuto[5][j]=1;
  81. kabuto[6][j]=1;
  82. kabuto[7][j]=1;
  83. kabuto[9][j]=1;
  84. j=8;
  85. kabuto[1][j]=1;
  86. kabuto[2][j]=1;
  87. kabuto[3][j]=1;
  88. kabuto[4][j]=1;
  89. kabuto[5][j]=1;
  90. kabuto[6][j]=1;
  91. kabuto[9][j]=1;
  92. j=9;
  93. kabuto[2][j]=1;
  94. kabuto[3][j]=1;
  95. kabuto[4][j]=1;
  96. kabuto[5][j]=1;
  97. kabuto[7][j]=1;
  98. kabuto[8][j]=1;
  99.  
  100. for(i=0;i<10;i++){
  101. for(j=0;j<10;j++){
  102. tuno[i][9-j]=tuno[i][j];
  103. }
  104. }
  105.  
  106. for(i=0;i<10;i++){
  107. for(j=0;j<10;j++){
  108. kabuto[i+10][j]=kabuto[i][j];
  109. kabuto[i][j+10]=kabuto[i][j];
  110. kabuto[i+10][j+10]=kabuto[i][j];
  111. tuno[i+10][j]=tuno[i][j];
  112. tuno[i][j+10]=tuno[i][j];
  113. tuno[i+10][j+10]=tuno[i][j];
  114. }
  115. }
  116.  
  117.  
  118. for(i=0;i<10;i++){
  119. for(j=0;j<9;j++){
  120. fprintf(f1,"%d ",cell[i][j]);
  121. }
  122. fprintf(f1,"%d\n",cell[i][9]);
  123. }
  124.  
  125. /* initialize over */
  126.  
  127. for(i=0;i<10;i++){
  128. for(j=0;j<10;j++){
  129. oldcell[i][j]=cell[i][j];
  130. oldcell[i+10][j]=cell[i][j];
  131. oldcell[i][j+10]=cell[i][j];
  132. oldcell[i+10][j+10]=cell[i][j];
  133. }
  134. }
  135.  
  136. while(i<99999){
  137. k=rand()%10;
  138. l=rand()%10;
  139.  
  140. J1=kabuto[k][l]*kabuto[k+9][l]+tuno[k][l]*tuno[k+9][l];
  141. J2=kabuto[k][l]*kabuto[k][l+9]+tuno[k][l]*tuno[k][l+9];
  142. J3=kabuto[k][l]*kabuto[k][l+1]+tuno[k][l]*tuno[k][l+1];
  143. J4=kabuto[k][l]*kabuto[k+1][l]+tuno[k][l]*tuno[k+1][l];
  144.  
  145. H1=J1*cell[k][l]*oldcell[k+9][l]+J2*cell[k][l]*oldcell[k][l+9]+J3*cell[k][l]*oldcell[k][l+1]+J4*cell[k][l]*oldcell[k+1][l];
  146. H2=J1*(-cell[k][l])*oldcell[k+9][l]+J2*(-cell[k][l])*oldcell[k][l+9]+J3*(-cell[k][l])*oldcell[k][l+1]+J4*(-cell[k][l])*oldcell[k+1][l];
  147.  
  148. // printf("%d,%d\n",H1,H2);
  149. if(H2>H1)
  150. cell[k][l]=-cell[k][l];
  151.  
  152. // printf("%d,%d,%d\n",i,k,l) ;
  153. i++;
  154. }
  155.  
  156.  
  157. /*
  158.   for(k=0;k<10;k++){
  159.   for(l=0;l<10;l++){
  160.   J1=kabuto[k][l]*kabuto[k+9][l]+tuno[k][l]*tuno[k+9][l];
  161.   J2=kabuto[k][l]*kabuto[k][l+9]+tuno[k][l]*tuno[k][l+9];
  162.   J3=kabuto[k][l]*kabuto[k][l+1]+tuno[k][l]*tuno[k][l+1];
  163.   J4=kabuto[k][l]*kabuto[k+1][l]+tuno[k][l]*tuno[k+1][l];
  164.  
  165.   H1=J1*cell[k][l]*oldcell[k+9][l]+J2*cell[k][l]*oldcell[k][l+9]+J3*cell[k][l]*oldcell[k][l+1]+J4*cell[k][l]*oldcell[k+1][l];
  166.   H2=J1*(-cell[k][l])*oldcell[k+9][l]+J2*(-cell[k][l])*oldcell[k][l+9]+J3*(-cell[k][l])*oldcell[k][l+1]+J4*(-cell[k][l])*oldcell[k+1][l];
  167.  
  168.   printf("%d,%d\n",H1,H2);
  169.   if(H2>H1)
  170. cell[k][l]=-cell[k][l];
  171.   }
  172.   }
  173.  */
  174.  
  175. for(i=0;i<10;i++){
  176. for(j=0;j<9;j++){
  177. fprintf(f2,"%d ",cell[i][j]);
  178. }
  179. fprintf(f2,"%d\n",cell[i][9]);
  180. }
  181.  
  182.  
  183. /*
  184.   for(i=0;i<10;i++){
  185.   for(j=0;j<9;j++){
  186.   printf("%d ",kabuto[i][j]);
  187.   }
  188.   printf("%d\n",kabuto[i][9]);
  189.   }
  190.   for(i=0;i<10;i++){
  191.   for(j=0;j<9;j++){
  192.   printf("%d ",tuno[i][j]);
  193.   }
  194.   printf("%d\n",tuno[i][9]);
  195.   }
  196.  
  197. */
  198.  
  199. }
  200.  
  201.  

  • 疑似乱数だからです>乱数が初期化しないと使えないだなんてそんな意味分からん仕様 -- (kmkr) 2011-08-15 13:45:36
  • そうなんですかねえ。他の言語だと初期化の文は書かなくても使える気がするんですが -- (OK) 2011-08-19 21:16:34
名前:
コメント:

すべてのコメントを見る

タグ:

C OK
最終更新:2011年08月01日 17:20
添付ファイル