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

MatLAB fsolve求解时如何查看目标变量及方程组的中间计算结果

Matlab fsolve查看中间计算结果实现方法

方法1:临时调试直接打印

无需修改主脚本,仅调整方程组函数syst_3,在内部增加打印语句即可输出每一步迭代的所有中间值:

function [prov, x1, x2] = syst_3 (a, b, c, d) %system for fsolve
x1 = syst_1(a, b);
x2 = syst_2(c, d);
prov = x1 - x2;
% 新增打印语句,按需调整输出格式
fprintf('当前迭代输入a=%.6f | 方程1计算结果x1=%.6f | 方程2计算结果x2=%.6f | 残差prov=%.6f\n',a,x1,x2,prov);
end

运行主脚本后控制台会自动输出fsolve每一次迭代的所有中间计算值。

方法2:存储所有中间值供后续分析

如果需要保留迭代过程的全量数据做后续处理,可以通过持久变量存储迭代记录,求解完成后统一导出:

第一步:修改syst_3函数增加存储/导出逻辑

function [prov, x1, x2] = syst_3 (a, b, c, d, export_flag)
% 定义持久变量存储迭代记录,仅在函数内部可访问
persistent iter_log
% 导出/清空记录分支,仅手动调用时触发
if nargin == 5 && islogical(export_flag)
    if export_flag
        prov = iter_log;
    else
        iter_log = [];
        prov = [];
    end
    return
end
% 常规求解分支
if isempty(iter_log)
    iter_log = [];
end
x1 = syst_1(a, b);
x2 = syst_2(c, d);
prov = x1 - x2;
% 存储当前步中间值
iter_log = [iter_log; a, x1, x2, prov];
end

第二步:修改主脚本solve_syst增加导出逻辑

function solve_syst ()
a_init = -2;
c = 6;
d = 8;
for i = 1:7
    b = i + 4;
    syst_eq = @(a) syst_3 (a, b, c, d);
    a_vih = fsolve (syst_eq, a_init);
    a(i) = a_vih;
    
    % 导出本次求解的所有迭代中间记录
    all_iter = syst_3([],0,0,0,true);
    disp(['第',num2str(i),'次求解全量迭代数据:']);
    disp(all_iter);
    
    % 导出当前最终解对应的方程计算值
    [~, final_x1, final_x2] = syst_3(a_vih, b, c, d);
    disp(['最终解a=',num2str(a_vih),' 对应方程1结果=',num2str(final_x1),' 方程2结果=',num2str(final_x2)]);
    
    % 清空存储的迭代记录,避免下次循环数据叠加
    syst_3([],0,0,0,false);
end

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 05:36:06