微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

任何获得虚误差函数的数值稳定差的方法

如何解决任何获得虚误差函数的数值稳定差的方法

我正在尝试使用 numpy 和 scipy 在 Python 中绘制半高斯的傅立叶逆变换,我不感兴趣。该函数可以解析导出,我的实现如下所示,

import numpy as np
from scipy.special import erfi

def one_sided_gauss_fourier(freq,T,a):
    ift = 0.5j * np.sqrt(np.pi/a) * np.exp(-freq**2/(4.0*a)) * ( 
        erfi(freq/(2*np.sqrt(a))) - erfi(freq+T*2j*a/(2*np.sqrt(a)))
        )
    return ift/T

这是形式函数的相应逆傅立叶变换

def gauss(a,t):
    return np.exp(-a*t**2)

t = np.linspace(0,4,10**3)
a = 1.0
dft_gauss_ifft = np.fft.ifft(gauss(a,t))
# Should be the same as 
dt = t[1] - t[0]
freq = np.fft.fftfreq(len(t),dt) * np.pi * 2
analytic_gauss_ifft = one_sided_gauss_fourier(freq,t.max(),a)

有问题的部分是 erfi(freq/(2*np.sqrt(a))) - erfi(freq+T*2j*a/(2*np.sqrt(a))) 包含角频率轴的数组 freq 可以具有 >> 2*np.sqrt(a) 的值,这会导致对带有参数 erfi>>1 函数求值,从而导致溢出错误。它适用于 freq/(2*np.sqrt(a)) 不太大的值,但对于该范围之外的频率,我得到了错误,尽管结果应该是一个幅度小于 1 的数字。有问题的部分是导致加法的中间 erfi 评估/np.inf 项的减法。

是否有可能以稳定的方式评估这两个假想误差函数的差异,无论是数值上还是通过进一步操作方程来消除差异?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。