みその計算物理学
ホーム はじめに リンク集
静電ポテンシャルの数値計算例(Java)
  • プログラムソース (二つの正電荷と負電荷がある場合)
    import java.io.*;
    
    class potential1
    {
            public static void main()
            {
                    int i,j,k;
                    double U[][]=new double[50][50];
    
                    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]);
                                            }
                                    }
                            }
                    }
    
                    try
                    {
                            FileWriter fw=new FileWriter("output.data");
    
                            for(i=0;i<50;i++) 
                            {
                                    for(j=0;j<50;j++) 
                                    {
                                            fw.write( + i + " " + j + " " + U[i][j] + "\n");
                                    }
                                    fw.write("\n");
                            }
    
                            fw.close();
                    }
                    catch(Exception e)
                    {
                            System.out.println(e);
                    }
    
            }
    }
    
  • GNUPLOT出力結果

  • プログラムソース (コンデンサーがある場合)

    import java.io.*;
    
    class potential2
    {
            public static void main()
            {
                    int i,j,k;
                    double U[][]=new double[50][50];
    
                    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]);
                                            }
                                    }
                            }
                    }
    
                    try
                    {
                            FileWriter fw=new FileWriter("output.data");
    
                            for(i=0;i<50;i++) 
                            {
                                    for(j=0;j<50;j++) 
                                    {
                                            fw.write( + i + " " + j + " " + U[i][j] + "\n");
                                    }
                                    fw.write("\n");
                            }
    
                            fw.close();
                    }
                    catch(Exception e)
                    {
                            System.out.println(e);
                    }
    
            }
    }
    
  • GNUPLOTでの出力結果