二分法(Bisection Method)求解方程 f(x)=0近似解(MATLAB)
二分法是一种基础的数值方法,适用于连续函数,并且可以在函数值在区间两端符号相反的情况下缩小解的区间,直到达到指定的精度(tol
)。
1. 定义目标函数 f(x)
首先,函数 f(x)
被定义为: f(x) = x^3 - x - 1 通过 MATLAB 的匿名函数的方式实现:
f = @(x) x^3 - x - 1;
这里的 f=@(x)
定义了一个函数句柄,表示 f(x)
是关于变量 x
的函数。
2. 初始化参数
在代码中,我们指定了求解的区间 [a, b]
以及容差 tol
:
a = 1;
b = 1.5;
tol = 0.001;
a
和b
分别是初始区间的左端点和右端点。tol
是算法停止的精度要求,即最终的区间长度为b-a
小于这个值时停止迭代。
3. 调用二分法函数 ER(具体见后方)
[xc, k] = ER(a, b, f, tol);
这里 ER
函数是核心的二分法求解函数,返回两个值:
xc
: 近似解,即满足条件的区间中点。k
: 二分法的迭代次数。
4. 打印结果
fprintf('近似解xc=%.3f\n', xc);
fprintf('二分法迭代次数k=%d\n', k);
这两行代码用于将计算结果输出到命令行,打印出近似解和迭代次数。
5. 二分法实现 (ER
函数)
function [xc, k] = ER(a, b, f, tol)k = 0; % 初始化迭代次数fa = f(a); % 计算 f(a) 的值while (b - a)/2 > tol % 当区间长度的一半大于容差时继续迭代k = k + 1; % 迭代次数加1xc = (a + b)/2; % 计算区间中点fc = f(xc); % 计算 f(xc) 的值if fc == 0 % 如果 f(xc) 刚好等于 0,直接返回break;elseif fa * fc < 0 % 若 f(a) 和 f(xc) 符号相反,则解在 [a, xc] 之间b = xc; % 缩小区间右端点else % 否则,解在 [xc, b] 之间a = xc; % 缩小区间左端点fa = fc; % 更新 f(a) 的值endendxc = (a + b)/2; % 最终返回区间中点作为近似解
end
结果解释
运行代码后,会得到一个近似解 xc
,即方程 f(x)=x3−x−1=0 在区间 [1, 1.5]
内的解。迭代次数 k
表示在达到容差 tol
所需的迭代步数。