实验一误差传与算法稳定性
- 格式:doc
- 大小:156.50 KB
- 文档页数:3
数值分析课程实验指导书应用科学学院数学系目录前言 (1)第一部分数值实验报告格式 (1)第二部分数值实验报告范例 (2)第三部分数值实验 (6)数值实验一 (6)数值实验二 (8)数值实验三 (10)数值实验四 (12)数值实验五 (13)数值实验六 (16)数值实验七 (17)第四部分MATLAB入门 (19)前言该实验指导书是《数值分析》课程的配套数值实验教材。
《数值分析》是理工科大学本科生与硕士研究生的必修课程,学习本课程的最终目的,是用计算机解决科学和工程实际中的数值计算问题,因此熟练地在计算机上实现算法是必备的基本技能。
数值实验是数值分析课程中不可缺少的部分,利用计算机进行数值实验,以消化巩固所学的内容,增加对算法的可靠性、收敛性、稳定性及效率的感性认识,体会和重视算法在计算机上实验时可能出现的问题。
学生通过选择算法、编写程序、分析数值结果、写数值实验报告等环节的综合训练,逐步掌握数值实验的方法和技巧,获得各方面的数值计算经验,培养学生运用所学算法解决实际问题和进行理论分析的能力。
该实验指导书由王希云、刘素梅、王欣洁、李晓峰等老师编写。
第一部分数值实验报告格式一个完整的实验,应包括数据准备、理论基础、实验内容及方法,最终对实验结果进行分析,以达到对理论知识的感性认识,进一步加深对相关算法的理解,数值实验以实验报告形式完成,实验报告格式如下:一、实验名称实验者可根据报告形式需要适当写出。
二、实验目的及要求首先要求做实验者明确,为什么要做某个实验,实验目的是什么,做完该实验应达到什么结果,在实验过程中的注意事项,实验方法对结果的影响也可以以实验目的的形式列出。
三、算法描述(实验原理与基础理论)数值实验本身就是为了加深对基础理论及方法的理解而设置的,所以要求将实验涉及到的理论基础,算法原理详尽列出。
四、实验内容实验内容主要包括实验的实施方案、步骤、实验数据准备、实验的算法以及可能用到的仪器设备。
第一章 绪论一、主要要求通过实验,认真理解和体会数值计算的稳定性、精确性与步长的关系。
二、主要结果回顾:1、算法:电子计算机实质上只会做加、减、乘、除等算术运算和一些逻辑运算,由这些基本运算及运算顺序规定构成的解题步骤,称为算法.它可以用框图、算法语言、数学语言或自然语言来描述。
用计算机算法语言描述的算法称为计算机程序。
(如c —语言程序,c++语言程序,Matlab 语言程序等)。
2、最有效的算法:应该运算量少,应用范围广,需用存储单元少,逻辑结构简单,便于编写计算机程序,而且计算结果可靠。
3、算法的稳定性:一个算法如果输入数据有误差,而在计算过程中舍入误差不增长,则称此算法是数值稳定的,否则称此算法为不稳定的。
换句话说:若误差传播是可控制的,则称此算法是数值稳定的,否则称此算法为不稳定的。
4、控制误差传播的几个原则: 1)防止相近的两数相减; 2)防止大数吃小数;3)防止接近零的数做除数;4)要控制舍入误差的累积和传播;5)简化计算步骤,减小运算次数,避免误差积累。
三、数值计算实验(以下实验都需利用Matlab 软件来完成) 实验1.1(体会数值计算精度与步长关系的实验)实验目的:数值计算中误差是不可避免的,要求通过本实验初步认识数值分析中两个重要概念:截断误差和舍入误差,并认真体会误差对计算结果的影响。
问题提出:设一元函数f :R →R ,则f 在x 0的导数定义为:hx f h x f x f h )()(lim)('0000-+=→实验内容:根据不同的步长可设计两种算法,计算f 在x 0处的导数。
计算一阶导数的算法有两种:hx f h x f x f )()()('000-+≈(1)hh x f h x f x f 2)()()('000--+≈(2)请给出几个计算高阶导数的近似算法,并完成如下工作: 1、对同样的h ,比较(1)式和(2)式的计算结果;2、针对计算高阶导数的算法,比较h 取不同值时(1)式和(2)式的计算结果。
第1篇一、实验目的1. 理解数值计算的基本概念和常用算法;2. 掌握Python编程语言进行数值计算的基本操作;3. 熟悉科学计算库NumPy和SciPy的使用;4. 分析算法的数值稳定性和误差分析。
二、实验内容1. 实验环境操作系统:Windows 10编程语言:Python 3.8科学计算库:NumPy 1.19.2,SciPy 1.5.02. 实验步骤(1)Python编程基础1)变量与数据类型2)运算符与表达式3)控制流4)函数与模块(2)NumPy库1)数组的创建与操作2)数组运算3)矩阵运算(3)SciPy库1)求解线性方程组2)插值与拟合3)数值积分(4)误差分析1)舍入误差2)截断误差3)数值稳定性三、实验结果与分析1. 实验一:Python编程基础(1)变量与数据类型通过实验,掌握了Python中变量与数据类型的定义方法,包括整数、浮点数、字符串、列表、元组、字典和集合等。
(2)运算符与表达式实验验证了Python中的算术运算、关系运算、逻辑运算等运算符,并学习了如何使用表达式进行计算。
(3)控制流实验学习了if-else、for、while等控制流语句,掌握了条件判断、循环控制等编程技巧。
(4)函数与模块实验介绍了Python中函数的定义、调用、参数传递和返回值,并学习了如何使用模块进行代码复用。
2. 实验二:NumPy库(1)数组的创建与操作通过实验,掌握了NumPy数组的基本操作,包括创建数组、索引、切片、排序等。
(2)数组运算实验验证了NumPy数组在数学运算方面的优势,包括加、减、乘、除、幂运算等。
(3)矩阵运算实验学习了NumPy中矩阵的创建、操作和运算,包括矩阵乘法、求逆、行列式等。
3. 实验三:SciPy库(1)求解线性方程组实验使用了SciPy库中的线性代数模块,通过高斯消元法、LU分解等方法求解线性方程组。
(2)插值与拟合实验使用了SciPy库中的插值和拟合模块,实现了对数据的插值和拟合,并分析了拟合效果。
一、实验背景数值分析是研究数值计算方法及其理论的学科,是计算机科学、数学、物理学等领域的重要基础。
为了提高自身对数值分析理论和方法的理解,我们进行了数值分析实验,通过实验加深对理论知识的掌握,提高实际操作能力。
二、实验目的1. 理解数值分析的基本理论和方法;2. 掌握数值分析实验的基本步骤和技巧;3. 培养实验设计和数据分析能力;4. 提高编程和计算能力。
三、实验内容本次实验主要分为以下几个部分:1. 线性方程组求解实验:通过高斯消元法、LU分解法等求解线性方程组,并分析算法的稳定性和误差;2. 矩阵特征值问题计算实验:利用幂法、逆幂法等计算矩阵的特征值和特征向量,分析算法的收敛性和精度;3. 非线性方程求根实验:运用二分法、牛顿法、不动点迭代法等求解非线性方程的根,比较不同算法的优缺点;4. 函数插值实验:运用拉格朗日插值、牛顿插值等方法对给定的函数进行插值,分析插值误差;5. 常微分方程初值问题数值解法实验:运用欧拉法、改进的欧拉法、龙格-库塔法等求解常微分方程初值问题,比较不同算法的稳定性和精度。
四、实验过程1. 线性方程组求解实验:首先,编写程序实现高斯消元法、LU分解法等算法;然后,对给定的线性方程组进行求解,记录计算结果;最后,分析算法的稳定性和误差。
2. 矩阵特征值问题计算实验:编写程序实现幂法、逆幂法等算法;然后,对给定的矩阵进行特征值和特征向量的计算,记录计算结果;最后,分析算法的收敛性和精度。
3. 非线性方程求根实验:编写程序实现二分法、牛顿法、不动点迭代法等算法;然后,对给定的非线性方程进行求根,记录计算结果;最后,比较不同算法的优缺点。
4. 函数插值实验:编写程序实现拉格朗日插值、牛顿插值等方法;然后,对给定的函数进行插值,记录计算结果;最后,分析插值误差。
5. 常微分方程初值问题数值解法实验:编写程序实现欧拉法、改进的欧拉法、龙格-库塔法等算法;然后,对给定的常微分方程初值问题进行求解,记录计算结果;最后,比较不同算法的稳定性和精度。
实验一:误差传播与算法稳定性实验目的:体会稳定性在选择算法中的地位。
实验内容:考虑一个简单的由积分定义的序列10I ,0,1,10nn x dx n a x==+⎰其中a 为参数,分别对0.05a =及15a =按下列两种方法计算。
方案1:用递推公式11,1,2,,10n n I aI n n-=-+= 递推初值可由积分直接得01lna I a+= 方案2:用递推公式111(),,1,,1n n I I n N N a n-=-+=-根据估计式当1n a n ≥+时,11(1)(1)(1)n I a n a n <<+++或当01n a n ≤<+时,11(1)(1)n I a n n<≤++ 取递推初值 当1n a n ≥+时, 11121()2(1)(1)(1)2(1)(1)N N a I I a N a N a a N +≈+=+++++ 当01n a n ≤<+时,111()2(1)(1)N N I I a N N≈+++ 实验要求:列出结果,并对其稳定性进行分析比较,说明原因。
实验二:非线性方程数值解法实验目的:探讨不同方法的计算效果和各自特点 实验内容:应用算法(1)牛顿法;(2)割线法 实验要求:(1)用上述各种方法,分别计算下面的两个例子。
在达到精度相同的前提下,比较其迭代次数。
(I )31080x x +-=,取00x =;(II) 2281(0.1)sin 1.060x x x -+++=,取00x =;(2) 取其它的初值0x ,结果如何?反复选取不同的初值,比较其结果; (3) 总结归纳你的实验结果,试说明各种方法的特点。
实验三:选主元高斯消去法----主元的选取与算法的稳定性问题提出:Gauss 消去法是我们在线性代数中已经熟悉的。
但由于计算机的数值运算是在一个有限的浮点数集合上进行的,如何才能确保Gauss 消去法作为数值算法的稳定性呢?Gauss 消去法从理论算法到数值算法,其关键是主元的选择。
误差原理第三章误差的传递与合成误差的传递是指在实验过程中,由于不同的测量步骤和计算过程引入误差,这些误差会通过物理关系或者数学计算传递到最终结果中。
在实验中,每一个测量仪器都有其特定的精确度和不确定度。
当我们进行复杂的测量或计算时,这些误差会相互作用并积累,从而影响到最终结果的精确度。
为了定量描述误差的传递,我们需要引入误差传递公式。
对于其中一个物理量x,假设它是由一系列测量结果a、b、c等通过其中一种物理关系或者数学计算得到的,则误差传递公式可以写为:Δx=√((∂x/∂a)²Δa²+(∂x/∂b)²Δb²+(∂x/∂c)²Δc²+...)其中Δx表示x的不确定度,∂x/∂a、∂x/∂b等表示物理关系或者计算公式对于变量a、b的导数,Δa、Δb等表示变量a、b的不确定度。
这个公式表明了误差是通过导数的平方和来传递的。
最大值法是指将每个测量结果的不确定度取最大值,作为最终结果的不确定度。
这种方法适用于误差独立且不相关的情况。
例如,在实验中测量一些物理量时,我们使用了不同型号的仪器进行多次测量,那么每个测量结果的不确定度可以认为是不相关的,这时可以采用最大值法。
平方和法是指将每个测量结果的不确定度的平方相加并开方,作为最终结果的不确定度。
这种方法适用于误差相互关联的情况。
例如,在实验中测量一些物理量时,多个测量结果的不确定度具有一定的相关性,这时可以采用平方和法。
实际应用中,误差的传递和合成在实验设计和数据处理中起着关键的作用。
在实验设计中,我们可以通过分析物理关系和计算过程,确定哪些因素会对实验结果产生较大的影响,从而优化实验方案以降低不确定度。
在数据处理中,我们可以根据误差的传递公式和合成方法,对实验结果进行误差分析,得到对最终结果的不确定度的估计,以提高实验结果的可靠性和可信度。
总之,误差的传递和合成是误差原理的核心内容,它描述了实验结果的不确定性和误差如何从测量仪器传递到最终的物理量中。
实验一:误差传播与算法稳定性一:实验内容考虑一个简单由积分概念的序列: 显然0,1,2,.n I n >=当n=1时,11101/x I xe dx e -==⎰。
而对于2n ≥时,利用分步积分易患:1111111101,2,3,n x n x n x n n I x e dx x e nx e dx nI n -----==-=-=⎰⎰另一方面,咱们有11101/(1)n x n n I x e dx x dx n -=≤=+⎰⎰。
由以上递推关系,咱们可以取得计算序列{}n I 的两种方式。
(Ⅰ) 11/I e =,111/,n 1,2,3,..n n I I -=-=⋯ (Ⅱ) 0N E =, 11,,1,2,,3,2nn E E n N N N n--==--二:实验要求及实验结果(1) 别离用算法(Ⅰ)、(Ⅱ)计算,而且在计算机中别离采用5位、6位和7位有效数字,请判断哪一种算法能给出更精准的结果。
实验进程:ⅰ)编写MA TLAB 程序如下:a= input ('请输入有效位数a:'); %设定有效数字位数 syms n InIn=vpa((exp(-1)),a) %vpa 设定结果有效数字 for n=2:10; In=vpa((1-n*In),a) %循环计算End运行文件,输入有效数字a 别离为5位、6位和7位,取得运算结果如下表格所示:function In=NO1Bb= input ('请输入有效位数b:'); syms n En En=vpa(0,b) for n=10:-1:2;En=vpa(((1-En)/n),b) End由以上两种算法所取得的数据可知,对算法11/I e =,111/,n 1,2,3,..n n I I -=-=⋯从8I 开始,结果变得无规律,各个有效位数计算结果都不一样,这是因为随着计算的n 增大,误差会愈来愈大。
实验一:误差传播与算法稳定性
一:实验内容
考虑一个简单由积分定义的序列: 显然0,1,2,.n I n >=L 当n=1时,1
110
1/x I xe dx e -==⎰。
而对于2n ≥时,利用分步积分
易得:
另一方面,我们有1
1
1
1/(1)n x n n I x e dx x dx n -=
≤=+⎰
⎰。
由以上递推关系,我们可以得到计算序列{}n I 的两种方法。
(Ⅰ) 11/I e =,111/,n 1,2,3,..n n I I -=-=⋯ (Ⅱ) 0N E =, 11,,1,2,,3,2n
n E E n N N N n
--=
=--L 二:实验要求及实验结果
(1) 分别用算法(Ⅰ)、(Ⅱ)计算,并且在计算机中分别采用5位、6位和7位有效数字,
请判断哪种算法能给出更精确的结果。
实验过程:
ⅰ)编写MA TLAB 程序如下:
a= input ('请输入有效位数a:'); %设定有效数字位数 syms n In
In=vpa((exp(-1)),a) %vpa 设定结果有效数字 for n=2:10; In=vpa((1-n*In),a) %循环计算
End
运行文件,输入有效数字a 分别为5位、6位和7位,得到运算结果如下表格所示:
ⅱ)编写MA TLAB 程序如下: function In=NO1B
b= input ('请输入有效位数b:'); syms n En
En=vpa(0,b) for n=10:-1:2;
En=vpa(((1-En)/n),b) End
由以上两种算法所得到的数据可知,对算法11/I e =,111/,n 1,2,3,..n n I I -=-=⋯从8I 开始,结果变得无规律,各个有效位数计算结果都不一样,这是因为随着计算的n 增大,误差会越来越大。
而对0N E =, 11,,1,2,,3,2n
n E E n N N N n
--=
=--L ,5位、6位和7位结果相近,随着有效数字位数的增加,结果越来越精确。
(2) 两种算法的优劣,与你第一感觉是否吻合。
请从理论上证明你的实验得出的结果,
解释实验得到的结果,算法(Ⅰ)中的计算误差为1e ,由1I 递推计算N I 的误差为n e ;算法(Ⅱ)中的N I 计算误差为N ε,由N I 向前递推计算n I (n N <)的误差为n ε。
如果在上述两算法中都假定后面的计算不再引入其它误差,试给出n e 与1e 的关系和
n ε与N ε的关系。
ⅰ)**
11|||||(1)(1)|n n n n n e I I nI nI --=-=---11(1)!||n n |e |n e -===-L 。
ⅱ)因为*
1111||(1)(1)||N N N N I I N N N
εε-=
---=由此类推,对n<N 有:1
||||(1) (1)
N N n εε=
-+n N 。
(3) 算法(Ⅰ)中的1e 会很小,当n 增大时,n e 的变化趋势如何?算法(Ⅱ)中N ε通常相对
较大,当n 减小时,误差n ε又是如何传播的?也就是说比较一下上述两个算法,当某一步产生误差后,该误差对后面的影响是衰减还是扩张的。
ⅰ)算法(Ⅰ)中,**
11|||||(1)(1)|n n n n n e I I nI nI --=-=---11(1)!||n n |e |n e -===-L 。
当1e 很小时,随着n 的增大,n e 以阶乘为系数迅速增大。
所以当某一步产生误差后,该误差最后面的影响是扩张的。
ⅱ)算法(Ⅱ)中1
||||(1) (1)
N N n εε=
-+n N ,虽然开始N ε很大,但是随着n 的增大,
n ε以阶乘为除数迅速减小。
所以当某一步产生误差后,该误差最后面的影响是衰减的。
(4) 通过理论分析与计算实验,针对(Ⅰ)和(Ⅱ)的稳定性给出你的结论。
ⅰ)算法(Ⅰ)中,**
11|||||(1)(1)|n n n n n e I I nI nI --=-=---11(1)!||n n |e |n e -===-L 。
当某一步产生误差后,该误差最后面的影响是扩张的,所以该算法是不稳定的。
ⅱ)算法(Ⅱ)中1
||||(1) (1)
N N n εε=
-+n N ,虽当某一步产生误差后,该误差最后面
的影响是衰减的,所以该算法是稳定的。