数值分析上机实验指导书.pdf
《数值分析上机实验指导书.pdf》由会员分享,可在线阅读,更多相关《数值分析上机实验指导书.pdf(37页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、“数值计算方法”上机实验指导书实验一实验一 误差分析误差分析实验实验 1.11.1(病态问题)实验目的实验目的:算法有“优”与“劣”之分,问题也有“好”与“坏”之别。对数值方法的研究而言,所谓坏问题就是问题本身对扰动敏感者,反之属于好问题。通过本实验可获得一个初步体会。数值分析的大部分研究课题中,如线性代数方程组、矩阵特征值问题、非线性方程及方程组等都存在病态的问题。 病态问题要通过研究和构造特殊的算法来解决,当然一般要付出一些代价(如耗用更多的机器时间、占用更多的存储空间等) 。问题提出问题提出:考虑一个高次的代数多项式p(x) (x1)(x2)(x20) (xk)k120(1.1)显然该多
2、项式的全部根为 1,2,20 共计 20 个,且每个根都是单重的。现考虑该多项式的一个扰动p(x)x19 0(1.2)其中是一个非常小的数。这相当于是对(1.1)中x19的系数作一个小的扰动。我们希望比较(1.1)和(1.2)根的差别,从而分析方程(1.1)的解对扰动的敏感性。实验内容实验内容: 为了实现方便, 我们先介绍两个 MATLAB函数:“roots”和 “poly” 。u roots(a)其中若变量 a 存储 n+1 维的向量,则该函数的输出 u 为一个 n 维的向量。设 a 的元素依次为a1,a2,an1,则输出 u 的各分量是多项式方程a1xn a2xn1 anx an1 0的全
3、部根;而函数b p o ly ( v的输出 b 是一个 n+1 维向量,它是以 n 维向量 v 的各分量为根的多项式的系数。可见“roots”和“poly”是两个互逆的运算函数。ess 0.000000001;ve zeros(1,21);ve(2) ess;roots(poly(1:20)ve)1上述简单的 MATLAB程序便得到 (1.2) 的全部根, 程序中的 “ess” 即是 (1.2)中的。实验要求实验要求:(1)选择充分小的 ess,反复进行上述实验,记录结果的变化并分析它们。如果扰动项的系数很小,我们自然感觉(1.1)和(1.2)的解应当相差很小。计算中你有什么出乎意料的发现?表
4、明有些解关于如此的扰动敏感性如何?(2)将方程(1.2)中的扰动项改成x18或其它形式,实验中又有怎样的现象出现?(3)(选作部分)请从理论上分析产生这一问题的根源。注意我们可以将方程(1.2)写成展开的形式,p(x,) x20 x19 0(1.3)同时将方程的解 x 看成是系数的函数,考察方程的某个解关于的扰动是否敏感,与研究它关于的导数的大小有何关系?为什么?你发现了什么现象,哪些根关于的变化更敏感?思考题一思考题一: (上述实验的改进)在上述实验中我们会发现用 roots 函数求解多项式方程的精度不高,为此你可以考虑用符号函数 solve 来提高解的精确度,这需要用到将多项式转换为符号多
5、项式的函数 poly2sym,函数的具体使用方法可参考 MATLAB的帮助。思考题二思考题二: (二进制产生的误差)用 MATLAB计算0.1100。结果居然有误差!因为从十进制数角度分析,i11000这一计算应该是准确的。实验反映了计算机内部的二进制本质。思考题三思考题三: (一个简单公式中产生巨大舍入误差的例子)可以用下列式子计算自然对数的底数1e e1 lim(1)nnn这个极限表明随着 n 的增加,计算 e 值的精度是不确定的。现编程计算1f (n) (1)n与 exp(1)值的差。n 大到什么程度的时候误差最大?你能解释其中n的原因吗?相关 MATLAB函数提示:poly(a)求给定
6、的根向量 a 生成其对应的多项式系数(降序)向量roots(p)求解以向量 p 为系数的多项式(降序)的所有根poly2sym(p)将多项式向量 p 表示成为符号多项式(降序)sym(arg)将数字、字符串或表达式 arg 转换为符号对象2syms arg1 arg2 argk将字符 arg1,arg2,argk定义为基本符号对象solve(eq1)求符号多项式方程 eq1 的符号解3实验二实验二插值法插值法实验实验 2.12.1(多项式插值的振荡现象)问题提出问题提出:考虑一个固定的区间上用插值逼近一个函数。显然拉格朗日插值中使用的节点越多,插值多项式的次数就越高。 我们自然关心插值多项式的
7、次数增加时,Ln(x)是否也更加靠近被逼近的函数。龙格( Runge)给出一个例子是极著名并富有启发性的。设区间-1,1上函数1f (x) 2125x实验内容实验内容:考虑区间-1,1的一个等距划分,分点为2ixi 1,i 0,1,2,nn则拉格朗日插值多项式为Ln(x) 1l (x)2i125xi0jn其中的li(x),i 0,1,2,n是 n 次拉格朗日插值基函数。实验要求实验要求:(1) 选择不断增大的分点数目 n=2,3.,画出原函数 f(x)及插值多项式函数Ln(x)在-1,1上的图像,比较并分析实验结果。(2)选择其他的函数,例如定义在区间-5,5上的函数xh(x) ,g(x) a
8、rctanx1 x4重复上述的实验看其结果如何。(3)区间a,b上切比雪夫点的定义为xkbabac22(2k 1)os2(n1),k 1,2,n1以x1,x2,xn1为插值节点构造上述各函数的拉格朗日插值多项式,比较其结果。实验实验 2.22.2(样条插值的收敛性)问题提出问题提出:多项式插值是不收敛的,即插值的节点多,效果不一定就好。对样条函数插值又如何呢?理论上证明样条插值的收敛性是比较困难的, 但通过本实验可以验证这一理论结果。实验内容实验内容:请按一定的规则分别选择等距或者非等距的插值节点,并不断增加插值节点的个数。考虑实验2.1 中的函数或选择其他你有兴趣的函数,可以用MATLAB的
9、函数“spline”作此函数的三次样条插值。实验要求实验要求:(1)随节点个数增加,比较被逼近函数和样条插值函数误差的变化情况。分4析所得结果并与拉格朗日多项式插值比较。(2) 样条插值的思想是早产生于工业部门。 作为工业应用的例子考虑如下问题:某汽车制造商用三次样条插值设计车门的曲线,其中一段的数据如下:xk012345678910yk0.00.791.532.192.713.033.272.893.063.193.29yk0.80.2思考题一: (二维插值)在一丘陵地带测量高程, x 和 y 方向每隔 100 米测一个点, 得高程数据如下。试用 MATLAB 的二维插值函数“interp2
10、”进行插值,并由此找出最高点和该点的高程。yx100200300400100636697624478200698712630478300680674598412400662626552334相关 MATLAB函数提示:plot(x,y)作出以数据(x(i),y(i)为节点的折线图, 其中 x,y 为同长度的向量subplot(m,n,k)将图形窗口分为 m*n 个子图,并指向第 k 幅图yi=interp1(x,y,xi)根据数据(x,y)给出在 xi 的分段线性插值结果 yipp=spline(x,y)返回样条插值的分段多项式(pp)形式结构pp=csape(x,y,边界类型,边界值)生成各
11、种边界条件的三次样条插值yi=ppval(pp,xi)pp 样条在 xi 的函数值ZI=interp2(x,y,z,xi,yi)x,xi 为行向量,y,yi 为列向量,z 为矩阵的双线性二维插值ZI=interp2(,spline)使用二元三次样条插值ZI=griddata(x,y,z,xi,yi)x,y,z 均为向量(不必单调)表示数据,xi,yi 为网格向量的三角形线性插值(不规则数据的二维插值)5实验三实验三 函数逼近与曲线拟合函数逼近与曲线拟合实验实验 3.13.1(曲线逼近方法的比较)问题提出问题提出:曲线的拟合和插值,是逼近函数的基本方法,每种方法具有各自的特点和特定的适用范围,实
12、际工作中合理选择方法是重要的。实验内容实验内容:考虑实验 2.1 中的著名问题。下面的 MATLAB程序给出了该函数的二次和三次拟合多项式。x=-1:0.2:1;y=1/(1+25*x.*x);xx=-1:0.02:1;p2=polyfit(x,y,2);yy=polyval(p2,xx);plot(x,y,o,xx,yy)xlabel(x)ylabel(y)hold on;p3=polyfit(x,y,3);yy=polyval(p3,xx);plot(x,y,o,xx,yy)hold off;适当修改上述 MATLAB程序,也可以拟合其他你有兴趣的函数。实验要求实验要求:(1)将拟合的结果
13、与拉格朗日插值及样条插值的结果比较。(2) 归纳总结数值实验结果, 试定性地说明函数逼近各种方法的适用范围,及实际应用中选择方法应注意的问题。思考题一思考题一: (病态)考虑将0,130 等分节点,用多项式y 1 x x5生成数据,再用 polyfit 求其 3 次、5 次、10 次、15 次拟合多项式,并分析误差产生的原因。相关 MATLAB函数提示:p=polyfit(x,y,k)用 k 次多项式拟合向量数据(x,y),返回多项式的降幂系数,当k=n-1 时,实现多项式插值,这里 n 是向量维数6实验四实验四数值积分与数值微分数值积分与数值微分实验实验 4.14.1 (高斯数值积分方法用于
14、积分方程求解)问题提出问题提出:线性的积分方程的数值求解,可以被转化为线性代数方程组的求解问题。 而线性代数方程组所含未知数的个数,与用来离散积分的数值方法的节点个数相同。在节点数相同的前提下,高斯数值积分方法有较高的代数精度,用它通常会得到较好的结果。实验内容实验内容:求解第二类 Fredholm 积分方程y(t) k(t,s)y(s)ds f (t),a t bab首先将积分区间a,b等分成 n 份,在每个子区间上离散方程中的积分就得到线性代数方程组。实验要求实验要求:分别使用如下方法,离散积分方程中的积分1.复化梯形方法; 2.复化辛甫森方法; 3.复化高斯方法。 求解如下的积分方程。2
15、1ttt1)y(t) ,方程的准确解为;ee y(s)dse0e1112)y(t) esty(s)ds1e2tet,方程的准确解为et;02比较各算法的计算量和误差以分析它们的优劣。实验实验 4.24.2(高维积分数值计算的蒙特卡罗方法)问题提出问题提出:高维空间中的积分,如果维数不很高且积分区域是规则的或者能等价地写成多重积分的形式, 可以用一元函数积分的数值方法来计算高维空间的积分。 蒙特卡罗方法对计算复杂区域甚至不连通的区域上的积分并没有特殊的困难。实验内容实验内容:对于一般的区域,计算其测度(只要理解为平面上的面积或空间中的体积)的一般方法是:先找一个规则的区域 A 包含,且 A 的测
16、度是已知的。生成区域A 中 m 个均匀分布的随机点pi,i 1,2,m,如果其中有n 个落在区域中,则区域的测度 m()为 n/m。函数 f(x)在区域上的积分可以近似为:区域的测度与函数 f(x)在中 n 个随机点上平均值的乘积,即f (x)dx m()1f (pk)npk实验要求实验要求:假设冰琪淋的下部为一锥体而上面为一半球,考虑冰琪淋体积问题:计算锥面z2 x2 y2上方和球面x2 y2(z 1)21内部区域的体积。如果使用球面坐标,该区域可以表示为如下的积分:/42cos02 002sinddd用蒙特卡罗方法可以计算该积分。另一方面,显然这样的冰琪淋可以装在如下立方体的盒子里1 x
17、1,1 y 1,0 z 27而该立方体的体积为 8。只要生成这个盒子里均匀分布的随机点,落入冰琪淋锥点的个数与总点数之比再乘以 8 就是冰琪淋锥的体积。 比较两种方法所得到的结果。类似的办法可以计算复杂区域的测度(面积或体积) 。试求由下列关系所界定区域的测度:0 x 1,1 y 2,1 z 3(1)ex ysin(z)y 01 x 3,1 y 4(2)x3 y3 29y ex20 x 1,0 y 1,0 z 1(3)x2sin y zx z ex1相关 MATLAB函数提示:diff(x)如果 x 是向量,返回向量 x 的差分;如果 x 是矩阵,则按各列作差分diff(x,k)k 阶差分q=
18、polyder(p)求得由向量 p 表示的多项式导函数的向量表示 qFx=gradient(F,x)返回向量 F 表示的一元函数沿 x 方向的导函数 F(x),其中 x是与 F 同维数的向量z=trapz(x,y)x 表示积分区间的离散化向量;y 是与 x 同维数的向量,表示被积函数;z 返回积分的近似值z=guad(fun,a,b,tol)自适应步长 Simpson 积分法求得 Fun 在区间a,b上的定积分,Fun 为 M 文件函数句柄,tol 为积分精度z=dblquad(fun,a,b,c,d,tol,method)求得二元函数 Fun(x,y)的重积分z=triplequad(fun
19、,a,b,c,d,e,f,tol,method)求得三元函数 Fun(x,y,z)的重积分8实验五实验五解线性方程组的直接方法解线性方程组的直接方法实验实验 5.15.1 (主元的选取与算法的稳定性)问题提出问题提出:Gauss 消去法是我们在线性代数中已经熟悉的。但由于计算机的数值运算是在一个有限的浮点数集合上进行的, 如何才能确保 Gauss 消去法作为数值算法的稳定性呢?Gauss 消去法从理论算法到数值算法,其关键是主元的选择。主元的选择从数学理论上看起来平凡,它却是数值分析中十分典型的问题。实验内容实验内容:考虑线性方程组Ax b,ARnn,bRn编制一个能自动选取主元,又能手动选取
20、主元的求解线性方程组的Gauss消去过程。实验要求实验要求:61 7 86115(1)取矩阵A ,b ,则方程有解x* (1,1,1)T。861158614取 n=10 计算矩阵的条件数。让程序自动选取主元,结果如何?(2)现选择程序中手动选取主元的功能。每步消去过程总选取按模最小或按模尽可能小的元素作为主元,观察并记录计算结果。若每步消去过程总选取按模最大的元素作为主元,结果又如何?分析实验的结果。(3)取矩阵阶数 n=20 或者更大,重复上述实验过程,观察记录并分析不同的问题及消去过程中选择不同的主元时计算结果的差异, 说明主元素的选取在消去过程中的作用。(4)选取其他你感兴趣的问题或者随
21、机生成矩阵,计算其条件数。重复上述实验,观察记录并分析实验结果。实验实验 5.25.2(线性代数方程组的性态与条件数的估计)问题提出问题提出:理论上,线性代数方程组Ax b的摄动满足xc o n(d A)x1 A1A Ab Ab矩阵的条件数确实是对矩阵病态性的刻画,但在实际应用中直接计算它显然不现实,因为计算A1通常要比求解方程Ax b还困难。实验内容实验内容:MATLAB中提供有函数“condest”可以用来估计矩阵的条件数,它给出的是按 1-范数的条件数。首先构造非奇异矩阵 A 和右端,使得方程是可以精确求解的。 再人为地引进系数矩阵和右端的摄动A和b, 使得A 和 b充9分小。实验要求:
22、 bb,以 1-范数,(1)假设方程 Ax=b 的解为 x,求解方程(AA)x给出xx xxx的计算结果。(2) 选择一系列维数递增的矩阵 (可以是随机生成的) , 比较函数 “condest”所需机器时间的差别 .考虑若干逆是已知的矩阵,借助函数“eig”很容易给出cond2(A)的数值。将它与函数“cond(A,2)”所得到的结果进行比较。(3) 利用 “condest” 给出矩阵 A 条件数的估计, 针对 (1) 中的结果给出xx的理论估计,并将它与(1)给出的计算结果进行比较,分析所得结果。注意,如果给出了 cond(A)和A的估计,马上就可以给出A1的估计。(4)估计著名的 Hilb
23、ert 矩阵的条件数。H (hi, j)nn,hi, j1,i j 1i, j 1,2,n思考题一: (Vadermonde矩阵)设11A11x0 x1x2xn2x0 x122x22xnnix00nix0nxin1x1i0nx2,b ni,x2i0nxnnixni0其中,xk10.1k,k 0,1,n,(1)对 n=2,5,8,计算 A 的条件数;随 n 增大,矩阵性态如何变化?(2)对 n=5,解方程组 Ax=b;设 A 的最后一个元素有扰动 10-4,再求解 Ax=b(3)计算(2)扰动相对误差与解的相对偏差,分析它们与条件数的关系。(4)你能由此解释为什么不用插值函数存在定理直接求插值函
24、数而要用拉格朗日或牛顿插值法的原因吗?10相关 MATLAB函数提示:zeros(m,n)生成 m 行,n 列的零矩阵ones(m,n)生成 m 行,n 列的元素全为 1 的矩阵eye(n)生成 n 阶单位矩阵rand(m,n)生成 m 行,n 列(0,1)上均匀分布的随机矩阵diag(x)返回由向量 x 的元素构成的对角矩阵tril(A)提取矩阵 A 的下三角部分生成下三角矩阵triu(A)提取矩阵 A 的上三角部分生成上三角矩阵rank(A)返回矩阵 A 的秩det(A)返回方阵 A 的行列式inv(A)返回可逆方阵 A 的逆矩阵V,D=eig(A)返回方阵 A 的特征值和特征向量norm
25、(A,p)矩阵或向量的 p 范数cond(A,p)矩阵的条件数L,U,P=lu(A)选列主元 LU 分解R=chol(X)平方根分解Hi=hilb(n)生成 n 阶 Hilbert 矩阵11实验六实验六 解线性方程组的迭代法解线性方程组的迭代法实验实验 6.16.1(病态的线性方程组的求解)问题提出问题提出:理论的分析表明,求解病态的线性方程组是困难的。实际情况是否如此,会出现怎样的现象呢?实验内容实验内容:考虑方程组 Hx=b 的求解,其中系数矩阵 H 为 Hilbert 矩阵,H (hi, j)nn,hi, j1,i j 1i, j 1,2,n这是一个著名的病态问题。通过首先给定解(例如取
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数值 分析 上机 实验 指导书
限制150内