You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修改Matlab二分法程序,先输出原始值再输出更新值?

解决MATLAB二分法先输出原始值再输出更新值的问题

看起来你在写二分法代码时,卡在了输出顺序上——现在的逻辑是先更新xl/xu再输出,导致看不到更新前的原始状态。其实只要调整一下代码的执行顺序就能轻松解决,我来给你拆解清楚:

问题根源

你当前的代码流程是:计算xmid → 判断条件并更新xl/xu → 输出数值。这时候输出的xl/xu已经是修改后的值,自然看不到迭代前的原始状态。

修改方案:先输出,再更新

核心思路就是把输出操作提前到变量更新之前,确保输出的是未修改的原始xl和xu。这里有两种简洁的实现方式:

方式1:直接输出未修改的xl/xu(最简洁)

不需要额外变量,直接在计算xmid后、修改xl/xu前输出,此时xl和xu还保持着原始值:

% 提前初始化必要变量(循环外执行)
tol = 1e-6; % 替换成你的误差阈值
xnew(1) = 0; % 初始值根据你的需求调整
xl = 0; xu = 2; % 示例初始区间,替换成你的初始值
f = @(x) x^2 - 2; % 示例目标函数,替换成你的f(x)

% 输出表头,让结果更清晰
fprintf('Iteration \t xl (original) \t xu (original) \t xmid \n');

for i=2:10000 
    xmid = (xl + xu)/2; 
    
    % 先输出原始值!此时xl和xu还未被修改
    fprintf('%2i \t %f \t %f \t %f \n', i-1, xl, xu, xmid); 
    
    % 再执行二分法的更新逻辑
    if f(xl)*f(xmid) > 0 
        xl = xmid; 
    else 
        xu = xmid; 
    end 
    
    xnew(i) = xmid; 
    % 误差判断,满足条件就退出循环
    if abs((xnew(i)-xnew(i-1))/xnew(i)) < tol
        break;
    end 
end

方式2:用临时变量保存原始值(更直观)

如果你想更明确地区分原始值和更新后的值,可以用临时变量先保存xl和xu的初始状态,再输出:

% 初始化部分同上
tol = 1e-6;
xnew(1) = 0;
xl = 0; xu = 2;
f = @(x) x^2 - 2;

fprintf('Iteration \t xl (original) \t xu (original) \t xmid \n');

for i=2:10000 
    % 先保存原始值
    xl_original = xl;
    xu_original = xu;
    
    xmid = (xl + xu)/2; 
    % 输出保存的原始值
    fprintf('%2i \t %f \t %f \t %f \n', i-1, xl_original, xu_original, xmid); 
    
    % 再更新变量
    if f(xl)*f(xmid) > 0 
        xl = xmid; 
    else 
        xu = xmid; 
    end 
    
    xnew(i) = xmid; 
    if abs((xnew(i)-xnew(i-1))/xnew(i)) < tol
        break;
    end 
end

额外注意点

  • 把xnew(1)=0移到循环外面!原来的代码每次循环都会重置xnew(1)为0,会导致后续的误差判断逻辑出错。
  • 确保你在循环前已经定义了xl、xu、tol和f(x)的初始值,不然代码会报错。

这样修改后,你就能在每次迭代中先看到原始的xl/xu,再执行更新操作啦。

内容的提问来源于stack exchange,提问作者Abood

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 08:31:04