计算实习报告怎么写?( 八 )


//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)实验结果
四、总结
学习了插值法,学会了利用插值法编程求多项式的解,可以求解很多问题,让求解多项式解变得非常简单 。
习题五:
5曲线拟合
一、实验目的
(1)了解最小二乘法的基本原理,通过计算机解决实际问题; (2)了解超定方程组的最小二乘解法 。
二、实验内容
1、分别用抛物线y?a?bx?cx2和指数曲线y?aebx拟合所给数据,并比较这两个拟合函数的优劣 。
2、按所给实验数据,用形如y?a?bx的抛物线进行最小二乘拟合 。
三、程序设计、结果分析
1、分别用抛物线y?a?bx?cx和指数曲线y?ae拟合所给数据 a.抛物线
(1)程序设计: #include #include void main() {int i;float a[3];float x[15]={1,1.5,2,2.5,3,3.5,4,4.5,5,5.5,6,6.5,7,7.5,8};
2bx2 float y[15]={33.4,79.50,122.65,159.05,189.15,214.15,238.65,252.50,267.55,280.50,296.65,301.40,310.40,318.15,325.15};void Approx(float[],float[],int,int,float[]);Approx(x,y,15,2,a);for(i=0;iprintf("a[%d]=%f\\\\n",i,a[i]); } void Approx(float x[],float y[],int m,int n,float a[]) {int i,j,t;float *c=new float[(n+1)*(n+2)];float power(int,float);void ColPivot(float *,int,float[]);for(i=0;ifor(j=0;j{