Matlab學習手記——非線性方程求解:二分法
阿新 • • 發佈:2019-01-07
功能:二分法求解非線性方程的一個解,採用遞迴的方式。
- 原始碼
function root = HalfInterval_Search(fun, a, b, eps) % 二分法求函式fun在區間[a b]上的一個零點 % 輸入引數說明: % fun --- 目標函式 % a --- 搜尋區間的下界 % b --- 搜尋區間的上界 % eps --- 區間的最小閥值長度 % 輸出引數說明: % root --- 函式的一個根 root = []; % 返回空值 if fun(a) == 0 root = a; end; if fun(b) == 0 root = b; end if fun(a)*fun(b) > 0 disp('兩端點函式值乘積大於0,無解!'); return; else root = FindRoot(fun, a, b, eps); end end function r = FindRoot(fun, a, b, eps) fa = fun(a); x = 0.5*(a + b); fx = fun(x); if fa*fx > 0 % a和中點之間沒有根 t = 0.5*(a + b); r = FindRoot(fun, t, b, eps); else if fa*fx == 0 r = 0.5*(a + b); % 輸出根 else if abs(b - a) <= eps r = 0.25*(b + 3*a); else % a和中點之間有根 s = 0.5*(a + b); r = FindRoot(fun, a, s, eps); end end end end