Python數(shù)值分析之二分法求解

# 內(nèi)聯(lián)顯示matplotlib輸出
%matplotlib inline
# 導(dǎo)入相關(guān)模塊
import math
import matplotlib
import numpy as np
import matplotlib.pyplot as plt
from prettytable import PrettyTable
# 繪制f(x)的圖像
e = math.e

x = np.arange(0, 1, 0.01)

def f(x):
    y = e**x + 4*x**3 + 2*x**2 + x - 2
    return y

plt.figure(facecolor='white',edgecolor='white')

plt.xticks(np.arange(min(x), max(x)+1, 0.1))

plt.title('$ f(x) = e^x + 4*x^3 + 2*x^2 + x - 2 $')

plt.grid(True)

plt.plot(x, f(x))

plt.show()
output_8_0.png

2. 二分法求解 f(x)在[0, 1]區(qū)間上的根

# 二分法求根

class FError(Exception):
    pass

def dichotomy(f, interval, error, m):
    '''二分法求方程根
    Args:
        f: 方程
        interval: 有根區(qū)間數(shù)組
        error: 允許的迭代誤差
        m: 最大迭代次數(shù)

    Returns:
        如果在最大迭代次數(shù)內(nèi)得到了滿足要求的根, 則返回該值

    Raises:
        參數(shù)錯誤,超出最大迭代次數(shù)
    '''
    n = 0
    c = 0
    x = 0
    temp = 0

#     try:
    if 2 == len(interval):
        (a, b) = interval
        if (a > b):
            print(f'[{a}, ]區(qū)間無解')
            return
        if f(a)==0:
            return a
        if f(b)==0:
            return b
        if (f(a)*f(b)>0):
            print('f(a), f(b)同號')
            return

    table = PrettyTable(['迭代次數(shù)', 'a', 'b', 'x', 'f(x)'])

    while (n<m):
        plt.plot([a, b], [f(a), f(b)])

        if (b-a) < error:
            break

        # 取a,b中點(diǎn)x
        x = (a+b)/2

        y = f(x)

        table.add_row([n+1, a, b, x, y])

        # 若f(x)=0,返回x
        if f(x)==0:
            break
        # 取函數(shù)值異號兩項(xiàng)作為新區(qū)間
        elif (f(x)*f(a)<0):
            b = x
        elif (f(x)*f(b)<0):
            a = x
        n += 1

    print(table)

x = np.arange(0, 1, 0.01)

plt.figure(facecolor='white',edgecolor='white')

plt.xticks(np.arange(min(x), max(x)+1, 0.1))

plt.title('$ f(x) = e^x + 4*x^3 + 2*x^2 + x - 2 $')

plt.grid(True)

plt.plot(x, f(x))

dichotomy(f, [0, 1], 10**-4, 20)

plt.show()

+----------+-----------------+----------------+------------------+------------------------+
| 迭代次數(shù) |        a        |       b        |        x         |          f(x)          |
+----------+-----------------+----------------+------------------+------------------------+
|    1     |        0        |       1        |       0.5        |   1.1487212707001282   |
|    2     |        0        |      0.5       |       0.25       |  -0.2784745833122586   |
|    3     |       0.25      |      0.5       |      0.375       |  0.32217891461820125   |
|    4     |       0.25      |     0.375      |      0.3125      | -0.0032792463262036886 |
|    5     |      0.3125     |     0.375      |     0.34375      |  0.15277974586321097   |
|    6     |      0.3125     |    0.34375     |     0.328125     |  0.07313118351443926   |
|    7     |      0.3125     |    0.328125    |    0.3203125     |  0.03452725444645388   |
|    8     |      0.3125     |   0.3203125    |    0.31640625    |  0.015525081793443807  |
|    9     |      0.3125     |   0.31640625   |   0.314453125    |  0.006098281683223128  |
|    10    |      0.3125     |  0.314453125   |   0.3134765625   | 0.0014033704793536828  |
|    11    |      0.3125     |  0.3134765625  |  0.31298828125   | -0.0009394732466017075 |
|    12    |  0.31298828125  |  0.3134765625  |  0.313232421875  | 0.00023156460100803855 |
|    13    |  0.31298828125  | 0.313232421875 | 0.3131103515625  | -0.000354050303566833  |
|    14    | 0.3131103515625 | 0.313232421875 | 0.31317138671875 | -6.126684935581217e-05 |
+----------+-----------------+----------------+------------------+------------------------+
output_10_1.png
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末奉呛,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子北启,更是在濱河造成了極大的恐慌脉顿,老刑警劉巖蝌麸,帶你破解...
    沈念sama閱讀 212,884評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異艾疟,居然都是意外死亡来吩,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,755評論 3 385
  • 文/潘曉璐 我一進(jìn)店門蔽莱,熙熙樓的掌柜王于貴愁眉苦臉地迎上來弟疆,“玉大人,你說我怎么就攤上這事盗冷〉√Γ” “怎么了?”我有些...
    開封第一講書人閱讀 158,369評論 0 348
  • 文/不壞的土叔 我叫張陵仪糖,是天一觀的道長柑司。 經(jīng)常有香客問我,道長锅劝,這世上最難降的妖魔是什么攒驰? 我笑而不...
    開封第一講書人閱讀 56,799評論 1 285
  • 正文 為了忘掉前任,我火速辦了婚禮鸠天,結(jié)果婚禮上讼育,老公的妹妹穿的比我還像新娘。我一直安慰自己稠集,他們只是感情好奶段,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,910評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著剥纷,像睡著了一般痹籍。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上晦鞋,一...
    開封第一講書人閱讀 50,096評論 1 291
  • 那天蹲缠,我揣著相機(jī)與錄音,去河邊找鬼悠垛。 笑死线定,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的确买。 我是一名探鬼主播斤讥,決...
    沈念sama閱讀 39,159評論 3 411
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼湾趾!你這毒婦竟也來了芭商?” 一聲冷哼從身側(cè)響起派草,我...
    開封第一講書人閱讀 37,917評論 0 268
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎铛楣,沒想到半個月后近迁,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,360評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡簸州,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,673評論 2 327
  • 正文 我和宋清朗相戀三年鉴竭,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片岸浑。...
    茶點(diǎn)故事閱讀 38,814評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡拓瞪,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出助琐,到底是詐尸還是另有隱情,我是刑警寧澤面氓,帶...
    沈念sama閱讀 34,509評論 4 334
  • 正文 年R本政府宣布兵钮,位于F島的核電站,受9級特大地震影響舌界,放射性物質(zhì)發(fā)生泄漏掘譬。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,156評論 3 317
  • 文/蒙蒙 一呻拌、第九天 我趴在偏房一處隱蔽的房頂上張望葱轩。 院中可真熱鬧,春花似錦藐握、人聲如沸靴拱。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,882評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽袜炕。三九已至,卻和暖如春初家,著一層夾襖步出監(jiān)牢的瞬間偎窘,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,123評論 1 267
  • 我被黑心中介騙來泰國打工溜在, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留陌知,地道東北人。 一個月前我還...
    沈念sama閱讀 46,641評論 2 362
  • 正文 我出身青樓掖肋,卻偏偏與公主長得像仆葡,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子培遵,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,728評論 2 351

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