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

「数値計算法第3回レポート(ひこにゃん)」の編集履歴(バックアップ)一覧はこちら

数値計算法第3回レポート(ひこにゃん)」(2011/08/01 (月) 17:20:36) の最新版変更点

追加された行は緑色になります。

削除された行は赤色になります。

数値計算法第3回レポートです。前にオナーでやったやつだがどういうプログラムだか知らんかったので自分で作ってみた。相変わらず自分のプログラムが汚くて読む気しない。 -&ref(sglass.pdf) スピンが全部と相互作用する場合は上のレポートに載せたので周り4つの場合をここに貼っておく。きっとみんな読む気なくす。ところで、乱数が初期化しないと使えないだなんてそんな意味分からん仕様なのは知らなかった。(201.08.01) #highlight(c,linenumber){{ #include<stdio.h> #include<stdlib.h> #include<math.h> #include<time.h> int main(){ int cell[10][10]; int oldcell[20][20]; int kabuto[20][20]; int tuno[20][20]; int i,j,k,l; int J1,J2,J3,J4; int H1,H2; FILE *f1,*f2; f1=fopen("initial.txt","w"); f2=fopen("final.txt","w"); srand((unsigned)time(NULL)); /* 乱数の初期化はこう書くhttp://www.nmn.jp/~hidai/c/ */ for(i=0;i<10;i++){ for(j=0;j<10;j++){ cell[i][j]=(rand() %2)*2-1; } } for(i=0;i<10;i++){ for(j=0;j<10;j++){ kabuto[i][j]=-1; tuno[i][j]=-1; } } j=0; kabuto[3][j]=1; kabuto[4][j]=1; kabuto[6][j]=1; kabuto[7][j]=1; kabuto[8][j]=1; tuno[2][j]=1; j=1; kabuto[2][j]=1; kabuto[3][j]=1; kabuto[4][j]=1; kabuto[5][j]=1; kabuto[8][j]=1; kabuto[9][j]=1; tuno[3][j]=1; j=2; kabuto[1][j]=1; kabuto[2][j]=1; kabuto[5][j]=1; kabuto[7][j]=1; kabuto[9][j]=1; tuno[4][j]=1; j=3; kabuto[0][j]=1; kabuto[4][j]=1; kabuto[7][j]=1; kabuto[9][j]=1; for(i=0; i<10; i++){ tuno[i][j]=1; } j=4; kabuto[4][j]=1; kabuto[7][j]=1; kabuto[9][j]=1; kabuto[9][j]=1; j=5; kabuto[4][j]=1; kabuto[8][j]=1; kabuto[9][j]=1; j=6; kabuto[4][j]=1; kabuto[6][j]=1; kabuto[9][j]=1; j=7; kabuto[0][j]=1; kabuto[5][j]=1; kabuto[6][j]=1; kabuto[7][j]=1; kabuto[9][j]=1; j=8; kabuto[1][j]=1; kabuto[2][j]=1; kabuto[3][j]=1; kabuto[4][j]=1; kabuto[5][j]=1; kabuto[6][j]=1; kabuto[9][j]=1; j=9; kabuto[2][j]=1; kabuto[3][j]=1; kabuto[4][j]=1; kabuto[5][j]=1; kabuto[7][j]=1; kabuto[8][j]=1; for(i=0;i<10;i++){ for(j=0;j<10;j++){ tuno[i][9-j]=tuno[i][j]; } } for(i=0;i<10;i++){ for(j=0;j<10;j++){ kabuto[i+10][j]=kabuto[i][j]; kabuto[i][j+10]=kabuto[i][j]; kabuto[i+10][j+10]=kabuto[i][j]; tuno[i+10][j]=tuno[i][j]; tuno[i][j+10]=tuno[i][j]; tuno[i+10][j+10]=tuno[i][j]; } } for(i=0;i<10;i++){ for(j=0;j<9;j++){ fprintf(f1,"%d ",cell[i][j]); } fprintf(f1,"%d\n",cell[i][9]); } /* initialize over */ for(i=0;i<10;i++){ for(j=0;j<10;j++){ oldcell[i][j]=cell[i][j]; oldcell[i+10][j]=cell[i][j]; oldcell[i][j+10]=cell[i][j]; oldcell[i+10][j+10]=cell[i][j]; } } while(i<99999){ k=rand()%10; l=rand()%10; J1=kabuto[k][l]*kabuto[k+9][l]+tuno[k][l]*tuno[k+9][l]; J2=kabuto[k][l]*kabuto[k][l+9]+tuno[k][l]*tuno[k][l+9]; J3=kabuto[k][l]*kabuto[k][l+1]+tuno[k][l]*tuno[k][l+1]; J4=kabuto[k][l]*kabuto[k+1][l]+tuno[k][l]*tuno[k+1][l]; 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]; 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]; // printf("%d,%d\n",H1,H2); if(H2>H1) cell[k][l]=-cell[k][l]; // printf("%d,%d,%d\n",i,k,l) ; i++; } /* for(k=0;k<10;k++){ for(l=0;l<10;l++){ J1=kabuto[k][l]*kabuto[k+9][l]+tuno[k][l]*tuno[k+9][l]; J2=kabuto[k][l]*kabuto[k][l+9]+tuno[k][l]*tuno[k][l+9]; J3=kabuto[k][l]*kabuto[k][l+1]+tuno[k][l]*tuno[k][l+1]; J4=kabuto[k][l]*kabuto[k+1][l]+tuno[k][l]*tuno[k+1][l]; 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]; 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]; printf("%d,%d\n",H1,H2); if(H2>H1) cell[k][l]=-cell[k][l]; } } */ for(i=0;i<10;i++){ for(j=0;j<9;j++){ fprintf(f2,"%d ",cell[i][j]); } fprintf(f2,"%d\n",cell[i][9]); } /* for(i=0;i<10;i++){ for(j=0;j<9;j++){ printf("%d ",kabuto[i][j]); } printf("%d\n",kabuto[i][9]); } for(i=0;i<10;i++){ for(j=0;j<9;j++){ printf("%d ",tuno[i][j]); } printf("%d\n",tuno[i][9]); } */ } }} #comment_num2()
数値計算法第3回レポートです。前にオナーでやったやつだがどういうプログラムだか知らんかったので自分で作ってみた。相変わらず自分のプログラムが汚くて読む気しない。 -&ref(sglass.pdf) スピンが全部と相互作用する場合は上のレポートに載せたので周り4つの場合をここに貼っておく。周期境界条件にするために、配列を20×20にしたのがミソのつもり。汚いのできっとみんな読む気なくす。ところで、乱数が初期化しないと使えないだなんてそんな意味分からん仕様なのは知らなかった。(2011.08.01) #highlight(c,linenumber){{ #include<stdio.h> #include<stdlib.h> #include<math.h> #include<time.h> int main(){ int cell[10][10]; int oldcell[20][20]; int kabuto[20][20]; int tuno[20][20]; int i,j,k,l; int J1,J2,J3,J4; int H1,H2; FILE *f1,*f2; f1=fopen("initial.txt","w"); f2=fopen("final.txt","w"); srand((unsigned)time(NULL)); /* 乱数の初期化はこう書くhttp://www.nmn.jp/~hidai/c/ */ for(i=0;i<10;i++){ for(j=0;j<10;j++){ cell[i][j]=(rand() %2)*2-1; } } for(i=0;i<10;i++){ for(j=0;j<10;j++){ kabuto[i][j]=-1; tuno[i][j]=-1; } } j=0; kabuto[3][j]=1; kabuto[4][j]=1; kabuto[6][j]=1; kabuto[7][j]=1; kabuto[8][j]=1; tuno[2][j]=1; j=1; kabuto[2][j]=1; kabuto[3][j]=1; kabuto[4][j]=1; kabuto[5][j]=1; kabuto[8][j]=1; kabuto[9][j]=1; tuno[3][j]=1; j=2; kabuto[1][j]=1; kabuto[2][j]=1; kabuto[5][j]=1; kabuto[7][j]=1; kabuto[9][j]=1; tuno[4][j]=1; j=3; kabuto[0][j]=1; kabuto[4][j]=1; kabuto[7][j]=1; kabuto[9][j]=1; for(i=0; i<10; i++){ tuno[i][j]=1; } j=4; kabuto[4][j]=1; kabuto[7][j]=1; kabuto[9][j]=1; kabuto[9][j]=1; j=5; kabuto[4][j]=1; kabuto[8][j]=1; kabuto[9][j]=1; j=6; kabuto[4][j]=1; kabuto[6][j]=1; kabuto[9][j]=1; j=7; kabuto[0][j]=1; kabuto[5][j]=1; kabuto[6][j]=1; kabuto[7][j]=1; kabuto[9][j]=1; j=8; kabuto[1][j]=1; kabuto[2][j]=1; kabuto[3][j]=1; kabuto[4][j]=1; kabuto[5][j]=1; kabuto[6][j]=1; kabuto[9][j]=1; j=9; kabuto[2][j]=1; kabuto[3][j]=1; kabuto[4][j]=1; kabuto[5][j]=1; kabuto[7][j]=1; kabuto[8][j]=1; for(i=0;i<10;i++){ for(j=0;j<10;j++){ tuno[i][9-j]=tuno[i][j]; } } for(i=0;i<10;i++){ for(j=0;j<10;j++){ kabuto[i+10][j]=kabuto[i][j]; kabuto[i][j+10]=kabuto[i][j]; kabuto[i+10][j+10]=kabuto[i][j]; tuno[i+10][j]=tuno[i][j]; tuno[i][j+10]=tuno[i][j]; tuno[i+10][j+10]=tuno[i][j]; } } for(i=0;i<10;i++){ for(j=0;j<9;j++){ fprintf(f1,"%d ",cell[i][j]); } fprintf(f1,"%d\n",cell[i][9]); } /* initialize over */ for(i=0;i<10;i++){ for(j=0;j<10;j++){ oldcell[i][j]=cell[i][j]; oldcell[i+10][j]=cell[i][j]; oldcell[i][j+10]=cell[i][j]; oldcell[i+10][j+10]=cell[i][j]; } } while(i<99999){ k=rand()%10; l=rand()%10; J1=kabuto[k][l]*kabuto[k+9][l]+tuno[k][l]*tuno[k+9][l]; J2=kabuto[k][l]*kabuto[k][l+9]+tuno[k][l]*tuno[k][l+9]; J3=kabuto[k][l]*kabuto[k][l+1]+tuno[k][l]*tuno[k][l+1]; J4=kabuto[k][l]*kabuto[k+1][l]+tuno[k][l]*tuno[k+1][l]; 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]; 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]; // printf("%d,%d\n",H1,H2); if(H2>H1) cell[k][l]=-cell[k][l]; // printf("%d,%d,%d\n",i,k,l) ; i++; } /* for(k=0;k<10;k++){ for(l=0;l<10;l++){ J1=kabuto[k][l]*kabuto[k+9][l]+tuno[k][l]*tuno[k+9][l]; J2=kabuto[k][l]*kabuto[k][l+9]+tuno[k][l]*tuno[k][l+9]; J3=kabuto[k][l]*kabuto[k][l+1]+tuno[k][l]*tuno[k][l+1]; J4=kabuto[k][l]*kabuto[k+1][l]+tuno[k][l]*tuno[k+1][l]; 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]; 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]; printf("%d,%d\n",H1,H2); if(H2>H1) cell[k][l]=-cell[k][l]; } } */ for(i=0;i<10;i++){ for(j=0;j<9;j++){ fprintf(f2,"%d ",cell[i][j]); } fprintf(f2,"%d\n",cell[i][9]); } /* for(i=0;i<10;i++){ for(j=0;j<9;j++){ printf("%d ",kabuto[i][j]); } printf("%d\n",kabuto[i][9]); } for(i=0;i<10;i++){ for(j=0;j<9;j++){ printf("%d ",tuno[i][j]); } printf("%d\n",tuno[i][9]); } */ } }} #comment_num2()

表示オプション

横に並べて表示:
変化行の前後のみ表示: