我必须将两个数组(f(x)和g(x+r))和一个函数wfg(r)
=triangular function与以下积分进行积分:
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) = tmp1
、f(x) = gpeaks1
和g(x+r) = gpeaks2
的积分
但这在数学上似乎并不正确。我该怎么办
好的,我理解的是(如果我错了,请纠正我):
你所拥有的:
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数组
f
和g
, 您需要表示h(r)=∫f(x)g(x+r)dx
的数组h
你完全可以用} 可以更容易地计算{}
或在scipy中具有同等功能
scipy.trapz
来做这件事,但是形式的积分 ^用^{最有效的方法是使用FFT。我现在没有时间写解释,但我稍后会补充解释
我建议你读一下convolutions和cross-correlations
相关问题 更多 >
编程相关推荐