第二章论文.doc
文本预览下载声明
《数值分析》实验报告
实验题目 非线性方程求解
专业、班级 硕环工111 学号 2112223051 姓名 方敏 课程编号实验类型 验证性 学时 48学时 实验(上机)地点 完成时间 任课教师 刘敬刚 评分 一、实验目的及要求
1 掌握非线性方程数值解法的基本概念、方法;
2 理解二分法、牛顿法、割线法、斯蒂芬森法求解非线性方程的原理、方法、步骤,会用计算机进行编程求解;
3 掌握运用Matlab进行数值计算的能力。
二、研究、解答以下问题
问题:分别用二分法、牛顿迭代法、割线法、斯蒂芬森迭代法求方程
的根,观察不同初试值条件下的收敛性,并给出结论
【解】:
2.1 算法分析
二分法
二分法伪代码如下所示;
输入:,定义函数,给定精度
输出:待解方程的根。
while
if
由于本题中恒大于0,不满足二分法的条件,故本例无法通过二分法求出方程的根。
(2)牛顿迭代法
牛顿迭代法迭代法迭代公式为:
a).对单根条件下,牛顿迭代法平方收敛,牛顿迭代法程序框图如下所示:
b). 对重根条件下,此时迭代公式修改为
此时,牛顿迭代法至少平方收敛。
(3)割线法
割线法的迭代公式为:
]
割线法是超线性收敛,其程序流程图为
(4)斯蒂芬森迭代法
斯蒂芬森迭代法的计算格式为
斯蒂芬森迭代法程序流程图与牛顿迭代法类似。
2.2迭代结果
分别取初试值为,运用牛顿迭代法、割线法()、,斯蒂芬森法求得根如下(误差精度,数据结够为(format long))
牛顿迭代法
割线法
斯蒂芬森法
未考虑重根
考虑重根
1
0.7524647887323
1.0147887323943
0.6999763241023
0.9895610856203
2
0.7954236245124
1.0000363575693
0.6999526372068
0.9999848725311
3
0.8306913539722
1.0000000002203
0.7524357432815
0.9999999999682
4
0.8597145503620
1.0000000000000
0.7784770276292
1.0000000000000
5
0.8836487289229
0.8074195637804
6
0.9034211164477
0.8305334214151
7
0.9197795580534
0.8514440083581
……
……
……
64
0.9999958165495
0.9998927397768
……
85
0.9999924537033
表1 时,不同迭代方法迭代结果
牛顿迭代法
割线法
斯蒂芬森法
未考虑重根
考虑重根
1
1.8529411764705
1.1176470588235
1.9677760435023
0.9186980626830
2
1.7258825923114
1.0022487868386
1.9406643838244
0.9186980626830
3
1.6163939446397
1.0000008425224
1.9406643838244
0.9186980626830
4
1.5223105411680
1.0000000000001
1.9406643838244
0.9186980626830
5
1.4416990812267
1.9406643838244
6
1.3728310917166
1.5849504641737
7
1.3141624872713
1.5849504641737
……
……
……
65
1.0000085397619
1.0003773276313
……
68
1.0000049419954
0.9999924537033
……
95
1.0000075015608
表2 时,不同迭代方法迭代结果
2.3 分析
通过表1、表2不难分析出如下结论:
(1)牛顿法、割线法、斯蒂芬森法本题下均收敛,可以求出误差范围内的根。
(2)对于重根情况下,牛顿法的收敛速度会变慢变为线性收敛。为解决这一问题,可以对牛顿迭代公式进行修正,此时至少能够保证迭代是平方收敛,使得求解速度大大加快。
(3)割线法的收敛速度小于牛顿法。
(4)运用斯蒂芬森法可以对牛顿迭代法进行加速。
三、本次实验的难点分析
1、本次试验是数值分析课程的第一次试验,重温了matlab的基本语法与操作。由于本科时使用matlab,对于matlab中自定义函数的建立与运用还有欠缺。这是本次试验中耗时较多的部分。
2、本次试验,原设计在牛顿迭代法程序中加入判断导数值是否是个小值(导数值为零)的过程,以防止分母出现较小的值。但是程序运行过程中导数值始终会
显示全部