数值计算方法课程报告.docx
《数值计算方法课程报告.docx》由会员分享,可在线阅读,更多相关《数值计算方法课程报告.docx(13页珍藏版)》请在冰豆网上搜索。
![数值计算方法课程报告.docx](https://file1.bdocx.com/fileroot1/2023-6/6/1efbfb85-d732-46ef-8f21-40afea5ac817/1efbfb85-d732-46ef-8f21-40afea5ac8171.gif)
数值计算方法课程报告
课程报告
课程名称______《数值计算》__
学生学院_____机电工程学院___
专业班级_____微电子
(1)班____
学号________
学生姓名_______________
指导教师_____________
XXXX年XX月XX日
姓名:
线
学号:
订
装专业:
学院:
广东工业大学考试试卷(A)
课程名称:
数值计算
试卷满分
100分
考试时间:
2015年12月26日
(第17周星期六)
题号
一
二
三
四
五
六
七
八
九
十
总分
评卷得分
评卷签名
复核得分
复核签名
“数值计算”考试要求
“数值计算”考试以开卷形式进行。
在“数值计算”课程考试日(2015
年12月19日,第12周星期五)考试时间,在考试教室领取试题,在2015
年12月26日(第17周星期六)进行答辩。
不参加答辩者将取消考试成绩。
“数值计算”考试结果要求独立在计算机上完成,可使用Matlab或C
程序编程实现。
考试结果将以报告书形式提交,内容包括对问题描述、计算
程序以及算例、计算结果、分析组成。
计算程序要求具有通用性,能够处理
异常情况,可以输入问题、算法参数、算例及初始值,在计算过程中显示当
前计算状态、计算完成后显示计算结果。
上述内容将作为试卷成绩的主要评
定依据。
特别提醒,不得使用教师在讲课和实验时的范例作为考试结果。
报
告书具体格式参考毕业设计手册。
以考生学号命名的文件夹存放程序及报告书电子版,以班级为单位刻录
在一张光盘中,与打印版报告书一起由班长和学习委员一起上交任课教师。
数值计算课程总成绩将由试卷成绩(70%)、平时成绩(30%)组成。
一编写Gauss列主元消元法求解线性方程组的程序,要求附有算例。
(本题20分)
二编写多项式插值的程序,要求附有算例。
(本题20分)
三编写Gauss积分方法的程序,要求附有算例。
(本题20分)
四编写Euler方法求常微分方程初值问题的程序,要求附有算例。
(本题20分)
五编写Newton迭代法求非线性方程的程序,要求附有算例。
(本题20分)
广东工业大学试卷用纸,共2页,第2页
一编写Gauss列主元消元法求解线性方程组的程序,要求附有算例。
(本题20分)
问题描述:
编写一C语言程序,算法为列主元消元法,功能为求解线性方程组。
解:
#include
#include
#defineN200
voidmain()
{
inti,j,k,m,n;
floats,e,q;
doublex;
floatX[N];
floatarray[N][N+1];
printf("请输入方程的阶数\n");
scanf("%d",&n);
printf("输入的原方程系数,中间用空格隔开\n");
for(i=0;ifor(j=0;jscanf("%f",&array[i][j]);
printf("方程系数为\n");
for(i=0;i{
for(k=0;k<=n-1;k++)//在相应的列中选主元//
{
m=k;
for(i=k+1;i<=n-1;i++)
{
x=fabs(array[m][k]);
if(fabs(array[i][k]>x))
m=i;
}
printf("最大元在第%d行\n\n\n\n",m);
if(array[m][k]==0)
{
printf("ERROR");
return;
}
else//两行进行比较交换两行//
{
for(j=k;j<=n;j++)
{
q=array[k][j];
array[k][j]=array[m][j];
array[m][j]=q;
}//换行结束//
for(i=0;i{
for(j=0;j{
printf("%8.4f",array[i][j]);
}
printf("\n");//输出换行后的矩阵//
}
printf("\n\n\n\n\n\n");
for(i=k+1;i<=n-1;i++)
{
s=array[i][k]/array[k][k];//消元过程//
for(j=0;j<=n;j++)
{
array[i][j]=-(array[i][j]-s*array[k][j]);
}
}
}
}
}
printf("变换后的矩阵\n");
for(i=0;i{
for(j=0;j{
printf("%8.4f",array[i][j]);
}
printf("\n");
}
printf("\n");
array[n-1][n]=array[n-1][n]/array[n-1][n-1];
array[n-1][n-1]=1;
for(i=n-2;i>=0;i--)
{
e=0;
for(j=i+1;j{
e=e+array[i][j]*array[j][n];
}
array[i][n]=(array[i][n]-e)/array[i][i];
array[i][i]=1;
for(j=i+1;j{array[i][j]=0;}
}
printf("消元后的矩阵\n");
for(i=0;i{
for(j=0;j{
printf("%8.4f",array[i][j]);
}
printf("\n");
}
for(i=0;i{
X[i]=array[i][n];
}
printf("解的集合\n");
for(j=0;j{
printf("%8.4f",X[j]);
}
printf("\n");
}
例子:
求方程组的解。
运算程序结果:
计算结果与分析:
计算结果如下:
。
代入方程中得带的结果等于右边。
可见列主元消元法求解精度高。
二编写多项式插值的程序,要求附有算例。
(本题20分)
问题描述:
写一C语言程序,算法为拉格朗日插值法,功能为求解多项式函数。
插值函数为:
解:
#include"stdio.h"
#defineN200
voidmain()
{
inti,t,j,n;
floata,b,c=0,x,w;
floatX[N];
floatY[N];
printf("请输入已知的数个数\n");
scanf("%d",&n);
printf("请输入x的值\n");
for(j=0;j{
scanf("%f",&X[j]);
}
printf("\n");
printf("X的集合\n");
for(i=0;i{
printf("%8.4f",X[i]);
}
printf("\n");
printf("\n");
printf("请输入对应y的值\n");
for(j=0;j{
scanf("%f",&Y[j]);
}
printf("y的集合\n");
for(i=0;i{
printf("%8.4f",Y[i]);
}
printf("\n");
printf("\n");