1 1方程求根之二分法

2022-05-01 11:24:10 字數 3363 閱讀 2837

目錄(二)**實現

(三)案例效果

(2)執行結果:

2.求解:

3.求解:

日期:2019/02/17 週日

對於普通的方程,我們用高中學的解方程方法是可以的,不過對於 超越方程 與 高次代數方程 的求解是很困難的,而且也很難得到準確得解,今天我們用python語言和二分法來求解這些方程,得到滿足精度的解,並不是準確。

在某區間有函式 \(f(x)\) 在區間\([a, b]\) 內單調連續,且\(f(a)*f(b)<0\) ,根據連續函式的性質可知方程在\([a,b]\) 內一定有唯一的實根。

\(f(x)\)是單調函式

\(f(x)\)是連續函式

\(f(a)*f(b)<0\)

不斷的分割\([a,b]\) 區間,取\([a,b]\) 的中點值\(x=(a+b)/2\)

當\(f(x)*f(a)<0?\) 時,則根在\([a,x]\) 之間;

當\(f(x)*f(b)<0\) 時,則根在\([x,b]\) 之間。

再分割\(x=(a+b)/2\)

直到\(x\)滿足我們的精度,我們取\(x\) 為\(f(x)\) 的近似解。

我們取的是:第k次分割後的中間值為近似解。

即:\(x_k=\frac(a_k+b_k)\)

對於預先給定的誤差:\(\varepsilon>0\)

有:\(|x^*-x_k| \le \frac(b_k-a_k)=\frac

(1)feval函式:

def feval(string, a):

"""根據值來計算數學表示式。

:param string: 含有x未知數的數學表示式

:param a: 自變數x的具體數值

:return: 數學表示式的計算結果

"""count = string.count("x")

string = string.replace('x', '%f')

t = (a, ) * count

result = eval(string % t)

return result

(2)二分法
"""

二分法:

f(a)*f(b)<0 連續函式f(a)在a,b區間必有根。

"""from my_math.func_math import feval

def two_fun(expr, a, b, r):

"""二分法求解方程

:param expr: 方程表示式

:param a: 左端

:param b: 右端

:param r: 精度

:return: 求解的結果

"""f_a = feval(expr, a)

f_b = feval(expr, b)

if f_a*f_b >= 0:

print("該區間沒有根")

else:

k = 0

while 1/(2**(k+1)) > r:

x = (b + a)/2

if feval(expr, a) * feval(expr, x) > 0:

a = x

else:

b = x

k += 1

print("*"*20)

print("次數", k)

print("x:", x)

print("a:", a)

print("b:", b)

result = (a+b)/2

print("滿足精度的結果:", result)

# 求解1-x-sin(x)=0為例

if __name__ == '__main__':

two_fun("1-x-sin(x)", 0, 1, 10**-4)

使用二分法求解\(1-x-sin(x)=0?\) ,誤差範圍不超過\(\frac\times10^\)

(1)確定範圍:
使用到數學繪圖軟體,根據數學表示式繪製曲線。

目錄

a. 大致的影象:

b.利用放大按鈕,放大後的影象:

c.範圍是:[0, 1]內必有根

(2)執行結果:

次數 1

x: 0.5

a: 0.5

b: 1

次數 13

x: 0.5108642578125

a: 0.5108642578125

b: 0.510986328125

滿足精度的結果: 0.51092529296875

取結果是:0.5109

要求誤差不超過,\(10^\)

(1)確定範圍:
根據下面影象,取範圍:[1.8, 2.0]

(2)執行結果:

次數 1

x: 1.9

a: 1.9

b: 2.0

次數 9

x: 1.933984375

a: 1.93359375

b: 1.933984375

滿足精度的結果: 1.9337890625

取結果是:1.934

要求誤差不超過:\(10^\)

(1)確定範圍:
根據下面影象,取範圍是:[-2, 2]

(2)執行結果:

次數 1

x: 0.0

a: 0.0

b: 2.0

次數 9

x: 1.3203125

a: 1.3203125

b: 1.328125

滿足精度的結果: 1.32421875

取結果是:1.324

日期:2019/02/17 週日

方程求根二分法

方程求根二分法 在實際計算允許的誤差範圍 內 對所求根區間 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次二分後資料...

二分法求根

用二分法求下面的一元三次方程 在區間 10,10 上誤差不大於 該方法的關鍵在於要解決如下兩個問題 1 如何對區間進行二分,並在二分後的左右兩個區間中確定下一次求根搜尋的區間?假設區間端點為x1和x2,則通過計算區間的中點x0,即可將區間 x1,x2 二分為 x1,x0 和 x0,x2 這時,為了確...

Bailian4140 方程求解 二分法

4140 方程求解 總時間限制 1000ms 記憶體限制 65536kb 描述 求下面方程的根 f x x3 5x2 10x 80 0。輸入 輸出 精確到小數點後9位。樣例輸入 樣例輸出 問題鏈結 bailian4140 方程求解 問題簡述 略 問題分析 數值計算中的解方程問題。需要使用精度判定。1...