计算实习报告如何写?( 十 )


for(i=r+1;i {
for(k=0;k *(u+i*(n+1)+r)-=*(u+i*(n+1)+k)*(*(u+k*(n+1)+r));
*(u+i*(n+1)+r)/=*(u+r*(n+1)+r);
}
}for(i=n-1;i>=0;i--){
for(r=n-1;r>=i+1;r--)
*(u+i*(n+1)+n)-=*(u+i*(n+1)+r)*x[r];
x[i]=*(u+i*(n+1)+n)/(*(u+i*(n+1)+i));} }
四、总结
掌握了用列主元消去法和LU分解法求解方程组程序编写的技巧 。
习题四:
4插值法
一、实验目的
(1)熟悉拉格朗日插值法多项式和牛顿插值多项式 , 注意其不同点; (2)掌握三次样条插值解决一些实际问题 。
二、实验内容
1、按所给数据做二次插值 , 并求给定点的函数值
2、按所给数据做五次插值 , 并求给定点的函数值
3、牛顿前插公式计算函数值
三、实验步骤、程序设计、实验结果及分析
1、二次插值 (1)程序设计 #include float Lagrange(float x[],float y[],float xx,int n)
//n为(n+1)次插值; {int i,j;float *a,yy=0;
a=new float[n];for(i=0;ia[i]=y[i];
for(j=0;j if(j!=i)a[i]*=(xx-x[j])/(x[i]-x[j]);
yy+=a[i];}delete a;return yy; } void main() {float x[5]={-3.0,-1.0,1.0,2.0,3.0};float y[5]={1.0,1.5,2.0,2.0,1.0};float xx1=-2,xx2=0,xx3=2.75,yy1,yy2,yy3;yy1=Lagrange(x,y,xx1,3);yy2=Lagrange(x,y,xx2,3);yy3=Lagrange(x,y,xx3,3);printf("x1=%-20f,y1=%f\\\\n",xx1,yy1);printf("x2=%-20f,y2=%f\\\\n",xx2,yy2);printf("x3=%-20f,y3=%f\\\\n",xx3,yy3); } (2)实验结果
2、五次插值 (1)程序设计 #include float Lagrange(float x[],float y[],float xx,int n)
//n为(n+1)次插值; {int i,j;float *a,yy=0;
a=new float[n];for(i=0;ia[i]=y[i];
for(j=0;j if(j!=i)a[i]*=(xx-x[j])/(x[i]-x[j]);
yy+=a[i];}delete a;return yy; } void main() {float x[6]={0.30,0.42,0.50,0.58,0.66,0.72};float y[6]={1.04403,1.08462,1.11803,1.15603,1.19817,1.23223};float xx1=0.46,xx2=0.55,xx3=0.60,yy1,yy2,yy3;yy1=Lagrange(x,y,xx1,6);yy2=Lagrange(x,y,xx2,6);
yy3=Lagrange(x,y,xx3,6);printf("x1=%-20f,y1=%f\\\\n",xx1,yy1);printf("x2=%-20f,y2=%f\\\\n",xx2,yy2);printf("x3=%-20f,y3=%f\\\\n",xx3,yy3); }
(2)实验结果
3、牛顿前插公式计算函数值 (1)程序设计 #include #define N 3 void Difference(float y[],float f[4][4],int n) {
int k,i;f[0][0]=y[0];f[1][0]=y[1];f[2][0]=y[2];f[3][0]=y[3];for(k=1;kfor(i=0;i f[i][k]=f[i+1][k-1]-f[i][k-1];return; } void main() {int i,k=1;float a,b=1,m=21.4,t=1.4,f[4][4]={0};float x[5]={20,21,22,23,24};float y[5]={1.30103,1.32222,1.34242,1.36173,1.38021};Difference(y,f,N);a=f[0][0];for(i=1;ik=k*i;
b=b*(t-i+1);
a=a+b*f[0][i]/k;}printf("x(k)\\\\n");for (i=0;i printf( "%-20f",x[i]);printf("\\\\ny(k)\\\\n");
for (i=0;iprintf("%-20f",y[i]);for(k=1;kprintf("\\\\nF(%d)\\\\n ",k);
for(i=0;i{
printf("%-20f",f[i][k]);
}}printf ("\\\\n");printf("f(%f)=%-20f",m,a);printf ("\\\\n"); } (2)实验结果
四、总结
学习了插值法 , 学会了利用插值法编程求多项式的解 , 可以求解很多问题 , 让求解多项式解变得非常简单 。