MATLAB中的`bisection`函数用于求解非线性方程的根。其基本语法如下:
```matlab
[zero, res, niter] = bisection(fun, a, b, tol, nmax, varargin)
```
其中:
`fun` 是需要求解的函数句柄。
`a` 和 `b` 是方程定义域的区间端点。
`tol` 是求解精度,即函数值在区间端点上的差值小于此值时停止迭代。
`nmax` 是最大迭代次数。
`varargin` 是传递给 `fun` 函数的额外参数。
函数的工作原理如下:
1. 初始化区间为 `[a, b]`,并计算区间中点 `x(2) = (a + b) / 2` 处的函数值 `fx(2)`。
2. 检查 `fx(1)` 和 `fx(3)` 的符号是否不同,如果不同,则说明在区间 `[a, b]` 内存在根。
3. 如果 `fx(1)` 或 `fx(3)` 为零,则直接返回相应的端点作为根。
4. 进入迭代过程,每次迭代计算新的中点 `x(3)`,并更新区间为 `[x(1), x(3)]` 或 `[x(3), x(2)]`,具体取决于 `fx(1)` 和 `fx(2)` 的符号。
5. 计算新的区间长度 `I`,并检查是否满足精度要求或达到最大迭代次数。
6. 如果满足条件,则返回根 `zero`、迭代结果 `res` 和迭代次数 `niter`。
```matlab
% 定义函数句柄
fun = @(x) x.^2 - 4;
% 设置求解区间和精度
a = -2; b = 2; tol = 1e-6; nmax = 100;
% 调用 bisection 函数
[zero, res, niter] = bisection(fun, a, b, tol, nmax);
% 输出结果
disp(['根为: ', num2str(zero)]);
disp(['迭代次数: ', num2str(niter)]);
```
在这个示例中,我们求解函数 `f(x) = x^2 - 4` 在区间 `[-2, 2]` 内的根,精度要求为 `1e-6`,最大迭代次数为 `100`。