数值计算方法

合集下载

数值计算方法及算法

数值计算方法及算法

b a
(
x

x0
)
(
x

xn
)
xdx
n is odd n is even
特别,梯形公式和Simpson公式的误差为
E1

f ( ) (b a)3
12
代数精度=1
E2


f (4) ( ) (b a)5
2880
代数精度=3
复化数值积分
b
f (x)dx
f (x)dx
构造n-1次插值多项式φ1(x)和 φ2(x),则有
(x)

x xn x0 xn
1(x)
x x0 xn x0
2 ( x)
对n用归纳法。
• f[x0,…,xn]与x0,…,xn的顺序无关。
误差估计:
R(x)
f (x) (x)
f (n1) ( )
(n 1)!
(n 1)!
Hermite插值
给定平面上n+1个插值点(xi,yi,mi), 构造 2n+1次多项式φ(x), 满足φ(xi)=yi, φ’(xi)=mi, i=0,1,…,n.
单项式 基函数
Lagrange 基函数
(x) a0 a1x an1x2n1
1





1 2
1 n1
nh (nh)
(nh)
2 n1

0
1
1

1

1
1


1

n



0 0
1 1n

数值计算方法总结

数值计算方法总结
误差分类
模型误差 数据误差 截断误差 计算误差 在建立数学模型时,忽略次要因素而造成的 由于问题中的值通过观察得到的,从而产生误差 通过近似替代,简化为较易求解的问题 由于计算机中数的位数限制而造成的
第1章 数值计算方法的一般概念
1.2 误差
~ x 设 为真值, x 为真值的近似值
绝对误差 绝对误差:是指近似值与真正值之差或差的绝对 值,即 x x x,或 x 绝对误差界:用一个满足 绝对误差的大小,并记为 的数 ,来表示
分为n -1步, 第k步变换n - k 行 : 求倍数, 再从n 1- k 个元素中减去第k 行 对应列的倍数,因此所需乘除次数: n3 n 2 5n N1 (n k )(n 1 k 1) 3 2 6 k 1
n
2.回代运算量
求xn需做1次除法, 求xn-1需做1次乘法和1次除法,..., 求x1需n -1次 乘法和1次除法,因此所需乘除次数: n(n 1) N 2 1 2 ... n n3 2 2 n 因此,N N1 N 2 n 3 3
j i, i 1,..., n j i 1, i 2,..., n 1
第2章 解线性代数方程的直接法
2.2 三角分解法 2.2.3 追赶法
b1 a 1 A A b
作克洛特分解
c1 b2 a2
c2 b3 c3 an 1 bn 1 cn 1 an
选主元方法分为行主元法与全主元法
第2章 解线性代数方程的直接法
2.2 三角分解法 2.2.1 杜里特尔分解法 高斯消去法的消去过程,实质上是把系数矩阵A分解为单位下三角矩 阵L与上三角矩阵R的乘积,并且求解方程组Ly=b的过程,回代过程是求解 上三角形方程组Rx=y

数值计算方法

数值计算方法

1.题目造倒数表,并例求 18 的倒数。

(精度为 0.0005)2.算法原理2.1 牛顿迭代法牛顿迭代法是通过非线性方程线性化得到迭代序列的一种方法。

对于非线性方程f x( ) = 0 ,若已知根x* 的一个近似值x k ,将f (x) 在x k 处展成一阶泰勒公式后忽略高次项可得:f (x) ≈f x( k ) + f '(x k )(x −x k )右端是直线方程,用这个直线方程来近似非线性方程f (x) 。

将非线性方程f x( ) = 0的根x*代入f x( *) = 0 ,即f x( k ) + f '(x k )(x* −x k ) ≈ 0* x k−f (x k ) 解出x ≈f '(x k )将右端取为x k+1 ,则x k+1 是比x k 更接近于x* 的近似值,即f (x k )x k+1 ≈x k −f '(x k ) 这就是牛顿迭代公式,相应的迭代函数是f (x)ϕ(x) = x −f '(x)2.2 牛顿迭代法的应用1 1算是求cx− =1 0的解,解出计x,即得到。

取c c 有牛顿迭代公式精品文档cx k −11 x k+1 = x k −= c c 这样就失去了迭代的意义,达不到迭代的效果。

1f (x) = cx−1,f '(x)= c,故重新构造方程:cx2 −x = 0 ,也是该式的解。

故取f (x) = cx2 −x ,cf '(x) = 2cx −1,则有牛顿迭代公式x k+1 = x k −cx k2 −x k = cx k2 , k = 0,1,...2cx k −1 2c k −11 1的值在~ 之间,取初值x0 = 0.1。

20 103.流程图0 ,,N x ε读入 1 k⇒ ( ) 0?0x f ′ = 1x 输出 01 1 k kx x ⇒ + ⇒ ( ) ( )0 10 0f x x x f x ⇒ − ′ 1 0 ?x x ε − < ≠=<=≥≠4.输出结果5.结果分析当k= 3时,得 5 位有效数字 0.05 564。

数值计算方法

数值计算方法

数值计算方法的特点1.面向计算机,要根据计算特点提供实际可行的有效算法,即算法只能包括加、减、乘、除运算和逻辑运算,是计算机能直接处理的。

2.有可能的理论分析,能任意逼近并达到精度要求,对近似算法要保证收敛性和数值稳定性,还要对误差进行分析,这些都建立在相应数学理论基础上。

3.要有好的计算复杂性,时间复杂性好是指节省时间,空间复杂性好是指节省存储量,这也是建立算法要研究的问题,它关系到算法能否在计算机上实现。

4.要有数值实验,即任何一个算法除了从理论上要满足上述三点外,还要通过数值试验证明是行之有效的。

误差来源模型误差;观测误差;截断误差;舍入误差。

设计算法的注意事项1.要注意简化计算步骤,减少运算次数。

2.要避免两相近数相减。

3.要注意浮点数运算的特点,防止大数“吃掉”小数。

4.要避免除数绝对值远远小于被除数绝对值的除法。

5.要设法控制误差的传播,选取数值稳定的计算公式。

二分法局限性是只能用于求实根,不能用于求复根及偶数重根。

牛顿法X n+1=x n-[f(x1)]/[f’(x1)],n=1,2,3……例:用牛顿法求方程f(x)=x3+4x2-10=0在[1,2]内一个实根,取初始近似值x0=1.5解:f’(x)=3x2+8x所以迭代公式为X n+1=x n-(x n3+4x n2-10)/(3x n2+8x n),n=0,1,2……拉格朗日插值多项式l0(x)=(x-x1)/(x0-x1),l1(x)=(x-x0)/(x1-x0)L1(x)=y0l0(x)+y1l1(x)例:已知y=,x0=4,x1=9,用线性插值求的近似值。

解:y0=2,y1=3,基函数分别为l0(x)=(x-9)/(4-9)=…….L1(x)=(x-4)/(9-4)=……..L1(x)= y0l0(x)+y1l1(x)=……所以L1(x)=……多项式拟合解题步骤:1.由已知数据画出函数粗略的图形—散点图,确定拟合多项式的次数n。

数值计算方法教案

数值计算方法教案

数值计算方法教案第一章:数值计算概述1.1 数值计算的定义与意义介绍数值计算的概念解释数值计算在科学研究与工程应用中的重要性1.2 数值计算方法分类介绍数值逼近、数值积分、数值微分、数值解方程等基本方法分析各种方法的适用范围和特点1.3 误差与稳定性解释误差的概念及来源讨论数值计算中误差的控制与减小方法介绍稳定性的概念及判断方法第二章:插值与逼近2.1 插值法的基本概念介绍插值的概念及意义解释插值函数的性质和条件2.2 常用的插值方法介绍线性插值、二次插值、三次插值等方法分析各种插值方法的优缺点及适用范围2.3 逼近方法介绍切比雪夫逼近、傅里叶逼近等方法解释逼近的基本原理及应用场景第三章:数值积分与数值微分3.1 数值积分的基本概念介绍数值积分的概念及意义解释数值积分的原理和方法3.2 常用的数值积分方法介绍梯形公式、辛普森公式、柯特斯公式等方法分析各种数值积分方法的适用范围和精度3.3 数值微分的基本概念与方法介绍数值微分的概念及意义解释数值微分的原理和方法第四章:线性方程组的数值解法4.1 线性方程组数值解法的基本概念介绍线性方程组数值解法的概念及意义解释线性方程组数值解法的原理和方法4.2 常用的线性方程组数值解法介绍高斯消元法、LU分解法、迭代法等方法分析各种线性方程组数值解法的优缺点及适用范围4.3 稀疏矩阵技术解释稀疏矩阵的概念及意义介绍稀疏矩阵的存储和运算方法第五章:非线性方程和方程组的数值解法5.1 非线性方程数值解法的基本概念介绍非线性方程数值解法的概念及意义解释非线性方程数值解法的原理和方法5.2 常用的非线性方程数值解法介绍迭代法、牛顿法、弦截法等方法分析各种非线性方程数值解法的优缺点及适用范围5.3 非线性方程组数值解法介绍消元法、迭代法等方法讨论非线性方程组数值解法的特点和挑战第六章:常微分方程的数值解法6.1 常微分方程数值解法的基本概念介绍常微分方程数值解法的概念及意义解释常微分方程数值解法的原理和方法6.2 初值问题的数值解法介绍欧拉法、改进的欧拉法、龙格-库塔法等方法分析各种初值问题数值解法的适用范围和精度6.3 边界值问题的数值解法介绍有限差分法、有限元法、谱方法等方法讨论边界值问题数值解法的特点和挑战第七章:偏微分方程的数值解法7.1 偏微分方程数值解法的基本概念介绍偏微分方程数值解法的概念及意义解释偏微分方程数值解法的原理和方法7.2 偏微分方程的有限差分法介绍显式差分法、隐式差分法、交错差分法等方法分析各种有限差分法的适用范围和精度7.3 偏微分方程的有限元法介绍有限元法的原理和步骤讨论有限元法的适用范围和优势第八章:数值模拟与计算可视化8.1 数值模拟的基本概念介绍数值模拟的概念及意义解释数值模拟的原理和方法8.2 计算可视化技术介绍计算可视化的概念及意义解释计算可视化的原理和方法8.3 数值模拟与计算可视化的应用讨论数值模拟与计算可视化在科学研究与工程应用中的重要作用第九章:数值计算软件与应用9.1 数值计算软件的基本概念介绍数值计算软件的概念及意义解释数值计算软件的原理和方法9.2 常用的数值计算软件介绍MATLAB、Mathematica、Python等软件的特点和应用领域9.3 数值计算软件的应用案例分析数值计算软件在科学研究与工程应用中的典型应用案例第十章:数值计算方法的改进与新发展10.1 数值计算方法的改进讨论现有数值计算方法的局限性介绍改进数值计算方法的研究现状和发展趋势10.2 新的数值计算方法介绍近年来发展起来的新型数值计算方法分析新型数值计算方法的优势和应用前景10.3 数值计算方法的未来发展探讨数值计算方法在未来可能的发展方向和挑战重点和难点解析一、数值计算概述难点解析:对数值计算概念的理解,误差来源及控制方法的掌握。

第三章基本数值计算方法一

第三章基本数值计算方法一

1.0000 0 0 -1.6757 1.0676
U0
0 1.0000
0
-1.8378
-1.2162
,
0 0 1.0000 0.9820 0.3018
0
0
0
0
0
这个最简行阶梯形式说明原 来的方程组是欠定的。
欠定方程组解的特点
它等价于下列方程组:
x1
-1.6757 x4 = 1.0676
1
0
3
0
0
(柠檬酸)x1
1 1
,(小苏打)x2
8 6
(, 碳酸钠)x3
0 6
,
(水)x4
2 0
,
(二氧化碳)x5
0 1
,
3
8
7
1
2
• 按四种元素左右平衡列出四个方程,得:
1 0 3 0 0 0
1
1
x1
8
6
x2
0 6
x3
2 0
x4
0 1
x5
0 0
Ax
=
b
=
0
3
8
7
1
2
0
化学方程配平程序
X4 = 8.66
为什么要提出这种新的计算方法?
把上例中第四个方程改为:
4x1 + 2x2 + 7x3 -778/222 x4 877 / 222
,求其解。
解:输入新参数
A=[6,1,6,-6;1,-1,9,9;-2,4,0,4;4,2,7,-778/222];
b=[7;5;-7;877/222]; 键入U=rref([A,b]),得到
4x1 + 2x2 + 7x3 -5x4 9

数值计算方法第01章误差

数值计算方法第01章误差

1.2 绝对误差、相对误差和有效数字
绝对误差/* Absolute error */
定义1. 设x为准确值 , x*为x的一个近似值 , 称 e(x*) x* x
为近似值x*的绝对误差 ,简称误差 ,可简记为E.
因为准确值 x 往往是未知甚至是无法 知道的
因此 E(x* ) x* x 往往也无法求出
例:计算
In

1 e
1 xne xdx ,
0
n 0,1, 2, ......
公式一:In 1 n In1
I0

1 e
1 e xdx
0
1
1 e

0.63212056
记为
I
* 0
则初始误差 E0 I0 I0* 0.5108
注意此公式精确成 立
1
e
1 0
x1=0.0315 x2=0.3015 x3=31.50 x4=5000
1.2.2 有效数字
有效数字是近似值的一种表示法。它既能表示近似值的大小,又能表示其精确程度。
若x*作为x的近似值, 其绝对误差的绝对值不 超过某一位数字的半个单位, 而该位数字到 x*的第 一位非零数字共有n位, 则称用x*近似x时具有n位 有效数字, 简称x*有n位有效数字.
1.3数值计算中误差的传播
1.3.1 基本运算中的误差估计 在数值运算中,参加运算的数若有误差,那
么一定会影响到计算结果的准确性.
例、设y=xn,求y的相对误差与x的相对误差之间的关 系。
1.3.2 算法的数值稳定性
计算一个数学问题,需要预先设计好由已知 数据计算问题结果的运算顺序,这就是算法。
且 x* x x* 准确值 x 的范围

数值计算方法第一章 误差

数值计算方法第一章 误差

6
误差的来源
4.舍入误差 在计算过程中往往要对数字进行舍入。 如受机器 字长的限制,无穷小数和位数很多的数必须舍入成 一定的位数。 这样产生的误差称为“舍入误差”。 本课程只讨论截断误差与舍入误差对计算结 果的影响。
§1.2 绝对误差、相对误差和有效数字
7
绝对误差、相对误差和有效数字
1.2.1
绝对误差与相对误差
17
x* 0.a1a2 an 10m
如果
1 x x 10 m n 2
*
(1-5)
(1-6)
* x 则称近似值 有n位有效数字。
1 5 x 0 . 003400 10 例如 表示近似值0.003400准确 2
到小数点后第5位,有3位有效数字。
上面的讨论表明,可以用有效数字位数来刻划 误差限。 形如式(1-5)的数,当m一定时,其有效数字 数位n越大,则误差限越小。
但可以根据测量 能算出绝对误差 e( x*) 的准确值, 工具或计算的情况估计出它的取值范围,
8
绝对误差、相对误差和有效数字
即估计出误差绝对值的一个上界
e( x ) x x
* *
*
(1-2)
通常称 为近似值 x 的绝对误差限,简称误差限。 显然误差限不是唯一的。 有了误差限及近似值,就可以得到准确值 的范围 * * 即准确值 x
* 显然,误差限与近似值绝对值之比 * 为 x 的 一 x
个相对误差限。
例 取3.14作为 相对误差限.

的四舍五入的近似值,试求其
13
绝对误差、相对误差和有效数字
1 2 3 . 14 0 . 0016 10 解: 2 相对误差限 1 2 10 2 0.159 % * x 3.14 又如 由实验测得光速近似值为 c * 2.997925 105 km/s, 其误差限为 0.1 km/s, 于是

《数值计算方法》复习资料

《数值计算方法》复习资料

实用文档《数值计算方法》复习资料第一章数值计算方法与误差分析第二章非线性方程的数值解法第三章线性方程组的数值解法第四章插值与曲线拟合第五章数值积分与数值微分第六章常微分方程的数值解法自测题课程的性质与任务数值计算方法是一门应用性很强的基础课,在学习高等数学,线性代数和算法语言的基础上,通过本课程的学习及上机实习、使学生正确理解有关的基本概念和理论,掌握常用的基本数值方法,培养应用计算机从事科学与工程计算的能力,为以后的学习及应用打下良好基础。

第一章数值计算方法与误差分析一考核知识点误差的来源类型;绝对误差和绝对误差限,相对误差和相对误差限,有效数字;绝对误差的传播。

二复习要求1.知道产生误差的主要来源。

2.了解绝对误差和绝对误差限、相对误差和相对误差限和有效数字等概念以及它们之间的关系。

3.知道四则运算中的误差传播公式。

实用文档三例题例 1 设x*= =3.1415926⋯近似值 x=3.14 = 0.314× 101,即 m=1,它的绝对误差是- 0.001 592 6 ,⋯有即 n=3,故 x=3.14 有 3 位有效数字 .x=3.14准确到小数点后第 2 位 .又近似值 x=3.1416,它的绝对误差是0.0000074 ⋯,有即 m=1,n= 5, x=3.1416 有 5 位有效数字 .而近似值x=3.1415,它的绝对误差是0.0000926 ⋯,有即 m=1,n= 4, x=3.1415 有 4 位有效数字 .这就是说某数有s 位数,若末位数字是四舍五入得到的,那么该数有s 位有效数字;例 2指出下列各数具有几位有效数字,及其绝对误差限和相对误差限:2.000 4-0.002 009 0009 000.00解因为 x1=2.000 4= 0.200 04× 101, 它的绝对误差限 0.000 05=0.5 × 10 1―5,即m=1,n=5, 故 x=2.000 4 有 5 位有效数字 . a1=2,相对误差限x2=- 0.002 00,绝对误差限0.000 005,因为 m=-2,n=3 ,x2=- 0.002 00 有 3 位有效数字 . a1=2 ,相对误差限r ==0.002 5实用文档x3=9 000 ,绝对误差限为0.5× 100,因为 m=4, n=4, x3=9 000 有 4 位有效数字, a=9 ,相对误差限r== 0.000 056x4=9 000.00 ,绝对误差限0.005,因为 m=4, n=6, x4=9 000.00 有 6 位有效数字,相对误差限为r== 0.000 000 56由 x3与 x4可以看到小数点之后的0,不是可有可无的,它是有实际意义的.例 3 ln2=0.69314718⋯,精确到10-3的近似值是多少?解精确到 10-3= 0.001,意旨两个近似值x1,x2满足,由于近似值都是四舍五入得到的,要求满足,近似值的绝对误差限应是=0.0005,故至少要保留小数点后三位才可以。

数值计算方法 代数精度 - 代数精度

数值计算方法 代数精度 - 代数精度

A1x1n
An xnn
bn1 an1 n1
这是关于 Ak的线性方程组,其系数矩阵
1
x0
x02
x0n
1 1
x1
xn
x12
xn2
x1n xnn
是范得蒙德矩阵,当 xk (k 0,1,, n) 互异时非奇异,故 Ak 有唯一解。
典型例题
例2
试确定一个至少具有2次代数精度的公式
f
(1)
20
f
(3)
结构分析
2 .如 果 参 数 x k 和 Ak均 未 知 , 则 方 程 组 为 非线 性 的
A0 A1 An b a
A0 x0 A0 x0n
A1x1
An xn
b2
2
a2
A1x1n
An xnn
bn1 an1 n1
非线性方程组求解很困难
定理
n+1个节点的求积公式
1
2
左右相等
典型例题
当 f ( x )分 别 为 常 数x 2或 x 3时 ,
2 f ( x) x2 1 f ( x )dx 1 [ f (1) 2 f (0) f (1)] f ( x )x2 1
3
1
2
1 f ( x) x3 1 f ( x )dx 1 [ f (1) 2 f (0) f (1)] f ( x )x3 0
n
Ak
x
m k
k0
1 m 1
bm1 a m1
b x mdx
a
构 造 求 积 公 式, 原 则 上 是 确 定 参 数x k和 Ak的 代 数 问 题.
结构分析
A0 A1 An b a
1.如

数值计算方法第1章作业

数值计算方法第1章作业

第一章作业第一题问题叙述:构造算法并编程序精确计算二次方程的根。

●设a≠0,b2-4ac>0,且有方程ax2+bx+c=0●包括b2≈b2-4ac的情况(a=c=1,b=±1000000.000001)问题分析:对于普通的二次求根公式:x1,2=−b±√b2−4ac2a当b2>>4ac时,分子可能非常小。

由于计算机中的算术运算存在减性抵消的现象,即两个几乎相等的浮点数相减时会引起舍入误差,所以在这种极端条件下用这个公式就会带来很大的误差。

解决方法:1.使用双精度2.使用变换公式x1,2=−2cb±√b2−4ac3.先利用原公式计算较大的根(即分子不会引起减性抵消),再利用公式:x1x2=c a计算较小的根。

问题解决:1.使用双精度:%This program uses double precision to solve the equation of two degree%And make a comparision to the single precisionclear;clc;[a,b,c]=textread('data.txt','%n%n%n'); %read the numbers from data.txtdelta=b*b-4*a*c;x1=(-b+sqrt(delta))/(2*a);x2=(-b-sqrt(delta))/(2*a); %double precisiona=single(a);b=single(b);c=single(c);%use single precisiondelta=single(b*b-4*a*c);x11=single((-b+sqrt(delta))/(2*a));x12=single((-b-sqrt(delta))/(2*a));fid=fopen('out.txt','w');fprintf(fid,'%g %g %g %g',[x1 x2 x11 x12]);fclose(fid);%write the result into the out.txt下面是计算结果:结论:1.在一般情况下,即没有出现b2≈b2−4ac时,无论是单精度还是双精度下均可以得出正确答案。

数值计算方法实验指导(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 迭代法求解线性方程组。

数值计算方法(李庆扬等)

数值计算方法(李庆扬等)

第一章 绪论(12)1、设0>x ,x 的相对误差为δ,求x ln 的误差。

[解]设0*>x 为x 的近似值,则有相对误差为δε=)(*x r ,绝对误差为**)(x x δε=,从而x ln 的误差为δδεε=='=*****1)()(ln )(ln x x x x x , 相对误差为****ln ln )(ln )(ln x x x x rδεε==。

2、设x 的相对误差为2%,求n x 的相对误差。

[解]设*x 为x 的近似值,则有相对误差为%2)(*=x r ε,绝对误差为**%2)(x x =ε,从而nx 的误差为nn x x nxn x x n x x x **1***%2%2)()()()(ln *⋅=='=-=εε,相对误差为%2)()(ln )(ln ***n x x x nr==εε。

3、下列各数都是经过四舍五入得到的近似数,即误差不超过最后一位的半个单位,试指出它们是几位有效数字:1021.1*1=x ,031.0*2=x ,6.385*3=x ,430.56*4=x ,0.17*5⨯=x 。

[解]1021.1*1=x 有5位有效数字;0031.0*2=x 有2位有效数字;6.385*3=x 有4位有效数字;430.56*4=x 有5位有效数字;0.17*5⨯=x 有2位有效数字。

4、利用公式(3.3)求下列各近似值的误差限,其中*4*3*2*1,,,x x x x 均为第3题所给的数。

(1)*4*2*1x x x ++; [解]3334*4*2*11***4*2*1*1005.1102110211021)()()()()(----=⨯=⨯+⨯+⨯=++=⎪⎪⎭⎫ ⎝⎛∂∂=++∑x x x x x f x x x e nk k k εεεε;(2)*3*2*1x x x ;[解]52130996425.010********.2131001708255.01048488.2121059768.01021)031.01021.1(1021)6.3851021.1(1021)6.385031.0()()()()()()()()(3333334*3*2*1*2*3*1*1*3*21***3*2*1*=⨯=⨯+⨯+⨯=⨯⨯+⨯⨯+⨯⨯=++=⎪⎪⎭⎫⎝⎛∂∂=-------=∑x x x x x x x x x x x f x x x e n k k kεεεε;(3)*4*2/x x 。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
>> fun=inline('x^3-sin(x)-12*x+1','x') fun =
Inline function: fun(x) = x^3-sin(x)-12*x+1 >> fplot(fun,[-6,6]);grid on;
取x初值为0,-4,3 1、牛顿法 源程序代码
function [x_star,k] = Newton1(fname,dfname,x0,ep,Nmax) %用牛顿法解线性方程组f(x)=0 %x=Newton(fname,dfname,x0,ep,Nmax),fname,和 dfname分别表示f(x)及其导数 %x0为迭代初值,ep为精度(默认值1e-5),x返回解,Nmax为迭代 次数上限以防发散(默认值是500) if nargin<5 Nmax=500;end if nargin<4 ep=1e-5;end x=x0; x0=x+2*ep; k=0; while abs(x0-x)>ep&k<Nmax k=k+1;x0=x;x=x0-
k= 3
②取初值为-4:
在Matlab命令窗口输入:
>> fname=inline('x^3-sin(x)-12*x+1') fname = Inline function: fname(x) = x^3-sin(x)-12*x+1 >> dfname=inline('3*x^2-cos(x)-12') dfname = Inline function: dfname(x) = 3*x^2-cos(x)-12 >> [x_star,k]=Newton1(fname,dfname,-4) x_star = -3.4912
feval(fname,x0)/feval(dfname,x0); end; x_star=x; if k==Nmax warning('已迭代上限次数'); end
计算结果: ①取初值为0: 在Matlab命令窗口输入:
>> fname=inline('x^3-sin(x)-12*x+1') fname = Inline function: fname(x) = x^3-sin(x)-12*x+1 >> dfname=inline('3*x^2-cos(x)-12') dfname = Inline function: dfname(x) = 3*x^2-cos(x)-12 >> [x_star,k]=Newton1(fname,dfname,0) x_star = 0.0770
《数值计算方法》 实验报告
一 实验内容
用下列方案求方程f(x)=x³-sin x-12x+1=0 的全部实根,精度要求ε=10^(-6)。并比较取相同 迭代初值时各方法的收敛速度。 方案一:用牛顿法 方案二:用普通迭代法,参考格式: (1)x=(x)=,-4≤x≤-3或3≤x≤4 (2) x=(x)=(x³-sin x+1),0≤x≤0.2 方案三:用Aitken加速法。实验代码 在Matlab命令窗口输入:
k= 4
③取初值为3: 在Matlab命令窗口输入:
>> fname=inline('x^3-sin(x)-12*x+1') fname = Inline function: fname(x) = x^3-sin(x)-12*x+1
>> dfname=inline('3*x^2-cos(x)-12') dfname = Inline function: dfname(x) = 3*x^2-cos(x)-12 >> [x_star,k]=Newton1(fname,dfname,3) x_star = 3.4101
x= 3.4101 + 0.0001i
x= 3.4101 + 0.0000i
x= 3.4101 + 0.0000i
x= 3.4101 + 0.0000i
x_star = 3.4101 + 0.0000i
k= 13
取初值3为: 在Matlab命令窗口输入:
>> fun=inline('(12*x+sin(x)-1)^(1/3)')
x= 3.4856 + 0.9851i
x= 3.4552 + 0.3005i
x= 3.4265 + 0.0942i
x= 3.4155 + 0.0297i
x=
3.4119 + 0.0094i
x= 3.4107 + 0.0030i
x= 3.4103 + 0.0009i
x= 3.4102 + 0.0003i
fun = Inline function: fun(x) = (12*x+sin(x)-1)^(1/3) >> [x_star,k]=Aitken(fun,3) x= 3.4127
k= 1
x= 3.4101
k= 2
x_star = 3.4101
k= 2
结果分析与比较:
取相同的初值时,Aitken加速迭代法相比普通迭 代法加速效果明显,牛顿法收敛速度最快,在 Aitken和普通迭代法中同一方程的不同迭代公式对x Байду номын сангаас取值有限制,牛顿法具有普遍性和通用性。
k= 4
2、普通迭代法 源程序代码:
function [ x_star,k ] = iterate1(fun,x0,ep,Nmax) %一般迭代法解非线性方程,f(x)=0 %fun(x)为迭代函数,x0为初始值,ep为精度(默认值为1e-5) %当|x(k)-x(k-1)|<ep时终止计算 %Nmax为最大迭代次数(默认值为500) %当迭代成功时,x_star为方程的根,当迭代失败时输出最后的迭代值 %k为迭代次数 if nargin<4 Nmax=500;end; if nargin<3 ep=1e-5;end; x=x0;x0=x+2*ep;k=0; while abs(x0-x)>ep&k<Nmax x0=x;x=feval(fun,x0) k=k+1; end x_star=x; if k==Nmax warning('已迭代次数上限');end
>> fun=inline('(1/12)*(x^3-sin(x)+1)') fun = Inline function: fun(x) = (1/12)*(x^3-sin(x)+1) >> [x_star,k]=iterate1(fun,0) x= 0.0833
x= 0.0764
x= 0.0770
x= 0.0770
x= 0.0770
x_star = 0.0770
k= 5
3、Aitken加速迭代法 源代码程序:
function [x_star,k] =Aitken(fun,x,ep,Nmax) %用Aitken加速迭代法解非线性方程,f(x)=0 %fun(x)为迭代函数,x为初始值,ep为精度(默认值为1e-5) %当|x(k)-x(k-1)|<ep时终止计算,当迭代成功时,x_star为 方程的根 %k为迭代次数,Nmax为最大迭代次数(默认值为500) if nargin<4 Nmax=500;end if nargin<3 ep=1e-5;end k=0; while abs(x-feval(fun,x))>ep xk=x; x=feval(fun,x);x1=x; x=feval(fun,x);x2=x; x=x2-(x2-x1)^2/(x2-2*x1+xk) k=k+1
end; x_star=x; if k==Nmax
warning('已迭代上限次数');end
计算结果: ①当x=(x³-sin x+1),0≤x≤0.2,时取初值为0: 在Matlab命令窗口输入:
>> fun=inline('(1/12)*(x^3-sin(x)+1)') fun = Inline function: fun(x) = (1/12)*(x^3-sin(x)+1) >> [x_star,k]=Aitken(fun,0) x= 0.0770 k= 1 x_star = 0.0770
k= 1
②当x=,-4≤x≤-3或3≤x≤4,取初值为-4或3: 取初值为-4: 在Matlab命令窗口输入:
>> fun=inline('(12*x+sin(x)-1)^(1/3)')
fun = Inline function: fun(x) = (12*x+sin(x)-1)^(1/3) >> [x_star,k]=iterate1(fun,-4) x= 1.8202 + 3.1527i
x= 3.4856 + 0.9851i
x= 3.4552 + 0.3005i
x= 3.4265 + 0.0942i
x= 3.4155 + 0.0297i
x= 3.4119 + 0.0094i
x= 3.4107 + 0.0030i
x= 3.4103 + 0.0009i
x= 3.4102 + 0.0003i
x= 3.4101 + 0.0001i
相关文档
最新文档