import java.awt.*; import java.awt.event.*; import java.text.DecimalFormat; import java.applet.Applet; import javax.swing.JLabel; import javax.swing.JTextField; public class FokkerPlanck extends Applet implements ActionListener{ // variable set private static final long serialVersionUID = 9129736202608299398L; public static double d1 = 2; public static double d2 = 3; public static double t = 1; public static double h = 0.055; public static double dt = 0.25; public static double[] s1 = new double[1000]; public static double[] s2 = new double[1000]; public static double[] s3 = new double[1000]; public static double[] s4 = new double[1000]; public static int[][] xxxx = new int [56][1002]; public static int[][] yyyy = new int [56][1002]; public static int[] xxxx1 = new int [1002]; public static int[] yyyy1 = new int [1002]; public static int[] xxxx2 = new int [1000]; public static int[] yyyy2 = new int [1000]; public static int[] xxxx3 = new int [1000]; public static int[] yyyy3 = new int [1000]; public static double[][] MatrixL = new double[1000][1000]; public static double[][] MatrixU = new double[1000][1000]; public static double[][] Matrix01 = new double[1000][1000]; public static double[][] Matrix02 = new double[1000][1000]; public static double[][] Matrix03 = new double[1000][1000]; public static double[][] vector01 = new double[57][1000]; public static double[][] vector02 = new double[56][1000]; public static double[][] vector03 = new double[56][1000]; JTextField yx = new JTextField("2.0"); JTextField yn = new JTextField("3.0"); JTextField yr = new JTextField("0.055"); JLabel label1 = new JLabel("The Example of The Finite Element Method", JLabel.CENTER); JLabel label2 = new JLabel("The Drift Coefficient (0<D1≤108)",JLabel.CENTER); JLabel label3 = new JLabel("The Diffusion Coefficient (0<D2≤108)",JLabel.CENTER); JLabel label4 = new JLabel("The Interval (h) between xi and xi+1", JLabel.CENTER); public void init(){ label1.setPreferredSize(new Dimension(416,24)); label1.setFont(new Font("Serif",Font.BOLD,14)); add(label1); label2.setPreferredSize(new Dimension(260,23)); label2.setFont(new Font("Serif",Font.BOLD,11)); add(label2); yx.setPreferredSize(new Dimension(80,23)); add(yx); label3.setPreferredSize(new Dimension(260,23)); label3.setFont(new Font("Serif",Font.BOLD,11)); add(label3); yn.setPreferredSize(new Dimension(80,23)); add(yn); label4.setPreferredSize(new Dimension(260,23)); label4.setFont(new Font("Serif",Font.BOLD,11)); add(label4); yr.setPreferredSize(new Dimension(80,23)); add(yr); yx.addActionListener(this); yn.addActionListener(this); yr.addActionListener(this); } public void actionPerformed(ActionEvent e){ if(e.getSource()==yx){ d1=Double.valueOf(yx.getText()).doubleValue(); if(d1 <= 0 || d1 > Math.pow(10.0,8)){ d1 = 2.0; } } if(e.getSource()==yn){ d2 = Double.valueOf(yn.getText()).doubleValue(); if(d2 <= 0 || d2 > Math.pow(10.0,8)){ d2 = 3.0; } } if(e.getSource()==yr){h = Double.valueOf(yr.getText()).doubleValue(); if(h <= 0 || h > Math.pow(10.0,8)){h = 0.055;} } yx.setText(""+d1); yn.setText(""+d2); yr.setText(""+h); repaint(); } public void paint(Graphics g){ for(int i=0;i<1000;i++){ s1[i]=(i*0.05-10)*d2/3; } for(int i=0;i<1000;i++){ s2[i]=function(d1,d2,s1[i],1); } for(int i=0;i<1000;i++){ s3[i]=function(d1,d2,s1[i],6); } for(int i=0;i<1000;i++){ s4[i]=function(d1,d2,s1[i],14); } Matrix01[0][0]=4*h/(6*dt)+Math.pow(d2,2)/h; Matrix01[0][1]=h/(6*dt)+d1/2-Math.pow(d2,2)/(2*h); for(int i=1;i<999;i++){ Matrix01[i][i-1]=h/(6*dt)-d1/2-Math.pow(d2,2)/(2*h); Matrix01[i][i]=4*h/(6*dt)+Math.pow(d2,2)/h; Matrix01[i][i+1]=h/(6*dt)+d1/2-Math.pow(d2,2)/(2*h); } Matrix01[999][998]=h/(6*dt)-d1/2-Math.pow(d2,2)/(2*h); Matrix01[999][999]=4*h/(6*dt)+Math.pow(d2,2)/h; Matrix02[0][0]=4*h/(6*dt); Matrix02[0][1]=h/(6*dt); for(int i=1;i<999;i++){ Matrix02[i][i-1]=h/(6*dt); Matrix02[i][i]=4*h/(6*dt); Matrix02[i][i+1]=h/(6*dt); } Matrix02[999][998]=h/(6*dt); Matrix02[999][999]=4*h/(6*dt); vector01[0][0]=Matrix02[0][0]*s2[0]+Matrix02[0][1]*s2[1]; for(int i=1;i<999;i++){ vector01[0][i]=Matrix02[i][i-1]*s2[i-1]+Matrix02[i][i]*s2[i]+Matrix02[i][i+1]*s2[i+1]; } vector01[0][999]=Matrix02[999][998]*s2[998]+Matrix02[999][999]*s2[999]; for(int i=0;i<1000;i++){ for(int j=0;j<1000;j++){ MatrixU[i][j]=Matrix01[i][j]; } } for(int i=1;i<1000;i++){ MatrixU[i][i]=Matrix01[i][i]-MatrixU[i-1][i]*Matrix01[i][i-1]/MatrixU[i-1][i-1]; } MatrixL[0][0]=1; for(int i=1;i<1000;i++){ MatrixL[i][i-1]=Matrix01[i][i-1]/MatrixU[i-1][i-1]; MatrixL[i][i]=1; } for(int k=0;k<56;k++){ vector02[k][0]=vector01[k][0]; for(int i=1;i<1000;i++){ vector02[k][i]=vector01[k][i]-MatrixL[i][i-1]*vector02[k][i-1]; } vector03[k][999]=vector02[k][999]/MatrixU[999][999]; for(int i=998;i>=0;i--){ vector03[k][i]=(vector02[k][i]-MatrixU[i][i+1]*vector03[k][i+1])/MatrixU[i][i]; } vector01[k+1][0]=Matrix02[0][0]*vector03[k][0]+Matrix02[0][1]*vector03[k][1]; for(int i=1;i<999;i++){ vector01[k+1][i]=Matrix02[i][i-1]*vector03[k][i-1]+Matrix02[i][i]*vector03[k][i]+Matrix02[i][i+1]*vector03[k][i+1]; } vector01[k+1][999]=Matrix02[999][998]*vector03[k][998]+Matrix02[999][999]*vector03[k][999]; } double minss1 = s1[0]; double maxss1 = s1[0]; for(int i=0;i<1000;i++){ if(s1[i]>maxss1){ maxss1 = s1[i]; } } for(int i=0;i<1000;i++){ if(s1[i]