我正在尝试在C,MATLAB或Python中实现周期性Gaussian。
评估下面定义的周期性高斯函数的正确方法是什么
我目前正在根据下面的公式进行评估,以避免在负数加上无穷大的总和:
提前致谢。
答案 0 :(得分:0)
好吧,你不应该评估无限和,因为一旦你到达(x-kL)>> 2sigma,你将达到浮点精度的极限。
所以你应该能够从找到x - kL的最小值开始(即,只设置x = x mod L和k = 0,这是合法的,因为这是一个无穷大的总和),然后在k处添加项= +/- 1,+ / - 2,......直到达到浮点极限。这里有一些示例MATLAB代码说明了这个想法 - 我只是掀起了这个想法,所以我不能保证它没有错误,但它确实表现出一些基本的预期行为。
function [result] = Periodic_Gaussian(x, L, sigma)
gaussian = @(y) 1/(2*pi*sigma)*exp(-y.^2 ./ 4 ./sigma^2);
x = mod(x, L);
oldresult = NaN;
newresult = gaussian(x);
k = 1;
while any(newresult ~= oldresult)
oldresult = newresult;
newresult = oldresult + gaussian(x-k*L) + gaussian(x+k*L);
k = k+1;
end
result = newresult;
希望这有用!
编辑:在指数的参数的分母中错过了4倍,并根据需要更新了代码以获取x的向量。
答案 1 :(得分:0)
function [result] = PeriodicGaussian(x, L, sigma)
gaussian = @(y, sigma) 1/(2*pi*sigma)*exp(-y.^2 ./ 2 ./sigma^2);
x0 = mod(x, L)
x1 = mod(x, -1 * L)
result = gaussian(x0, sigma) + gaussian(x1, sigma);
correctionIdx = (x0 == 0 & x1 == 0);
result(correctionIdx) = 0.5 * result(correctionIdx);
end