数值实验[综合]
- 格式:docx
- 大小:190.37 KB
- 文档页数:9
数值实验一 数值实验综述:本章主要介绍数值分析的基本知识,其重点是对数值方法的评价与构造算法应注意的问题。本章数值实验的中心就是通过具体的数值实验来进一步熟悉MATLAB的使用和理解算法的特点。如算法的计算复杂性,截断误差分析与收敛性,误差传播与算法的稳定性等。 实验1.1 病态问题 算法有“优”与“劣”之分,问题也有“好”和“坏”之别。所谓坏问题就是问题本身的解对数据变化比较敏感,反之属于好问题。 数值分析的大部分内容,如解线性代数方程组、求解矩阵特征值问题、解非线性方程及方程组等都存在病态的问题。病态问题通常需要预处理、或通过研究和构造特殊的算法来解决,当然一般要付出一些代价(如耗用更多的机器时间、占用更多的存储空间等)、或者重新寻找出现病态的原因,改变原问题的提法。 问题提出:考虑一个高次的代数多项式
201)()20)...(2)(1()(kkxxxxxp (E1-1)
显然该多项式的全部根为l,2,…,20,共计20个,且每个根都是单重的(也称为简单的)。考虑该多项式方程的一个扰动 0)(19xxp (E1-2)
其中是一个非常小的数。这相当于是对(E1-1)中19x的系数作一个小的扰动。我们希望比较(E1-1)和(E1-2)根的差别,从而分析方程(E1-1)的解对扰动的敏感性。 实验内容:为了实现方便,我们先介绍两个 Matlab函数:“roots”和“poly”,输入函数 u=roots(a) 其中若变量a存储1n维的向量,则该函数的输出u为一个n维的向量。设a的元素依次为121,...,,naaa,则输出u的各分量是多项式方程
0...1121nnnnaxaxaxa 的全部根,而函数b=poly(v)的输出b是一个n+1维变量,它是以n维变量v的各分量为根的多项式的系数。 ve=zeros(1,21); ve(2)=0.01;(将ve中的第二个分量改为0.01) roots(poly(1:20))+ve) 上述简单的Matlab程序便得到(E1-2)的全部根,程序中的“0.01”即是(E1-2)中的。 实验要求: (1)选择充分小的,反复进行上述实验,记录结果的变化并分析它们。如果扰动项的系数很小,我们自然感觉(E1-1)和(E1-2)的解应当相差很小。计算中你有什么出乎意料的发现?表明有些解关于如此的扰动敏感性如何?
(2)将方程(E1-2)中的扰动项改成18x或其他形式,实验中又有怎样的现象出现? 实验1.2 误差传播与算法稳定性 问题提出:考虑一个简单的由积分定义的序列
...2,1,101ndxexIxnn (E1-3)
显然,...2,1,0nIn.当1n时,edxxeIx/11011。而对于2n时,利用分部积分易得 ,...3,2,1|11011101101nnIdxenxexdxexInxnxnxnn
另一方面,我们有 1111100011(1)1nnxnnxedxIxedxxdxenn
. (E1-4) 实验内容:由以上递推关系,我们可得到计算序列{nI}的两种方法。 (I):,...3,2,1,/111nnIIeInn (E1-5)
(II):2,3,...2,1,,1,01NNNnnEEEnnN (E1-6) 实验要求: (1)分别用算法(I)、(II)并在计算中分别采用5位、6位和7位有效数字,请判断哪种算法能给出更精确的结果。 (2)两种算法的优劣,与你的第一感觉是否吻合?解释实验的结果。算法(I)中的1I的计算误差为1e,由1I递推计算nI的误差为ne;算法(II)中NI的计算误差为N,由NI递推计算)(NnIn的误差为n。如果在上述两算法中都假定后面的计算不再引入其他误差, 试给出ne与1e的关系和n与N的关系。数值实验二 数值实验综述:非线性方程的数值解法是科学与工程计算的一个重要课题,在实际问题中有广泛的应用,特别在各种非线性问题的科学计算中更显出它的重要性。本章讨论非线性方程的数值解法,主要讲授了解非线性方程的二分法、迭代法、迭代加速、Newton法割线法和抛物线法等。本章数值实验的中心就是通过具体的数值实验来研究算法的可行性,如算法的收敛性,初值的选择,收敛速度以及算法的复杂性与稳定性等。 实验2.1 迭代法、初始值与收敛性 初步认识非线性问题的迭代法与线性问题迭代法的差别,探讨迭代法及初始值与迭代收敛性的关系。 问题提出:迭代法是求解非线性方程及方程组的基本思想方法,与线性方程的情况一样,其构造方法可以有多种多样,但关键是怎样才能使迭代收敛且有较快的收敛速度。 实验内容:考虑一个简单的代数方程 012xx,
针对上述方程,可以构造多种迭代法,如121nnxx,nnxx111,11nnxx等。
在实轴上取初始值0x,分别用以上迭代作实验,记录各算法的迭代过程。 实验要求: (1)取定某个初始值,按如上迭代格式进行计算,它们的收敛性如何?重复选取不同的初始值,反复实验。请读者自行设计一种比较形象的记录方式(如利用Matlab的图形功能),分析三种迭代法的收敛性与初值选取的关系。 (2)对三个迭代法中的某一个,取不同的初始值进行迭代,结果如何?试分析迭代法对不同的初值是否有差异? (3)线性方程组迭代法的收敛性是不依赖初始值选取的。比较线性与非线性问题迭代的差异,有何结论和问题。 实验2.2 算法设计与比较 非线性方程的数值求解方法很多,基本的思想是线性化。不同的方法效果如何,要靠计算的实践来分析、比较。 实验内容:考虑算法:(l)牛顿法;(2)割线法 分别编写它们的Matlab程序。 实验要求:(1)用上述各种方法,分别计算下面的两个例子。在达到精度相同的前提下,比较其迭代次数、浮点运算次数和CPU时间等。 (I)3231080,00xxx取 (II)22123081(0.1)sin1.060,0xxxx取。 (2)取其它的初值0x,结果如何?反复选取不同的初值,比较其结果。 (3)总结归纳你的实验结果,试说明各种方法的特点。 4
数值实验三 数值实验综述:线性代数方程组的解法是一切科学计算的基础与核心问题。求解方法大
致可分为直接法和迭代法两大类。直接法指在不考虑舍入误差的情况下经过有限次运算可求得方程组的精确解的方法,因此也称为精确法。当系数矩阵是方的、稠密的、无任何特殊结构的中小规模线性方程组时,Gauss消去法是目前最基本和常用的方法。迭代法是逐次逼近的方法,可用于求解大型特别是大型稀疏的方程组。迭代法的优点是可以利用系数矩阵的特殊结构,尽可能地减少计算量与存储量,但需要判断收敛性。 实验3.1 Gauss消去法与LU分解 Gauss消去法等同于矩阵的三角分解,但它存在潜在的不稳定性,故需要选主元素。对一般的正定对称矩阵,采用平方根方法可不选主元。 实验内容:请用不选主元的LU分解和列主元LU分解求解下列线性方程组 Ax=b。
实验要求: (1)比较这两种方法的结果; (2)增加方程阶数,再比较分析所得结果。 实验3.2 直接法的时间复杂性试验 不同的算法所需要的计算量有所不同,因此所花费的时间也不同。解n阶线性方程组的
直接法Gauss消去法或者LU分解法所花计算量大约为:32
3n,而利用三角分解求逆所花工
作量大约为:383n。故利用逆求解线性方程组远比Gauss消去法或LU分解更费时。如果是三对角方程组,则用追赶法所花工作量约为:87n。应当注意的是,随着计算机的运算速度越来越快,纯粹计算所花时间比重下降,存取和通讯的量变得越来越重要,故存储量和存取方式也是影响计算速度的一个重要因素。 实验内容:请分别用不同方法求解实验3.1的线性方程组 Ax=b,记录各方法所用时间,并与各方法的不同工作量进行比较。 实验要求:
(1)分别用\xAb,()*xinvAb计算,并分别记录所花费的CPU时间,进行分析比较。 (2)取300n,随机生成A的一条主对角线元素和二条次对角线元素,使A为严格对角占优的三对角阵;随机生成b;其中三条对角线元素分别用三个一维数组存储;用Matlab
语言自编M文件分别用\xAb,()*xinvAb和追赶法计算这个三对角方程组;并分别记录所花费的CPU时间;分析结果,得出你的结论。 实验3.3 线性方程组的迭代法 5
线性方程组的迭代法是一类重要方法,如Jacobi迭代法、Gauss-Seidel迭代法、SOR方法等都是一些经典方法,虽已不是最优的方法,但还有其基础作用。本实验通过具体的数值例子来研究算法的收敛性,初值的选择,收敛速度等。 实验内容3.3:线性方程组的迭代法比较 实验要求: (1)编写Jacobi迭代法、Gauss-Seidel迭代法、SOR迭代法的M文件。
(2)给定2020RA为五对角矩阵
3214
1
2132141412132141412132141412132141213
选取不同的初始向量)0(x及右端面向量b,给定迭代误差要求,利用已编写的Jacobi迭代法和GS迭代法程序求解,观察得到的序列是否收敛?若收敛,通过迭代次数分析计算结果并得出你的结论。用已编写的SOR迭代法程序,对于所选取的初始向量)0(x及右端项b进行求解,松驰系数ω取1析计算结果并得出你的结论。