我尝试用python数值计算以下形式的积分
为了达到这个目的,我首先定义了两组离散的x和t值,假设
x_samples = np.linspace(-10, 10, 100)
t_samples = np.linspace(0, 1, 100)
dx = x_samples[1]-x_samples[0]
dt = t_samples[1]-t_samples[0]
符号化地声明函数g(x,t)等于0,如果t〈0,并且离散化两个函数以积分为
discretG = g(x_samples[None, :], t_samples[:, None])
discretH = h(x_samples[None, :], t_samples[:, None])
然后我试着逃跑
discretF = signal.fftconvolve(discretG, discretH, mode='full') * dx * dt
然而,在基本的测试功能上,例如
g(x,t) = lambda x,t: np.exp(-np.abs(x))+t
h(x,t) = lambda x,t: np.exp(-np.abs(x))-t
我没有找到一个协议之间的数值积分和卷积使用scipy和我想有一个相当快的方式计算这些积分,特别是当我只能访问离散表示的函数,而不是他们的符号之一。
1条答案
按热度按时间xfyts7mz1#
根据你的代码,我假设你想对两个函数
g
和h
进行卷积,这两个函数只对[a, b]*[m,n]
不为零。当然,你可以用
signal.fftconvolve
来计算卷积。关键是不要忘记discretF
中的索引与真实的坐标之间的转换。这里我使用插值来计算任意(x,t)
。注意:你可以扩展我的代码,在
x
和y
定义的网格上计算卷积,其中x
和y
是一维数组。(在我的代码中,x
和y
现在是浮点数)您可以使用以下代码来探究“数值积分”和“使用scipy进行卷积”之间的“一致性”(以及上述
compute_f
函数的正确性):其给出: