1. 程式人生 > 其它 >第三章 非線性方程求根

第三章 非線性方程求根

3.2 根的搜尋

3.2.1 數值求解的一般過程

  • 確定根的大概位置,一般稱為"根的搜尋";
  • 將結果精細化,通常迭代來完成。

3.2.2 根的搜尋

  1. 作圖法,譬如將等式兩邊影象畫出,以此確定交點大概位置。
  2. 分析法,利用求導函式、單調性、凹凸性、零點定理等進行分析。
  3. 近似方程法,簡化方程的方法,將方程中一些變化很小的量暫時忽略。
  4. 定步長搜尋法,依據零點定理,劃分區間,將有根區間減小到需要的長度。效率低、易操作。

3.2.3 二分法

依據也是零點定理。

理論分析:假設\(y=f(x)\in C[a,b]\)

給定有根區間\([a,b]\),且\(f(a)\cdot f(b)<0\),如果將區間進行對分,得到的\([a,\frac{a+b}{2}],[\frac{a+b}{2},b]\)

中至少有一個是又跟區間。如果\(f(a)\cdot f(\frac{a+b}{2})<0\),取\([a,\frac{a+b}{2}]\)作為有根區間,新的有根區間\([a_1,b_1]\)。重複以上操作。

假設進行了\(n\)次對分,則小區間的長度變為\(\frac{b-a}{2^n}\)

那麼可以選取最後一個有根區間的中點作為近似值 \(\frac{b-a}{2^{n+1}}\le\varepsilon\Rightarrow n\ge \log_2{\frac{b-a}{\varepsilon}}-1\)\(n\)一般向上取整。

3.3 不動點迭代法

3.3.1 方法介紹

滿足\(x=\varphi(x)\)\(x\)稱為對映\(\varphi\)的不動點。

一個不動點迭代演算法需要:

  • 合適的初值
  • 恰當的不動點形式

收斂速度:不動點迭代法的收斂速度至少是線性的。設極限\(\lim\limits_{k\rightarrow \infty}\frac{|e_{k+1}|}{|e_{k}|^p}=C\)

  • \(p=1\)\(C<1\),則稱迭代格式線性收斂;
  • \(p>1\),則稱迭代格式是超線性收斂;

3.3.2 不動點迭代的收斂定理

\(\varphi(x)\in C^1[a,b]\)且滿足:

  1. 如果\(x\in[a,b]\),則\(\varphi(x)\in[a,b]\)
  2. 存在\(L<1\),使得\(|\varphi'(x)|\le L<1\)對任意\(x\in[a,b]\)成立。

則如下結論成立:

  1. 存在唯一的\(x^*\in[a,b]\),使得\(\varphi(x^*)=x^*\)
  2. 對任意初值\(x_0\in[a,b]\),迭代\(x_{k+1}=\varphi(x_k)\)收斂且\(\lim\limits_{k\rightarrow\infty}x_{k+1}=x^*\)
  3. 事後誤差估計:\(|x^*-x_k|\le\frac{L}{1-L}|x_k-x_{k-1}|\)
  4. 事前誤差估計:\(|x^*-x_k|\le\frac{L^k}{1-L}|x_1-x_0|\)
  5. \(e_k=x^*-x_k\)\(\lim\limits_{k\rightarrow\infty}\frac{e_{k+1}}{e_k}=\varphi'(x^*)\),即演算法至少是線性收斂。

3.4 Newton法

3.4.1 Newton法的匯出

對於\(x_{k+1}=\varphi(x_k)\),若\(\varphi'(x^*)=0\),則迭代格式至少是2階收斂。

注:已知結論\(\lim\limits_{k\rightarrow\infty}\frac{e_{k+1}}{e_k}=\varphi'(x^*)\). 由Taylor展開,

\(x^*-x_{k+1}=\varphi(x^*)-\varphi(x_k)=\varphi'(x^*)(x^*-x_k)-\frac{\varphi''(\theta_k)}{2}(x^*-x_k)^2=-\frac{\varphi''(\theta_k)}{2}(x^*-x_k)^2\)

所以\(\lim\limits_{k\rightarrow\infty}\frac{e_{k+1}}{e_k^2}=-\frac{\varphi''(x^*)}{2}\)

\(f(x)=0\)有根\(x^*\)\(f(x^*)=0\),對於一般的函式\(f(x)\)一種很容易想到的不動點格式為\(x=x+f(x)\),而一般\(1+f'(x)\)不為零。引入\(h(x)\),並設\(h(x^*)\ne0\),此時\(x=x+h(x)f(x)\)\(\varphi(x)=x+h(x)f(x)\)

求導數有\(\varphi'(x)=1+f'(x)h(x)+f(x)h'(x)\),令\(x^*\)處導數為零,有\(h(x^*)=-\frac{1}{f'(x^*)}\)

得到2階演算法\(x_{k+1}=x_k-\frac{f(x_k)}{f'(x_k)}\)