借助 Matlab 使用二分法求解方程的根


第一次使用 Matlab,遂將過程詳細記錄之。

20210317185838

圖中標注 ① 是工作目錄,即代碼存放的目錄;標注 ② 是編輯器,即我們寫代碼的地方;標注 ③ 是命令行,是我們執行語句的地方。本次實驗我們是在這里執行二分法的函數。

例題: 應用二分法求解方程 \(x^3 - x - 1 = 0\) 在區間 \([1, 1.5]\) 內的數值解 \(x_k\),要求絕對誤差小於 \(10^{-8}\).

解答 如下。

代碼:

half.m 腳本:

function x = half(a, b, tol)% tol 是 tolerance 的縮寫,表示絕對誤差
c = (a + b) / 2; k = 1;
m = 1 + round((log(b - a) - log(2 * tol)) / log(2)); % <1>
while k <= m
    if f(c) == 0
        c = c;
    return;
    elseif f(a) * f(c) < 0
        b = (a + b) / 2;
    else
        a = (a + b) / 2;
    end
    c = (a + b) / 2; k = k + 1;
end
x = c; % 這里加分號是為了不再命令行中輸出
k % 不加分號就會在控制台輸出
c

f.m 腳本,這是 half.m 中調用的 f() 函數。

function y = f(x)
y = x^3 - x -1;

然后我們在命令行執行:

20210317190826

可以看出,最后求解得到的 \(x = 1.3247\),即輸出的 ans,迭代次數 \(k = 27\).

關於代碼 half.m 中的標注 <1>,有如下解釋:

20210317191251

20210317191337

注意,在 Matlab 中,log() 函數的底是 \(e\).

補充例題(感興趣的朋友可以自行測試):

20210317191627


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM