计算机代数系统对数学研究有很大帮助,但软件中的意外错误有时也会严重影响研究。作为例子,作者展示了他们如何检测到Mathematica在计算整数矩阵行列式时的错误:它不仅错误地计算行列式,而且对同一个行列式进行两次计算会产生不同的结果。
作者在研究正交多项式的Casorati行列式时:
P_{f_1}(a_k) & P_{f_1}(a_{k+1}) & \cdots & P_{f_1}(a_{k+l}) \\ P_{f_2}(a_k) & P_{f_2}(a_{k+1}) & \cdots & P_{f_2}(a_{k+l}) \\ \vdots & \vdots & \ddots & \vdots \\ P_{f_l}(a_k) & P_{f_l}(a_{k+1}) & \cdots & P_{f_l}(a_{k+l}) \end{pmatrix}$$ 通过使用整数构造所有例子来避免浮点数问题,但发现Mathematica和Maple给出了不同结果。 ### 错误隔离方法 为了隔离计算问题,作者设计了以下方法生成触发错误的矩阵: 1. **生成基础矩阵**: ```mathematica basicMatrix = Table[Table[RandomInteger[{-99, 99}], {i, 1, 14}], {j, 1, 14}] ``` 2. **创建大整数**: ```mathematica powersMatrix = DiagonalMatrix[{10^123, 10^152, 10^185, 10^220, 10^397, 10^449, 10^503, 10^563, 10^979, 10^1059, 10^1143, 10^1229, 10^1319, 10^1412}] ``` 3. **添加随机扰动**: ```mathematica smallMatrix = Table[Table[RandomInteger[{-999, 999}], {i, 1, 14}], {j, 1, 14}] ``` 4. **构造最终矩阵**: ```mathematica bigMatrix = basicMatrix.powersMatrix + smallMatrix ``` ### 错误验证 通过多次计算同一矩阵的行列式来验证错误: ```mathematica a = Det[bigMatrix]; b = Det[bigMatrix]; ``` 结果发现 `a==b` 经常返回 `False`。 ## 实验设置 ### 测试环境 - **软件版本**: Mathematica 8.0 到 9.0.1 - **操作系统**: Mac和Windows - **对比软件**: Maple和Sage作为验证工具 ### 测试数据 - **矩阵规模**: 14×14 - **数值范围**: 包含约10,000位的大整数 - **生成方式**: 随机生成基础矩阵,然后通过幂次放大和小扰动构造 ## 实验结果 ### 主要发现 1. **计算错误**: Mathematica计算的行列式值完全错误 2. **非确定性**: 同一矩阵多次计算产生不同结果 3. **版本相关**: 错误出现在版本8和9中,版本6和7似乎不受影响 ### 具体案例 在一个具体例子中: - Mathematica第一次计算: `N[a] = -3.263388173990166 × 10^9768` - Mathematica第二次计算: `N[b] = -8.158470434975415 × 10^9768` - 正确结果(Maple/Sage): `≈ 1.95124219131987 × 10^9762` ### 错误报告 作者于2013年10月7日向Wolfram Research报告了该错误(案例编号:CASE:303438),收到了确认回复,但问题在后续版本中仍未解决。 ## 相关工作 1. **历史先例**: 类似于1994年Thomas Nicely发现的奔腾除法错误 2. **软件验证**: 提及了开源计算机代数系统的验证技术研究 3. **数学软件成功案例**: - 四色定理的证明(Appel和Haken) - 开普勒猜想的证明(Thomas Hales) - Kenzo软件发现已发表定理中的错误 ## 结论与讨论 ### 主要结论 1. **可信度问题**: 即使是符号计算(整数运算),计算机代数系统也可能产生错误 2. **影响范围**: 大整数计算错误不仅影响理论数学,也影响密码学等应用领域 3. **系统性问题**: 商业软件的"黑盒"特性使得错误难以预测和避免 ### 局限性 1. **错误触发条件不明**: 无法精确预测哪些矩阵会触发错误 2. **版本特异性**: 错误只在特定版本中出现 3. **平台依赖**: 需要在不同操作系统上验证 ### 未来方向 1. 开发更好的软件验证技术 2. 提高商业软件的透明度 3. 建立更完善的错误报告和修复机制 ## 深度评价 ### 优点 1. **实际意义重大**: 揭示了广泛使用的数学软件中的严重错误 2. **方法科学**: 通过多个独立系统验证,确保发现的可靠性 3. **可重现性强**: 提供了详细的错误重现方法 4. **写作清晰**: 以具体的数学研究为背景,生动地展示了问题的发现过程 ### 不足 1. **理论分析有限**: 没有深入分析错误产生的根本原因 2. **解决方案缺乏**: 主要是问题报告,缺少预防或检测此类错误的方法 3. **测试范围**: 主要集中在一种特定类型的计算(大整数矩阵行列式) ### 影响力 1. **学术价值**: 提醒研究者注意计算机辅助证明的可靠性问题 2. **实用价值**: 对依赖Mathematica进行大整数计算的用户有重要警示作用 3. **软件改进**: 促使软件开发商重视和修复此类错误 ### 适用场景 该研究的发现适用于: - 使用Mathematica进行大整数矩阵计算的研究 - 密码学中的大数运算 - 需要高精度符号计算的数学研究 - 计算机代数系统的可靠性评估 ## 参考文献 论文引用了以下重要文献: 1. Karlin & Szegő (1960/1961) - 关于正交多项式行列式的原始研究 2. Appel & Haken (1977) - 四色问题的计算机辅助证明 3. Hales (2005) - 开普勒猜想的证明 4. Ciaurri & Varona (2006) - 关于计算机计算可靠性的早期研究 --- 这篇论文虽然篇幅不长,但揭示了一个重要问题:即使是看似可靠的符号计算,也可能存在系统性错误。它提醒我们在依赖计算机进行数学研究时需要保持谨慎,并强调了软件验证和透明度的重要性。