算法的数值稳定性实验

合集下载

数值分析实验报告

数值分析实验报告

实验五 解线性方程组的直接方法实验5.1 (主元的选取与算法的稳定性)问题提出:Gauss 消去法是我们在线性代数中已经熟悉的。

但由于计算机的数值运算是在一个有限的浮点数集合上进行的,如何才能确保Gauss 消去法作为数值算法的稳定性呢?Gauss 消去法从理论算法到数值算法,其关键是主元的选择。

主元的选择从数学理论上看起来平凡,它却是数值分析中十分典型的问题。

实验内容:考虑线性方程组n n n R b R A b Ax ∈∈=⨯,,编制一个能自动选取主元,又能手动选取主元的求解线性方程组的Gauss消去过程。

实验要求:(1)取矩阵⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎣⎡=⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎣⎡=1415157,6816816816M O O O b A ,则方程有解T x )1,,1,1(*Λ=。

取n=10计算矩阵的条件数。

让程序自动选取主元,结果如何?(2)现选择程序中手动选取主元的功能。

每步消去过程总选取按模最小或按模尽可能小的元素作为主元,观察并记录计算结果。

若每步消去过程总选取按模最大的元素作为主元,结果又如何?分析实验的结果。

(3)取矩阵阶数n=20或者更大,重复上述实验过程,观察记录并分析不同的问题及消去过程中选择不同的主元时计算结果的差异,说明主元素的选取在消去过程中的作用。

(4)选取其他你感兴趣的问题或者随机生成矩阵,计算其条件数。

重复上述实验,观察记录并分析实验结果。

思考题一:(Vadermonde 矩阵)设⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎣⎡=⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎣⎡=∑∑∑∑====n i i n n i i n i i n i i n n n n n n n x x x x b x x x x x x x x x x x x A 002010022222121102001111M ΛM ΛM M M ΛΛΛ,, 其中,n k k x k ,,1,0,1.01Λ=+=,(1)对n=2,5,8,计算A 的条件数;随n 增大,矩阵性态如何变化?(2)对n=5,解方程组Ax=b ;设A 的最后一个元素有扰动10-4,再求解Ax=b(3)计算(2)扰动相对误差与解的相对偏差,分析它们与条件数的关系。

实验结果的稳定性研究

实验结果的稳定性研究

实验结果的稳定性研究一、引言实验是科学研究的基础,在许多领域中都扮演着重要的角色。

然而,在进行实验过程中,我们必须考虑到实验结果的稳定性,以确保我们能够得到可靠、重复的数据。

本文旨在探讨实验结果的稳定性,并提出一些方法来提高实验结果的稳定性。

二、稳定性的定义和重要性实验结果的稳定性指的是在相同的实验条件下,通过重复实验所得到的结果的一致性。

稳定性对科学研究非常重要,它确保了研究的可靠性和可重复性。

如果实验结果不稳定,可能会导致无法得出准确的结论,甚至误导研究人员。

三、影响实验结果稳定性的因素1. 实验设备和仪器的精确性:实验设备和仪器的精确度直接影响实验结果的稳定性。

使用精确的设备和仪器可以减小测量误差,提高实验结果的可靠性。

2. 实验操作的一致性:在进行重复实验时,实验操作必须保持一致。

任何操作上的细微差异都可能导致实验结果的不稳定。

3. 环境因素的干扰:温度、湿度、光线等环境因素会干扰实验过程,从而影响实验结果的稳定性。

为了减小环境因素的影响,实验室应该提供稳定的环境条件。

4. 实验样本的质量:实验样本的质量也是影响实验结果稳定性的一个重要因素。

优质的样本能够减小实验误差,提高实验结果的可靠性。

四、提高实验结果稳定性的方法1. 校准仪器:定期对实验设备和仪器进行校准,确保其精确性。

如果发现仪器存在偏差,应及时进行修理或更换。

2. 严格的实验操作控制:在进行实验过程中,要严格遵守实验操作的规范,确保实验操作的一致性。

如果需要多人操作,应对每个操作员进行统一的培训。

3. 控制环境因素:确保实验室具备稳定的温度、湿度和光照条件,以减小环境因素对实验结果的影响。

在必要时,可以使用防护设备,如遮光罩或温湿度控制设备。

4. 选择高质量的样本:在实验中选择高质量的样本,以减小样本本身可能带来的误差。

如果实验样本不稳定,可以尝试使用标准样本或进行多次实验取平均值。

5. 重复实验:通过重复实验可以评估实验结果的稳定性。

排序算法稳定性实现技巧概述

排序算法稳定性实现技巧概述

排序算法稳定性实现技巧概述排序算法是计算机科学中常用的算法之一,用于将一组元素按照特定的规则进行排列。

在排序算法中,稳定性是一个重要的概念,它指的是排序后相等元素之间的相对位置是否保持不变。

本文将概述排序算法的稳定性实现技巧。

一、稳定性的意义及应用稳定性在排序算法中非常关键,特别是在多关键字排序或对象排序的场景中。

对于多关键字排序,如果排序算法是稳定的,那么第一关键字相同时,第二关键字不会打乱原本的顺序,这对于保持数据的有效性非常重要。

在对象排序中,保持原始顺序能够确保对象之间的关联性,在某些应用中具有重要意义。

二、常见的排序算法及其稳定性1. 冒泡排序(Bubble Sort)冒泡排序是一种简单直观的排序算法,通过相邻元素的比较和交换来达到排序的目的。

冒泡排序是一种稳定的排序算法,因为对于相等的元素,它们不会改变原始的相对位置。

2. 插入排序(Insertion Sort)插入排序将元素逐个插入到已排序序列中的合适位置。

插入排序也是一种稳定的排序算法,因为在插入过程中,不会改变相等元素的相对顺序。

3. 归并排序(Merge Sort)归并排序采用分治策略,将待排序序列不断拆分为更小的子序列,然后再将子序列排序合并。

归并排序是一种稳定的排序算法,因为在合并子序列的过程中,相等元素的相对顺序不会改变。

4. 堆排序(Heap Sort)堆排序利用堆数据结构来实现排序操作。

堆排序是一种不稳定的排序算法,因为堆的构建过程可能会改变相等元素的相对位置。

5. 快速排序(Quick Sort)快速排序通过选取一个基准元素,将序列分割成两部分,然后对两部分分别进行排序。

快速排序是一种不稳定的排序算法,因为在分割过程中,可能会改变相等元素的相对顺序。

三、实现稳定性的技巧1. 稳定的基于比较的排序算法在基于比较的排序算法中,为了实现稳定性,当比较两个元素相等时,不进行交换操作,而是保持它们在原始序列中的相对顺序。

2. 索引排序索引排序是一种利用辅助数组或链表来记录元素位置的方法。

数值算法的稳定性

数值算法的稳定性

结果只有一位有效数字,有效数字大量损失,造成相 对误差扩大。这是由两个比较接近的数相减造成的。
1 1 1 1 5 0.1734 10 759 760 759 760 0.5768 10 6
结果仍然有四位有效数字。这说明了算法设计的 重要性。
注:数值计算中要避免有效数字减少。
n 15
In
0.0105205
n 10
In
0.0153676
n 5
In
0.0284684
19
18
0.00825397
0.00887552
14
13
0.0112292
0.0120399
9
8
0.0169265
0.0933742
4
3
0.0343063
0.0431387
17
16
0.00933601
0.00989750
0.0147169
14
15
-0.395442
2.04388
19
20
1270.86
-6354.23
0.0284686 5 线性代数一 10 ④
16/32
而将公式变为
1 1 I n 1 I n (n m, m 1,...,2,1) 5 5n
然后取充分大的m对应的Im的一个估计值为计算初 值,再逐步用上式算出Im-1 ,Im-2 ,...,I1。 用上式计算 Im 可使计算的误差减少5倍,因而它对应 的算法是数值稳定的算法。
2.04388
19
20
1270.86
-6354.23
1 I n 5I n1 (n 1,2,...) n

数值计算基础实验报告(3篇)

数值计算基础实验报告(3篇)

第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库中的插值和拟合模块,实现了对数据的插值和拟合,并分析了拟合效果。

RK-MRTD算法的稳定性及数值色散性分析

RK-MRTD算法的稳定性及数值色散性分析

E( ) : =
… … ( ) ( ( ) + £ ) y n

( )
收稿 日期 :0 0 0 — 6 2 1— 9 0
基金项 目:国家 自然科学基金资助项 目(0 70 1 安徽 省教 育厅 自然科学基金重点资助项 目( J0 9 5 ) 66 15 ); K 20 A 3
2 1 年 9月 01
第3 5卷 第 5期
安徽大学学报( 自然 科 学 版 ) Junl f nu nvri N trl c neE io ) ora o A h i i sy( a a Si c dt n U e t u e i
S pe e 0 e t mb r 1 2 1
Vo . 5 No. 13 5
R MR D算 法 的 稳定 性 及 数值 色 散 性 分析 K— T
王 丽华 , 吴先 良 , 开宏 宋
( 安徽大学 电子信息工程学 院 , 安徽 合肥

2 03 ) 3 0 9
要 : 龙 格 一 塔 ( ug— ut) 法 引 入 到 时 域 多 分 辨 分 析 ( T 算 法 , 在 时 间 上 采 用 将 库 R neK t 方 a MR D) 即
hih a c r c ft e RK— g c u a y o h MRTD c e . s h me
K e r s:Ru g — ta muh r s l to i o i ;n me i a ip ri n; tbi t y wo d n e Ku t ie ou in tme d man u rc ld s e so sa l y i
A s atT e R n eK t to a a p e oMuteoui i o i ( T b t c :h u g— ut me d w s p l d t r a h i tr lt nTmeD ma is o n MR D)sh m o ce e t

Lab01_算法的数值稳定性实验

Lab01_算法的数值稳定性实验

Lab01.算法的数值稳定性实验【实验目的和要求】1.进行Matlab 语言的编程训练,初步体验算法的软件实现;2.通过对稳定算法和不稳定算法的结果分析、比较,深入理解算法的数值稳定性及其重要性。

【实验内容】1.用Matlab 语言编写按递推公式⎪⎩⎪⎨⎧-=-==---⎰11101011n n x nI I e dx e e I 计算⎰-=101dx e x e I x n n (n =0,1,2,……)的程序,并取I 0=0.6321,计算n =0,1,2,……,9时I n 的值。

2. 用Matlab 语言编写按递推公式()⎪⎪⎩⎪⎪⎨⎧-=≈⎪⎪⎭⎫ ⎝⎛+≈--**11*9110684.01010121n n I n I e I 计算⎰-=101dx e x e I x n n (n =0,1,2,……,9)的值程序。

3.分析比较两种算法的数值稳定性。

【实验仪器与软件】1.CPU 主频在1GHz 以上,内存在128Mb 以上的PC ;2.Matlab 6.0及以上版本。

实验讲评:实验成绩:评阅教师:200 年 月 日n =1,2,…… n =9,8,……,1Lab01.算法的数值稳定性实验一、算法描述算法一:对于积分111(0.1.2.n x n I e x e dx n -==⎰) ,用分部积分可得计算n I 的递推公式11n n I nI -=- (n=0,12, ) (1)其中1110010.63212056x I e e dx e --==-≈⎰ 计算n I 时,可先算出()()111n N E E N N N =-+ ,然后再带入(1),逐次求出1I ,2I , 的值。

算法二:对于积分110(0,1,2,),n xn I e x e dx n -==⎰ ,由(1)式也可得11(1)n n I I n-=- (2) 计算时,可先估计一个N I ,再反推要求的()n I n N 。

利用实验设计优化实验结果的稳定性

利用实验设计优化实验结果的稳定性

利用实验设计优化实验结果的稳定性实验是科学研究中不可或缺的环节,而实验结果的稳定性对于研究结果的可靠性和推广性至关重要。

为了提高实验结果的稳定性,我们可以采用实验设计的优化方法,本文将介绍如何利用实验设计来优化实验结果的稳定性。

一、引言实验结果的稳定性是指在相同条件下进行的实验所得到的结果的一致性程度。

实验结果的不稳定性会影响研究结论的准确性和可靠性,因此,在进行实验研究时,优化实验结果的稳定性是非常重要的。

二、实验设计的原理实验设计是一种系统的设计方法,旨在通过合理设计实验方案和操作步骤,减小各种误差因素的影响,提高实验结果的稳定性。

实验设计包括因素选择、水平确定、试验设计和数据分析等步骤。

1. 因素选择在实验设计中,选择适当的因素是非常重要的。

合理选择的因素能够体现实验的目标,并且能够较好地反映实验变量对结果的影响。

因素的选择应基于研究的问题和实验的具体环境。

2. 水平确定每个因素都具有若干个水平,水平的确定需要考虑到实验要求和资源限制等因素。

水平的确定应尽量覆盖因素的变化范围,以获得较为全面的实验结果。

3. 试验设计试验设计是实验设计的核心步骤,常用的试验设计方法包括完全随机设计、随机区组设计、重复测量设计等。

试验设计的目标是降低误差的来源,提高实验结果的准确性和稳定性。

4. 数据分析数据分析是实验设计的关键环节。

通过对实验数据的统计分析,可以得到对实验结果的合理解读。

常用的数据分析方法包括方差分析、回归分析、相关分析等。

三、实验设计优化实验结果的稳定性的实例以某种养殖鱼类的生长实验为例,说明如何利用实验设计优化实验结果的稳定性。

1. 因素选择选择影响养殖鱼类生长的关键因素,如饲料种类、饲料投喂量、水质指标等。

2. 水平确定确定各因素的水平范围,如饲料种类可以选择A、B、C三种,饲料投喂量可以选择每天分别为100g、200g、300g,水质指标可以选择水温分别为25℃、28℃、31℃等。

3. 试验设计采用重复测量设计,将每个因素的水平进行组合,构建完备的实验方案。

实验一误差传与算法稳定性

实验一误差传与算法稳定性

实验一:误差传播与算法稳定性一:实验内容考虑一个简单由积分定义的序列: 显然0,1,2,.n I n >=L 当n=1时,11101/x I xe dx e -==⎰。

而对于2n ≥时,利用分步积分易得:另一方面,我们有1111/(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--==--L 二:实验要求及实验结果(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位,得到运算结果如下表格所示:ⅱ)编写MA TLAB 程序如下: function In=NO1Bb= input ('请输入有效位数b:'); syms n EnEn=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,2nn E E n N N N n--==--L ,5位、6位和7位结果相近,随着有效数字位数的增加,结果越来越精确。

数值计算的数值稳定性

数值计算的数值稳定性

数值计算的数值稳定性数值计算在科学和工程领域中扮演着至关重要的角色。

无论是求解数学方程、数值模拟物理过程还是进行金融市场预测,我们都需要依赖数值计算来得到准确的结果。

然而,在进行数值计算时,我们必须关注数值稳定性的问题,以确保所得到的结果是可靠和精确的。

数值稳定性是指数值计算结果对输入数据的微小变化不敏感的性质。

换句话说,当输入数据发生微小变化时,如果数值计算结果也只发生微小的变化,那么我们可以说这个数值计算方法是数值稳定的。

而如果输入数据的微小变化导致计算结果的明显变化,那么我们就需要怀疑这个数值计算方法的稳定性。

为了更好地理解数值稳定性的重要性,我们可以通过一个简单的例子来说明。

假设我们需要计算一个方程的根,且该根相当接近1。

我们可以选择使用二分法来进行计算,即反复将区间一分为二,然后判断根是否位于其中某个子区间内。

然而,由于计算机的精度限制,我们不能无限地细分区间,而需要停止迭代的条件是区间长度小于一个给定的阈值。

如果我们选择的阈值过大,那么得到的根可能并不精确。

而如果我们选择的阈值过小,那么计算可能会陷入无限循环或者根本无法进行计算。

这就是一个数值稳定性的问题。

如果我们能够选择一个合适的阈值,使得所得到的根尽可能接近真实值,并且在输入数据稍作变动时,计算结果仍然保持稳定,那么我们就可以说我们的数值计算方法是稳定的。

在实际的数值计算中,数值稳定性问题存在于各个领域。

例如,在计算流体力学中,我们需要对流体的运动进行模拟。

但是由于流体运动的非线性特性以及不可避免的数值误差,我们必须谨慎选择计算方法,以保证结果的稳定性。

在金融市场中,对于一些复杂的金融模型,数值稳定性的问题更为显著。

微小的模型参数变动可能会导致预测结果的巨大差异,这对于投资者和决策者来说是不可接受的。

为了解决数值稳定性的问题,有许多方法和技术被提出。

一种常见的方法是增加计算的精度。

通常,计算机上使用的是有限的浮点数表示方法,精度由计算机的位数决定,例如单精度(32位)和双精度(64位)。

利用实验设计优化实验结果的稳定性

利用实验设计优化实验结果的稳定性

利用实验设计优化实验结果的稳定性在科学研究和实验中,获得稳定可靠的实验结果是至关重要的。

然而,由于实验设备、环境等因素的影响,实验结果的稳定性经常会受到一定程度的影响。

因此,利用实验设计来优化实验结果的稳定性成为一个重要的研究问题。

本文将介绍一些常用的实验设计方法,以及如何应用这些方法来优化实验结果的稳定性。

一、随机化设计随机化设计是一种常用且有效的优化实验结果稳定性的方法。

通过随机分组或随机排序处理,可以避免实验结果受到个体差异或处理顺序等因素的影响。

随机化设计可以用于各种类型的实验,包括生物学、医学、工程等领域。

随机化设计的基本原则是将实验对象(如实验动物、样本)随机分配到不同的处理组中,以减少实验结果的误差。

这样可以确保每个组的实验对象具有相似的起始条件,从而增加实验结果的可比性。

二、平衡设计平衡设计是另一种常用的优化实验结果稳定性的方法。

平衡设计通过在不同的处理组中均匀分配各种条件,消除因条件不平衡而导致的实验结果偏差。

平衡设计可以在实验开始之前进行,也可以在实验过程中进行。

平衡设计通常适用于因子水平较少、难以随机化的实验。

平衡设计的关键在于确定各个条件的分配比例。

根据实验的特点和目标,可以采用不同的平衡设计方法,比如完全平衡设计、拉丁方设计等。

选择合适的平衡设计方法可以最大程度地减小实验结果的误差,提高实验结果的稳定性。

三、重复设计重复设计是一种增加实验结果稳定性的常用方法。

通过对同一实验进行多次重复,可以评估实验结果的变异性,并提高结果的可靠性。

重复设计通常适用于实验结果变异较大、测量误差较大的实验。

在进行重复设计时,需要根据实验的特点和目标确定重复次数。

重复设计可以采用完全重复、随机重复等方式进行。

重复设计还可以与随机化设计、平衡设计等方法结合使用,以获得更稳定、可靠的实验结果。

四、均衡设计均衡设计是一种通过均衡处理组间差异来优化实验结果稳定性的方法。

通过在不同处理组之间交叉应用各种处理,可以消除处理组间的差异,并提高实验结果的稳定性。

实验结果稳定性分析

实验结果稳定性分析

实验结果稳定性分析在科学研究和实际应用中,实验结果的稳定性是一个至关重要的考量因素。

它不仅影响着我们对实验结论的可靠性和有效性的判断,还直接关系到研究成果能否被广泛接受和应用。

那么,究竟什么是实验结果的稳定性?如何对其进行准确而有效的分析呢?实验结果的稳定性,简单来说,就是指在相同的实验条件下,多次重复实验所得到的结果之间的一致性和可重复性。

如果每次实验得到的结果都非常接近,那么我们就可以认为这个实验结果是稳定的;反之,如果结果差异较大,那么稳定性就较差。

为了更好地理解实验结果的稳定性,我们可以通过一个简单的例子来进行说明。

假设我们要研究一种新药物对某种疾病的治疗效果。

我们选取了一组患者,给他们使用相同剂量的这种新药物,然后观察他们的病情变化。

如果在多次重复实验中,大部分患者的病情都有相似程度的改善,那么就可以初步认为这种药物的治疗效果是稳定的;但如果有的患者病情显著改善,而有的患者病情几乎没有变化甚至恶化,那么就说明实验结果的稳定性存在问题。

影响实验结果稳定性的因素众多,其中实验条件的控制是最为关键的因素之一。

实验条件包括实验环境、实验设备、实验材料、实验操作方法等。

如果实验环境的温度、湿度等发生了变化,或者实验设备的精度不够、实验材料的质量存在差异、实验操作人员的操作方法不一致,都有可能导致实验结果的不稳定。

以化学实验为例,如果在进行化学反应时,反应物的浓度、反应温度、反应时间等条件没有得到严格的控制,那么得到的产物的产量和质量就可能会有较大的波动,从而影响实验结果的稳定性。

另外,样本的选择也会对实验结果的稳定性产生重要影响。

如果样本的数量过少,或者样本的代表性不足,那么得到的实验结果可能只是偶然的,不具有普遍意义。

比如在市场调查中,如果只选取了少数几个地区或者少数几个年龄段的消费者进行调查,那么得出的关于某种产品的市场需求的结论很可能是不准确的,因为样本没有涵盖到更广泛的消费者群体。

还有,测量误差也是影响实验结果稳定性的一个不可忽视的因素。

计算机算法实验实现各类算法的性能评估

计算机算法实验实现各类算法的性能评估

计算机算法实验实现各类算法的性能评估计算机算法的性能评估是优化算法设计和改进算法效率的重要步骤。

通过实验,我们可以比较不同算法的运行时间、空间复杂度以及其在不同规模问题上的表现。

本文将介绍一种通用的实验方法,并以排序算法为例对其进行实战演示。

一、实验设计1. 确定实验目标:选择一个或多个需要评估性能的算法,例如排序、搜索或图算法。

2. 设计实验用例:选择一组典型的问题实例,包括不同数据规模和特殊输入情况下的数据。

确保实例具有一定难度和代表性。

3. 实施算法实验:针对每个算法,使用相同的实例进行多次运行,记录每次运行的时间和空间占用。

4. 结果分析:利用实验数据进行性能评估,对算法的运行时间、空间复杂度和稳定性等进行对比和分析。

二、排序算法实验示例排序算法是计算机科学中的经典问题,也是算法性能评估的常见案例。

下面我们以冒泡排序和快速排序为例,演示实验流程和结果分析。

1. 实验目标:比较冒泡排序和快速排序算法在不同数据规模下的性能差异。

2. 实验用例设计:选择一组包含100个整数的随机数组作为实验用例。

3. 实施算法实验:分别对随机数组使用冒泡排序和快速排序算法进行排序,并记录每个算法的运行时间和空间占用。

4. 结果分析:比较冒泡排序和快速排序算法的运行时间和空间占用。

根据实验数据进行可视化展示,并结合算法的时间复杂度和空间复杂度进行综合评估。

实验结果显示,随机数组的冒泡排序平均运行时间为O(n^2),空间占用为O(1);而快速排序平均运行时间为O(nlogn),空间占用为O(logn)。

可以看出,快速排序相比冒泡排序具有更高的效率和更低的空间占用。

三、其他算法实验除了排序算法,还可以通过实验评估其他常见算法的性能,比如搜索算法和图算法等。

以下是一些实验示例:1. 搜索算法:使用线性搜索、二分搜索和哈希表搜索算法对一个有序数组进行查找,比较它们的查询时间和空间复杂度。

2. 图算法:通过实验比较BFS(广度优先搜索)和DFS(深度优先搜索)算法在不同规模的图上的运行时间和空间占用。

冯诺依曼稳定性分析

冯诺依曼稳定性分析

冯诺依曼稳定性分析维基百科,自由的百科全书跳转到:导航, 搜索数值分析中, 冯诺依曼稳定性分析 (亦作傅立叶稳定性分析) 用于验证计算线性偏微分方程时使用特定有限差分法的数值稳定性[1],该分析方法基于对数值误差的傅立叶分解。

1947年英国研究人员John Crank和Phyllis Nicolson在文章中对该方法进行了简要介绍[2],尔后又出现在冯诺依曼合作的文章中[3]。

洛斯阿拉莫斯国家实验室对该方法进行了进一步发展。

[编辑]数值稳定性数值稳定性与数值误差密切相关。

使用有限差分方法进行计算时,若任意时间步的误差不会导致其后计算结果的发散,则可称该有限差分法是数值稳定的。

如果误差随着进一步计算降低最终消失,该算法被认为稳定;若误差在进计算中保持为常量,则认为该算法“中性稳定”。

但如果误差随着进一步计算增长,结果发散,则数值方法不稳定。

数值方法的稳定性可以通过冯诺依曼稳定性分析得到验证。

稳定性一般不易分析,特别是针对非线性偏微分方程。

冯诺依曼稳定性方法只适用于满足 Lax–Richtmyer 条件(Lax 等价定理)的某些特殊差分法:偏微分方程系统须线性,常系数,满足周期性边界条件,只有两个独立变量,差分法中最多含两层时间步[4]。

由于相对简单,人们常使用冯诺依曼稳定性分析代替其他更为详细的稳定性分析,用以估计差分方法中对容许步长的限制。

[编辑]方法描述冯诺依曼误差分析将误差分解为傅立叶级数。

为了描述此过程,考虑一维热传导方程空间网格间隔为L, 对网格作FTCS(Forward-Time Central-Space,时间步前向欧拉法,空间步三点中心差分) 离散处理,其中。

为离散网格上的数值解,用于近似此偏微分方程的精确解u(x,t) 。

定义舍入误差。

其中是离散方程 (1) 式的精确解,为包含有限浮点精度的数值解。

因为精确解满足离散方程, 误差亦满足离散方程[5]:此式将确定误差的递推关系。

方程 (1) 和 (2) 中,误差和数值解随时间具有一致的变化趋势。

数值分析实验报告

数值分析实验报告

《数值分析》实验报告学院:计算机科学与软件学院姓名:XXX班级:计算机XX班学号:XXXXXX实验一:舍入误差与数值稳定性实验目的:1、 通过上机编程,复习巩固以前所学程序设计语言;2、 通过上机计算,了解舍入误差所引起的数值不稳定性。

3、 通过上机计算,了解运算次序对计算结果的影响,从而尽量避免大数吃小数的现象。

实验内容:用两种不同的顺序计算644834.11000012≈∑=-n n ,分析其误差的变化。

实验流程图:实验源程序:#include <stdio.h>#include <math.h>void main(){ int i;float s1=0,s2=0,d1,d2;for (i=1;i<=10000;i++)s1=s1+1.0f/(i*i);for (i=10000;i>=1;i--)s2=s2+1.0f/(i*i);d1=(float)(fabs(1.644834-s1));d2=(float)(fabs(1.644834-s2));printf("正向求和结果为%f\n 误差为%f\n\n",s1,d1);printf("反向求和结果为%f\n 误差为%f\n\n",s2,d2);if(d1<d2)printf("正向求和误差小于负向求和误差\n");else if(d1==d2)printf("正向求和误差等于负向求和误差\n"); elseprintf("正向求和误差大于负向求和误差\n");}实验结果:实验分析:第一次做数值实验,又一次使用C语言编程,没有了刚学习C语言的艰难,能够将实验步骤转换成流程图并编写出完整的实验代码,在经过多次调试、改正后得到正确的程序和结果。

这个实验较简单,计算误差时如果输入数据有误差,而在计算过程中舍入误差不增长,则称此算法是稳定的,否则称此算法是数值不稳定的,减少运算次数可以减小舍入误差。

算法的数值稳定性实验

算法的数值稳定性实验

专业 序号 姓名 日期实验1 算法的数值稳定性实验【实验目的】1.掌握用MATLAB 语言的编程训练,初步体验算法的软件实现;2.通过对稳定算法和不稳定算法的结果分析、比较,深入理解算法的数值稳定性及其重要性。

【实验内容】1.计算积分 ()dx a x x I n⎰+=10)(n (n=0,1,2......,10) 其中a 为参数,分别对a=0.05及a=15按下列两种方案计算,列出其结果,并对其可靠性,说明原因。

2.方案一 用递推公式 n aI I n 11n +-=- (n=1,2,......,10) 递推初值可由积分直接得)1(0aa In I += 3. 方案二 用递推公式 )1(11-n nI a I n +-= (n=N,N -1,......,1) 根据估计式 ()()()11111+<<++n a I n a n 当1n a +≥n 或()()n1111≤<++n I n a 当1n n a 0+<≤ 取递推初值为 ()()()()11212])1(1111[21N +++=++++≈N a a a N a N a I 当1a +≥N N 或 ()()]1111[21NN a I N +++= 当1a 0+<≤N N 计算中取N=13开始【程序如下】: % myexp1_1.m --- 算法的数值稳定性实验% 见 P11 实验课题(一)%function yyjjglobal n aN = 20; % 计算 N 个值a =0.05;%或者a=15% %--------------------------------------------% % [方案I] 用递推公式%I(k) = - a*I(k-1) + 1/k%I0 =log((a+1)/a); % 初值I = zeros(N,1); % 创建 N x 1 矩阵(即列向量),元素全为零I(1) =-a*I0+1;for k = 2:NI(k) =-a*I(k-1)+1/k;end% %--------------------------------------------% % [方案II] 用递推公式%I(k-1) = ( - I(k) + 1/k ) / a%II = zeros(N,1);if a >= N/(N+1)II(N)=(2*a+1)/(2*a*(a+1)*(N+1));elseII(N) =(1/(a+1)/(N+1)+1/N)/2;endfor k = N:-1:2II(k-1) =(-II(k)+1/k)/a;end% %--------------------------------------------% % 调用 matlab 高精度数值积分命令 quadl 计算以便比较III = zeros(N,1);for k = 1:Nn = k;III(k) = quadl(@f,0,1);end% %--------------------------------------------% % 显示计算结果clcfprintf('\n 方案I结果方案II结果精确值') for k = 1:N,fprintf('\nI(%2.0f) %17.7f %17.7f %17.7f',k,I(k),II(k),III(k))end% %--------------------------------------------function y = f(x) % 定义函数global n a % 参量 n 为全局变量y =x.^n./(a+x); % ★注意:这里一定要 '点' 运算return% %--------------------------------------------【运行结果如下】:当a=0.05方案I结果方案II结果精确值I( 1) 0.8477739 -919648916620722180000.0000000 0.8477739 I( 2) 0.4576113 45982445831036109000.0000000 0.4576113 I( 3) 0.3104528 -2299122291551805700.0000000 0.3104528 I( 4) 0.2344774 114956114577590290.0000000 0.2344776 I( 5) 0.1882761 -5747805728879515.0000000 0.1882761I( 6) 0.1572529 287390286443975.9400000 0.1572529I( 7) 0.1349945 -14369514322198.6540000 0.1349945I( 8) 0.1182503 718475716110.0577400 0.1182503I( 9) 0.1051986 -35923785805.3917770 0.1051986I(10) 0.0947401 1796189290.3695889 0.0947401I(11) 0.0861721 -89809464.4275704 0.0861724I(12) 0.0790247 4490473.3047119 0.0790247I(13) 0.0729718 -224523.5883125 0.0729718I(14) 0.0677800 11226.2508442 0.0677800I(15) 0.0632777 -561.2458755 0.0632777I(16) 0.0593361 28.1247938 0.0593361I(17) 0.0558567 -1.3474162 0.0558567I(18) 0.0527627 0.1229264 0.0527627I(19) 0.0499934 0.0464853 0.0499934I(20) 0.0475003 0.0476757 0.0475003当a=15方案I结果方案II结果精确值I( 1) 0.0319222 0.0319222 0.0319222I( 2) 0.0211673 0.0211673 0.0211673I( 3) 0.0158245 0.0158245 0.0158245I( 4) 0.0126326 0.0126326 0.0126326I( 5) 0.0105112 0.0105112 0.0105112I( 6) 0.0089993 0.0089993 0.0089993I( 7) 0.0078674 0.0078674 0.0078674I( 8) 0.0069883 0.0069883 0.0069883I( 9) 0.0062862 0.0062859 0.0062859I(10) 0.0057064 0.0057117 0.0057117I(11) 0.0053136 0.0052336 0.0052337I(12) 0.0036289 0.0048293 0.0048296I(13) 0.0224896 0.0044830 0.0044838I(14) -0.2659159 0.0041831 0.0041831I(15) 4.0554050 0.0039207 0.0039207I(16) -60.7685756 0.0036893 0.0036893I(17) 911.5874579 0.0034837 0.0034837I(18) -13673.7563129 0.0033002 0.0032998I(19) 205106.3973248 0.0031283 0.0031344I(20) -3076595.9098724 0.0030754 0.0029847>>【结果分析】:1、综上所述,当a=0.05的时候,方案二算法的结果从I(20)开始计算,刚开始的时候与精确解相差不大,但是随着计算的进行,误差变得越来越大,最终与原来的精确解相差十分巨大,而方案一算法的数值结果始终与精确解相差不大,是稳定的算法。

数值计算方法实验指导(Matlab版)

数值计算方法实验指导(Matlab版)

《数值计算方法》实验指导(Matlab版)学院数学与统计学学院计算方法课程组《数值计算方法》实验1报告班级: 20##级####x 班 学号: 20##2409#### : ##X 成绩:1. 实验名称实验1 算法设计原则验证(之相近数相减、大数吃小数和简化计算步骤) 2. 实验题目(1) 取1610=z ,计算z z -+1和)1/(1z z ++,验证两个相近的数相减会造成有效数字的损失.(2) 按不同顺序求一个较大的数(123)与1000个较小的数(15310-⨯)的和,验证大数吃小数的现象.(3) 分别用直接法和九韶算法计算多项式n n n n a x a x a x a x P ++++=--1110)(在x =1.00037处的值.验证简化计算步骤能减少运算时间.对于第(3)题中的多项式P (x ),直接逐项计算需要2112)1(+=+++-+n n n 次乘法和n 次加法,使用九韶算法n n a x a x a x a x a x P ++++=-)))((()(1210则只需要n 次乘法和n 次加法. 3. 实验目的验证数值算法需遵循的若干规则. 4. 基础理论设计数值算法时,应避免两个相近的数相减、防止大数吃小数、简化计算步骤减少运算次数以减少运算时间并降低舍入误差的积累.两相近的数相减会损失有效数字的个数,用一个大数依次加小数,小数会被大数吃掉,乘法运算次数太多会增加运算时间. 5. 实验环境操作系统:Windows xp ; 程序设计语言:Matlab6. 实验过程(1) 直接计算并比较;(2) 法1:大数逐个加1000个小数,法2:先把1000个小数相加再与大数加; (3) 将由高次项到低次项的系数保存到数组A[n]中,其中n 为多项式次数.7. 结果与分析 (1) 计算的z z -+1= ,)1/(1z z ++.分析:(2) 123逐次加1000个6310-⨯的和是 ,先将1000个6310-⨯相加,再用这个和与123相加得.分析:(3) 计算次的多项式:直接计算的结果是,用时;用九韶算法计算的结果是,用时.分析:8. 附录:程序清单(1) 两个相近的数相减.%*************************************************************%* 程序名:ex1_1.m *%* 程序功能:验证两个相近的数相减会损失有效数字个数 *%*************************************************************z=1e16;x,y======================================================================(2) 大数吃小数%*************************************************************%* 程序名:ex1_2.m *%* 程序功能:验证大数吃小数的现象. *%*************************************************************clc; % 清屏clear all; % 释放所有存变量format long; % 按双精度显示浮点数z=123; % 大数t=3e-15; % 小数x=z; % 大数依次加小数% 重复1000次给x中加上ty=0; % 先累加小数% 重复1000次给y中加上ty=z + y; % 再加到大数x,y======================================================================(3) 九韶算法%*************************************************************%* 程序名:ex1_3.m *%* 程序功能:验证九韶算法可节省运行时间. *%*************************************************************clc; % 清屏clear all; % 释放所有存变量format long; % 按双精度显示浮点数A=[8,4,-1,-3,6,5,3,2,1,3,2,-1,4,3,1,-2,4,6,8,9,50,-80,12,35,7,-6,42,5,6,23,74,6 5,55,80,78,77,98,56];A(10001)=0; % 扩展到10001项,后面的都是分量0% A为多项式系数,从高次项到低次项x=1.00037;n=9000; % n为多项式次数% 直接计算begintime=clock; % 开始执行的时间 % 求x的i次幂% 累加多项式的i次项endtime=clock; % 完毕执行的时间time1=etime(endtime,begintime); % 运行时间disp('直接计算');disp(['p(',num2str(x),')=',num2str(p)]);disp([' 运行时间: ',num2str(time1),'秒']);% 九韶算法计算begintime=clock; % 开始执行的时间% 累加九韶算法中的一项endtime=clock; % 完毕执行的时间time2=etime(endtime,begintime); % 运行时间disp(' ');disp('九韶算法计算');disp(['p(',num2str(x),')=',num2str(p)]);disp([' 运行时间: ',num2str(time2),'秒']);《数值计算方法》实验1报告班级: 20##级####x 班 学号: 20##2409#### : ##X 成绩:1. 实验名称实验1 算法设计原则验证(之数值稳定性) 2. 实验题目 计算定积分⎰==-1110,1,0,d n x e xI x nn ,分别用教材例1-7推导出的算法A 和B ,其中:算法A :⎩⎨⎧≈-=-6321.0101I nI I n n 算法B :⎪⎩⎪⎨⎧≈-=-0)1(1101I I nI n n 验证算法不稳定时误差会扩大.3. 实验目的验证数值算法需遵循的若干规则. 4. 基础理论设计数值算法时,应采用数值稳定性好的算法.数值稳定的算法,误差不会放大,甚至会缩小;而数值不稳定的算法会放大误差. 5. 实验环境操作系统:Windows xp ; 程序设计语言:Matlab6. 实验过程分别用数组IA[ ]和IB[ ]保存两种算法计算的结果. 7. 结果与分析 运行结果:(或拷屏)8. 附录:程序清单%*************************************************************%* 程序名:ex1_4.m *%* 程序功能:验证数值稳定性算法可控制误差. *%*************************************************************clc; % 清屏clear all; % 释放所有存变量format long; % 按双精度显示浮点数I=[0.856, 0.144, 0.712, 0.865, ...0.538, 0.308, 0.154, 0.938, ...0.492, 0.662, 0.843];% 保留14位小数的精确值, …是Matlab中的续行符% 算法AIA(1) = 0.6321; % Matlab下标从1开始,所以要用IA(n+1)表示原问题中的I(n)% 算法Bdisp('n 算法A 算法B 精确值');for n=1:11fprintf('%2d %14.6f %14.6f %14.6f\n',n-1,IA(n),IB(n),I(n));end% n显示为2位整数, 其它显示为14位其中小数点后显示6位的小数《数值计算方法》实验1报告班级: 20##级####x 班 学号: 20##2409#### : ##X 成绩:1. 实验名称实验1 算法设计原则(除数绝对值不能太小) 2. 实验题目将线性方程组增广矩阵利用初等行变换可化为⎪⎪⎭⎫⎝⎛→-⎪⎪⎭⎫ ⎝⎛→-⎪⎪⎭⎫ ⎝⎛''0'0''02221112'12221121112222211121122121121b a b a r r b a b a a r r b a a b a a a a a a由此可解得'/',/'22221111a b x a b x ==.分别解增广矩阵为161011212-⎛⎫ ⎪⎝⎭和162121011-⎛⎫⎪⎝⎭的方程组,验证除数绝对值远小于被除数绝对值的除法会导致结果失真. 3. 实验目的验证数值算法需遵循的若干规则. 4. 基础理论设计数值算法时,应避免除数绝对值远小于被除数绝对值的除法,否则绝对误差会被放大,使结果失真. 5. 实验环境操作系统:Windows xp ; 程序设计语言:Matlab6. 实验过程用二维数组A 和B 存放方程组的增广矩阵,利用题目所给初等行变换求解方程组. 7. 结果与分析第1种顺序的方程组的解为x =,y =;第2种顺序的方程组的解为x =,y =. 分析:8. 附录:程序清单%************************************************************* %* 程 序 名:ex1_5.m * %* 程序功能:验证除数的绝对值太小可能会放大误差. * %*************************************************************clc;A=[1e-16, 1, 1; 2, 1, 2];B=[2, 1, 2; 1e-16, 1, 1]; % 增广矩阵% 方程组A% m = - a_{21}/a_{11} 是第2行加第1行的倍数% 消去a_{21}% m = - a_{12}/a_{22} 是第1行加第2行的倍数% 消去a_{12}, 系数矩阵成对角线% 未知数x1的值% 未知数x2的值disp(['方程组A的解: x1=',num2str(A(1,3)),', x2=',num2str(A(2,3))]); disp(' ');% 方程组B% m = - b_{21}/b_{11} 是第2行加第1行的倍数% 消去b_{21}% m = - b_{12}/b_{22} 是第1行加第2行的倍数% 消去b_{12}, 系数矩阵成对角线% 未知数x1的值% 未知数x2的值disp(['方程组B的解: x1=',num2str(B(1,3)),', x2=',num2str(B(2,3))]);《数值计算方法》实验2报告班级: 20##级####x 班 学号: 20##2409#### : ##X 成绩:1. 实验名称实验2 非线性方程的迭代解法(之简单迭代法) 2. 实验题目用简单迭代法求方程010423=-+x x 在区间[1,2]的一个实根,取绝对误差限为410-.3. 实验目的掌握非线性方程的简单迭代法. 4. 基础理论简单迭代法:将方程0)(=x f 改写成等价形式)(x x ϕ=,从初值0x 开始,使用迭代公式)(1k k x x ϕ=+可以得到一个数列,若该数列收敛,则其极限即为原方程的解.取数列中适当的项可作为近似解. 5. 实验环境操作系统:Windows xp ; 程序设计语言:Matlab 6. 实验过程7. 结果与分析8. 附录:程序清单《数值计算方法》实验2报告班级: 20##级####x 班 学号: 20##2409#### : ##X 成绩:1. 实验名称实验2 非线性方程的迭代解法(之Newton 迭代法) 2. 实验题目用Newton 迭代法求方程010423=-+x x 在区间[1,2]的一个实根,取绝对误差限为410-.3. 实验目的掌握求解非线性方程的Newton 迭代法. 4. 基础理论Newton 迭代法:解方程0)(=x f 的Newton 迭代公式为)(')(1k k k k x f x f x x -=+.5. 实验环境操作系统:Windows xp ; 程序设计语言:Matlab 6. 实验过程7. 结果与分析8. 附录:程序清单《数值计算方法》实验2报告班级: 20##级####x 班 学号: 20##2409#### : ##X 成绩:1. 实验名称实验2 非线性方程的迭代解法(之对分区间法) 2. 实验题目用对分区间法求方程310x x --=在区间[1, 1.5]的一个实根,取绝对误差限为410-. 3. 实验目的掌握求解非线性方程的对分区间法. 4. 基础理论对分区间法:取[a ,b ]的中点p ,若f (p ) ≈ 0或b – a < ε,则p 为方程0)(=x f 的近似解;若f (a ) f (p ) < 0,则说明根在区间取[a ,p ]中;否则,根在区间取[p ,b ]中.将新的有根区间记为 [a 1,b 1],对该区间不断重复上述步骤,即可得到方程的近似根. 5. 实验环境操作系统:Windows xp ; 程序设计语言:Matlab 6. 实验过程用宏定义函数f (x );为了循环方便,得到的新的有根区间始终用[a ,b ]表示;由于新的有根区间可能仍以a 为左端点,这样会反复使用函数值f (a ),为减少运算次数,将这个函数值保存在一个变量fa 中;同样在判断新的有根区间时用到函数值f (p ),若新的有根区间以p 为左端点,则下一次用到的f (a )实际上就是现在的f (p ),为减少运算次数,将这个函数值保存在一个变量fp 中.算法的伪代码描述:Input :区间端点a ,b ;精度要求(即误差限)ε;函数f (x );最大对分次数N Output :近似解或失败信息7. 结果与分析8. 附录:程序清单说明: 源程序中带有数字的空行,对应着算法描述中的行号%**********************************************************%* 程序名:Bisection.m *%* 程序功能:使用二分法求解非线性方程. *%**********************************************************f=inline('x^3-x-1'); % 定义函数f(x)a=input('有根区间左端点: a=');b=input('右端点:b=');epsilon=input('误差限:epsilona=');N=input('最大对分次数: N=');1 % 对分次数计数器n置12 % 左端点的函数值给变量fafprintf('\n k p f(p) a(k) f(a(k))'); fprintf(' b(k) b-a\n');% 显示表头fprintf('%2d%36.6f%12.6f%12.6f%12.6f\n',0,a,fa,b,b-a);% 占2位其中0位小数显示步数0, 共12位其中小数6位显示各值3% while n≤ N 4 % 取区间中点p5% 求p 点函数值给变量fpfprintf('%2d%12.6f%12.6f',n,p,fp); % 输出迭代过程中的中点信息p 和f(p)6 % 如果f(p)=0或b-a 的一半小于误差限εfprintf('\n\n 近似解为:%f\n',p);% 则输出近似根p (7)return;% 并完毕程序 (7)89 % 计数器加110% 若f(a)与f(p)同号11% 则取右半区间为新的求根区间, 即a 取作p 12 % 保存新区间左端点的函数值 13% 否则14 % 左半区间为新的求根区间, 即b 取作p 15fprintf('%12.6f%12.6f%12.6f%12.6f\n',a,fa,b,b-a); %显示新区间端点与左端函数值、区间长度 16fprintf('\n\n 经过%d 次迭代后未达到精度要求.\n',N); % 输出错误信息(行17)《数值计算方法》实验2报告班级: 20##级####x 班 学号: 20##2409#### : ##X 成绩:1. 实验名称实验2 非线性方程的迭代解法(之Aitken-Steffensen 加速法) 2. 实验题目用Aitken-Steffensen 加速法求方程010423=-+x x 在区间[1,2]的一个实根,取绝对误差限为410-.3. 实验目的熟悉求解非线性方程的Aitken-Steffensen 加速法. 4. 基础理论将方程0)(=x f 改写成等价形式)(x x ϕ=,得到从初值0x 开始的迭代公式)(1k k x x ϕ=+后,基于迭代公式)(1k k x x ϕ=+的Aitken-Steffensen 加速法是通过“迭代-再迭代-加速”完成迭代的,具体过程为kk k k k k k k k k k x y z z y x x y z x y +---===+2)(),(),(21ϕϕ. 5. 实验环境操作系统:Windows xp ; 程序设计语言:Matlab 6. 实验过程为了验证Aitken-Steffensen 加速法可以把一些不收敛的迭代加速成迭代收敛,我们使用将方程组变形为31021x x -=,取迭代函数31021)(x x -=ϕ,并利用宏定义出迭代函数.由于不用保存迭代过程,所以用x0表示初值同时也存放前一步迭代的值,y 和z 是迭代过程中产生的y k 和z k ,x 存放新迭代的结果.算法的伪代码描述:Input :初值x 0;精度要求(即误差限)ε;迭代函数φ(x );最大迭代次数N7. 结果与分析8. 附录:程序清单%************************************************************* %* 程 序 名:Aitken_Steffensen.m * %* 程序功能:用Aitken-Steffensen 加速法求方程. * %************************************************************* clc;clear all;phi=inline('0.5 * sqrt( 10 - x^3)'); % 迭代函数x0=input('初值: x0 = ');epsilon=input('误差限: epsilon='); N=input('最大迭代次数: N=');disp(' n 迭代中间值y(n-1) 再迭代结构z(n-1) 加速后的近似值x(n)'); fprintf('%2d%54.6f\n',0,x0);% 占2位整数显示步数0, 为了对齐, 占54位小数6位显示x01 % n 是计数器2 % while n<=Ny= 3 ; % 迭代 z= 3 ; % 再迭代 x= 3 ; % 加速% x0初值与前一步的近似值, y 和z 是中间变量, x 是下一步的近似值fprintf('%2d%18.6f%18.6f%18.6f\n',n,y,z,x);%显示中间值和迭代近似值6 % 如果与上一步近似解差的绝对值不超过误差限 fprintf('\n\n 近似解 x≈x(%d)≈%f \n',n,x);% 则输出近似根 (7), 可简略为: fprintf('\n\n 近似解 x=%f',x); return; % 并完毕程序(7) 8 % 相当于endif9 % 计数器加110 % 新近似值x 作为下一次迭代的初值 11fprintf('\n 迭代%d 次还不满足误差要求.\n\n',N); %输出错误信息(12)《数值计算方法》实验2报告班级: 20##级####x 班 学号: 20##2409#### : ##X 成绩:1. 实验名称实验2 非线性方程的迭代解法(之Newton 下山法) 2. 实验题目用Newton 下山法求方程010423=-+x x 在区间[1,2]的一个实根,取绝对误差限为410-.3. 实验目的熟悉非线性方程的Newton 下山法. 4. 基础理论Newton 下山法:Newton 下山法公式为)(')(1k k kk k x f x f x x λ-=+,使|)(||)(|1k k x f x f <+,其中10≤<k λ.5. 实验环境操作系统:Windows xp ; 程序设计语言:Matlab 6. 实验过程定义函数f(x)和df(x),其中df(x)是f(x)的导函数.每步迭代时先取下山因子为1,尝试迭代,判断尝试结果是否满足下山因子,若满足则作为这步的迭代结果;否则将下山因子减半,然后再尝试.为防止当前的x k 是极小值点,附近不会有满足下述条件的其它点,使尝试陷入死循环,同时计算机中能表示出的浮点数也有下界,因此我们设置了最大尝试次数.当超过最大尝试次数时,不再进行下山尝试.由于反复尝试迭代且要判断下山条件,所以f (x 0)和f ‘(x 0)会反复使用,为避免重复计算浪费运行时间,将这两个值分别保存在变量fx0和dfx0.而尝试产生的节点,判断下山条件时要用到它的函数值,若尝试成功,这个点会作为下一步的初值再使用,所以把该点的函数值也保存在变量fx 中.算法的伪代码描述:Input :初值x 0;精度要求(即误差限)ε;函数与其导函数f (x )和f’(x);最大迭代次数N ;K 下山尝试最大次数Output :近似解或失败信息7. 结果与分析8. 附录:程序清单%*************************************************************%* 程序名:NewtonDownhill.m *%* 程序功能:用Newton下山法求解非线性方程. *%*************************************************************clc;clear all;f=inline('x^3-x-1'); % 函数f(x)df=inline('3*x^2-1'); % 函数f(x)的导函数x0=input('初值: x0 = ');epsilon=input('误差限: epsilon=');N=input('最大迭代次数: N=');K=input('最大下山尝试次数: K=');1 % 迭代次数计数器2 % 存x0点函数值fprintf('\n\n n x(n) f(x(n))\n'); % 显示表头fprintf('%2d%14.6f%14.6f\n',0,x0,fx0); % 2位整数显示0, 共14位小数6位显示x0和fx03 % while n≤ Ndisp(''); % 换行显示下山尝试过程的表头disp(' 下山因子尝试x(n) 对应f(x(n)) 满足下山条件');disp('');4 % 存x0点导数值, 每次下山尝试不用重新计算ifdfx0==0 % 导数为0不能迭代disp(‘无法进行Newton迭代’);return;endlambda=1.0; % 下山因子从1开始尝试k=1; % k下山尝试次数计数器while k<=K % 下山最多尝试K次% 下山公式fx=f(x); % 函数值fprintf('%22.6f%14.6f%14.6f',lambda,x,fx); % 显示尝试结果if (abs(fx)<abs(fx0)) % 判断是否满足下山条件fprintf(' 满足\n');break; % 是, 则退出下山尝试的循环elsefprintf(' 不满足\n');endlambda=lambda/2; % 不是, 则下山因子减半k=k+1; % 计数器加1endif k>Kfprintf('\n 下山条件无法满足, 迭代失败.\n\n');return;endfprintf('%2d%14.6f%14.6f\n',n,x,fx);% 2位整数显示步数n, 共14位小数6位显示下步迭代结果22 % 达到精度要求否fprintf('\n\n 方程的近似解为: x≈%f\n\n',x); % (23)return; % 达到, 则显示结果并完毕程序(23) end % (24)% 用x0,fx0存放前一步的近似值和它的函数值, 进行循环迭代25262728fprintf('\n 迭代%d次还不满足误差要求.\n\n',N);《数值计算方法》实验2报告班级: 20##级####x 班 学号: 20##2409#### : ##X 成绩:1. 实验名称实验2 非线性方程的迭代解法(之弦截法) 2. 实验题目用弦截法求方程010423=-+x x 在区间[1,2]的一个实根,取绝对误差限为410-. 3. 实验目的熟悉非线性方程的弦截法. 4. 基础理论将Newton 迭代法中的导数用差商代替,得到弦截法(或叫正割法)公式)()()(111k k k k k k k x f x f x f x x x x --+---=.5. 实验环境操作系统:Windows xp ; 程序设计语言:Matlab 6. 实验过程不保存迭代过程,所以始终以x 0和x 1分别存放x k -1和x k ,而x 存放新产生的迭代值x k +1,这样,下一次迭代时需要把上一步的x 1(即x k )赋值于x 0(做新的x k -1).这些点的函数值会重复用到,在迭代公式中也要用到,上一步的x 1作为下一步的x 0也会再一次用它的函数值,为减少重新计算该点函数值的运行时间,将x 1点的函数值保存在变量fx1中.算法的伪代码描述:Input :初值x 0,x 1;精度要求(即误差限)ε;函数f (x );最大迭代次数N7. 结果与分析8. 附录:程序清单%*************************************************************%* 程序名:SecantMethod.m *%* 程序功能:用弦截法求解非线性方程. *%*************************************************************clc;clear all;f=inline('2*x^3-5*x-1'); % 函数f(x)x0=input('第一初值: x0 = ');x1=input('第二初值: x1 = ');epsilon=input('误差限: epsilon=');N=input('最大迭代次数: N=');fprintf('\n n x(n)\n'); % 显示表头fprintf('%2d%14.6f\n', 0, x0); % 占2位显示步数0, 共14位其中小数6位显示x0fprintf('%2d%14.6f\n', 1, x1); % 占2位显示步数1, 共14位其中小数6位显示x11 % 存x0点函数值2 % 存x1点函数值3 % 迭代计数器4 % while n≤ N% 弦截法公式fprintf('%2d%14.6f\n', n, x); %显示迭代过程6 % 达到精度要求否fprintf('\n\n 方程的近似解为: x≈%f\n\n', x);return; % 达到, 则显示结果并完毕程序89 % 原x1做x0为前两步的近似值10 % 现x做x1为一两步的近似值11 % x0点函数值12 % 计算x1点函数值, 为下一次循环13 % 计数器加1 14fprintf('\n 迭代%d 次还不满足误差要求.\n\n',N);《数值计算方法》实验3报告班级: 20##级####x 班 学号: 20##2409#### : ##X 成绩:1. 实验名称实验3 解线性方程组的直接法(之Gauss 消去法) 2. 实验题目用Gauss 消去法求解线性方程组⎪⎪⎪⎭⎫ ⎝⎛=⎪⎪⎪⎭⎫ ⎝⎛⎪⎪⎪⎭⎫ ⎝⎛--000.3000.2000.1643.5072.1000.2623.4712.3000.1000.3000.2001.0321x x x . 3. 实验目的掌握解线性方程组的Gauss 消去法. 4. 基础理论Gauss 消去法是通过对增广矩阵的初等行变换,将方程组变成上三角方程组,然后通过回代,从后到前依次求出各未知数.Gauss 消去法的第k 步(1≤k≤n -1)消元:若0≠kk a ,则依次将增广矩阵第k 行的kk ik a a /-倍加到第i 行(k+1≤i≤n),将第k 列对角线下的元素都化成0.5. 实验环境操作系统:Windows xp ; 程序设计语言:Matlab 6. 实验过程7. 结果与分析8. 附录:程序清单《数值计算方法》实验3报告班级: 20##级####x 班 学号: 20##2409#### : ##X 成绩:1. 实验名称实验3 解线性方程组的直接法(之Gauss 列主元消去法) 2. 实验题目用Gauss 列主元消去法求解线性方程组⎪⎪⎪⎭⎫ ⎝⎛=⎪⎪⎪⎭⎫ ⎝⎛⎪⎪⎪⎭⎫ ⎝⎛--000.3000.2000.1643.5072.1000.2623.4712.3000.1000.3000.2001.0321x x x . 3. 实验目的掌握解线性方程组的Gauss 列主元消去法. 4. 基础理论Gauss 列主元消去法也是通过对增广矩阵的初等行变换,将方程组变成上三角方程组,然后通过回代,从后到前依次求出各未知数.Gauss 列主元消去法的第k 步(1≤k≤n -1)消元:先在nk k k kk a a a ,,,,1 +中找绝对值最大的,将它所在的行与第k 行交换,然后将第k 行的kk ik a a /-倍加到第i 行(k+1≤i≤n),将第k 列对角线下的元素都化成0. 5. 实验环境操作系统:Windows xp ; 程序设计语言:Matlab 6. 实验过程7. 结果与分析8. 附录:程序清单《数值计算方法》实验3报告班级: 20##级####x 班 学号: 20##2409#### : ##X 成绩:1. 实验名称实验3 解线性方程组的直接法(之Doolittle 分解) 2. 实验题目对矩阵A 进行Doolittle 分解,其中⎪⎪⎪⎪⎪⎭⎫⎝⎛----=3101141101421126A .3. 实验目的掌握矩阵的Doolittle 分解. 4. 基础理论矩阵的Doolittle 分解是指将矩阵n n ij a A ⨯=)(可以分解为一个单位下三角矩阵和一个上三角矩阵的乘积.若设⎪⎪⎪⎪⎪⎪⎭⎫⎝⎛=⎪⎪⎪⎪⎪⎪⎭⎫⎝⎛=nn n n n n n n u u u u u u u u u u U l l ll l l L000000,1010010001333223221131211321323121则可依如下顺序公式计算⎪⎪⎩⎪⎪⎨⎧++=-=+=-=∑∑-=-=1111,,2,1,/)(,,1,,k t kk tk it ik ik k r rj kr kj kj nk k i u u l a l nk k j u l a u其中k = 1,2,…,n .5. 实验环境操作系统:Windows xp ; 程序设计语言:Matlab 6. 实验过程(1)按计算公式依次计算一行u 同时计算一列l ;(2)因为计算完u ij (或l ij )后,a ij 就不再使用,为节省存储空间,将计算的u ij (和l ij )仍存放在矩阵A 中的相应位置;(3)使用L 矩阵和U 矩阵时需要根据元素所在位置取固定值或A 中相应位置的值.L 对角线上的元素为1,上三角部分为0,下三角部分为A 中对应的元素;U 的下三角部分为0,上三角部分为A 中对应的元素.算法的伪代码描述: Input :阶数n ;矩阵A7. 结果与分析8. 附录:程序清单%****************************************************% 程序名: Doolittle.m *% 程序功能: 矩阵LU分解中的Doolittle分解. *%****************************************************clc;clear all;n=4; % 矩阵阶数A=[6 2 1 -1;2 4 1 0; 1 1 4 -1; -1 0 -1 3]disp('A=');disp(A);% LU分解(Doolittle分解)for k=1:n% 计算矩阵U的元素u_{kj}% (可参照下面l_{ik}的公式填写)% 计算矩阵L的元素l_{ik}% L 在A 下三角, U 在上三角(对角线为1) enddisp('分解结果:'); disp('L='); for i=1:n for j=1:nif i>j % 在下三角部分, 则取A 对于的元素显示 fprintf(' %8.4f',A(i,j));elseif i==j % 在对角线上, 则显示1 fprintf(' %8d',1);else % 在上三角部分, 则显示0 fprintf(' %8d',0); end endfprintf('\n'); % 换行 enddisp('U='); for i=1:n for j=1:nif i<=j % 在上三角部分或对角线上, 则取A 对于的元素显示 fprintf(' %8.4f',A(i,j));else % 在下三角部分, 则显示0 fprintf(' %8d',0); end endfprintf('\n'); % 换行 end《数值计算方法》实验3报告班级: 20##级####x 班 学号: 20##2409#### : ##X 成绩:1. 实验名称实验3 解线性方程组的直接法(之LU 分解法) 2. 实验题目用LU 分解(Doolittle 分解)法求解线性方程组⎪⎩⎪⎨⎧=++=++=++104615631552162321321321x x x x x x x x x 3. 实验目的熟悉解线性方程组LU 分解法.4. 基础理论若将矩阵A 进行了Doolittle 分解,A = LU ,则解方程组b x A=可以分解求解两个三角方程组b y L=和y x U =.它们都可直接代入求解,其中b y L=的代入公式为∑-==-=11,,2,1,k j j kj k k n k y l b y而y x U=的代入公式为∑+=-=-=nk j kk j kjk k n n k u x uy x 11,,1,,/)( .5. 实验环境操作系统:Windows xp ; 程序设计语言:Matlab 6. 实验过程(1)Doolittle 分解过程依次计算一行u 同时计算一列l 完成,并将计算的u ij (和l ij )仍存放在矩阵A 中的相应位置;(2)求解方程组的代入公式中用到的u ij 和l ij 都直接在A 的相应位置取值即可. 算法的伪代码描述:Input :阶数n ;矩阵A ;常数项向量b7. 结果与分析8. 附录:程序清单%**************************************************** % 程序名: LinearSystemByLU.m *% 程序功能: 利用LU分解(Doolittle分解)解方程组. *%****************************************************clc;clear all;n=3; % 矩阵阶数A=[1 2 6; 2 5 15; 6 15 46];b=[1;3;10];% LU分解(Doolittle分解)for k=1:n% 计算矩阵U的元素u_{kj}% (可参照下面l_{ik}的公式填写)% 计算矩阵L的元素l_{ik}% L在A下三角, U在上三角(对角线为1) endfor k=1:n % 用代入法求解下三角方程组Ly=by(k)=b(k);3 %∑-==-=11,,2,1,kjj kjk knkylby33enddisp('方程组Ly=b的解:y=');disp(y');for k=n:-1:1 % 回代求解上三角方程组Ux=y x(k)=y(k);6 %∑+=-=-=nkjj kjk knnkxuyx11,,1,,666 enddisp('原方程组的解:x='); disp(x');《数值计算方法》实验3报告班级: 20##级####x 班 学号: 20##2409#### : ##X成绩:1. 实验名称实验3 解线性方程组的直接法(之Cholesky 分解) 2. 实验题目对矩阵A 进行Cholesky 分解,其中⎪⎪⎪⎪⎪⎭⎫⎝⎛----=3101141101421126A . 3. 实验目的理解矩阵的Cholesky 分解. 4. 基础理论矩阵的Cholesky 分解是指将矩阵n n ij a A ⨯=)(可以分解为一个下三角矩阵L 和L 转置的乘积,即A =LL T,其中L 各元素可依如下顺序公式计算⎪⎪⎩⎪⎪⎨⎧++=-=-=∑∑-=-=11112,,2,1,/)(k t kktk it ik ik k r kr kk kk nk k i l l l a l l a l其中k = 1,2,…,n .5. 实验环境操作系统:Windows xp ; 程序设计语言:VC++ 6. 实验过程(1)按计算公式依次先计算一列对角线上的元素l kk ,再计算这列其他元素l ik ,且对称位置的元素也取同一个值;(2)因为计算完l ij 后,a ij 就不再使用,为节省存储空间,将计算的l ij 仍存放在矩阵A 中的相应位置;(3)使用L 矩阵时需要根据元素所在位置取固定值或A 中相应位置的值.L 上三角部分为0,对角线和下三角部分为A 中对应的元素.算法的伪代码描述:Input :阶数n ;矩阵AOutput :矩阵L (合并存储在数组A 中)行号 伪代码注释1 for k ← 1 to n2∑-=-=112k r krkk kk l a l3 for i ← k to n4 ∑-=-=11/)(k t kk tk it ik ik l l l a l计算结果存放在a ij5 endfor6 endfor7return L输出L7. 结果与分析8. 附录:程序清单%************************************************************* %* 程 序 名:Cholesky.m * %* 程序功能:对称正定矩阵的Cholesky 分解. * %*************************************************************n=4; % 矩阵阶数 A=[6,2,1,-1; 2,4,1,0; 1,1,4,-1; -1,0,-1,3];disp('A ='); for i=1:n for j=1:nfprintf('%10.4f',A(i,j)); % 共占14位endfprintf('\n');% 一行完毕换行end% Cholesky 分解 for k=1:n % 计算对角线上的l _{kk}% 计算其他的l _{ik} % 和l _{ki}end % L 在A 下三角, L^T 在上三角disp('分解结果:'); disp('L='); for i=1:n for j=1:n if i>=j % 在下三角部分或对角线上, 则取A 对于的元素显示fprintf('%10.4f',A(i,j));else % 在上三角部分, 则显示0 fprintf('%10d',0); end endfprintf('\n'); % 换行 end《数值计算方法》实验3报告班级: 20##级####x 班 学号: 20##2409#### : ##X成绩:1. 实验名称实验3 解线性方程组的直接法(之改进的Cholesky 分解) 2. 实验题目对矩阵A 进行改进的Cholesky 分解,其中⎪⎪⎪⎪⎪⎭⎫⎝⎛----=3101141101421126A .3. 实验目的理解矩阵改进的Cholesky 分解. 4. 基础理论矩阵的改进的Cholesky 分解是指将矩阵n n ij a A ⨯=)(可以分解为一个单位下三角矩阵L 和对角矩阵D 与L 转置的乘积,即A =LDL T,其中L 和D 各元素可依如下顺序公式计算⎪⎪⎩⎪⎪⎨⎧++=-=-=∑∑-=-=11112,,2,1,/)(k t k kt it t ik ik k r kr r kk k nk k i d l l d a l l d a d其中k = 1,2,…,n .5. 实验环境操作系统:Windows xp ; 程序设计语言:VC++ 6. 实验过程(1)按计算公式依次先计算D 的一个元素d k ,再计算L 中这列的元素l ik ,且对称位置的元素也取同一个值;(2)因为计算完d k 和l ij 后,a kk 或a ij 就不再使用,为节省存储空间,将计算的a kk 或l ij 仍存放在矩阵A 中的相应位置;(3)使用L 矩阵时需要根据元素所在位置取固定值或A 中相应位置的值.L 对角线和上三角部分为0,下三角部分为A 中对应的元素;D 对角线为A 中对应的元素,其余都是0.算法的伪代码描述: Input :阶数n ;矩阵AOutput :矩阵L (合并存储在数组A 中)7. 结果与分析8. 附录:程序清单%************************************************************* %* 程 序 名:ImprovedCholesky.m * %* 程序功能:对称正定矩阵的改进的Cholesky 分解. * %*************************************************************n=4; % 矩阵阶数A=[6,2,1,-1; 2,4,1,0; 1,1,4,-1; -1,0,-1,3];disp('A =');for i=1:nfor j=1:nfprintf('%10.4f',A(i,j)); % 共占14位endfprintf('\n'); % 一行完毕换行end% Cholesky分解for k=1:n% 计算D对角线上的u_{kk}% 计算L的元素l_{ik}% 和L转置的元素l_{ki} end % L在A下三角, D在对角线disp('分解结果:');disp('L=');for i=1:nfor j=1:nif i>j % 在下三角部分, 则取A对于的元素显示fprintf('%10.4f',A(i,j));elseif i==j % 在对角线上, 则显示1fprintf('%10d',1);else % 在上三角部分, 则显示0fprintf('%10d',0);endendfprintf('\n'); % 换行enddisp('D='); for i=1:n for j=1:n if i==j % 在对角线上, 则取A 对于的元素显示fprintf('%10.4f',A(i,j));else % 其余显示0fprintf('%10d',0); end endfprintf('\n'); % 换行 end《数值计算方法》实验3报告班级: 20##级####x 班 学号: 20##2409#### : ##X 成绩:1. 实验名称实验3 解线性方程组的直接法(之追赶法) 2. 实验题目用追赶法求解线性方程组⎪⎪⎪⎪⎪⎭⎫ ⎝⎛=⎪⎪⎪⎪⎪⎭⎫ ⎝⎛⎪⎪⎪⎪⎪⎭⎫ ⎝⎛-----101053001210023100124321x x x x 3. 实验目的熟悉解线性方程组的追赶法. 4. 基础理论对于系数矩阵为三对角矩阵的方程组,其Crout 分解可分解为⎪⎪⎪⎪⎪⎪⎭⎫⎝⎛⎪⎪⎪⎪⎪⎪⎭⎫⎝⎛=⎪⎪⎪⎪⎪⎪⎭⎫⎝⎛=------11111211122111122211n n nn n n nn n n t t t s a s a s a s b a c b a c b a c b A这样,解方程组可以由如下2步完成:“追”:,,,3,2,/)(,,/,/,1111111111n i s y a f y t a b s s c t s f y b s i i i i i i i i i i i i =-=-====-----其中:Tn f f ),,(1 为方程组的常数项,n t 没用;“赶”:.1,,2,1,,1 --=-==+n n i x t y x y x i i i i n n5. 实验环境操作系统:Windows xp ; 程序设计语言:Matlab 6. 实验过程在“追”的过程中,向量s 和y 都有n 个元素,t 只有n -1个元素,又1s 和1y 的计算公式与其它i s 和i y 不同,所以先单独计算1s 和1y ,然后在一个n -1次循环中,求其它i s 和i y 以与i t .由于在“追”的过程中,i b ,i c 和i f 在分别计算完对应的i s ,i t 和i y 后就不再使用,所以借用数组b ,c 和f 存储向量s ,t 和y ;同样在“赶”的过程中,i y 在计算完对应的i x 后就不再使用,所以再一次借用数组f 存储向量x .追赶法算法的伪代码描述:Input :阶数n ;三对角矩阵的三条对角线向量a ,b ,c ,常数项向量f Output :方程组的解x改进的追赶法算法的伪代码描述:Input :阶数n ;三对角矩阵的三条对角线向量a ,b ,c ,常数项向量f Output :方程组的解x7. 结果与分析8. 附录:程序清单%*************************************************************%* 程序名:ChaseAfter.m *%* 程序功能:用追赶法求解三对角线性方程组. *%*************************************************************clc;clear all;n=4;a=[0,-1,-1,-3];b=[2, 3, 2, 5];c=[-1, -2, -1, 0];f=[0, 1, 0, 1];% "追"s(1) = b(1);y(1) = f(1); % 先单独求s_1和y_1 for k = 1 : n-1% 再求t_i(i=1,2,…,n-1)% s_i(i=2,3,…,n)% y_i(i=2,3,…,n)end% "赶"x(n) = y(n); % 先单独求x_nfor k = n-1 : -1 : 1% 再求x_i(i=n-1,n-2, (1)endx=x' % 输出解向量-------------------------------------------------------------------------------------------------------------------改进的程序:%*************************************************************%* 程序名:ChaseAfter.m *%* 程序功能:用追赶法求解三对角线性方程组. *%*************************************************************clc;clear all;n=4;a=[0,-1,-1,-3];b=[2, 3, 2, 5];c=[-1, -2, -1, 0];f=[0, 1, 0, 1];% "追"% b(1)=b(1); % s_1仍在b_1中,不用重新计算y(1)=f(1)/b(1); % 先单独y_1for k=1:n-1% 再求t_i(i=1,2,…,n-1)% s_i(i=2,3,…,n)% y_i(i=2,3,…,n)end% "赶"% f(n)=f(n); % x_n等于y_n仍在f_n中for k=n-1:-1:1% 再求x_i(i=n-1,n-2, (1)endx=f' % 输出解向量《数值计算方法》实验4报告班级:20##级####x班学号:20##2409####:##X 成绩:1. 实验名称实验4 解线性方程组的迭代法(之Jacobi迭代)2. 实验题目用Jacobi迭代法求解线性方程组1231231232251223x x x x x x x x x +-=⎧⎪++=⎪⎨++=⎪⎪⎩任取3. 实验目的掌握解线性方程组的Jacobi 迭代法. 4. 基础理论将第i (n i ≤≤1)个方程i n in i i b x a x a x a =+++ 2211移项后得到等价方程ii n in i i i i i i i i i a x a x a x a x a b x /)(11,11,11------=++--便可构造出Jacobi 迭代公式,1,0,/)()()(11,)(11,)(11)1(=------=++--+k a x a x a x a x a b x ii k n in k i i i k i i i k i i k i . 5. 实验环境操作系统:Windows xp ; 程序设计语言:Matlab 6. 实验过程7. 结果与分析8. 附录:程序清单《数值计算方法》实验4报告班级: 20##级####x 班 学号: 20##2409#### : ##X 成绩:1. 实验名称实验4 解线性方程组的迭代法(之Gauss-Seidel 迭代) 2. 实验题目用Gauss-Seidel 迭代法求解线性方程组。

工程数值分析实验报告(3篇)

工程数值分析实验报告(3篇)

第1篇一、实验目的本次实验旨在通过数值分析的方法,对工程实际问题进行建模、求解和分析。

通过学习数值方法的基本原理和算法,提高解决实际工程问题的能力。

二、实验内容1. 线性方程组的求解2. 矩阵特征值与特征向量的计算3. 函数插值与曲线拟合4. 数值微分与积分三、实验步骤1. 线性方程组的求解(1)编写程序实现高斯消元法、克劳斯消元法和列主元素法(2)设计输入界面,用户输入增广矩阵的行和列,填写系数及常数项(3)分别运用三种方法求解线性方程组,比较求解结果的正确性、数值稳定性和计算效率2. 矩阵特征值与特征向量的计算(1)编写程序实现幂法、QR算法和逆幂法(2)设计输入界面,用户输入矩阵的行和列,填写矩阵元素(3)分别运用三种方法计算矩阵的特征值与特征向量,比较求解结果的准确性和计算效率3. 函数插值与曲线拟合(1)编写程序实现拉格朗日插值、牛顿插值和样条插值(2)设计输入界面,用户输入函数的自变量和函数值,选择插值方法(3)分别运用三种方法进行函数插值,比较插值结果的准确性和光滑性4. 数值微分与积分(1)编写程序实现有限差分法、龙格-库塔法和辛普森法(2)设计输入界面,用户输入函数的导数或积分的上下限,选择数值方法(3)分别运用三种方法进行数值微分和积分,比较求解结果的准确性和计算效率四、实验结果与分析1. 线性方程组的求解通过实验,我们发现列主元素法在求解线性方程组时具有较好的数值稳定性,计算效率也较高。

而高斯消元法和克劳斯消元法在处理大型稀疏矩阵时存在一定的困难。

2. 矩阵特征值与特征向量的计算实验结果表明,QR算法和逆幂法在计算矩阵特征值与特征向量时具有较高的准确性和计算效率。

幂法在处理大型稀疏矩阵时表现出较好的性能。

3. 函数插值与曲线拟合在函数插值和曲线拟合实验中,样条插值方法具有较好的准确性和光滑性。

拉格朗日插值和牛顿插值方法在处理简单函数时表现良好,但在处理复杂函数时可能存在精度问题。

误差传播与算法稳定性实验报告

误差传播与算法稳定性实验报告

《数值分析》实验分析报告姓名:___________学号:S2*******日期:2016.10.15班:1602一、实验名称误差传播与算法稳定性二、实验目的体会稳定性在选择算法中的地位。

误差扩张的算法是不稳定的,是我们所不期望的;误差衰竭的算法是稳定的,是我们努力寻求的,这是贯穿本课程的目标。

三、实验内容1计算E n = [x n e x」dx, n= 1,2,A四、算法描述E n = 0x n e xJL dx, n = 1,2, A利用分部积分可得:1 A 1 A ( 1 \ 1―[.nx. [.n.x 1 nx1 . x n」. 丄n x n」. . ―E n =— Jx e dx = — Jx de = — x e 0—n Je x dx =1 -一Je x dx =1 - nE n_i, n e o e o e l o je o可得递推公式为:1、E n .1=1-(n 1)E n, n =1,2,3」F面分别以1, 2递推关系求解方案一:E n1 =1-(n 1)E n, n =1,2,3,上E n = 1- nE n J巳=0.367879万案二;E n 工1 J, n =N -1, N -2^ ,3,2 n 1 2,3,上2、E n 1七1n 1n =N-1,N -2,上,3,2当n =1时E1=1 一丄e x x o dx =-e° e 0.367879 (保留六位有效数字)n =2,3」n当 x.(0,1)时,L v x n e x -< x n ,e1 n11—dx < x n e xJ dx < x ndx 二 0 e 0 0当 n_.:时,E n > 0 这里取n =20=E20 :- [— —]=^^ : 0.0325685 (保留六位有效数字)2 21e 21 42e1 -E n五、 程序流程图由于实验方案明显、简单,实现步骤及流程图省略 六、 实验结果 计算结果如表1-1 : 1-1计算结果表nE n*E n 1 0.367879 0.367879 2 0.264241 0.264241 3 0.207277 0.207277 4 0.170893 0.170893 5 0.145533 0.145533 6 0.126802 0.126802 7 0.112384 0.112384 8 0.100932 0.100932 9 0.0916120 0.0916123 10 0.0838770 0.0838771 11 0.0773520 0.0773522 120.07177500.07177331e(n 1)< E n <n20 : 0.0325685 n =20,19^ ,3,2。

数值分析实验报告

数值分析实验报告

实验五 解线性方程组的直接方法实验5.1 (主元的选取与算法的稳定性) 问题提出:Gauss 消去法是我们在线性代数中已经熟悉的。

但由于计算机的数值运算是在一个有限的浮点数集合上进行的,如何才能确保Gauss 消去法作为数值算法的稳定性呢?Gauss 消去法从理论算法到数值算法,其关键是主元的选择。

主元的选择从数学理论上看起来平凡,它却是数值分析中十分典型的问题。

实验内容:考虑线性方程组n n n R b R A b Ax ∈∈=⨯,,编制一个能自动选取主元,又能手动选取主元的求解线性方程组的Gauss 消去过程。

实验要求:(1)取矩阵⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎣⎡=⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎣⎡=1415157,6816816816 b A ,则方程有解T x )1,,1,1(* =。

取n=10计算矩阵的条件数。

让程序自动选取主元,结果如何?(2)现选择程序中手动选取主元的功能。

每步消去过程总选取按模最小或按模尽可能小的元素作为主元,观察并记录计算结果。

若每步消去过程总选取按模最大的元素作为主元,结果又如何?分析实验的结果。

(3)取矩阵阶数n=20或者更大,重复上述实验过程,观察记录并分析不同的问题及消去过程中选择不同的主元时计算结果的差异,说明主元素的选取在消去过程中的作用。

(4)选取其他你感兴趣的问题或者随机生成矩阵,计算其条件数。

重复上述实验,观察记录并分析实验结果。

思考题一:(Vadermonde 矩阵)设⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎣⎡=⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎣⎡=∑∑∑∑====n i i n n i i ni i n i i n n n n n n nx x x x b x x x x x x x x x x x x A 002010022222121102001111 ,, 其中,n k k x k ,,1,0,1.01 =+=,(1)对n=2,5,8,计算A 的条件数;随n 增大,矩阵性态如何变化?(2)对n=5,解方程组Ax=b ;设A 的最后一个元素有扰动10-4,再求解Ax=b(3)计算(2)扰动相对误差与解的相对偏差,分析它们与条件数的关系。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

专业 序号 姓名 日期
实验1 算法的数值稳定性实验
【实验目的】
1.掌握用MATLAB 语言的编程训练,初步体验算法的软件实现;
2.通过对稳定算法和不稳定算法的结果分析、比较,深入理解算法的数值稳定性及其重要性。

【实验内容】
1.计算积分 ()dx a x x I n
⎰+=1
0)(n (n=0,1,2......,10) 其中a 为参数,分别对a=0.05及a=15按下列两种方案计算,列出其结果,并对其可靠性,说明原因。

2.方案一 用递推公式 n aI I n 11n +
-=- (n=1,2,......,10) 递推初值可由积分直接得)1(0a
a In I += 3. 方案二 用递推公式 )1(11-n n
I a I n +-= (n=N,N -1,......,1) 根据估计式 ()()()11111+<<++n a I n a n 当1
n a +≥n 或
()()n
1111≤<++n I n a 当1
n n a 0+<≤ 取递推初值为 ()()()()11212])1(1111[21N +++=++++≈N a a a N a N a I 当1
a +≥N N 或 ()()]1111[21N
N a I N +++= 当1a 0+<
≤N N 计算中取N=13开始
【程序如下】: % myexp1_1.m --- 算法的数值稳定性实验
% 见 P11 实验课题(一)
%
function yyjj
global n a
N = 20; % 计算 N 个值
a =0.05;%或者a=15
% %--------------------------------------------
% % [方案I] 用递推公式
%I(k) = - a*I(k-1) + 1/k
%
I0 =log((a+1)/a); % 初值
I = zeros(N,1); % 创建 N x 1 矩阵(即列向量),元素全为零
I(1) =-a*I0+1;
for k = 2:N
I(k) =-a*I(k-1)+1/k;
end
% %--------------------------------------------
% % [方案II] 用递推公式
%I(k-1) = ( - I(k) + 1/k ) / a
%
II = zeros(N,1);
if a >= N/(N+1)
II(N)=(2*a+1)/(2*a*(a+1)*(N+1));
else
II(N) =(1/(a+1)/(N+1)+1/N)/2;
end
for k = N:-1:2
II(k-1) =(-II(k)+1/k)/a;
end
% %--------------------------------------------
% % 调用 matlab 高精度数值积分命令 quadl 计算以便比较
III = zeros(N,1);
for k = 1:N
n = k;
III(k) = quadl(@f,0,1);
end
% %--------------------------------------------
% % 显示计算结果
clc
fprintf('\n 方案I结果方案II结果精确值') for k = 1:N,
fprintf('\nI(%2.0f) %17.7f %17.7f %17.7f',k,I(k),II(k),III(k))
end
% %--------------------------------------------
function y = f(x) % 定义函数
global n a % 参量 n 为全局变量
y =x.^n./(a+x); % ★注意:这里一定要 '点' 运算
return
% %--------------------------------------------
【运行结果如下】:
当a=0.05
方案I结果方案II结果精确值
I( 1) 0.8477739 -919648916620722180000.0000000 0.8477739 I( 2) 0.4576113 45982445831036109000.0000000 0.4576113 I( 3) 0.3104528 -2299122291551805700.0000000 0.3104528 I( 4) 0.2344774 114956114577590290.0000000 0.2344776 I( 5) 0.1882761 -5747805728879515.0000000 0.1882761
I( 6) 0.1572529 287390286443975.9400000 0.1572529
I( 7) 0.1349945 -14369514322198.6540000 0.1349945
I( 8) 0.1182503 718475716110.0577400 0.1182503
I( 9) 0.1051986 -35923785805.3917770 0.1051986
I(10) 0.0947401 1796189290.3695889 0.0947401
I(11) 0.0861721 -89809464.4275704 0.0861724
I(12) 0.0790247 4490473.3047119 0.0790247
I(13) 0.0729718 -224523.5883125 0.0729718
I(14) 0.0677800 11226.2508442 0.0677800
I(15) 0.0632777 -561.2458755 0.0632777
I(16) 0.0593361 28.1247938 0.0593361
I(17) 0.0558567 -1.3474162 0.0558567
I(18) 0.0527627 0.1229264 0.0527627
I(19) 0.0499934 0.0464853 0.0499934
I(20) 0.0475003 0.0476757 0.0475003
当a=15
方案I结果方案II结果精确值
I( 1) 0.0319222 0.0319222 0.0319222
I( 2) 0.0211673 0.0211673 0.0211673
I( 3) 0.0158245 0.0158245 0.0158245
I( 4) 0.0126326 0.0126326 0.0126326
I( 5) 0.0105112 0.0105112 0.0105112
I( 6) 0.0089993 0.0089993 0.0089993
I( 7) 0.0078674 0.0078674 0.0078674
I( 8) 0.0069883 0.0069883 0.0069883
I( 9) 0.0062862 0.0062859 0.0062859
I(10) 0.0057064 0.0057117 0.0057117
I(11) 0.0053136 0.0052336 0.0052337
I(12) 0.0036289 0.0048293 0.0048296
I(13) 0.0224896 0.0044830 0.0044838
I(14) -0.2659159 0.0041831 0.0041831
I(15) 4.0554050 0.0039207 0.0039207
I(16) -60.7685756 0.0036893 0.0036893
I(17) 911.5874579 0.0034837 0.0034837
I(18) -13673.7563129 0.0033002 0.0032998
I(19) 205106.3973248 0.0031283 0.0031344
I(20) -3076595.9098724 0.0030754 0.0029847>>
【结果分析】:
1、综上所述,当a=0.05的时候,方案二算法的结果从I(20)开始计算,刚开始的时候与精确解相差不大,但是随着计算的进行,误差变得越来越大,最终与原来的精确解相差十分巨大,而方案一算法的数值结果始终与精确解相差不大,是稳定的算法。

2、当a=15的时候,反而是方案二的算法的数值结果与精确解更为接近,方案一算法的结果随着算法运算的进行,与精确解相差变大了。

3、以上的实验说明了我们在进行数值分析时一定要选择合适的算法,而不能盲目的选择单一的算法,因为随着数值的变化,可能稳定的算法也会出现很大的误差。

所以我们要根据实际问题来确定合适的算法,才能尽可能的减小误差。

相关文档
最新文档