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
相关产品推荐
相关产品推荐

