python - 您可以在 Python 中全局更改一段代码的精度,作为调试它的一种方式吗?
问题描述
我正在使用 Python 中的 Newton Raphson 方法求解非线性方程组。这涉及迭代地使用solve(Ax,b)函数(在我的例子中是spsolve,用于稀疏矩阵),直到错误或更新减少到某个阈值以下。我的具体问题涉及计算诸如 x/(e^x - 1) 之类的函数,即使使用 np.expm1(),Python 对小 x 的计算也很糟糕。
尽管有这些困难,但我的解决方案似乎收敛了,因为错误变成了 10^-16 的数量级。但是,相关量在物理上没有表现,我怀疑这是由于这些计算的精度。例如,由于电位差很小,我正在尝试计算电流。当这个电位差变得非常小时,这个电流开始振荡,这是错误的,因为电流必须守恒。
我想全局提高代码的精度,但我不确定这是否有用,因为我不确定这种提高的精度是否会反映在 spsolve 等函数中。我对使用 Decimal 库也有同样的感觉,这也会很麻烦。有人可以就如何解决这个问题给我一些一般性建议或将我指向相关帖子吗?
谢谢!
解决方案
您可以尝试使用 mpmath,但使用 YMMV。通常 scipy 使用双精度。在绝大多数情况下,分析数值误差的来源比仅仅尝试用更高宽度的浮点数重新实现所有东西更有效率。
推荐阅读
- azure-devops - 如何在 Azure DevOps 中检索发布和构建数据
- charts - Nivo 树图工具提示未呈现
- aws-systems-manager - Amazon SSM 代理 - 无法启动消息总线
- python - “ mysql.connector.errors.InterfaceError: 2003: Can't connect to MySQL server on 'db:3306' (-2 Name or service not known)”
- xorg - 如何从 OpenBSD 中彻底删除 Xserver?
- r - 代码 | 在 R 中发送 Outlook 电子邮件,循环多个电子邮件地址,电子邮件正文中的 html 表
- reactjs - 为什么调用这个变量会错过它包含的数组?
- c# - 滚动时在 MainLayout.razor 上呈现页面的 Blazor 元素
- mysql - 将大型 MySQL 表加载到 JSON 中的问题
- django - 输出
使用模板标签的标签