第一次使用 Matlab,遂將過程詳細記錄之。
圖中標注 ① 是工作目錄,即代碼存放的目錄;標注 ② 是編輯器,即我們寫代碼的地方;標注 ③ 是命令行,是我們執行語句的地方。本次實驗我們是在這里執行二分法的函數。
例題: 應用二分法求解方程 \(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;
然后我們在命令行執行:
可以看出,最后求解得到的 \(x = 1.3247\),即輸出的 ans
,迭代次數 \(k = 27\).
關於代碼 half.m
中的標注 <1>
,有如下解釋:
注意,在 Matlab 中,log()
函數的底是 \(e\).
補充例題(感興趣的朋友可以自行測試):