楊柳玉 宋東翔 楊世玲
(德宏師范高等??茖W(xué)校,德宏 678400)
在科學(xué)研究和科學(xué)計(jì)算中常常碰到非線性方程求解問題。非線性方程的解一般不能解析求出。所以數(shù)值解法顯得非常重要,而數(shù)值解法在實(shí)際中的實(shí)現(xiàn)則更為重要,下面介紹二分法解非線性方程在Matlab 里的實(shí)現(xiàn)程序[1]。
二分法又稱對(duì)分區(qū)間法,是求f(x) = 0 根的一種簡(jiǎn)單直觀方法。函數(shù)f(x) 在閉區(qū)間連續(xù),且f(a)f(b) < 0 則f(x)= 0在(a,b) 內(nèi)必有實(shí)根,此為微積分中的零點(diǎn)定理。然后取由零點(diǎn)定理確定f(x)= 0在[a,c]與[c,b]是否有實(shí)根,確定有根區(qū)間后取有根區(qū)間中點(diǎn)繼續(xù)重復(fù)做,可得近似根??梢娢⒎e分中的零點(diǎn)定理是使用二分法的前提[2]。
設(shè)函數(shù)f(x)在區(qū)間[a,b]連續(xù),假定f(a) <0f(b) >0 取中點(diǎn),檢查f(x0)的符號(hào)。若f(x0) =0,則x0就是一個(gè)根; 若f(x0) >0,記a為a1,x0為b1,則得有根區(qū)間[a1,b1];若f(x0) <0,記x0為a1,b為b1,則得有根區(qū)間[a1,b1]。后兩種情況都得到有根區(qū)間[a1,b1],它的長(zhǎng)度為原區(qū)間的一半。對(duì)[a1,b1],令x0=a1+b1,再施以同樣的方法,可得新的有根區(qū)間[a2,b2],它的長(zhǎng)度為[a1,b1]的一半,如此反復(fù)進(jìn)行下去,其中每一個(gè)區(qū)間是前一區(qū)間的一半。有這就是方程的根。而即為方程的近似根,且有估計(jì)誤差[3][4]。
1.求有根區(qū)間[a,b]。有兩種方法,下面會(huì)舉例列出。
2.根的精確化。即已知一個(gè)根的近似值,逐步提高根的精度,直到滿足所要求的精度為止。
(1)輸入起點(diǎn)a,步長(zhǎng)h,方程f(x),誤差e
(2)計(jì)算b=a+h
(3)當(dāng)f(a)f(b) >0時(shí),做
a=a+h
b=a+h
若f(a)f(x) <0 則 ;b=x
若f(a)f(x)==0x=x;
若f(a)f(x)>0a=x;
(7)輸出x
例1用二分法求非線性方程f(x)=x3-x- 1 =0在區(qū)間(1,2)內(nèi)的一個(gè)實(shí)根。
分析:先求出有根區(qū)間(法一);
當(dāng)精度控制量 e=0.001 時(shí),求出根的近似值。
解:
(1)先求出有根區(qū)間
因?yàn)槎址ㄖ荒芮髥胃紫瓤梢运阉骱瘮?shù) 在f(x) =x3-x- 1 = 0 、在MATLAB 命令窗口輸入如下命令:
從圖一可以看出f(x)=x3-x- 1 =0在區(qū)間(1,2)內(nèi)有惟一的一個(gè)大于1.3 而小于1.4 的單根。
圖一 在區(qū)間 上的圖像
(2)Matlab 程序?qū)崿F(xiàn):
先建立ey.m
(3)最后在MATLAB 命令窗中輸入:
例2:下面用二分法求非線性方程f(x)=x3- 5 =0的一個(gè)實(shí)根。
解:
(1)先求出有根區(qū)間(法二)
取掃描起點(diǎn)a=1,h=0.1,尋找有根區(qū)間如下表所示:
k 0 1 2 3 4 5 6 7 a 1 1.1 1.2 1.3 1.4 1.5 1.6 1.7 k b a h 1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8= +kk f a f b符號(hào)() ()+++++++-k k
故f(x)=x3- 5 =0在區(qū)間(1,2)內(nèi)的有根區(qū)間是[1.7,1.8]。
用二分法求近似值,計(jì)算結(jié)果如下表所示:
k 3 0 1 a 1.7 1.7 1.7 1.7 kb 1.8 1.75 1.725 1.7125 k 1.75 1.725 1.7125 1.70625 k a b x=kk +e 2 1 k 1 40 1 80 1 20 160 k f a f b 的符號(hào)---k () ()2
故當(dāng)k=3時(shí),,近似解取為x3=1.70625 。
(3)Matlab 程序?qū)崿F(xiàn):
先建立eff.m
二分法是求非線性方程近似根的最簡(jiǎn)單的方法,它的數(shù)學(xué)思想推行過程簡(jiǎn)單易行,便于在計(jì)算機(jī)上實(shí)現(xiàn)。本文結(jié)合兩個(gè)非線性方程介紹了二分法解非線性方程的算法設(shè)計(jì)和Matlab程序。