📄 example5_14.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 + -