《数值计算方法》实验大纲
数学与统计学学院
信息与计算科学教研室
内容提要
本书内容包括:一元非线性方程的解法、线性代数方程组的直接解法、线性方程组的迭代解法、插值法和曲线拟合等主要方法简介,给出了上机实验的目的、内容,并设计了一些实验习题,最后给出了几个综合型案例供有兴趣的学生进一步研究选用。
前言
随着计算机的广泛应用和迅猛发展,在各门自然科学和工程、技术科学的发展中,“数值计算”已经成为平行于理论分析和科学实验的第三种科学手段。现在,不管是在高科技领域还是在一些传统领域,数值计算都是一个不可或缺的环节。而《数值计算方法》介绍了一些基础性和应用较广的数值计算方法,使学生对计算数学的特点和计算机如何解题有一个初步的了解;同时,本课程又是一门实践性较强的课程,必须通过实验课使学生对于算法如何在计算机上实现有一个感性的认识,要求学生运用matlab语言结合上机实践,掌握编写数值计算程序的基本方法,通过做一些实验性练习,强化已经学到的知识,逐步完成从学到用的过程。
适用专业:信息与计算科学专业、应用数学专业四年制本科生。
实验要求:
1.用matlab语言或你熟悉的其他算法语言遍程序,使之尽量具有通用性。
2.上机前充分准备,复习有关算法,写出并反复查对程序,列出上机步骤。
3.根据老师要求选做实验习题。
4.完成计算后写出计算实验报告,内容包括:计算机型号和所用机时,算法步骤描述,变量说明,程序清单,输出计算结果,结果分析、小结、备注等。
实验一方程求根(4学时)
一、方程求根方法回顾
(一)二分法
(二)简单迭代法
(三)牛顿法
(四)弦截法
二、实验目的:要求学生掌握求方程根的迭代法及牛顿法,能用matlab语言编制程序,上机调试通过,并进行数值实验。
三、实验内容与任务:
(一)编程写Newton迭代算法
(二)上机实验题:
(三)完成计算后写出计算实验报告,内容包括:计算机型号和所用机时,算法步骤描述,变量说明,程序清单,输出计算结果,结果分析、小结、备注等。
实验二线性方程组的直接解法(4学时)
一、主要算法回顾
(一)高斯顺序消去法
(二)高斯列主元消去法
(三)三对角方程组的追赶法。
(四)系数矩阵为对称正定阵的平方根法。
二、实验目的:要求学生掌握求线性方程组求解的高斯消去法、列主元法,能用matlab 语言编制程序,上机调试通过,并进行数值实验。
三、实验内容与任务:
(一)编写列主元消去法程序,上机调试程序,并用书上的例题进行数值实验。
(二)上机习题
(三)完成计算后写出计算实验报告。
实验3线性方程组的迭代解法(3学时)
一、主要算法回顾:
(一)雅可比迭代法(简单迭代法)
(二)高斯 赛德尔迭代法
(三)超松弛迭代法
二、实验目的:要求学生掌握线性方程组迭代原理,及迭代求解算法,能用matlab语言编制雅可比迭代法和高斯—塞德尔法的程序,上机调试通过,分析用雅可比迭代法与高斯—塞德尔迭代法解下列方程组Ax = b的收敛性,通过上机计算,验证分析是否正确,并比较两法的收敛速度。
三、实验内容:
(一)写出并反复查对程序:Jacobi迭代法、Gauss-Seidel迭代法。
(二)上机调试程序,并用书上的例题进行数值实验。
(三)实验习题题:研究雅可比迭代法与高斯—塞德尔迭代法的收敛性与收敛速度(四)根据(一)和(三)写出实验报告
实验四插值与数据拟合(3学时)
一、主要内容回顾:
(一)函数插值
(二)拉格朗日多项式
(三)均差与牛顿插值多项式
(四)分段线性插值
(五)三次样条插值函数
(六)最小二乘法
用?(x)拟合数据(x k,y k) (k=1,2,…,n),使得误差的平方和
∑=-
n
k
k
k
x
y
1
2
)]
( [?
为最小,求?(x)的方法,称为最小二乘法。
二、实验目的:
1.观察拉格朗日插值的龙格现象。
2.观察插值的不稳定性。
3.复习matlab
三、实验内容与任务:
(一)上机前充分准备,复习matlab中有关插值和拟合的命令,复习有关算法,依据下列算法设计编制程序,上机调试拉格朗日插值程序,并用书中的例题做数值实验。
1.用分段线性Lagrange插值多项式求函数值的近似值。
2.非等距节点分段Newton插值
(二)龙格现象的发生、防止和插值效果的比较。
(三)研究插值法的稳定性
方案I 拉格朗日插值
方案II 分段线性插值
方案III I型三次样条插值
试比较同一方案对不同的n、不同方案对相同的n的精度情况.
选做实验一
一、实验目的:以Hilbert矩阵为例,研究处理病态问题可能遇到的困难。
二、实验内容:
Hilbert矩阵的定义是
???
?
????
???
?????-++++==)n ()n ()n (n )n ()n (n
)
h (H ij n 121211112151413111413121131211
它是一个对称正定阵,而且cond(H n )随着n 的增加迅速增加。
1.画出n ~))H (cond ln(n 之间的曲线(可以用任何一种范数),你能猜出
n ~))H (cond ln(n 之间有何种关系吗?提出你的猜测并想法验证。
2.设D 是H n 的对角线元素开方构成的矩阵。11--=D H D H ?n n ,不难看出n
H ?依然是对称矩阵,而且对角线元素都是1,把H n 变成n
H ?的技术称为预处理。画出n ~))H (cond /)H ?(cond ln(n
n 之间的曲线(可以用任何一种范数),你能对预处理得出什么印象?
3.对于124≤≤n ,给定不同的右端项b,分别用
b H x n 11-=,b D H ?x ?n
11--=,x ?D x 12-=以及b \H x n =3 求解b x H n =,比较计算结果。
4.取不同的n 并以H n 的第一列为右端向量b,用高斯—塞德尔迭代法求解b x H n =,观察其收敛性。最后你对于有关Hilbert 矩阵的计算得出哪些结论?
选做实验二 样条插值的应用 实验目的:会用样条插值解决实际问题 实验习题:
1. 用三次样条插值函数去逼近飞机头部的外型曲线,其型值点数据由表1给
出。
表1 设
给定下述两种边界条件,试分别计算插值函数在点 的值,并绘出飞
机头部外型曲线。
(1)自然边界条件; (2)10=')(y 01841=')(y
x 0
70 130 210 337 578 776 1012 1142 1462 1841 y
57
78
103
135 182 214
244
256
272 275
2. 从人口普查统计,已知某国新生儿母亲的年龄累计分布为 ,其中
为母亲年龄, 为新生儿的母亲年龄低于或等于 新生儿数目。表2给出了间距为5的
数据。
表2
t 15 20
25
30
35
40
45
50
N
7442 26703 41635 49785 50209 50226 50230
取边界条件为05015='=')(N )(N ,利用三次样条插值求出15至50岁之间,每一年龄(即50171615,,,,x =)所对应的新生儿累计数目N ,并绘出插值函数的图形。 3. 表3是我国1949至1984年间每隔5年的人口数,采用自然样条插值,计算出1949至1984年间每一年的人口数,并由此预测我国1990年,1995年和2000年的人口数。
表3
x i (年份) 1949
1954
1959
1964
1969
1974
1979 1984
yi (人口
数:亿) 5.4167 6.0266 6.7209 7.0499 8.0671 9.0859 9.7542 10.3475
选做实验三
一、实验目的:会用所学知识解决实际问题
二、实验习题:
1.湖水中氯和磷的浓度之间有一定的关系,下面是一组不同湖水中的测量值。
1)试建立用磷浓度预报氯浓度的经验公式。
2)当磷的浓度为15 mg/m3时,氯的浓度是多少?
2.2000年悉尼奥运会上第一次列入女子举重项目。各级别冠军的成绩如下:
试利用这些数据组建立模型,描述运动员举重的总成绩对运动员体重的依赖关系.根据模型分析哪些级别上运动员举重的总成绩还有较大的提高潜力.
实验内容和学时安排(17)
本课程开设4个实验,共计17学时。
附录一:《数值计算方法》实验报告
附录二部分程序
一、方程求根——二分法
function y=erfen(x0,x1,a1,a2)
f0=f(x0);
f1=f(x1);
if f0*f1>0
disp("初值错")
end
if abs(f0)>a2&abs(f1)>a1
if abs(x0-x1)<=a1*abs(x1)
x0
x1
disp("|x0-x1|是小的")
end
x2=0.5*(x0+x1);
f2=f(x2);
if f2*f1<0
x1=x2
f1=f2
else
x0=x2
f0=f2
end
if abs(f0)<=a2
x0
disp("f(x)是小的")
else
x1
disp("f(x)是小的")
end
方程求根——牛顿法
function y=niudun(x0,a1,a2,n)
f0=f(x0);
ff0=ff(x0);
for i=0:n
if(ff0==0)|(i>n)
disp('wrong')
break
end
x1=x0-f0/ff0
f1=f(x1);
ff1=ff(x1);
if(abs(x1-x0)>a1*abs(x1))&(abs(f1)>a2)
x0=x1;
f0=f1;
ff0=ff1;
else
break
end
end
x1
i
二、求解线性方程组的列主元消去法
function f=liezhy(n,a,b)
for i=1:n
sub(i)=i;
end
indx=1;
for k=1:n-1
max=0; %找出约化主元所在行
for i=k:n
abs=abs(a(sub(i),k));
if max indx=i; max=abs; end if max==0; disp('A奇异'); end end s=sub(k); %交换方程序号 sub(k)=sub(indx); sub(indx)=s; pivot=a(sub(k),k); %新约化主元 for i=k+1:n %消元过程 a(sub(i),k)=-a(sub(i),k)/pivot; for j=k+1:n a(sub(i),j)=a(sub(i),j)+a(sub(i),k)*a(sub(k),j); end b(sub(i))=b(sub(i))+a(sub(i),k)*b(sub(k)); end end a,b,sub x(n)=b(sub(n))/a(sub(n),n); %回代过程 for k=n-1:-1:1 x(k)=b(sub(k)); for i=k+1:n x(k)=x(k)-a(sub(k),i)*x(i); end x(k)=x(k)/a(sub(k),k); end x 解线性方程组的平方根法 function y=pingfg(a,b,n) for i=1:n l(1,1)=sqrt(a(1,1)); for j=1:i-1 l(i,j)=a(i,j); for k=1:j-1 l(i,j)=l(i,j)-l(i,k)*l(j,k); end l(i,j)=-l(i,j)/l(j,j); end l(i,i)=a(i,i); for k=1:i-1 l(i,i)=l(i,i)-l(i,k)*l(i,k); end l(i,i)=sqrt(l(i,i)); end l u=l' ly=b; y=l\b; ux=y; x=u\y; x 雅可比迭代法 function y=jacobiju(a,b,n,x0,s); d=diag(diag(a)); l=-tril(a,-1); u=-triu(a,1); p=d\(l+u); f=d\b; if det(d)==0 disp('不符合要求') else for i=1:n x1=p*x0+f; if norm(x1-x0) break end x0=x1; end if i>n disp('迭代n次后不收敛') else x1 i end end 或 function y=jacobi(a,b,n,x0,s) if det(a)==0 disp('不符合要求') else m=max(size(x0)); k=0; while k for i=1:m x1(i)=b(i); for j=1:m if j~=i x1(i)=x1(i)-a(i,j)*x0(j); end end x1(i)=x1(i)/a(i,i); end max=0; for r=1:m p(r)=abs((x1(r)-x0(r))/(x0(r)+1)); if p(r)>max max=p(r); end end if max break end x0=x1; k=k+1; end end if k>=n disp('迭代n次后不收敛') else x1 k end 参考文献 [1] 陈公宁等,计算方法导引,北京师范大学出版社,2000 [2] 蔡大用,数值分析与实验学习指导,清华大学出版社,施普林格出版社,2001 [3] 李庆扬,数值分析基础教程,高等教育出版社,2001 [4] 王沫然,MATLAB6.0与科学计算,2001