数值分析课程设计

2019-04-22 14:20

2013/2014第一学期

数值分析课程设计

设计题目:

非线性方程的数值解法及MATLAB解法 信息与计算科学 专业

学号 姓名 学号 姓名 学号 姓名

成绩 指导老师

摘 要

本论文分析总结了非线性方程的求解的几种方法,主要介绍非线性方程的数值解法,是直接从方程出发,逐步缩小根的存在区间,或逐步将根的近似值精确化,直到满足问题对精度的要求。分别介绍了二分法,黄金分割法,迭代法,Newton法,弦截法,抛物法,还详细编写注释了这几种方法的Matlab函数代码。并通过具体的例子对他们做出分析,通过各种方法的对照比较得出各个算法的优缺点。

关键词:非线性方程 二分法 黄金分割法 迭代法 弦截法 Matlab

问 题 提 出

1.5]1. 分别用二分法,黄金分割法求方程f(x)?x3?x?1?0在区间[1.0,内的一个实根,要求准确到小数点后第2位。(书P214)

2. 用迭代法求方程f(x)?x3?x?1?0在x0?1.5附近的根x*。(书P215) 3. 分别用牛顿法,弦截法,抛物法求方程f(x)?xex?1?0。(书P223,P229)

1 二分法的基本原理及MATLAB实现

二分法的基本思想:

介值定理:若函数在区间[a,b]上连续,且f(a)f(x)?0,则存在x???a,b?,使得f(x*)?0。

设区间[a,b]是有根区间,令a0?a,b0?b,取区间中点 x0?a0?b02。

考查中点x0的函数值情况,若f(a0)f(x0)?0,则由介值定理可知,

此时令a1?a0,b1?x0;否则f(a0)f(x0)?0(不考虑等号情况,x*?[a0,b0],

否则f(x0)?0,已得到方程的根),因此得到f(a0)则x*?[x0,b0],f(x0)?0,

2

此时令a1?x0,b1?b0,再取x1?a1?b12。

设当前的有根区间[ak,bk],取xk?ak?bk2,若f(ak)f(xk)?0,则令

ak?1?ak,bk?1?xk;否则令ak?1?xk,bk?1?bk;再取xk?入下一轮计算。 二分法的几何意义:

逐步将区间对分,得到根的近似值。 二分法的收敛性质:

ak?1?bk?12,转

设初始有根区间为[a,b],x*是方程的根,xk为第k次区间[ak,bk]的中点(初始区间记为0次)则

xk?x*?bk?ak2?bk?1?ak?122???b?a2k?1

上式给出了算法的终止条件,当

bk?ak2??时算法停止计算。其中,?是预先

给定的精度要求。上式同时表明。当k??有xk?x*?0。因此序列的收敛性与初始区间[a,b]无关,二分法是大范围收敛的。 下面是二分法的MATLAB函数代码: %二分法求解非线性方程 function root=HalfInterval(f,a,b,eps) if(nargin==3) eps=1.0e-4; end

f1=subs(sym(f),findsym(sym(f)),a); f2=subs(sym(f),findsym(sym(f)),b); if(f1==0) root=a; end

3

if(f2==0) root=b; end if(f1*f2>0)

disp('两端点函数值乘积大于0!'); return; else

root=FindRoots(f,a,b,eps); end

function r=FindRoots(f,a,b,eps) f_1=subs(sym(f),findsym(sym(f)),a); %f_2=subs(sym(f),findsym(sym(f)),b); mf=subs(sym(f),findsym(sym(f)),(a+b)/2); if(f_1*mf>0) t=(a+b)/2;

r=FindRoots(f,t,b,eps); else

if(f_1*mf==0) r=(a+b)/2; else

if(abs(b-a)<=eps) r=(b+3*a)/4; else

s=(a+b)/2;

r=FindRoots(f,a,s,eps); end end end 解:

4

在Matlab命令窗口输入:

root=HalfInterval('x^3-x-1',1.0,1.5,1.0e-2) 计算出结果为: root = 1.3252

2 黄金分割法的基本原理及MATLAB实现

二分法是把区间的长度减半,黄金分割法是把区间逐步缩短为前一次的0.618倍,其求解步骤如下:

1)

设t1?a?(1?0.618)*(b?a),t2?a?(1?0.618)*(b?a),且f1?f(t1),f2?f(t2).

2)

如果t1?t2??(?为给定的最小区间长度),则输出方程的根为

t1?t22;否则转到3)。

3)

如果f1*f2?0,则令a?t1,b?t2,转1),否则如果

f1*f(a)?0,令a?t2,反之令b?t1,转到1).

下面是黄金分割法的MATLAB函数代码: %黄金分割法求解非线性方程 function root=GoldenSection(f,a,b,eps) if(nargin==3) eps=1.0e-4; end

f1=subs(sym(f),findsym(sym(f)),a); f2=subs(sym(f),findsym(sym(f)),b); if(f1==0) root=a; end if(f2==0)

5


数值分析课程设计.doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:道路桥梁施工常识问与答286条

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: