预览加载中,请您耐心等待几秒...
1/6
2/6
3/6
4/6
5/6
6/6

在线预览结束,喜欢就下载吧,查找使用更方便

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

实验三插值法 四、实验题目: 龙格现象的发生、防止,插值效果的比较 将区间10等分,有函数: ;;. 分别对上述函数计算点上的值,做出插值函数的图形并与的图形比较。 (1)做拉格朗日插值; (2)做牛顿插值; (3)做分段线性插值; (4)做三次样条插值; 将计算结果与函数的准确值比较并对结果进行分析。 packageshuzhifangfa; publicclasslagelanri{ /** *@paramargs */ publicstaticvoidmain(String[]args){ doublem=-2; while(m<3){ doubley=0; doublef[]=newdouble[11]; doublex[]=newdouble[11]; for(inti=-5;i<6;i++){ x[i+5]=i; } //求出对于x的y值 for(inti=-5;i<6;i++){ f[i+5]=5.0/(1+i*i); } doublel1[]=newdouble[11]; doublel2[]=newdouble[11]; for(inti=0;i<11;i++){ l1[i]=1; l2[i]=1; } for(intk=0;k<11;k++){ for(intp=0;p<11;p++){ if(p==k) continue; else{ l1[k]=l1[k]*(m-x[p]); l2[k]=l2[k]*(x[k]-x[p]); } } } //多项式的每一项相加 for(intj=0;j<11;j++){ y=y+l1[j]*f[j]/l2[j]; } doubleh=5.0/(1+m*m);//精确值 doubler=Math.abs(y-h); System.out.println("近似值y="+y+"精确值h="+h+"误差r="+r); //for(inti=0;i<11;i++) //System.out.println("l1["+(i-5)+"]="+f[i]); m=m+0.2; } } } ------------------------------------------------------------------------------------- packageshuzhifangfa; publicclassniudun{ publicstaticvoidmain(String[]args){ doublem=0; while(m<5){ doubley=0; doublex[]=newdouble[11]; doublef[]=newdouble[11]; doublel[][]=newdouble[11][11]; doublew[]=newdouble[11]; for(inti=-5;i<6;i++){ x[i+5]=i; } //求出对于x的y值 for(inti=-5;i<6;i++){ f[i+5]=5.0/(1+i*i); } //0阶差商 for(inti=0;i<11;i++){ l[i][0]=f[i]; } //1阶差值 for(intj=1;j<11;j++){ l[j][1]=(f[j]-f[j-1])/(x[j]-x[j-1]); } //n阶差值 for(inti=1;i<10;i++){ for(intj=i;j<10;j++){ l[j][i]=(l[j][i]-l[j-1][i])/(x[j]-x[j-i]); } } //多项式(x-x0)(x-x1)(x-x2)等 w[0]=1; for(inti=1;i<11;i++){ for(intj=0;j<i;j++){ w[i]=w[i]*(m-x[j]); } } for(inti=0;i<11;i++){ y=y+l[i][i]*w[i]; } doubleh=5.0/(1+m*m);//精确值 doubler=Math.abs(y-h); System.out.println("近似值y="+y+"精确值h="+h+"误差r="+r); m=m+0.2; } } } -----------------------------