1. 程式人生 > >Matlab學習手記——非線性方程求解:二分法

Matlab學習手記——非線性方程求解:二分法

功能:二分法求解非線性方程的一個解,採用遞迴的方式。

  • 原始碼
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