数值分析1 直接法

合集下载
相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

非线性方程与非线性方程组解法

“方程是很多工程和科学工作的发动机”。在工程和科学计算中,如电路和电力系统计算、非线性力学、非线性微分和积分方程、非线性规划等众多领域中,常涉及到非线性方程或非线性方程组的求解问题。

【例如】求代数方程 0842362

5

6

=--++x x x x 的根。 【如】求解方程组

⎧-=+=y x y y

x x sin 2.0cos 7.0cos 2.0sin 7.0 诸如此类的问题,归结为寻求函数方程的零点,即求x*使

0*)(≡x f (1)

x*称为方程或方程组(f 为向量函数时)的根或零点。

由于自然现象和实际问题的复杂性,对函数方程和方程组求解问题,没有哪一种方法能求出一般方程的准确解。因此,求其数值解就非常必要了。

先讨论非线性方程求根问题。

§1直接法

直接法的理论依据:设f(x)在区间[a,b]上连续,且f(a)

•f(b)<0,根据连续函数的性质,f(x)在[a,b]内一定有根存在。此时称[a,b]为方程f(x)=0的有根区间。进而,若再加上严格单调,则[a,b]内

一、逐步搜索法----确定有根区间

设f(x)在[a,b]内连续,为求其实单根存在区间,取一点0x (如0x =a ),并取一确定的正数h ,称为步长,令kh x x k ±=0,观察)(k x f 的符号变化情况,当0)()(1<⋅+k k x f x f 时,[1,+k k x x ] 便是一个有根区间,称上述逐步确定有根区间的方法为逐步搜索法。这种方法的计算量,与步长的选取相关,步长h 选取的足够小,就可使有根区间足够精确,当然计算量也较大。

逐步搜索法适用于粗略地估计根的计算问题,一般此方法只用来隔离

01)1(3463)(22>+-=+-='x x x x f

所以f(x)为单调增加函数,则f(x)=0在(-∞,+∞)内最多只有一个实根. 又因为f(x)<0,f(2)>0,所以方程的唯一实根在[0,2]内,[0,2]就是所求的

,即要证f(x)与ox 轴有3个交点,只须证明有3个有根区间,且每个区间内只有一个根。

Matlab 中有根区间的确定:

x=-5:0.01:5;y=exp(x)-3*x.^2;plot(x,y,'r',x,0*x),grid on

title('The Image of f(x)=exp(x)-3*x.^2') xlabel('\fontsize {12} \fontname {宋体} 图1') %axis square

二、二分法

理论依据:设函数f(x)在[a,b]上连续,严格单调,且有f(a)﹒

f(b)<0。

二分法的基本思想:反复对分区间,从而逐步缩小有根区间

步骤:取[a,b]的中点2b

a x +=

,计算)(x f , 若)(x f =0则2

b a x x +==*为所求;否则(1)若0)()(<⋅x f a f ,则令b a a ==11,

(2)若0)()(>⋅b f x f ,则令,,11b b x a ==

形成新的有根区间],[11b a 。对],[11b a 重复上述手续,则又可得

],[22b a 。

如此反复二分下去,得到一系列有根区间:

],[],[],[2211b a b a b a ⊃⊃],[k k b a ⊃⊃ ⊃

其中每个区间长度都是前一个区间长的一半,因此,],[k k b a 的长度

k k k a b a b 2/)(-=-趋于零(当∞→k 时)

【注】由区间套原理,必有*

x 属于所有区间,该点就是方程之根。 序列

}}{{k k b a 及中点2

k k k b a x +=

的序列}{k x 都收敛于*

x 。 终止条件:ε<-=-≤-+*1

2/)(2/)(k k k k a b a b x x (2)

),3,2(,023)(2∈>-='x x x f 因此方程有唯一的根落在(2,3)内。

2)二分次数的确定: 由 005.02/)(1

<-+k a b 得7≥k 即005.07≤-*x x

3)二分步骤:

取21

223=-=

x ,则0625.5)5.2(>=f ,因此根在(2,2.5)内, 再取25.02

2

5.2=-=x ,890625.1)25.2(=f ,因此根在(2,2.5)内,如此二分下去,得

取第7次二分的中点x=(2.09375+2.1015625)/2=2.10 二分法的计算机算法程序: %Erfen.m

function y=refen(fun,a,b,esp) if nargin<4 esp=1e-4;end

if feval(fun,a)*feval(fun,b)<0 n=1;x=(a+b)/2;

while abs(b-a)/2>esp %or x>esp if feval(fun,a)*feval(fun,x)<0 b=x;x=(a+b)/2;

elseif feval(fun,x)*feval(fun,b)<0 a=x;x=(a+b)/2; else y=x;esp=10000; end n,a,b %output n,a,b n=n+1; end y=c;

elseif feval(fun,a)==0 y=a;

elseif feval(fun,b)==0 y=b;

else disp('these,may not be a root in the interval'); end n

调用二分法函数求方程的根: erfen('fun',2,3,0.005)

二分法的优点:算法直观、简单,且总能保证收敛;

缺点:收敛速度较慢。

三、黄金分割法

在二分法中,每次将有根区间[a,b]对分,从而经判断将有根区间缩减一半,达到了逐步缩小有根区间的目的。

黄金分割法的基本思想:如果在[a,b]内适当插入两点,21x x 和,而把有根区间分为三段,通过比较函数值,来缩短有根区间。

问题:如何设置两个插入点的位置,使得在计算同样多函数值的条件下,有根区间能更快缩短?

问题的解决:希望根存在区间的长度按比例β缩小(0<β<1),因此可对称地取)(),)(1(21a b a x a b a x -+=--+=ββ,若设[a,b]的长为1个单位,而且],[],[21b x x a 和的长度相等,即b x ax 21=,若使每次搜索都按同一比率缩短区间,则要

相关文档
最新文档