前提
下のプログラムを立ててこれを利用してシュミレーションをしてみたいのですが、エラーの内容や改善方法がよくわかりません。
助けて欲しいです。
何卒宜しくお願い致します。
#include<stdio.h> #include<stdlib.h> #include<math.h> #define N (20) int main(){ double J = 2.0e-21; double E1,E2,T,P,kbT,N; int i,j,n,p; int m[N][N]; //磁化を代入する for( j = 0; j < N; j++){ for( i = 0; i < N; i++){ m[i][j]=1; //ランダム磁化① m[i][j]=(rand()%2)*2-1; //ランダム磁化② if((double)rand() / RAND_MAX > 0.5)m[i][j] = 1; else m[i][j]=-1; } } //エネルギー計算 E1=0.0; for(j=0;j<N;j++){ for(i=0;i<N;i++){ if(i < N-1)E1 += -J*m[i][j]*m[i+1][j]; if(j < N-1)E1 += -J*m[i][j]*m[i][j+1]; } } //ランダムで磁化を変化させるサイトを決定 i = rand()%20; j = rand()%20; m[i][j] = -m[i][j]; //エネルギー計算 E2=0.0; for(j=0;j<N;j++){ for(i=0;i<N;i++){ if(i < N-1)E2 += -J*m[i][j]*m[i+1][j]; if(j < N-1)E2 += -J*m[i][j]*m[i][j+1]; } } for(T=10;T<500;T=T+10){ kbT = kbT * (double)T; p = 1.0/(1.0+exp(-(E1-E2)/(kbT) )); printf("% lf %e %e %e\n",(double)T,P,E1,E2); } }
実現したいこと
計算値を用いたgnuplotでグラフを作成したいです。
エラーメッセージ 2.c: In function 'main': 2.c:4:12: error: expected identifier or '(' before numeric constant #define N (20) ^~ 2.c:8:23: note: in expansion of macro 'N' double E1,E2,T,P,kbT,N; ^
試したこと
1.温度300K, 500Kにおけるステップ数(横軸)と磁化(縦軸)のグラフを作成しなさい。
2. 上記条件において磁化(縦軸)-温度(横軸)のグラフを作成しなさい。
3. “2”において,”磁化の平均値”をどのように導出したか解説しなさい。
4. 交換エネルギーを変化させてシミュレーションし結果を考察しなさい。
補足情報
条件
1.磁性体のセル数を50 x 50 とする。
2. 交換エネルギーJ = 2.0 x 10^-21[ J]
3. ボルツマン定数kB = 1.38 x 10^-23[ J/K]
4. 温度は10K~500Kまで10Kごと。
5. 全てのセルのmの平均値の絶対値を磁化とする。(最大値+1)

回答2件
あなたの回答
tips
プレビュー