如何避免python函数中的灾难性取消?

计算科学 Python 数值分析 浮点
2021-11-28 23:33:57

我无法以数字方式实现功能。它受到以下事实的影响:在较大的输入值下,结果是非常大的数字乘以非常小的数字。我不确定灾难性取消是否是正确的术语,如果是,请纠正我。出现问题的证据:

在此处输入图像描述

对于 6 的较大输入,如何避免振荡和 0.0 的分配?

这是我的功能:

import numpy as np

def func(x):
    t = np.exp(-np.pi*x)
    return 1/t*(1-np.sqrt(1-t**2))
1个回答

这确实被称为灾难性取消。事实上,这种特殊情况非常简单:使用等价的数值稳定表达式

t1+1t2.
由于您可能需要参考,因此在大多数数值方法教科书中都讨论了与求解二次方程的公式有关的问题(该标准形式的公式对于某些参数值在数值上是不稳定的)。摆脱11t2的方法是乘以除以1+1t2这是一个比较:

在此处输入图像描述