📄 example5_11.java
字号:
import java.applet.*;
import java.awt.*;
public class Example5_11 extends Applet
{
public double enspl(double[] x,double[] y,double t,double[] s)
{int i,j,k,n=x.length;
double g0,g1,t0,t1,t2,t3;
double[] u=new double[n+3];
for(k=0;k<n-1;k++)u[k+2]=(y[k+1]-y[k])/(x[k+1]-x[k]);
u[1]=2*u[2]-u[3];u[0]=2*u[1]-u[2];
u[n+1]=2*u[n]-u[n-1];u[n+2]=2*u[n+1]-u[n];
for(k=0;k<n-1;k++)if(t<x[k+1])break;
s[0]=Math.abs(u[k+1]-u[k]);s[1]=Math.abs(u[k+2]-u[k+1]);
s[2]=Math.abs(u[k+3]-u[k+2]);s[3]=Math.abs(u[k+4]-u[k+3]);
if(s[0]+s[2]<1e-12)g0=(u[k+1]+u[k+2])/2;
else g0=(s[2]*u[k+1]+s[0]*u[k+2])/(s[2]+s[0]);
if(s[1]+s[3]<1e-12)g1=(u[k+2]+u[k+3])/2;
else g1=(s[3]*u[k+2]+s[1]*u[k+3])/(s[3]+s[1]);
s[0]=y[k];s[1]=g0;s[2]=(3*u[k+2]-2*g0-g1)/(x[k+1]-x[k]);
s[3]=(g1+g0-2*u[k+2])/(x[k+1]-x[k])/(x[k+1]-x[k]);
g0=t-x[k];g1=((s[3]*g0+s[2])*g0+s[1])*g0+s[0];
return g1;
}
public void paint(Graphics g)
{double[] x={-1,-0.95,-0.75,-0.55,-0.3,0,0.2,0.45,0.6,0.8,1};
double[] y=new double[11];
double[] s=new double[4];
double f,t,eps=1e-7;
int i;
for(i=0;i<11;i++)y[i]=1.0/(1+25*x[i]*x[i]);
t=-0.85;f=enspl(x,y,t,s);
g.drawString("t="+t+" f(t)="+f+" 实际值="+(1.0/(1+25*t*t)),10,20);
g.drawString("三次插值多项式系数为"+s[0]+" "+s[1],10,40);
g.drawString(" "+s[2]+" "+s[3],10,60);
t=0.15;f=enspl(x,y,t,s);
g.drawString("t="+t+" f(t)="+f+" 实际值="+(1.0/(1+25*t*t)),10,100);
g.drawString("三次插值多项式系数为"+s[0]+" "+s[1],10,120);
g.drawString(" "+s[2]+" "+s[3],10,140);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -