Function Evaluations 是求解器对 “完成一次动力学方程计算” 的宏观统计,包含多次子函数调用;
sfosub的计数是代码层面的微观调用次数,会因积分校正、雅可比计算、收敛检查等被重复触发;
前者是求解器层面的计算统计,后者是代码层面的函数调用计数,范围和统计维度完全不同。
Adams 求解器在计算动力学方程(统计 1 次 Function Evaluation)时,并非只调用 1 次sfosub,而是会因以下原因多次调用:
(1)积分算法的 “迭代 / 校正” 需求
Adams 的隐式积分算法(如 Gear 法)是预测 - 校正模式:
第一步(预测):调用sfosub计算力,预测系统的位移 / 速度;
第二步(校正):基于预测结果,再次调用sfosub重新计算力,验证并修正结果;
这个过程中,哪怕最终统计为 1 次 Function Evaluation,sfosub可能已被调用 2~3 次。

(2)雅可比矩阵计算的额外调用
求解非线性动力学方程时,求解器需要计算力对位移 / 速度的偏导数(雅可比矩阵),常用的有限差分法会:
先调用sfosub计算原始力(f);
给位移 / 速度加一个微小增量(Δq),再调用sfosub计算增量后的力(f+Δf);
通过 (f+Δf - f)/Δq 得到偏导数;
这一步会让sfosub的调用次数至少翻倍,而这些都被求解器归为 “1 次 Function Evaluation”。
(3)收敛性检查的重复调用
如果单次计算的力 / 位移不满足收敛精度,求解器会:
调整步长 / 参数后,重复调用sfosub重新计算;
直到满足收敛条件,才将这一系列计算归为 1 次 Function Evaluation。
免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删