みその計算物理学
ホーム はじめに リンク集
静電ポテンシャルの数値計算例(C言語)
  • プログラムソース (二つの正電荷と負電荷がある場合)
    #include <stdio.h>
    
    int main()
    {
            int i,j,k;
            double U[50][50];
    
            FILE *output;
            output=fopen("output.data","w");
    
            for(i=0;i<50;i++) {
                    for(j=0;j<50;j++) {
                            U[i][j]=0;
                    }
            }
    
            U[25][16]=100.0;
            U[25][32]=-100.0;
    
            for(k=0;k<=10000;k++) {
                    for(i=1;i<(50-1);i++) {
                            for(j=1;j<(50-1);j++) {
                                    if(!(i==25 && j==16 || j==32)) {
                                            U[i][j]=0.25*(U[i+1][j]+U[i-1][j]+U[i][j+1]+U[i][j-1]);
                                    }
                            }
                    }
            }
    
            for(i=0;i<50;i++) {
                    for(j=0;j<50;j++) {
                            fprintf(output,"%d %d %f\n",i,j,U[i][j]);
                    }
                    fprintf(output,"\n");
            }
    
            fclose(output);
    
            return 0;
    }
    
    
  • GNUPLOT出力結果
  • プログラムソース (コンデンサーがある場合)
    #include <stdio.h>
    
    int main()
    {
            int i,j,k;
            double U[50][50];
    
            FILE *output;
            output=fopen("output.data","w");
    
            for(i=0;i<50;i++) {
                    for(j=0;j<50;j++) {
                            U[i][j]=0;
                    }
            }
    
            for(i=15;i<=35;i++) {
                    U[i][15]=100.0;
                    U[i][35]=-100.0;                
            }
    
            for(k=0;k<=10000;k++) {
                    for(i=1;i<(50-1);i++) {
                            for(j=1;j<(50-1);j++) {
                                    if(!(i>=15 && i<=35 && (j==15 || j==35))) {
                                            U[i][j]=0.25*(U[i+1][j]+U[i-1][j]+U[i][j+1]+U[i][j-1]);
                                    }
                            }
                    }
            }
    
            for(i=0;i<50;i++) {
                    for(j=0;j<50;j++) {
                            fprintf(output,"%d %d %f\n",i,j,U[i][j]);
                    }
                    fprintf(output,"\n");
            }
    
            fclose(output);
    
            return 0;
    }
    
  • GNUPLOTでの出力結果