方程求根 二分法 不動點迭代 牛頓法 弦截法

2021-08-16 11:30:25 字數 3057 閱讀 6986

方程求根:二分法--不動點迭代--牛頓法--弦截法

1.問題概述

許多複雜的求解問題,都可以轉換成方程f(x)=0的求解問題。這一系列的解叫做方程的根。對於非線性方程的求解,在自變數範圍內往往有多個解,我們將此變化區域分為多個小的子區間,對每個區間進行分別求解。我們在求解過程中,選取乙個近似值或者近似區間,然後運用迭代方法逐步逼近真實解。

2.理論與方法

1.二分法(bisection method)

首先假定乙個初始區間[a,b],函式f(x)=0,在此區間上連續。f(a)*(b)<0,說明在此區間至少存在乙個實根。考察有根區間[a,b],取中點x0=(a+b)/2將它劃分為兩半,然後進行根的搜尋,即檢查f(x0)與f(a)是否同號;如果確係同號,說明所求的根x在x0的右側,這時令a1=x0,b1=b;否則x必在x0的左側,這時令a1=a,b1=x0(如圖2-1所示)。不管出現哪一種情形,新的有根區間[a1,b1]的長度僅為[a,b]的一半,通過一步一步的二分操作,逐步靠經精確解。

由於這是粗略的估計,最終很難得到乙個準確解,所以只能求出乙個靠近真實解的,所以我們應該在求解的開始時候確定乙個誤差,當迭代n次過後滿足|x-xn|<=誤差 。同時我們可以求出迭代次數n=

⌈log2((b-a)/2*

誤差)⌉

int n = ceil(log2(b - a) - log2(2 * atol));

for (int i = 0; i求實根最簡單有效的方法:二分法。易於在計算機上實現,且對於函式f(x)的性質要求不高,僅僅要求它在有根區間上連續,且區間端點的函式值異號即可。它的缺點是不能求偶數重根,也不能求復根,收斂速度與以1/2為公比的等比數列相同,不算太快,因此一般在求方程近似根時,不太單獨使用,常用它來為其他方法求方程近似根提供好的初值區間(重要:初值區間的確定直接決定求解的速度)。

2.不動點迭代(fixed point iteration)

將所求的非線性方程 f(x)=0 化為乙個同解方程: x=g(x)  同時g(x)為連續函式

首先,取一初始值x0代入上式,得到:

x1=g(x0)

x2=g(x1)

… …

xk+1=g(xk)  k=0,1,2,… …

n次迭代滿足精度要求,此方法為簡單的非線性迭代法。

注意:選取g(x)時,應當首先確定是否在取值區間收斂,否則不能求出根。

double x1 = x0 - f(x0) / f1(x0);

while (abs(x1 - x0)>0.0001)

最易於理解的方法:迭代法。對於迭代法,構造合適的迭代函式g(x)至關重要,它影響著迭代數列的收斂性(重要)。而且若要使不動點迭代收斂,則要求g(x)在區間[a,b]上的函式值也在此區間內,因此對初值的要求較高,需要提供較為近似的初始值x0.大多數情況下需要考慮迭代法的區域性收斂性,在方成根的附近取初值。

3.牛頓法(newton』s method)

考察一般形式的函式方程f(x)=0,首先運用校正技術建立迭代公式,設已知它的近似根xk,則自然要求校正值x(k+1)=xk+∆x

能更好的滿足所給方程,即

f(xk+∆

x)≈0,

將其左端用線性主部f(xk)+f』(xk)* ∆x

代替,而令

f(xk)+f』(xk)*

∆x=0

這是關於增量∆x

的線性方程,據此定出

∆x=-f(xk)/f』(xk)

從而關於校正值x(k+1)=xk+∆x

有如下計算公式:

x(k+1)=xk-f(xk)/f』(xk)

這就是著名的牛頓公式。

newton

法的突出優點是速度快,但它有個明顯的缺點是每一步迭代需要提供導數值f』(xk),如果函式f(x)比較複雜,致使導數的計算比較困難,那麼使用牛頓公式是不方便的。

while (abs(x1 - x0)>0.0001)

通常最高效的方法:牛頓法。它是求解方程f(x)=0的一種重要方法,它的最大優點是方程在單根附近具有較高的收斂速度,且演算法邏輯簡單。它還可以用於求代數方程的重根、復根。但是由於牛頓法是區域性收斂的,它的收斂性依賴於初值x0的選取。並且每一步迭代除了需要計算f(xk)外,還需要計算f(xk)的導數,當f(x)比較複雜時(缺點明顯),該方法是不方便的。

4.弦截法(secant method)

設f(x)在某個範圍內改變不大,近似取某個定值m,即

f』(x)≈m

那麼,牛頓公式中的導數值可以用定數m來近似的取代,而將其簡化成迭代公式

x(k+1)=xk-f(xk)/m

這種簡化的牛頓方法也稱作平行線法其幾何意義是:用一族平行線取代切線逼近所求的根x.該方法形式簡單,但其收斂性往往不能保證,因而實用價值不大.

為避開導數的計算,也可用差商(f(xk)-f(x0))/(xk-x0)替換牛頓公式中的導數f』(x0),得到以下離散化形式:

x(k+1)=xk-f(xk)/( f(xk)- f(x0))*(xk=x0)          (1)

容易看出,該公式是根據f(x)=0的等價形式

迭代公式的幾何解釋如圖所示,記曲線y=f(x)上橫座標為xk的點為pk,則差商(f(xk)-f(x0))/(xk-x0)表示弦線p0pk的斜率.容易看出,按照式(1)求得的x(k+1)實際上是弦線p0pk與x軸的交點,因此這種方法稱作弦截法。

while (abs(x2 - x1) > 0.001)

避開複雜運算的方法:弦截法。它避開了導數計算,但在收斂方面付出了不可低估的代價。弦截法是區域性收斂的,僅有線性收斂速度,收斂速度比牛頓法慢,不用求導是它的優勢(優點突出)。

end

方程求根二分法

方程求根二分法 在實際計算允許的誤差範圍 內 對所求根區間 a,b 不斷縮小直得到所期望精度的資料 理論基礎 1 函式在區間 a,b 上連續 2 f a f b 0 3 單調函式,乙個根 屬性 數值逼近法 誤差 精度 x x b a 2 b a pow 2,k 1 x為精確值,x 為第k次二分後資料...

方程求根的二分法和迭代法

數值分析 課程實驗設計 實驗名稱 方程求根的二分法和迭代法 實驗目的 1 掌握二分法和簡單迭代法的基本思想 2 通過程式設計實現二分法和簡單迭代法,比較兩種演算法求根的計算量。3 需要注意的是計算過程中如何判斷根的準確度。實驗裝置及環境 計算機 vc6.0 預備知識 1 二分法的計算步驟 步驟 1 ...

牛頓迭代法 二分法

牛頓迭代法 用牛頓迭代法求f x 0在x0附近的乙個實根的方法是 1 選乙個接近於x的真實根的近似根x1 2 通過x1求出f x1 在幾何上就是作x x1,交f x 於f x1 3 過f x1 作f x 的切線,交x軸於x2。可以用公式求出x2。由於f x1 f x1 x2 x1 故x2 x1 f ...