function[x0,fval] = ditomy(fun,a,b,D) %ditomy.m函数为二分法求解非线性方程 fa = feval(fun,a); %计算a点函数值 fb = feval(fun,b); %计算b点函数值 if fa*fb > 0; error('此方程无解'); end if nargin < 3; %检查输入参数个数 error('a与b将被重定义'); elseif nargin == 3; D = 1e-6; %设置D的缺省值 end if fa == 0; %检查a点函数值是否为0 m = a; fm = fa; elseif fb == 0; %检查b点函数值是否为0 m = b; fm = fb; else whileabs(b-a) > D; %控制二分法结束条件 m = [a+b]/2; %二分区间端点 fm = feval(fun,m); %计算中点的函数值 if fa*fm > 0; %条件 a = m; %端点更新 fa = fm; %端点函数更新 elseif fb*fm > 0; %条件 b = m; %端点更新 fb = fm; %端点函数更新 else break end end end x0 = m; if nargout == 2; fval = fm; %根据输出个数赋值 end
举个栗子
用二分法求方程$f(x)=x^3cos(x)+2x^3-2sinx$在区间$[1,3]$内的根。
1 2 3 4 5 6 7 8 9 10
%非线性方程的m文件fun.m function f = fun(x) f = x^3*cos(x)+2*x^2-2sin(x);