数值分析上机报告
专 业: 道路与铁道工程
姓 名:
学 号:
电 话: 15982368356
张
耀
11011252
指导老师:
于 凯
西南交通大学
2011 年 12 月
目 录
序言
........................................................................................... 2
1 牛顿法及基于牛顿算法下的Steffensen加速法......................................................3
1.1第一小题结果................................................................................................... 3
1.2第二小题结果................................................................................................... 7
2 雅可比迭代法和高斯-塞得尔迭代法的收敛性和收敛速度............................... 10
2.1 第三题结果................................................................................................10
3 Runge-Kutta 4阶算法对初值问题的求解.............................................................14
3.1 第四题结果................................................................................................14
4、附录(程序源代码) ......................................................................................... 15
4.1牛顿法及基于牛顿算法下的Steffensen加速法................................................... 15
1)第一小题牛顿法..................................................................................... 15
2)第一小题牛顿-Steffensen 法.................................................................. 15
1)第二小题牛顿法..................................................................................... 16
2)第二小题牛顿-Steffensen 法.................................................................. 17
4.2雅可比迭代法和高斯-塞得尔迭代法的收敛性和收敛速度...............................17
1)雅可比迭代法:..................................................................................... 17
2)高斯-塞得尔迭代法:............................................................................19
4.3 Runge-Kutta 4阶算法对初值问题的求解.........................................................21
....................................................................................... 23
总结
第 1 页
序言
数值分析是一门用计算机求解数学计算问题的数值计算方法及其理论的学
科,它以计算机求解数学问题的理论和方法为研究对象,是计算数学的主体部分。
如今,数值分析作为科学计算的一个核心内容,已逐渐成为广大科技工作者必备
的基本知识,并且越来越受人们的重视。
目前,随着计算机科技的快速发展,数值分析也在工程技术领域得到了越来
越来广泛的应用,利用解析法解决工程问题,往往需要花费大量的人力物力。而
利用数值方法,利用计算机来解决工程问题,是一种非常有效率、便捷的途径。
同时,学好数值分析将更加有利于我们今后在处理工程项目数据时,能够做
到得心应手,也使得我们在面对工程实际问题时多了一种处理问题的手段。
因此,我们一定要学会利用计算机语言来进行数值计算,通过建立相关数学
模型程序,利用计算机的强大功能,从而来解决相关实际问题。在计算机语言选
择方面,本报告采用 VC++编程计算,C++语言是近年来在国内外得到迅速推广
的一种计算机语言。它具有语言功能丰富,表达能力强,使用灵活方便,应用面
广,目标程序效率高,可移植性强等特点。
第 2 页
1 牛顿法及基于牛顿算法下的 Steffensen 加速法
分别用牛顿法及基于牛顿算法下的 Steffensen 法
(1) 求 ln(x+sinx)=0 的根。初值 0x 分别取 0.1, 1,1.5, 2, 4 进行计算。
(2) 求 sinx=0 的根。初值 0x 分别取 1,1.4,1.6, 1.8,3 进行计算。
分析其中遇到的现象与问题。
1.1 第一小题结果
分析:牛顿法就是一种迭代法,其迭代公式为:
x
k
1
x
k
(
f x
k
'(
x
f
k
)
)
x
k
ln(
sin
x
x
k
k
1 cos
x
k
sin
x
x
k
k
)
x
k
ln(
x
k
sin
)(
x
k
1 cos
x
k
x
k
sin
x
k
)
(1)用牛顿法编程求解第一小题:
此方程的精确解为:0.510973429388567…误差限取 1e-20。
0x 是分别是所选的不同初值,本程序给出了循环的次数和最后的结果。计算
结果见下图:
图 1.1 初始值为 0.1
第 3 页
图 1.2 初始值为 0.5
图 1.3 初始值为 1
图 1.4 初始值为 1.5
图 1.5 初始值为 2
第 4 页
结果分析:
图 1.6 初始值为 4
从程序运行的结果我们可以看出,初始值取得离精确值越近,那么循环的次
数就越少。如果初值取得过于偏离精确值则结果发散,因为牛顿法是局部收敛法,
当初始值偏离精确值时,可能函数不具有二阶连续导数,所以导致方法发散。另
外,我们可以发现到牛顿法作为单根的二阶收敛的迭代法,其收敛速度是相当快
的。
(2)用牛顿-Steffensen 法解第一小题
Steffensen 加速法的迭代过程为:
y
n
(
x
n
)
z
n
(
y
)
n
x
n
1
x
n
(
z
n
y
n
2
y
)
x
n
n
2
x
n
计算结果如下图:
图 1.7 初始值 0.1 发散
第 5 页
图 1.8 初始值 0.2
图 1.9 初始值 0.5
图 1.8 初始值 0.51
图 1.11 初始值 1
第 6 页
结果分析:
从结果看牛顿-steffensen 加速法,在初始值接近精确值时加速了算法的收敛,
偏离初始值时发生了发散的现象。离得越近收敛速度就越快,牛顿法为二阶收敛,
则牛顿-steffensen 法为三阶收敛。
1.2 第二小题结果
分析:
图 1.12
从 sin(x)的图形中我们可以看到其与 x 轴的交点有无穷多个,不同的初值
可能导致最后的结果不同。另外在极值点附近,切线近乎水平,则程序循环的次
数可能非常多,也可能发散。下面来看计算结果:
(1)用牛顿法编程求解第二小题:
图 1.13
第 7 页