← 返回文章库

现金流有正有负却算不出XIRR:无解与不收敛怎么区分

2026-10-23 · L0

有正数也有负数,仍可能不存在有效年化根;即使根存在,一次迭代也可能失败。这两类情况要分开诊断。本例样本甲负一百、正五十、负一百,方程没有实根;样本乙负一百、一年后收一百一十,正确根是百分之十,但本文牛顿法若从百分之一千启动,第一步会跳到定义域之外,不能据此宣布样本无解。

先把「输入合格」「存在根」「找到根」分清楚吗?

输入合格是金额和日期满足函数要求,例如正负现金流都存在、行数对应、日期类型有效。存在根是数学方程在规定定义域内能否达到零。找到根则与算法、初值、精度和迭代上限有关。前一层通过不代表后一层自动通过,后一层失败也不一定能反推前一层失败。

本文把年率定义域限制在大于负百分之百,保证增长因子为正。两个样本都采用整三百六十五天间隔,金额都是构造数据,没有真实投资记录。故意选择简单输入,是为了让无解可以代数证明,有解可以直接核算,不必把所有结论都压在黑箱求解器身上。

两份现金流究竟有什么不同?

样本甲在二〇二五年开始,三个日期依次为三年一月一日;样本乙在二〇二六年开始,只跨一年。样本乙的最早日期单独作为自己的折现起点,不与甲共用一个空白首行。

日期样本甲/元样本乙/元
2025-01-01-100尚未开始
2026-01-0150-100
2027-01-01-100110

对样本甲,令正增长因子为x,去分母后方程是-100x²+50x-100=0。变号后二次式的判别式为五十的平方减四乘一百乘一百,是负数,因此没有实根。更直接地说,正系数二次式在整个实数域保持正,不可能等于零;不是只在某个利率区间没找到。

利率扫描能告诉我们什么,不能告诉什么?

把几组候选年率逐个代入现值方程,可以观察符号与变化范围。表中甲始终为负,乙从正变负并在百分之十附近经过零。金额单位均为元,表格显示精度不参与内部求解。

候选年率样本甲现值/元样本乙现值/元
-90.000000%-9600.0000001000.000000
-50.000000%-400.000000120.000000
0.000000%-150.00000010.000000
10.000000%-137.190083-0.000000
50.000000%-111.111111-26.666667
100.000000%-100.000000-45.000000
1000.000000%-96.280992-90.000000

这张表对甲的无解结论只是直观佐证,完整证明来自二次式;对于任意不规则现金流,有限扫描表一直同号不能独自证明全域无解。扫描范围外可能还有根,两根之间的窄区间也可能没采到,甚至存在只触及零轴而不变号的情形。不要把「没看见」写成「不存在」。

乙则可直接用两笔现金流验证:一百元在三百六十五天后变成一百一十元,对应百分之十,代回现值为零。这样我们提前知道根存在,便能把后面的失败明确归类为数值求解问题,而不是金额或日期本身出了错。

已知有解的样本为何还能迭代失败?

本文脚本实现一个用于演示的牛顿迭代,从年率十启动,计算现值与导数后更新,首步得到年率负八十九,已经低于负一,脚本按定义域检查停止。这里的十是小数形式的百分之一千,不是百分之十。算法跨出有效域是具体、可复现的失败原因,不能用换个符号或修改真实金额把它掩盖掉。

改用负百分之五十到正百分之五十的夹逼区间,区间两端现值异号,二分求解回到百分之十。本文没有在特定电子表格版本中人为制造同一错误代码,也不宣称所有软件都会按相同步骤失败;展示的是数值方法可能失败的机制与独立恢复方法。

收到错误提示后,应按什么顺序定位?

先核对日期类型、金额是否为数值、日期与金额是否等长,再把最早日期与其金额成对排在首行。接着检查是否确实存在正负流、是否缺少期末资产,以及账户边界是否一致。输入错误没有排除之前,扫描和换初值可能只是给坏数据找一个看似合理的结果。

输入可确认后,再做几组候选率的现值扫描,记录范围与步长。若能夹住根,可尝试有边界的方法,并把结果回代。若始终找不到,则描述为「在所查范围未检出」,除非有像本文甲样本这样的完整数学证明。多次变号还要警惕多根,不能见到一个解就停止披露限制。

哪些做法会把错误诊断变成数据篡改?

为了让软件返回数字而随意删去一笔负现金流,或者把期末支出改成收入,都会改变原问题。求解成功不再证明原账户有可解释的年化。应该保留原始输入,另存修复假设与计算结果;只有发现原始记录确实录错时,才依据凭证更正。

错误报告至少写出输入验证状态、搜索范围、方法、初值、停止原因与回代残差。这样别人能看出是无解证据充分,还是仅一次算法没有收敛。一个诚实的失败诊断,比无法解释却格式漂亮的百分数更有用,也不会把构造结果误当成投资判断。

数值发散与结果很大,能不能一眼判断?

不能只凭百分数大小判断。极短期间的正收益确实可能对应很大年化,某些求解迭代也可能在远处停留;需要看是否满足定义域、残差是否足够小,以及输入日期有没有缩短持有期。给输出设一个看起来顺眼的上限,只能作为人工提示,不能替代方程检查。

同样,返回负数也不等于错误。负收益可能对应有效根,也可能是符号、缺资产或日期错误造成的另一套方程。应按同一流程检查,不因为结果让人不舒服就反复换初值,直到找到正数才停止。对失败过程保留日志,才能看出是算法路径变了,还是原始数据真的被修正。

到哪里核对口径与基础计算?

概念背景见本站基础文章;相关计算工具可辅助做基础核算。本文扩展情景由上面的独立账表复现,使用工具前请检查它实际提供的参数,不把表格中的全部功能视为工具已有功能。

道积君编辑组|AI辅助起草,构造算例经程序复算。全部数字是教学构造,不是真实产品、历史行情或实盘记录;仅用于投资教育,不构成投资建议,也不预测未来收益。

公式资料:Microsoft XIRR函数、Google Sheets XIRR。核对日:2026-10-23。上述资料用于现金流与日期公式核对,不作为任何具体产品交易规则的依据。

复算资料

本篇编号为DJ016。可下载Python核算脚本(文本)与完整输入输出JSON,对照文中表格复算。脚本文件改存为.py后可用Python运行;数据均为构造教学样本。

这个页面有问题?

提交时会附带当前页面地址和浏览器信息,帮助我们定位问题。不填联系方式即为匿名。