逐次分半法matlab的代码
时间: 2023-10-11 07:04:30 浏览: 95
以下是逐次分半法的 MATLAB 代码示例:
```matlab
function [x, n] = bisection(f, a, b, tol, N)
% 逐次分半法求解方程 f(x) = 0 在区间 [a,b] 内的根
% 输入参数:
% f:函数句柄,表示待求解方程 f(x) = 0
% a, b:区间 [a,b] 的端点
% tol:精度控制参数,当区间长度小于 tol 时终止迭代
% N:最大迭代次数
% 输出参数:
% x:近似根
% n:迭代次数
if nargin < 5
N = 100; % 默认最大迭代次数为 100
end
fa = f(a); fb = f(b);
if fa * fb > 0
error('区间端点函数值异号!无法使用逐次分半法求解。');
end
n = 0; % 初始化迭代次数
while n <= N && (b-a)/2 >= tol
c = (a + b) / 2;
fc = f(c);
if fc == 0
x = c;
return;
elseif fa * fc < 0
b = c;
fb = fc;
else
a = c;
fa = fc;
end
n = n + 1;
end
x = (a + b) / 2; % 返回近似根
```
使用示例:假设要求解方程 $x^3-2x-5=0$ 在区间 $[2,3]$ 内的近似根,精度控制参数为 $10^{-6}$,则可以这样调用函数:
```matlab
f = @(x) x^3 - 2*x - 5;
a = 2; b = 3;
tol = 1e-6;
[x, n] = bisection(f, a, b, tol);
fprintf('近似根为 x = %.8f,迭代次数为 %d。\n', x, n);
```
输出结果为:
```
近似根为 x = 2.09455109,迭代次数为 20。
```
阅读全文