本科实验报告
课程名称:数值计算方法
实验地点:计算机科学与技术学院506 专业班级:学号:
学生姓名:
指导教师:**
年月日
太原理工大学学生实验报告
}
printf("%f\n",c);
}
五、实验结果与分析
二分法割线法
分析:
使用二分法和割线法均能计算出方程的根,但利用割线法要比二分法计算的次数少,并且能够较早的达到精度要求。
并且割线法程序代码量较少,精简明了。
六、讨论、心得
本次数值计算方法程序设计实验是在不断的习题练习中跳脱出来,直接面对实用性较强的程序代码编写。
效果很好,不仅加深对二分法、割线法的理解,还加强了实际用运能力。
将理论成功地转化成实践结果。
实验地点北区多学科综合楼4506指导教师王峥
太原理工大学学生实验报告
x[i] = y[i];
for(j=i+1;j<=n;++j)
{
x[i]-=u[i][j]*x[j];
}
x[i]/= u[i][i];
}
for(i=1;i<=n;++i)
{
printf("%0.2lf\n",x[i]);
}
return 0;
}
五、实验结果与分析
完全主元素消元法:
列主元素消元法:
LU分解法:
分析:
对于两种高斯解方程,完全主元素跟列主元素都是先消元、再回代,由程序段可以发现,始终消去对角线下方的元素。
即,为了节约内存及时效,可以不必计算出主元素下方数据。
列主元素消元法的算法设计上优于完全主元素消元法,它只需依次按列选主元素然后换行使之变到主元素位置,再进行消元即可。
列主元素消元法的耗时比完全主元素法少很多,常采用之。
对于LU分解法,分解矩阵为单位下三角阵L与上三角阵U的乘积,然后解方程组Ly=b,回代,解方程组Ux=y。
其中的L为n阶单位下三角阵、U为上三角阵.
六、讨论、心得
本次试验中,感觉是最难的一次,完全主元素消元法程序编写过程相对来说花了好长时间。
纠正各种语法、算法、思路错误。
最后勉强成功,但还是有几处警告,不得解决之法。
感到程序学习的不足,再加之对高斯的不甚了解。
编写过程很是痛苦。
查阅各种内外部资料,这点有利有弊。
突然觉得,应该再把数据结构之类的重新学习一下才行。
以后多花时间在编程吧,重在理解。
必须反省一下自己的C、C++学习了,还是得多加练习,平时养成好的算法思路,免得再次不知所措。
实验地点北区多学科综合楼4506指导教师王峥
太原理工大学学生实验报告
学院名称计算机科学与技术专业班级学号
学生姓名实验日期成绩
课程名称数值计算方法实验题目实验三线性方程组的迭代解法一、实验目的和要求
使用雅可比迭代法或高斯-赛德尔迭代法对下列方程组进行求解。
二、主要设备
PC,Windows操作系统,VC++6.0编程平台;
三、实验内容和原理
设线性方程组 A x=b
的系数矩阵A可逆,且主对角元素a11,a22,…,a nn均不为零,令
D=diag(a11,a22,…,a nn)
并将A分解成 A=(A-D)+D
从而线性方程组可写成 D x=(D-A)x+b
则有迭代公式
x(k+1)=B1x(k)+f1
其中,B1=I-D-1A,f1=D-1b。
各自详细流程图如下所示:
雅克比迭代:
分析:
使用高斯-赛德尔和雅克比迭代都可以求出方程组的解,但是利用高斯-赛德尔迭代法所需的迭代次数比雅克比迭代少,能够更早的达到精度要求。
从程序中可以看出,雅克比定义的sum只有一个,而高斯赛德尔需要两个。
时效性上后者要好些。
六、讨论、心得
这次试验算是比较成功,要归功于授课时候的认真听讲。
程序编写之前,对书本的理论知识进行了进一步的探索。
预习准备工作很彻底,自然随后的一切也都很顺利。
好好学习,好好编程,好好思考。
希望,有所成。
实验地点北区多学科综合楼4506指导教师王峥
太原理工大学学生实验报告
if(k==1)
r1=maxvalue(V,N);
else
r2=maxvalue(V,N);
if(fabs(r2-r1)<eps)break;
r1=r2;
}
printf("迭代次数:\t%d\n",k);
printf("矩阵的特征值:\t%f\n",r2);
printf("(");
for(i=0;i<N;i++)
printf("%f\t",U[i]);
printf(")\n");
}
int main()
{
float A[N][N]={{2,-1,0},{-1,2,-1},{0,-1,2}} ;
matrix(A[0]);
}
五、实验结果与分析
分析:
幂方法求解矩阵的最大特征值以及特征向量,最大优点是计算简单,容易在计算机上实现,对稀疏矩阵较为适合。
但有时收敛速度很慢。
六、讨论、心得
程序编写时详细分析了书上的求解过程,但最终结果还是有所出入。
课本的迭代次数只用7次,而程序运行之后显示为12次。
不明白那里原因。
推测是由于精确位数的不同导致。
最后在程序中更改了一下,验证得之。
知识转化为“所见即所得”,效果不错。
可以多多练习,提高编程能力。
实验地点北区多学科综合楼4506指导教师王峥
太原理工大学学生实验报告
scanf("%f",&y[i]);
printf("\n");
}
printf("\n");
difference(x,(float *)y,n);
printf("请输入插值xx:");
scanf("%f",&xx);
yy=y[20];
for(i=n-1;i>=0;i--)
yy=yy*(xx-x[i])+y[i];
printf("\n近似值为:(%f)=%f\n",xx,yy);
}
五、实验结果与分析
分析:
拉格朗日插值的优点是插值多项式特别容易建立,缺点是增加节点是原有多项式不能利用,必须重新建立,即所有基函数都要重新计算,这就造成
计算量的浪费。
六、讨论、心得
本实验有两种插值方法可以选用,由于时间关系,最终选用牛顿插值法。
若是下去有时间的话,可以再用拉格朗日插值法验证一番。
既能增加编程的锻炼能力,还能进一步巩固一下所学知识。
实验地点北区多学科综合楼4506指导教师王峥
太原理工大学学生实验报告
{
double t=x[1]+x[2]*X[i]-Y[i];
m=m+power(t,2);
}
cout<<m<<endl;
}
五、实验结果与分析
分析:
数据拟合的具体作法是:对给定的数据(x i ,y i)(i=0,1,…,m),在取定的函
数类中,求p(x)属于此函数类,使误差r
i =p(x
i
)- y
i
(i=0,1,…,m)的平方和最小,
即
∑r i2=∑(∑p(x i)-y i)2=min
从几何意义上讲,就是寻求与给定点(x i,y i)(i=0,1,…,m)的距离平方和为最小的曲线y=p(x)。
七、讨论、心得
本次实验设计,很好地实现了最小二乘法的程序模拟。
对程序编写又更进一步,分析算法、尝试编写。
检查并修改其中错误。
感觉收获很大。
特别是对平方误差的计算模块,一次成功。
最后还对程序进行优化,删去冗余以及标准化模块。
很好,坚持下去便是。
作为数值计算方法课程实验的最后一次程序实践,能坚持下来,值得肯定。
同时也是对课本理论知识的复习和巩固,为期末考试而准备。
觉得有必要形成一种思维习惯,即程序编写的潜移默化于生活学习之中。
实验地点北区多学科综合楼4506指导教师王峥。