二分法matlab代码
时间: 2023-07-02 10:04:00 浏览: 135
以下是一个二分法的 MATLAB 代码:
```matlab
function [root, fx, ea, iter] = bisect(func, xl, xu, es, maxiter)
% BISECT: root location zeroes
% [root,fx,ea,iter]=bisect(func,xl,xu,es,maxiter,p1,p2,...):
% uses bisection method to find the root of func
% input:
% func = name of function
% xl, xu = lower and upper guesses
% es = desired relative error (default = 0.0001%)
% maxiter = maximum allowable iterations (default = 50)
% output:
% root = real root
% fx = function value at root
% ea = approximate relative error (%)
% iter = number of iterations
if nargin<3,error('at least 3 input arguments required'),end
test = func(xl,varargin{:})*func(xu,varargin{:});
if test>0,error('no sign change'),end
if nargin<4|isempty(es), es=0.0001;end
if nargin<5|isempty(maxiter), maxiter=50;end
iter = 0; xr = xl; ea = 100;
while (1)
xrold = xr;
xr = (xl + xu)/2;
iter = iter + 1;
if xr ~= 0, ea = abs((xr - xrold)/xr) * 100;end
test = func(xl,varargin{:})*func(xr,varargin{:});
if test < 0
xu = xr;
elseif test > 0
xl = xr;
else
ea = 0;
end
if ea <= es | iter >= maxiter, break, end
end
root = xr; fx = func(xr, varargin{:});
```
使用方法:
1. 将以上代码复制到 MATLAB 编辑器中。
2. 在命令行中输入以下命令:
`[root, fx, ea, iter] = bisect(@function_name, xl, xu, es, maxiter)`
- `function_name` 是你要寻找零点的函数名。
- `xl` 和 `xu` 是区间的下限和上限。
- `es` 是相对误差的容许值(默认为 0.0001%)。
- `maxiter` 是最大迭代次数(默认为 50)。
例如:如果你要寻找函数 `f(x) = x^3 - 2*x - 5` 在区间 `[2, 3]` 中的零点,可以输入以下命令:
`[root, fx, ea, iter] = bisect(@func, 2, 3)`
其中 `func` 为一个 M 文件,内容如下:
```matlab
function y = func(x)
y = x^3 - 2*x - 5;
```
运行结束后,`root` 就是所求的零点。
阅读全文