用java写成的一个物理数据处理程序

来源:互联网 发布:护考软件排行 编辑:程序博客网 时间:2024/05/21 07:59

1.首先,处理物理数据有几点困难:精度要求高,有积分,数据公式繁杂。

2.其实double是可以满足精度的,不必使用BigDecimal了。BigDecimal无法开方。

3.积分利用先微分后积分的思想。重点是明白函数的意义。

4.关于函数调用的思想,实际上如果对一个函数积分,只需要给这个函数输入一个X值,输出一个Y值即可。

题目在


程序是

import java.math.BigDecimal;import java.math.MathContext;import javax.swing.JButton;import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.JPanel;import javax.swing.JTabbedPane;import javax.swing.JTextField;public class Test {//中途用到的常量:double A,w,Ex,xi,B,BD,beta,CTH,X,Nc,hc;//手动输入变量double  NA,b,V,d,T,aerfa,R2,ND,ED,lamd,Area,I,EC,fai;//aerfa不能太大或者太小 ,因为下面进行pow的时候用的是double,//常用的中间转换值static double temp1, temp2, temp3;//常数static double q,epu0,epus,c,R1,gD,kB,rouI;final static int size1 = 13;//觉得分成多少分double xsize = 1000;//界面:static JTabbedPane jtp1;static JFrame jf;JPanel jp ;//JLabel jl1 , jl2, jl3, jl4, jl5, jl6,jl7,jl8,jl9,jl10,jl11,jl12,jl13,jl14;JButton jb1, jb2;JLabel[] jl;JTextField []jtf;public static void main(String[] args) {// TODO Auto-generated method stub         Test test = new Test();}    Test()    {    inputValue();        constValue();    //参数无用    ex(0.01);    //参数无用//    X = 0.0000000001;//    while(X<=0.000000001)//    {//    Mx(X);//    X=X+0.0000000001;//    }    Mx(0.000012);    //参数无用    Jx();    ita();    }    //先给一些输入的数赋值.    void inputValue()    {    NA = 10000000000000000000d;b = 0.000003d;V = 2d;d = 0.000015d;T = 10d;aerfa = 50000d;R2 = 0.3d;ED = 0.000000000000000000864d;ND = 500000000000000000000000d;lamd = 0.000015d;//原来误写成8Area = 0.00000004d;//I = new BigDecimal(jtf[12].getText().toString());EC = 700000d;fai = 100000000000000d;X = 0.0000000002d;hc = 1.863*Math.pow(10, -25);    } void constValue(){//计算qq = 1.6*Math.pow(10, -19);System.out.println("q: "+q);//epu0epu0 = 8.854*Math.pow(10, -12);//System.out.println("epu0: "+epu0);//epusepus = 11.7; //c c = 3*Math.pow(10, 8); //R1,gD R1 = 0.3; gD = 2; //kB kB = 1.38*Math.pow(10, -23); //System.out.println("59:kB: "+kB); //rouI rouI = 1.6*Math.pow(10, -17); //A  A = q*NA/(epu0*epus); //System.out.println("A: "+A); //BD BD = 6*Math.pow(10, -4)/Math.pow(T, 1.5); Nc = 2.8*Math.pow(10, 19)*T/300; //System.out.println("in 89: Nc: "+Nc); beta = 1/T*kB; CTH = ND*BD*Nc*ED*Math.pow(10, 0-beta)/gD;// System.out.println("CTH in 91: "+CTH);}    //计算Ex double ex(double x) { if(V>0) {   double temp = 2*V/A +Math.pow(b,2);   temp = Math.sqrt(temp);  // System.out.println("w in 118: "+w);   w = temp-b;   //System.out.println("w in 120: "+w);   if(w<=d)   {  if(x>=0&&x<w)  {  Ex = A*(w-x);  }else if(x<0&&x>=(0-b))  {  Ex = A*w;  }   }else {   w=d;   B = (V-A*b*d+0.5*Math.pow(d, 2))/(b+d);   if(x>=0&&x<w)  {  Ex = A*(d-x)+B;  }else if(x<0&&x>=(0-b))  {  Ex = A*d+B;  }   }       }else{ //暂时不写 } return Ex; }     double c1(double x)     {      temp1 = aerfa*(1-R1)*fai*(Math.pow(Math.E, 0-(aerfa*x))+R2*Math.pow(Math.E, (aerfa*x-2*aerfa*d)));          temp2 = 1- R1*R2*Math.pow(Math.E, (0-2*aerfa*d));          return temp1/temp2;     }     double gx(double x)     {     return c1(x)+CTH;     }     double roux(double x)     {     if(x>=0 && x < w)     {     //System.out.println("in roux: (返回值)ND: "+ND);    // System.out.println("in roux: (返回值)rouI: "+rouI);    // System.out.println("in roux: (返回值)EC: "+EC);    // System.out.println("in roux: (返回值)ex(x): "+ex(x));     temp1 = ND*rouI*Math.pow(10, ((0-EC)/ex(x)));    // System.out.println("in roux: (返回值)pow: "+Math.pow(10, (0-EC/ex(x))));     System.out.println("in roux: (返回值)temp1: "+temp1);     }else {     System.out.println("in rouX, wrong!!");     return 0;     }     return temp1;     }     double Mx(double x)     {     double total = 0;    // System.out.println("in Mx: X: "+X);     //System.out.println("in Mx: w: "+w);         if(x>=0&&x<w)     {     //double t1 = 1000;     double xTemp = x/xsize;          for ( double i = 0; i < xsize; i++) { total =total+ xTemp*roux(i*xTemp+xTemp/2);  }     //System.out.println("Mx: "+( total)); //System.out.println("Mx: "+Math.pow(10, total)); total = Math.pow(10, total);     }else {     System.out.println("in Mx, wrong!!!!!!!!");     }     return total;     }     double Jx()     {    // double t1 = 1000; double xTemp = w/xsize; double total = 0; for ( double i = 0; i < xsize; i++){total =total+ xTemp*gx(i*xTemp+xTemp/2)*Mx(i*xTemp+xTemp/2);//System.out.println("in Jx: total: "+total);}     return total;     }     double theterx(double x)     {     double total = 0;     total = Math.pow(Math.E, -aerfa*x)+R2*Math.pow(Math.E,aerfa*x-aerfa*d );     return total;     }     double theter()     {     double total = 0;     // double t1 = 1000; double xTemp = w/xsize; for ( double i = 0; i < xsize; i++){total =total+ xTemp*theterx(i*xTemp+xTemp/2);//System.out.println("in Jx: theterx: "+xTemp*theterx(i*xTemp+xTemp/2));} //System.out.println("theter: "+total);     return total;     }     double theterM()     {     //double t1 = 1000; double xTemp = w/xsize; double total = 0;// System.out.println("开始调用theterM: "// + "\n"// + "\n"// + "\n"// + "\n"); for ( double i = 0; i < xsize; i++){//total =total+ xTemp*theterx(i*xTemp+xTemp/2)*Mx(i*xTemp+xTemp/2); //System.out.println("theterM: theterx: "+xTemp*theterx(i*xTemp+xTemp/2));// System.out.println("theterM: Mx: "+Mx(i*xTemp+xTemp/2));// System.out.println("theterM: Mx: "+Mx(i*xTemp+xTemp/2)); //System.out.println("theterM: Mx*theterx: "+xTemp*theterx(i*xTemp+xTemp/2)*Mx(i*xTemp+xTemp/2)); //total =total+ xTemp*theterx(i*xTemp+xTemp/2); total =total+ xTemp*theterx(i*xTemp+xTemp/2)*Mx(i*xTemp+xTemp/2);//System.out.println("in Jx: total: "+total);}// System.out.println("theterM: "+total); return total;     }     double I()     {     double total = 0;      // double t1 = 1000;  double xTemp = w/xsize;   for ( double i = 0; i < xsize; i++) { total =total+ xTemp*gx(i*xTemp+xTemp/2)*Mx(i*xTemp+xTemp/2)*(2*Mx(i*xTemp+xTemp/2)-1); //System.out.println("in Jx: theterx: "+xTemp*theterx(i*xTemp+xTemp/2)); }  total = total*q*A; // System.out.println("theter: "+total);      return total;      }          double ita()     {     double total =0;     //参数均无意义。     total = aerfa*(1-R1)*theter()/(1-R1*R2*Math.pow(Math.E, -2*aerfa*d));     System.out.println("in ita: ita: "+total);     double De = theterM()/theter();     System.out.println("in ita: De: "+De);          double R = q*lamd*total*De/hc;     System.out.println("in ita: R: "+R);          double Dstar = R*Math.sqrt(Area)/Math.sqrt(2*q*I());     System.out.println("in ita: Dstar: "+Dstar);          System.out.println("in ita: fai(平方)*Dsta: "+Math.sqrt(fai)*Dstar );     System.out.println("in ita: fai(平方)*Dsta: "+(fai)*Dstar );     return total;     }     }



0 0
原创粉丝点击