みその計算物理学
ホーム はじめに リンク集
1次元拡散方程式の数値計算例(Javaアプレット)
  • プログラムソース

    一定の温度に熱せられた1次元の系が、両端が温度0にふれているという条件で解く。

    import java.applet.*;
    import java.awt.*;
    import java.awt.event.*;
    /*
     * <applet code="Kakusan" width=300 height=300>
     * </applet>
    */
    
    public class Kakusan extends Applet implements Runnable,ActionListener
    {
            int i,j,count;
            static double T[][]=new double[100][2];
            Gcanvas gcan=new Gcanvas();
            Thread t;
    
            public void init()
            {
                    count=0;
    
                    for(i=0;i<100;i++) 
                    {
                            T[i][0]=1.0;                  //初期値として全体の温度を1とする
                    }
    
                    for(j=0;j<2;j++) 
                    {
                            T[0][j]=0.0;                    //境界条件として両端の温度を0とする
                            T[100-1][j]=0.0;
                    }
    
                    setLayout(new FlowLayout(FlowLayout.LEFT,5,5));
    
                    Button b=new Button("start");
                    b.addActionListener(this);
                    add(b);
    
                    gcan.setSize(250,250);
                    add(gcan);
    
                    t=new Thread(this);
            }
    
            public void actionPerformed(ActionEvent ae)
            {
                    if(count==0)    //スレッドが停止してないのに再度ボタンを押してスレッドを呼び出してしまうのを防ぐ
                            t.start();
                    count++;
            }
    
            public void run()
            {
                    try
                    {
                            while(true) 
                            {
                                    for(i=1;i<(100-1);i++) 
                                    {
                                            T[i][1]=T[i][0]+0.5*(T[i+1][0]+T[i-1][0]-2*T[i][0]);
                                    }
                                    gcan.repaint();
    
                                    for(i=1;i<(100-1);i++) 
                                    {
                                            T[i][0]=T[i][1];
                                    }
                                    Thread.sleep(10);
                            }
                    }
                    catch(Exception e)
                    {
                            System.out.println(e);
                    }
            }
    }
    
    class Gcanvas extends Canvas
    {
            public void paint(Graphics g)
            {
                    Dimension d=getSize();
                    g.setColor(Color.red);
                    int w=d.width/100;
                    int h=d.height;
                    int y1,y2;
                    y1=y2=0;
    
                    for(int k=0;k<99;k++)
                    {
                            y1=(int)((h-h*Kakusan.T[k][1]));
                            y2=(int)((h-h*Kakusan.T[k+1][1]));
                            g.drawLine(k*w,y1,(k+1)*w,y2);
                    }
            }
    }
    
  • アプレット表示

    startボタンを押すと数値計算開始。このページを再読み込みすれば再スタート可能。

    アプレットの表示ができない場合は、Sun Microsystems 社のJavaソフトウェアが必要です。ダウンロードは http://java.com/ja/download/index.jsp でできます。