计算方法报告.docx
《计算方法报告.docx》由会员分享,可在线阅读,更多相关《计算方法报告.docx(8页珍藏版)》请在冰豆网上搜索。
计算方法报告
南昌航空大学实验报告
2011年6月20日
课程名称:
计算方法实验名称:
拉格朗日插值法
班级:
09041326姓名:
孙建伟同组人:
指导教师评定:
签名:
一、实验目的
1.了解拉格朗日插值法,掌握线性插值和抛物插值。
2.通过用C语言编制程序实现线性插值和抛物插值。
3.了解对于低阶插值,当插值节点增加时,所求得的
近似值精度有所提高。
二、实验内容与要求
已知
分别按下列要求用C语言编程求
的近似值,要求结果保留到小数点后四位。
三、实验源程序代码
#include
#include
#include
voidmain()
{
//lagrange插值//
double*xi,*yi,x,y;//xi,yi为插值节点,x为//插值点;
南昌航空大学实验报告
2011年6月20日
课程名称:
计算方法实验名称:
拉格朗日插值法
班级:
09041326姓名:
孙建伟同组人:
指导教师评定:
签名:
intn;//n为插值区间数量;
inti,j,k;
doubleP;
y=0.0;
printf("请输入插值区间数量(n=):
\n");
scanf("%d",&n);
xi=(double*)malloc((n+1)*sizeof(double));
yi=(double*)malloc((n+1)*sizeof(double));
printf("请输入节点xi值:
\n");
for(i=0;i<=n;i++)
{printf("xi[%d]:
",i);
scanf("%lf",(xi+i));
printf("yi[%d]:
",i);
scanf("%lf",(yi+i));
printf("\n");}
printf("请输入插值点值:
\n");
南昌航空大学实验报告
2011年6月20日
课程名称:
计算方法实验名称:
拉格朗日插值法
班级:
09041326姓名:
孙建伟同组人:
指导教师评定:
签名:
printf("x=");
scanf("%lf",&x);printf("\n");//下面实现插值功能
for(k=0;k<=n;k++){
P=1.0;
for(j=0;j<=n;j++)
{
if(k!
=j)P*=(x-*(xi+j))/(*(xi+k)-*(xi+j));
}
y+=P*(*(yi+k));}
printf("插值点x上的值为(y=):
%lf",y);
free(xi);free(yi);
getche();
}
四、实验小结
通过本次实验,加强了对拉格朗日插值法的了解,也明白了拉格朗日的插值的C语言的编程算法,同时了解和加深了对C语言在工程数学上的运用和理解。
南昌航空大学实验报告
2011年6月20日
课程名称:
计算方法实验名称:
曲线拟合的最小二乘法
班级:
09041326姓名:
孙建伟同组人:
指导教师评定:
签名:
一、实验目的
1.了解最小二乘法,掌握最小二乘法求解曲线的拟合数据。
2.通过用C语言编制程序实现最小二乘法求解多项式曲线的拟合数据。
二、实验内容与要求
设有一组实验数据(x:
y:
)[i=1,2,3,...,n]要用最小二乘法求一个几次多项式曲线
来拟合这组数据。
三、实验源程序代码
#include
#defineM20
main()
{inti,j,k,m,t;
doublea[M][M],b[M],c[M][M],d[M][M],x[M],y[M],z[M][M],w[M];
//a[M][M]存放法方程的系数,b[M]右端向量,c[M][M]存放中间矩阵c,d[M][M]存放转置矩阵c,//x[M]存放了输入的x值,z[M][M]存放的为确定拟合次数后的增广矩阵,w[M]存所求方程系数即结果
printf("\nInputthevalueofm:
");//m为给出x的数据个数
scanf("%d",&m);
南昌航空大学实验报告
2011年6月20日
课程名称:
计算方法实验名称:
曲线拟合的最小二乘法
班级:
09041326姓名:
孙建伟同组人:
指导教师评定:
签名:
for(i=1;i<=m;i++)
{x[i]=0;y[i]=0;b[i]=0;w[i]=0;
for(j=1;j<=m;j++){a[i][j]=0;c[i][j]=0;d[i][j]=0;}
}
for(i=1;i<=m;i++)
{printf("\n输入矩阵x[%d]:
",i);
scanf("%lf",&x[i]);
}
for(i=1;i<=m;i++)//计算出c矩阵
{c[i][1]=1;
for(j=2;j<=m;j++)c[i][j]=x[i]*c[i][j-1];
}
printf("\nc矩阵:
\n\n");//显示出c矩阵
for(i=1;i<=m;i++)
{for(j=1;j<=m;j++)printf("%4.2lf\t",c[i][j]);
printf("\n");
}
南昌航空大学实验报告
2011年6月20日
课程名称:
计算方法实验名称:
曲线拟合的最小二乘法
班级:
09041326姓名:
孙建伟同组人:
指导教师评定:
签名:
for(i=1;i<=m;i++)//求出c矩阵的转置
{for(j=1;j<=m;j++)d[i][j]=c[j][i];
}
for(i=1;i<=m;i++)//计算出法方程的系数
{for(j=1;j<=m;j++)
for(k=1;k<=m;k++)a[i][j]=a[i][j]+d[i][k]*c[k][j];
}
printf("\n法方程系数矩阵:
\n\n");//显示出法方程矩阵的系数
for(i=1;i<=m;i++)
{for(j=1;j<=m;j++)printf("%4.1lf\t\t",a[i][j]);
printf("\n");
}
for(i=1;i<=m;i++)//输入y[i]
{printf("\n输入矩阵y[%d]:
",i);
scanf("%lf",&y[i]);
}
for(i=1;i<=m;i++)//计算出右端向量
南昌航空大学实验报告
2011年6月20日
课程名称:
计算方法实验名称:
曲线拟合的最小二乘法
班级:
09041326姓名:
孙建伟同组人:
指导教师评定:
签名:
for(j=1;j<=m;j++)b[i]=b[i]+d[i][j]*y[j];
printf("\n右端向量:
\n\n");//显示出右端向量
for(i=1;i<=m;i++)
{printf("%2.2lf",b[i]);printf("\n");
}
for(i=1;i<=m;i++)a[i][m+1]=b[i];//把右端向量也放入a矩阵中
printf("\n拟合次数t=");//输入拟合次数(应该是一次)
scanf("%d",&t);
printf("\n");
for(i=1;i<=t+1;i++)
for(j=1;j<=t+1;j++)
{z[i][j]=a[i][j];z[i][t+2]=a[i][m+1];
}
//解方程(按二元一次方程组解)只能执行一次
w[1]=(z[1][3]*z[2][2]-z[2][3]*z[1][2])/(z[1][1]*z[2][2]-z[2][1]*z[1][2]);
w[2]=(z[1][1]*z[2][3]-z[2][1]*z[1][3])/(z[1][1]*z[2][2]-z[2][1]*z[1][2]);
printf("\n所求系数:
\n\n");
南昌航空大学实验报告
2011年6月20日
课程名称:
计算方法实验名称:
曲线拟合的最小二乘法
班级:
09041326姓名:
孙建伟同组人:
指导教师评定:
签名:
for(i=1;i<=t+1;i++)
{printf("%2.2lf",w[i]);
printf("\n");
}
return0;
}
四、实验小结
通过本次实验,加强了对曲线拟合的最小二乘法的了解,也明白了曲线拟合的最小二乘法的C语言的编程算法,虽然这次实验程序源代码较多,但是,这个不影响对曲线拟合的最小二乘法的理解,同时了解和加深了对C语言在工程数学上的运用和理解。
南昌航空大学实验报告
2011年6月20日
课程名称:
计算方法实验名称:
欧拉法
班级:
09041326姓名:
孙建伟同组人:
指导教师评定:
签名:
一、实验目的
1.了解欧拉法,掌握欧拉法求解数据。
2.通过用C语言编制程序实现欧拉法求解数据。
二、实验内容与要求
已知区间[a,b]和步长h,求解边值X[0],Y[0],X[1],Y[1]。
三、实验源程序代码
#include
#include
floatf(floatx,floaty)//方程式
{y=-y;
return(y);
}
voidmain()
{floatx0,y0,x1,y1,h,yc,yp;
floata,b;
intN,i;
intn=1;
南昌航空大学实验报告
2011年6月20日
课程名称:
计算方法实验名称:
欧拉法
班级:
09041326姓名:
孙建伟同组人:
指导教师评定:
签名:
printf("pleaseinput[a,b]=:
");
scanf("%f,%f",&a,&b);
printf("pleaseinputh:
");
scanf("%f",&h);
N=(b-a)/h;
x0=0.0;
y0=1.0;
for(i=0;i<=N;i++)
{x1=x0+h;
yp=y0+h*f(x0,y0);
yc=y0+h*f(x1,yp);
y1=(yp+yc)/2;
printf("x(%d)=%3.2f,y[%d]=%3.8f\n",i,x1,i,y1);
x0=x1;
y0=y1;
}
printf("output:
\nx1=%10.9f\ny1=%10.9f\n",x1,y1);
南昌航空大学实验报告
2011年6月20日
课程名称:
计算方法实验名称:
欧拉法
班级:
09041326姓名:
孙建伟同组人:
指导教师评定:
签名:
return;
}
四、实验小结
通过本次实验,加强了对欧拉法的了解,也明白了欧拉法C语言的编程算法,虽然这次实验程序源代码较多,但是,这个不影响对欧拉法的理解,同时了解和加深了对C语言在工程数学上的运用和理解。