#數(shù)值分析讀書筆記(4)求非線性方程的數(shù)值求解

數(shù)值分析讀書筆記(4)求非線性方程的數(shù)值求解

1.關(guān)于非線性方程的根的定位以及二分法

我們直接介紹二分法

將有根區(qū)間 [a,b] 用中點(diǎn) x_{0}=\frac{a+b}{2}將它平分, 如果x_{0}不是f(x)的零點(diǎn), 則再做搜索, 檢查f(x_{0})f(a)是否同號(hào), 然后即可知根落在左側(cè)還是右側(cè), 用這個(gè)中點(diǎn)來(lái)代替掉原來(lái)的端點(diǎn), 然后得到一個(gè)新的區(qū)間, 如此反復(fù)迭代下去之后, 我們會(huì)發(fā)現(xiàn)區(qū)間收斂到接近一個(gè)數(shù)

二分法簡(jiǎn)單易懂,我們只要不斷去計(jì)算中點(diǎn),然后判斷符號(hào),從而來(lái)判斷根的位置
但是二分法有著收斂速度慢的缺點(diǎn),我們一般是用二分法來(lái)找到一個(gè)合適的初始值,然后再用其他收斂速度比較快的算法進(jìn)行計(jì)算

我們可以用代碼來(lái)實(shí)現(xiàn)一下二分法

public class NumericalTest {
    public static void main(String[] args){
        double a=0,b=2,mid=(a+b)/2,fa,fb,fmid;
        for(int i=0;i<100;i++){
            System.out.println(mid);
            fa=function(a);
            fb=function(b);
            fmid=function(mid);
            if(fa*fmid>0){
                a=mid;
            }else{
                b=mid;
            }
            mid=(a+b)/2;
        }
    }
    public static double function(double x){
        return Math.pow(x,3)+2*Math.pow(x,2)-4;
    }
}

給出最后的輸出結(jié)果

1.1303954347672787
1.1303954347672787
1.1303954347672787
1.1303954347672787
1.1303954347672787
1.1303954347672787
1.1303954347672787


2.基于不動(dòng)點(diǎn)原理的迭代法

類似于之前關(guān)于迭代法求解線性方程組時(shí)所講過(guò)的Gauss-Seidel迭代以及Jacobi迭代等迭代的方法,我們對(duì)于非線性方程也可以使用這種基于不動(dòng)點(diǎn)原理的迭代法,這時(shí)我們的目的即是構(gòu)造出一個(gè)等價(jià)的非線性方程x=\varphi(x)

我們用簡(jiǎn)單的代碼來(lái)模擬一下

public class NumericalTest {
        public static void main(String[] args){
            double x=0;
            for(int i=0;i<100;i++){
                x=function(x);
                System.out.println(x);
            }
        }
        public static double function(double x){
            return Math.sqrt((4-Math.pow(x,3))/2);
        }
}

上面的代碼是對(duì)f(x)=x^{3}+2x^{2}-4=0進(jìn)行轉(zhuǎn)換, 并且建立迭代格式x^{(k+1)}=\left(\frac{4-(x^{(k)})^{3}}{2} \right)^{\frac{1}{2}}

最后可以看出來(lái)應(yīng)該是收斂的,給出最后的幾個(gè)輸出

1.1303954901953999
1.1303953877755042
1.130395474606742
1.1303954009915165
1.1303954634022533
1.1303954104906446

這里給出不動(dòng)點(diǎn)迭代的三個(gè)基本要求

  • 適定性: 要保證序列\{x_{k}\}始終在\phi(x)的定義域中,才能使迭代不中斷
  • 收斂性: 要求迭代收斂
  • 收斂率: 要求收斂速度盡可能高

接下來(lái)我們來(lái)研究一下不動(dòng)點(diǎn)的存在性以及迭代法的全局收斂性

關(guān)于不動(dòng)點(diǎn)的存在性,給出一個(gè)Lipschitz條件,且給出不動(dòng)點(diǎn)存在與唯一性定理

設(shè)迭代函數(shù)\varphi (x)\in C[a,b] , 且同時(shí)滿足
1. 定義域條件: \varphi(x) \in [a,b], \forall x \in [a,b]
**2. Lipschitz條件:存在Lipschitz常數(shù) 0<L<1,使得對(duì)任意t,s \in [a,b]\begin{vmatrix}\varphi(t)-\varphi(s)\end{vmatrix}\leq L\begin{vmatrix} t-s\end{vmatrix} **
則不動(dòng)點(diǎn)迭代函數(shù)\varphi(x)[a,b]上存在唯一的不動(dòng)點(diǎn)x^{*}

需要注意的是,這是不動(dòng)點(diǎn)存在且唯一的一個(gè)充分條件,卻不是必要的,
也就是說(shuō)如果不滿足這兩個(gè)條件或不滿足其中一個(gè)條件者,可能存在不動(dòng)點(diǎn)

下面給出不動(dòng)點(diǎn)迭代收斂與誤差估計(jì)的定理

設(shè)迭代函數(shù)\varphi (x) \in C[a,b]滿足上述的定義域條件以及Lipschitz條件,則對(duì)任意的x_{0} \in [a,b], 由不動(dòng)點(diǎn)迭代格式產(chǎn)生的序列\{ x_{k}\}^{\infty}_{k=0}必收斂于\varphi(x)的不動(dòng)點(diǎn)x^{*},并有誤差估計(jì)
\begin{vmatrix} x^{*}-x_{k}\end{vmatrix}\leq \frac{L^{k}}{1-L}\begin{vmatrix}x_{1}-x_{0}\end{vmatrix}
\begin{vmatrix} x^{*}-x_{k}\end{vmatrix}\leq \frac{L}{1-L}\begin{vmatrix}x_{k}-x_{k-1}\end{vmatrix}

上述兩個(gè)不等式,有時(shí)稱前者為先驗(yàn)估計(jì),后者為后驗(yàn)估計(jì)

利用上面的不等式,我們可以計(jì)算出給定誤差界限所需要迭代的步數(shù)

n \geq \frac{ln(\frac{\epsilon (1-L)}{\begin{vmatrix} x_1-x_0\end{vmatrix}})}{lnL}
其中\epsilon 為給定的誤差界限

給出一個(gè)推論

設(shè)迭代函數(shù)\varphi(x) \in C[a,b], \frac{d\varphi}{dx}[a,b]上有界,且
\begin{vmatrix} \frac{d \varphi}{dx} \end{vmatrix} \leq L < 1 , \forall x\in [a,b]
則之前給出的不動(dòng)點(diǎn)唯一定理以及后續(xù)的收斂定理均成立

以上給出的條件可能是基于全局收斂的,如果滿足的條件只是限制在某個(gè)領(lǐng)域之中的話,那么就是局部收斂,對(duì)于局部收斂,也只需證明局部滿足上述條件,需要提一下的是,不動(dòng)點(diǎn)的迭代方案,在全局的情況下屬于線性收斂

3.Newton切線法

解非線性方程組,除了我們之前講述的迭代法以及二分法,還有Newton切線法,這一種方法是解非線性方程組常用的有效方法,特別的,當(dāng)初始值充分接近方程的根的時(shí)候,收斂的很快,基本思想是以直代曲,近似成線性方程來(lái)求解,下面給出迭代的格式
x_{k+1}=x_{k}-\frac{f(x_{k})}{f'(x_{k})}, k=0,1,2,\dots

這里直接給出代碼來(lái)進(jìn)行模擬

public class NumericalTest {
    public static void main(String[] args){
        double x=1;
        for(int i=0;i<20;i++){
            System.out.println(x);
            x=x-(function(x)/function2(x));
        }
    }
    public static double function(double x){
        return Math.pow(x,3)+2*Math.pow(x,2)-4;
    }

    //求導(dǎo)后的函數(shù)
    public static double function2(double x){
        return 3*Math.pow(x,2)+4*Math.pow(x,2);
    }

}

比起二分法或者迭代法,它的收斂速度還是較為快速的,特別是當(dāng)初始值接近根的情況,更加明確的說(shuō),Newton切線在充分接近單根的情況下二次收斂,其他情況下線性收斂,充分接近重根的情況下線性收斂

下面針對(duì)Newton切線需要計(jì)算導(dǎo)數(shù)的這一缺點(diǎn),給出另外一種類似的方法,即割線法

這里直接給出迭代的格式
x_{k+1}=x_{k}-\frac{f(x_{k})}{f(x_{k})-f(x_{k-1})}(x_k-x_{k-1}), k=1, 2 ,\dots

給出代碼的實(shí)現(xiàn)

public class NumericalTest {

    public static void main(String[] args){
        double x1=1,x2=0,temp;
        for(int i=0;i<20;i++){
            System.out.println(x2);
            temp=x2;
            x2=x2-(x2-x1)*(function(x2)/(function(x2)-function(x1)));
            x1=temp;
        }
    }
    
    public static double function(double x){
        return Math.pow(x,3)+2*Math.pow(x,2)-4;
    }
}

割線法的速度也是十分快,而且避免了導(dǎo)數(shù)的運(yùn)算

對(duì)于非線性方程求根還有同倫算法,擬牛頓法等,待補(bǔ)充

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子蚪腐,更是在濱河造成了極大的恐慌鼠证,老刑警劉巖周叮,帶你破解...
    沈念sama閱讀 218,941評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件散劫,死亡現(xiàn)場(chǎng)離奇詭異绣溜,居然都是意外死亡劲室,警方通過(guò)查閱死者的電腦和手機(jī)伦仍,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,397評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)痹籍,“玉大人呢铆,你說(shuō)我怎么就攤上這事《撞” “怎么了棺克?”我有些...
    開封第一講書人閱讀 165,345評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)线定。 經(jīng)常有香客問(wèn)我娜谊,道長(zhǎng),這世上最難降的妖魔是什么斤讥? 我笑而不...
    開封第一講書人閱讀 58,851評(píng)論 1 295
  • 正文 為了忘掉前任纱皆,我火速辦了婚禮湾趾,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘派草。我一直安慰自己搀缠,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,868評(píng)論 6 392
  • 文/花漫 我一把揭開白布近迁。 她就那樣靜靜地躺著艺普,像睡著了一般。 火紅的嫁衣襯著肌膚如雪鉴竭。 梳的紋絲不亂的頭發(fā)上歧譬,一...
    開封第一講書人閱讀 51,688評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音搏存,去河邊找鬼瑰步。 笑死,一個(gè)胖子當(dāng)著我的面吹牛璧眠,可吹牛的內(nèi)容都是我干的缩焦。 我是一名探鬼主播,決...
    沈念sama閱讀 40,414評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼责静,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼舌界!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起泰演,我...
    開封第一講書人閱讀 39,319評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤呻拌,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后睦焕,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體藐握,經(jīng)...
    沈念sama閱讀 45,775評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,945評(píng)論 3 336
  • 正文 我和宋清朗相戀三年垃喊,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了猾普。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,096評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡本谜,死狀恐怖初家,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情乌助,我是刑警寧澤溜在,帶...
    沈念sama閱讀 35,789評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站他托,受9級(jí)特大地震影響掖肋,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜赏参,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,437評(píng)論 3 331
  • 文/蒙蒙 一志笼、第九天 我趴在偏房一處隱蔽的房頂上張望沿盅。 院中可真熱鬧,春花似錦纫溃、人聲如沸腰涧。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,993評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)南窗。三九已至,卻和暖如春郎楼,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背窒悔。 一陣腳步聲響...
    開封第一講書人閱讀 33,107評(píng)論 1 271
  • 我被黑心中介騙來(lái)泰國(guó)打工呜袁, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人简珠。 一個(gè)月前我還...
    沈念sama閱讀 48,308評(píng)論 3 372
  • 正文 我出身青樓阶界,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親聋庵。 傳聞我的和親對(duì)象是個(gè)殘疾皇子膘融,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,037評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容