二分法(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;
  • ab 分别是初始区间的左端点和右端点。
  • 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;  % 迭代次数加1
        xc = (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) 的值
        end
    end
    xc = (a + b)/2;  % 最终返回区间中点作为近似解
end

结果解释

运行代码后,会得到一个近似解 xc,即方程 f(x)=x3−x−1=0 在区间 [1, 1.5] 内的解。迭代次数 k 表示在达到容差 tol 所需的迭代步数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值