Jerrey贝贝 Jerrey贝贝
关注数: 0 粉丝数: 15 发帖数: 63 关注贴吧数: 6
我的这个程序哪个地方出错了,请帮忙指点一下,谢谢! //计算勒让多-琼斯势场的微分散射界面;public class exercise15 { static final int n=10000,m=20;static final double a=100,e=1;static double b;public static void main(String[] args){int nc=20,ne=2;double del=1e-6,db=0.5,b0=0.01,h=0.01;double g1,g2;double theta[]=new double[n+1];double fi[]=new double[n+1];double sig[]=new double[m+1];for(int i=0;i<=m;++i){b=b0+i*db;//Calculate the first term of the for(int j=0;j<=n;++j){double r=b+h*(j+1);fi[j]=1/(r*r*Math.sqrt(f(r)));}g1=simpson(fi,h);double rm=secant(nc,del,b,h);for(int j=0;j<=n;++j){double r=rm+h*(j+1);fi[j]=1/(r*r*Math.sqrt(f(r)));}g2=simpson(fi,h);theta[i]=2*b*(g1-g2);} sig=firstorderDerivative(db,theta,ne);for(int i=m;i>=0;--i){b=b0+i*db;sig[i]=b/(Math.abs(sig[i])*Math.sin(theta[i]));double ruth=1/Math.pow(Math.sin(theta[i]/2),4);ruth /=16;double si=Math.log(sig[i]);double ru=Math.log(ruth);System.out.println("thrta="+theta[i]);System.out.println("in sigma(theta)="+si);System.out.println("in sigma-r(theta)="+ru);System.out.println();}}public static double simpson(double y[],double h){int n=y.length-1;double s0=0,s1=0,s2=0;for(int i=2;i<n;i+=2){s0+=y[i];s1+=y[i-1];s2+=y[i+1];}double s=(s1+4*s0+s2)/3;if((n+1)%2==0)return h*(s+(5*y[n]+8*y[n-1]-y[n-2])/12);elsereturn h*s;}public static double secant(int n,double del,double x,double dx){int k=0;double x1=x+dx;while ((Math.abs(dx)>del)&&(k<n)){double d=f(x1)-f(x);double x2=x1-f(x1)*(x1-x)/d;x=x1;x1=x2;dx=x1-x;k++;}if (k==n)System.out.println("Convergence not"+"found after"+n+"iterations");return x1;}public static double[] firstorderDerivative(double h,double f[],int m){int n=f.length-1;double [] y=new double[n+1];double [] x1=new double[m+1];double [] f1=new double[m+1];double [] fr=new double[m+1];for(int i=1;i<n;++i)y[i]=(f[i+1]-f[i-1])/(2*h);for(int i=1;i<=(m+1);++i){x1[i-1]=i*h;f1[i-1]=y[i];fr[i-1]=y[n-i];}y[0]=aitken(0,x1,f1);y[n]=aitken(0,x1,fr);return y;}public static double aitken(double x,double xi[],double fi[]){int n=xi.length-1;double ft[]=(double[])fi.clone();for(int i=0;i<n;++i){for(int j=0;j<n-i;++j){ft[j]=(x-xi[j])/(xi[i+j+1]-xi[j])*ft[j+1]+(x-xi[i+j+1])/(xi[j]-xi[i+j+1])*ft[j];}}return ft[0];}public static double f(double x){return 1-b*b/(x*x)-Math.exp(-x/a)/(x);}public static double fb(double x){return 1-b*b/(x*x);}}
1 下一页