- 1、本文档共24页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
非线性方程求根、解线性方程组的迭代法
福建农林大学计算机与信息学院
课程实习报告
课程名称: 数值分析课程实习 实习题目: 非线性方程求根、解线性方程组的迭代法 姓 名: 系: 数学与应用数学 专 业: 数学与应用数学 年 级: 2008级 学 号: 指导教师: 职 称: 讲师
2011年6月 3日
福建农林大学计算机与信息学院数学类
课程实习报告结果评定
评语: 成绩: 指导教师签字: 评定日期: 目 录
一、非线性方程求根 1
1. 实习的目的和任务 1
2. 实习要求 1
3. 实习地点 1
4. 主要仪器设备(实验用的软硬件环境) 1
5. 实习内容 1
5.1二分法: 1
5.2牛顿迭代法 4
5.3 弦截法 6
6. 问题讨论与分析 9
7. 结束语 11
参考文献 12
二、解线性方程组的迭代法 13
1. 实习的目的和任务 13
2. 实习要求 13
3. 实习地点 13
4. 主要仪器设备(实验用的软硬件环境) 13
5. 实习内容 13
5.1 雅可比迭代法 13
5.2 高斯-塞德尔迭代法 16
6. 问题讨论与分析 18
7. 结束语 19
参考文献 20
一、非线性方程求根
实习的目的和任务
掌握非线性方程(组)的各种解法,包括二分法、牛顿迭代法等,并通过编程与上机运算,体会二分法与牛顿迭代法的不同特点;
掌握解非线性方程的弦截法,并与牛顿迭代法作比较;
了解各种方法的收敛性。
实习要求
能够熟练应用所学的数值计算方法;能够熟练使用MATLAB软件;对数值分析及其计算方法有进一步了解,通过实例,能够对所学非线性方程求根方法的优缺点有所体会。二分法:
用二分法求方程在附近的根。在区间上连续,且,则存在一点,使得。介值定理相当于方程根的存在性定理,称满足定理条件的区间为有根区间。
考察有根区间,取中点将它分为两半,然后进行根的搜索,即检查与是否同号,如果确系同号,说明所求的根在的右侧,这时令;否则在的左侧,这时令。不管出现哪一种情况,新的有根区间的长度仅为的一半。
对压缩了的有根区间又可施行同样的手续,即用中点将区间再分为两半,然后通过根的搜索判定所求的根在的哪一侧,从而又确定一个新的有根区间,其长度是的一半。
如此反复二分下去,即可得出一系列有根区间
,
其中每个区间都是前一个区间的一半,因此的长度当时趋于零。就是说,如果二分过程无限地继续下去,这些区间最终必将收缩于一点,该点显然就是所求的根。
每次二分后,设取有根区间的中点作为根的近似值,则在二分过程中可以获得一个近似根的序列,该序列必以根为极限。
不过在实际计算时,不可能完成这个无限过程,其实也没有这种必要,因为数值分析的结果允许带有一定的误差。由于,只要二分足够多次(即充分大),便有,这里为预定的精度。
5.1.2二分法求解的计算步骤
步骤一:准备 计算在有根区间端点处的值;
步骤二:二分 计算在区间中点处的值;
步骤三:判断 若,则即是根,计算过程结束。否则作如下检验:
若与异号,则根位于区间内,这时以代替;
若与同号,则根位于区间内,这时以代替;
反复执行步骤二和步骤三,直到区间长度缩小到允许误差范围之内,此时区间中点即可作为所求的根。
5.1.3二分法的方程求解
1)利用MATLAB软件,建立m文件dichotomy.m
function [k,x,e,y]=dichotomy(fun,a,b,precision)
%二分法
%输入a,b为区间左右端点,precision是预选设定的精度
%输出k为二分法的次数,x是方程在(a,b)内的实根x*的近似值,
if nargin4 | nargin3
error(错误的输入参数个数!)
end
if nargin==3,precision=1e-6;end
k=0;e=abs(b-a);
while eprecision
ya=subs(fun,a);yb=subs(fun,b);
if ya*yb0
disp(警告:区间端点的函数值同号,请重新输入区间端点!),return
end
x=(a+b)/2;y=subs(fun,x);
if y==0,return
elseif y*yb0,b=x;
else a=x;
end
e=abs(a-b);
k=k+1;
[k,x]
end
x=(a+b)/2;e=abs(a-b);y=subs(fun,x);
2)在MATALB窗口输入如下指令:
[k,x,e,y]=dichotomy(x^3+x^2-3*x-3,1,2,1e-6)
3)运行结果:
ans =
1
文档评论(0)