计算方法实验指导书文档格式.docx
《计算方法实验指导书文档格式.docx》由会员分享,可在线阅读,更多相关《计算方法实验指导书文档格式.docx(27页珍藏版)》请在冰点文库上搜索。
实验方式
适用
专业
备注
1
舍入误差与数值稳定性
2
录入、编辑、调试程序,熟悉C语言;
通过不同算法的选用,了解舍入误差与数值的稳定性。
熟悉C语言程序设计及上机操作;
了解舍入误差所引起的数值不稳定性。
验证性
教师指导,学生独立完成
测控技术与仪器
必修
方程求根—1
(二分法)
2-4
学生根据给定的要求,编写二分法程序,并调试通过;
通过实验输入不同的参数,了解该方法的特点。
完成实习报告。
掌握方程求根的二分法的算法;
熟悉二分法的特点。
综合性
根据实验指导书要求,学生独立完成,教师解惑
3
方程求根—2
(牛顿迭代法)
学生根据给定的要求和牛顿迭代法的算法,编写牛顿迭代法程序,并调试通过;
通过实验输入不同的参数了解牛顿迭代法的特点。
掌握方程求根的牛顿迭代法的算法;
熟悉牛顿迭代法的特点。
4
线性方程组数值解法
(列主元高斯消去法)
4-6
熟悉掌握列主元高斯消去法算法;
学生根据给定的要求编写列主元高斯消去法程序,并调试通过;
编程能力强的在完成上面任务的基础上,还可以选做本章其他方法。
熟悉列主元高斯消元法解线性方程组的算法;
掌握二维数组、函数、输入输出语句的使用;
掌握列主元高斯消去法的编程。
设计性
5
插值法
(拉格朗日插值法)
熟悉拉格朗日插值多项式;
学生编写、录入程序,并调试通过;
通过实验了解该方法的特点。
掌握拉格朗日插值多项式,注意其特点。
选修
6
曲线拟合
(最小二乘法)
熟悉最小二乘法的算法;
编写最小二法进行曲线拟合的程序,并调试通过;
用程序解决实际问题。
了解最小二乘法的基本原理;
熟悉最小二乘算法;
掌握最小二乘进行曲线拟合的编程;
通过程序解决实际问题。
7
数值积分
(龙贝格算法)
熟悉龙贝格求积的算法;
自编或录入龙贝格求积程序,并调试通过,体会该程序的巧妙处;
掌握龙贝格求积的算法;
掌握该算法的编程,了解该程序的巧妙设计处。
8
常微分方程的数值解法
(改进欧拉方法)
熟悉改进欧拉方法;
自编或录入改进欧拉程序,并调试通过;
有能力的还可完成龙格-库塔程序。
掌握改进欧拉算法;
掌握改进欧拉算法的编程。
实验报告的要求:
(实验项目,例:
)实验一舍入误差与数值稳定性
班级:
学号:
姓名:
一、目的和要求
二、实习内容
三、算法
四、实验步骤
五、实验结果
六、分析和讨论
七、心得(*可选)
①调试过程中遇到的问题和解决对策;
②经验体会等。
实验一舍入误差与数值稳定性
目的与要求:
1)通过上机编程,复习巩固以前所学程序设计语言及上机操作指令和方法;
2)通过上机运算,了解舍入误差所引起的数值不稳定性和大数吃小数的情况。
实验内容:
1)数值稳定与不稳定的计算公式
2)实验习题一的第1小题。
(大数吃小数的问题)
思考:
1)什么是数值稳定与不稳定的计算公式?
2)习题一的第1小题:
怎样是正确的?
其他(略)
(见课本P185-187)
实验二方程求根1——二分法
1)通过对二分法的编程练习,掌握方程求根的二分法的算法;
2)通过对二分法的上机运算,进一步体会二分法的特点。
算法:
1)准备:
计算f(x)在有根区间[a,b]端点处的值f(a),f(b)。
2)二分:
计算f(x)在区间中点c=
处的函数值f(c)。
3)判断
•若f(c)与f(a)异号,则根位于区间[a,c]内,以c代替b;
•若f(c)与f(a)同号,则根位于区间[c,b]内,以c代替a;
反复执行步2和步3,直到区间[a,b]长度缩小到允许误差范围之内或f(c)=0,此时区间中点c即可作为所求的根。
1)二分法的编程实现。
2)进行有根区间和误差限的比较和讨论。
编程要求:
1)根的容许误差限EPS用输入语句输入。
2)根的区间a,b要求用输入语句输入。
3)输入初始值后,在调用二分法函数之前,先估算二分次数并输出。
4)二分法要写成函数形式:
如函数floatBisection(floata,floatb,floatEPS)(*)
实验步骤:
1)完成二分法的程序设计及录入;
2)完成程序的编译和链接,并进行修改;
3)用书上的例子对程序进行验证,并进行修改;
4)对比估算次数与实际二分次数;
5)输入不同的区间初值a,b,查看二分次数的变化;
6)输入不同的误差限,查看二分次数的变化;
7)完成实验报告。
(实验报告的编写见下一页)
实验报告方程求根——二分法
流程图:
1.经编译、链接及例子验证结果正确的源程序:
2.实例验证结果:
1)方程:
f(x)=x3+x2-3x-3=0
2)输入初始参数:
a=1,b=2,EPS=5e-6
3)结果输出:
3.改变a,b的值为:
a=0,b=2,EPS不变,仍为5e-6,其结果为:
4.改变EPS的值为:
EPS=5e-4,a,b不变,仍为a=1,b=2,其结果为:
1.估算次数与实际二分次数的分析和讨论
2.输入不同的区间初值a,b,二分次数的变化情况
3.输入不同的误差限EPS,二分次数的变化情况
七、心得
实验三方程求根2——牛顿迭代法
1)通过对牛顿迭代法的编程练习,掌握方程求根的牛顿迭代法的算法;
2)通过对牛顿迭代法的上机运算,进一步体会牛顿迭代法的特点。
用迭代法的结构,增设4个工作单元F0,F0’,F1,F1’,并把用作终止迭代的误差控制改为两个|x1-x0|<
EPS或|f(x1)|<
DELTA。
1.准备:
选定初始值x0,计算F0=f(x0);
F0’=f’(x0),如果F0’=0,则输出“方法失败”并结束。
2.迭代:
对k=1,2,…,N,做:
1)x1=x0-F0/F0’,
2)计算F1=f(x1);
F1’=f’(x1)
3)若F1’=0,则输出“方法失败”并结束。
3.控制:
若|x1-x0|<
EPS或|F1|<
DELTA,则输出近似解x1和迭代次数k并结束;
否则,x0=x1;
F0=F1;
F0’=F1’。
4.k>
N时输出“经N次迭代无满足要求的近似解”结束。
1)牛顿迭代法的编程实现。
2)进行初值和误差限的比较和讨论。
2)根的初始值x0要求用输入语句输入。
3)牛顿迭代法要写成函数形式:
如floatNewton(floatx0,floatEPS,intN)。
(*)
1)完成牛顿迭代法的程序设计及录入;
4)分别输入两组不同的根的误差限,观察运算次数的变化;
5)分别取不同的初时值x0,观察运算结果的变化;
6)完成实验报告。
实验报告方程求根——牛顿迭代法
x0=1,EPS=1e-6
3.改变初值x0的值为:
x0=1.5,EPS不变,仍为1e-6,其结果为:
4.改变初值x0的值为:
x0=0.1,EPS不变,仍为1e-6,其结果为:
5.改变EPS的值为:
EPS=5e-4,x0不变,仍为1,其结果为:
6.改变EPS的值为:
EPS=1e-3,x0不变,仍为1,其结果为:
1.输入不同的初值x0,迭代次数的变化情况
2.输入不同的误差限EPS,迭代次数的变化情况
实验四:
线性方程组数值解法——列主元高斯消去法
1)熟悉列主元高斯消元法解线性方程组的算法;
2)掌握列主元高斯消去法的编程。
列主元高斯消去法的编程实现。
消元:
对k=0,2,…,n-2,按下列步骤进行:
●选主元:
找出mє{k,k+1,…,n-1},使
●若|am,k|<
DELTA,则A奇异,结束程序,否则继续
●若m≠k,交换第k行与第m行对应的元素(换行):
●消元:
对i=k+1,…,n-1,计算l=lik=aik/akk;
对j=k+1,…,n-1,n,计算aij=aij-lik*akj=aij-l*akj
回代:
●若|ann|<
●xn-1=an-1,n/an-1,n-1
●对i=n-2,…,1,0,计算:
1)方程组的矩阵系数用二维数组表示,不用指针,且其值要求用输入语句输入。
(数组形式的完成,经检查后,有能力的可以改用指针方式)
2)方程组的元数n要求用输入语句输入。
3)加入中间运算结果的显示,以便于检查程序。
4)列主元解方程组方法写成函数形式。
如:
voidColPivot(floata[10][11],intn,floatx[10])
1)完成列主元高斯消去法解线性方程组的程序设计及录入、编辑;
3)用书上P52例2的例子对程序进行验证,并进行修改;
4)用完成的程序解算习题中的题目。
实验五:
插值法——拉格朗日插值多项式
1)熟悉拉格朗日插值多项式,注意其特点。
2)掌握拉格朗日插值法的编程。
拉格朗日插值法的编程实现。
1)输入数据:
n,x[i],y[i](i=0,1,2,……,n-1),xx
2)初始化:
li=1,yy=0
3)计算:
i循环(外循环):
j循环(内循环)(j=0,1,2,…,n-1):
(i=0,1,2,…,n-1)
1)插值节点个数n用输入语句输入。
2)用输入语句输入各节点的数据xi,yi(i=0,1,2,…,n)。
3)用输入语句输入待插值点的x值xx。
4)拉格朗日插值计算用函数形式:
如函数floatLagrange(floatx[],floaty[],floatxx,intn)。
(*)
1)完成拉格朗日插值多项式进行插值的程序设计及录入、编辑;
实验六:
曲线拟合——最小二乘法
1)了解最小二乘法的基本原理,熟悉最小二乘算法;
2)掌握最小二乘进行曲线拟合的编程,通过程序解决实际问题。
1)最小二乘进行多项式拟合的编程实现。
2)用完成的程序解决实际问题。
1)输入数据节点数n,拟合的多项式次数m,循环输入各节点的数据xj,yj(j=0,1,…,n-1)
2)由xj求S;
由xj,yj求T:
Sk=
(k=0,1,2,…2*m)
Tk=
(k=0,1,2,…m)
3)由S形成系数矩阵数组ci,j:
c[i][j]=S[i+j](i=0,1,2,…m,j=0,1,2,…,m);
由T形成系数矩阵增广部分ci,m+1:
c[i][m+1]=T[i](i=0,1,2,…m)
4)对线性方程组CA=T[或
],用列主元高斯消去法求解系数矩阵A=(a0,a1,…,am)T
1)直接调用高斯消去法解方程组的函数。
2)数据节点数n,拟合次数m,及数据xj,yj(j=0,1,…,n-1)要求用输入语句输入。
3)数据使用数组方式,不用指针方式。
4)实验报告中写出计算公式,所有脚标要求与程序中的循环变量对应。
5)加入中间运算结果的显示,以便于检查程序。
6)拟合部分用函数形式:
如函数voidApprox(floatx[],floaty[],intn,intm,floata[])。
1)完成最小二乘法进行曲线拟合的程序设计及录入、编辑;
3)用书上P105例2的例子对程序进行验证,并进行修改;
4)用完成的程序求解下面的实际问题。
5)完成实验报告。
问题:
作物体运动的观测实验,得出以下实验测量数据,用最小二乘拟合求物体的运动方程。
时间t(秒)
0.9
1.9
3.0
3.9
5.0
距离s(cm)
10
30
50
80
110
解题步骤:
(1)画草图
(2)确定拟合方程
(3)用完成的程序输入数据,求取拟合方程中的未知数,得出方程。
(实验报告见下一页)
实验报告曲线拟合——最小二乘法
1)输入初始参数:
n=9,m=2
X:
1345678910
Y:
1054211234
2)结果输出:
3.实际应用
1)画草图
2)确定拟合方程次数为1:
用完成的程序输入数据,求取拟合方程中的未知数,得出方程:
计算误差:
3)确定拟合方程次数为2:
结合实际问题,进行拟合次数的分析和讨论:
实验七:
数值积分——龙贝格算法
1)熟悉龙贝格求积的算法;
2)掌握该算法的编程,了解该程序的巧妙设计处。
龙贝格算法的编程实现。
用事后误差估计法控制精度
1)先自己根据公式编写,再与课本的例子对比,了解其设计的巧妙。
2)龙贝格算法用函数形式:
如函数floatRomberg(floata,floatb,floatEPS)。
1)完成龙贝格算法进行数值积分的程序设计及录入、编辑;
注:
可参考课本P214-216。
实验八:
常微分方程数值解法——改进欧拉方法
1)熟悉改进欧拉算法;
2)掌握改进欧拉算法的编程。
改进欧拉算法的编程实现。
1)自己根据公式编写,再与课本的例子对比。
2)等分小区间数n用输入语句输入。
3)初值a、b、ya,用输入语句输入。
4)改进欧拉算法用函数形式:
如函数voidModEuler(floata,floatya,floatb,intn)
1)完成改进欧拉算法求解常微分方程的程序设计及录入、编辑;
可参考课本P217-219。