用 matlab 写一个二分法程序
时间: 2023-05-25 10:04:40 浏览: 117
下面是一个用 MATLAB 实现二分法的例子:
```
function [root, fx, ea, iter] = bisection(f, xl, xu, es, maxiter)
% 使用二分法计算方程 f(x) = 0 的根
% 输入:
% f:要求解的方程,是一个函数句柄
% xl, xu:根的初始估计值,确保 xl < xu
% es:允许误差(可选参数,默认为 0.0001%)
% maxiter:最大迭代次数(可选参数,默认为 50)
% 输出:
% root:方程的根
% fx:方程在根处的值
% ea:近似误差
% iter:迭代次数
if nargin < 3
error('至少需要输入三个参数:函数句柄,初始估计值 xl 和 xu');
end
if nargin < 4 || isempty(es)
es = 0.0001;
end
if nargin < 5 || isempty(maxiter)
maxiter = 50;
end
if xl >= xu
error('初始估计值不满足条件:xl < xu');
end
% 初始化变量
iter = 0;
xr = xl;
ea = 100;
% 迭代求解
while ea > es && iter < maxiter
xrold = xr;
xr = (xl + xu) / 2;
iter = iter + 1;
if xr ~= 0
ea = abs((xr - xrold) / xr) * 100;
end
test = f(xl) * f(xr);
if test < 0
xu = xr;
elseif test > 0
xl = xr;
else
ea = 0;
end
end
% 输出结果
root = xr;
fx = f(xr);
end
```
使用示例:
```matlab
% 求解函数 sin(x)-x/2=0 在 [0, 1] 之间的根
f = @(x) sin(x) - x/2;
[root, fx, ea, iter] = bisection(f, 0, 1);
fprintf('解为 %.6f,函数值为 %.6f\n', root, fx);
fprintf('近似误差为 %.6f%%,迭代次数为 %d\n', ea, iter);
```
输出结果:
```
解为 0.947566,函数值为 0.000035
近似误差为 0.000012%,迭代次数为 25
```