⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 example5_14.java

📁 清华大学2002年出版的《科学与工程数值计算算法Java》配套源码
💻 JAVA
字号:
import java.applet.*;
import java.awt.*;
public class Example5_14 extends Applet
{
 public double espl2(double[] x,double[] y,double[] dy,double[] ddy,double[] t,double[] z,double[] dz,double[] ddz)
 {int i,j,n=x.length;
  double[] a=new double[n-1];
  double[] b=new double[n-1];
  double alpha,beta,h,h1,h2;
  a[0]=-0.5;b[0]=1.5*(y[1]-y[0])/(x[1]-x[0])-ddy[0]*(x[1]-x[0])/4;
  for(i=1;i<n-1;i++)
  {alpha=(x[i]-x[i-1])/(x[i+1]-x[i-1]);
   beta=3*((1-alpha)*(y[i]-y[i-1])/(x[i]-x[i-1])+alpha*(y[i+1]-y[i])/(x[i+1]-x[i]));
   a[i]=-alpha/(2+(1-alpha)*a[i-1]);
   b[i]=(beta-(1-alpha)*b[i-1])/(2+(1-alpha)*a[i-1]);}
  dy[n-1]=(3*(y[n-1]-y[n-2])/(x[n-1]-x[n-2])+ddy[n-1]*(x[n-1]-x[n-2])/2-b[n-2])/(2+a[n-2]);
  for(i=n-2;i>=0;i--)dy[i]=a[i]*dy[i+1]+b[i];
  for(i=1;i<n-1;i++)ddy[i]=(6*(y[i+1]-y[i])/(x[i+1]-x[i])-2*(2*dy[i]+dy[i+1]))/(x[i+1]-x[i]);

  for(j=0;j<t.length;j++)
  {for(i=0;i<n-1;i++)if(t[j]<x[i+1])break;
   h=x[i+1]-x[i];h1=x[i+1]-t[j];h2=t[j]-x[i];
   z[j]=0;z[j]+=(3-2*h1/h)*h1*h1*y[i]/h/h;z[j]+=(3-2*h2/h)*h2*h2*y[i+1]/h/h;
   z[j]+=(1-h1/h)*h1*h1*dy[i]/h;z[j]-=(1-h2/h)*h2*h2*dy[i+1]/h;
   dz[j]=0;dz[j]+=6*(h1/h-1)*h1*y[i]/h/h;dz[j]-=6*(h2/h-1)*h2*y[i+1]/h/h;
   dz[j]+=(3*h1/h-2)*h1/h*dy[i];dz[j]+=(3*h2/h-2)*h2/h*dy[i+1];
   ddz[j]=0;ddz[j]+=6*(1-2*h1/h)*y[i]/h/h;ddz[j]+=6*(1-2*h2/h)*y[i+1]/h/h;
   ddz[j]+=(2-6*h1/h)*dy[i]/h;ddz[j]-=(2-6*h2/h)*dy[i+1]/h;
  }
  alpha=0;beta=0;
  for(i=0;i<n-1;i++)
  {h=x[i+1]-x[i];alpha+=h*(y[i]+y[i+1]);beta=h*h*h*(ddy[i]+ddy[i+1]);}
return (alpha/2-beta/24);
}

 public void paint(Graphics g)
 {double[] x={0.52,8.0,17.95,28.65,50.65,104.6,156.6,260.7,364.4,468.0,507.0,520.0};
  double[] y={5.28794,13.84,20.2,24.9,31.1,36.5,36.6,31,20.9,7.8,1.5,0.2};
  double[] dy=new double[12];
  double[] ddy=new double[12];
  double[] t={4.0,14.0,30.0,60.0,130.0,230.0,450.0,515.0};
  double[] z=new double[8];
  double[] dz=new double[8];
  double[] ddz=new double[8];
  double intf=0;
  int i;
  ddy[0]=-0.279319;ddy[11]=0.011156;
  intf=espl2(x,y,dy,ddy,t,z,dz,ddz);
  g.drawString("x                              y                              y'                              y''",10,20);
  for(i=0;i<12;i++)
  g.drawString(""+x[i]+"  "+y[i]+"  "+dy[i]+"  "+ddy[i],10,40+20*i);
  g.drawString("近似积分值为"+intf,10,280);
  g.drawString("t                              f(t)                              f'(t)                              f''(t)",10,300);
  for(i=0;i<8;i++)
  g.drawString(""+t[i]+"  "+z[i]+"  "+dz[i]+"  "+ddz[i],10,320+20*i);

 }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -