阵列上的二重积分w/scipy.trapz(无解析函数)

2024-09-30 16:38:40 发布

您现在位置:Python中文网/ 问答频道 /正文

我必须将两个数组(f(x)和g(x+r))和一个函数wfg(r)=triangular function与以下积分进行积分:

enter image description here

f(x)和g(x)的解析形式未知

我最初的尝试是使用scipy.trapz对f(x)g(x+r)w.r.t dx进行积分,然后将该结果乘以wfg(r)w.r.t dr的积分:

for ri in r:
    if np.abs(ri) < l:
        term1 = lambda ri, l : (1 - np.abs(ri)/l) 
        tmp1 += integrate.quad(term1, r[-1],r[0] ,args = (l))[0]
    else:
        tmp1 += 0

return np.abs(tmp1 * integrate.trapz(gpeaks1*gpeaks2_r,x_fg))

其中wfg(r) = tmp1f(x) = gpeaks1g(x+r) = gpeaks2的积分

但这在数学上似乎并不正确。我该怎么办


Tags: term1函数npfunctionabs数组triangular形式
1条回答
网友
1楼 · 发布于 2024-09-30 16:38:40

好的,我理解的是(如果我错了,请纠正我):

你所拥有的:

  • 带形状的数组x_fg
  • 数组r_fg具有形状(1, r_size)
  • 数组gpeaks1[i] = f(x_fg[i])具有形状(x_size, 1)
  • 带形状的数组gpeaks2[i, j] = g(x_fg[i] + r_fg[j])

作为中间结果,您还可以:

  • 数组h[j] = ∫_i gpeaks1[i] * gpeaks2[i, j]具有形状(1, r_size)
    • h = integrate.trapz(gpeaks1 * gpeaks2, x_fg, axis=-2)计算

关于w_fg:按照代码的顺序,w_fg是一个数字,而不是数组。 但您的问题似乎表明w_fg是一个权重函数,因此应该用数组表示

所以,我的第一个问题是“什么是^{?”

假设:

  • 数组w_fg[j] = w(r[j])具有形状(1, r_size)

我的第二个问题是“你想计算什么?”

如果是∫_j w_fg[j] h[j],那么就做integrate.trapz(w_fg * h)


之前的答案,实际上并没有回答这个问题

因此,给定表示函数的两个1D数组fg, 您需要表示h(r)=∫f(x)g(x+r)dx的数组h

你完全可以用scipy.trapz来做这件事,但是形式的积分 ^用^{}可以更容易地计算{} 或在scipy中具有同等功能

最有效的方法是使用FFT。我现在没有时间写解释,但我稍后会补充解释

我建议你读一下convolutionscross-correlations

相关问题 更多 >