功能:二分法求解非线性方程的一个解,采用递归的方式。 源码 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
--------------------- 作者:有个家伙喜欢代码 来源:CSDN 原文:blog.csdn.net/u012366767 … 版权声明:本文为博主原创文章,转载请附上博文链接!
|
|