在广泛的范围内划分功能-

计算科学 数字 误差估计
2021-12-14 12:42:50

我试图解决一个耦合方程组,其中发生了一个非常讨厌的除法运算。事实上,我需要计算两个指数衰减函数的导数。让我们用下面的例子来说明这一点,这个例子可以很容易地以分析的方式计算出来。假设我们已经给出了函数

f(z)=e2z2
并计算商
zf(z)f(z)=4ze2z2e2z2=4z.
我正在考虑一个对称的区间0我只给出了函数f,所以我需要计算它的导数zf(到目前为止,我使用光谱方法来做到这一点,但我也尝试了其他方法,没有任何显着差异)。在某个数量级|z|导数计算过程中的舍入误差zf(z)变得与函数值相当f(z)而商不再代表任何意义。解析商 - 数商

为了摆脱数值解中的“误差噪声”,我尝试使用低通滤波器。因为我知道解决方案应该具有哪个特征,所以我将信号分成几部分,左边(这个反转)和右边一个,结果它的工作不如预期。根据滤波器的顺序,较高的振荡频率被很好地抑制了,但不幸的是,滤波后的信号在外侧和中间(左右分开的部分粘合在一起)平均为零附近,该函数有一个很大的平台它为零的地方。这总共导致近似值甚至不够。 在此处输入图像描述

目前我没有看到任何其他选项来执行这个计算,为什么我决定在这里问这个问题。也许有一个标准的 ansatz 来解决这样的问题,到目前为止我还没有听说过。我将非常感谢您的意见,我可以尝试其他方法。

干杯

2个回答

只需记录您的函数的日志,然后获取它的导数。

如果实际函数确实如示例中那样是正定的,那么它与我们需要计算但没有除法的商完全相同,

zln(𝑓)=1fz𝑓

如果实际函数不是正定的,那么它可能会变得有点复杂,因为您必须使用绝对值并单独跟踪符号。

我们不知道您的方程式到底是什么样的,但也许您可以将整个坐标系转换为更有意义的单位。我的意思是,如果您的单位是例如 au(距离地球太阳),并且您模拟的东西非常小,那么您会遇到这些浮点问题,而不是将问题转换为(mili/micro/nano/... ) 米。这实际上不会解决根本问题,但可能会将您观察到的错误推到不再相关的范围内(请参阅:https ://stackoverflow.com/questions/7006510/density-of-floating-point-number-magnitude -of-the-number)。这也是在无量纲坐标中模拟的不太明显的优势之一,因为在这里您的数值将更接近统一。