(免责声明:我曾考虑在 math.statsexchange 上发布此内容,但发现类似的问题已移至 SO,所以我在这里)
上下文:
我正在使用 fft/ifft 来确定随机变量总和的概率分布。因此,例如,我有两个均匀的概率分布——在最简单的情况下,区间 [0,1] 上有两个均匀分布。
因此,要获得从这两个分布中采样的两个随机变量之和的概率分布,可以计算每个概率密度的傅里叶变换的乘积。对这个产品做逆 fft,你会得到总和的概率密度。
一个例子:
function usumdist_example()
x = linspace(-1, 2, 1e5);
dx = diff(x(1:2));
NFFT = 2^nextpow2(numel(x));
% take two uniform distributions on [0,0.5]
intervals = [0, 0.5;
0, 0.5];
figure();
hold all;
for i=1:size(intervals,1)
% construct the prob. dens. function
P_x = x >= intervals(i,1) & x <= intervals(i,2);
plot(x, P_x);
% for each pdf, get the characteristic function fft(pdf,NFFT)
% and form the product of all char. functions in Y
if i==1
Y = fft(P_x,NFFT) / NFFT;
else
Y = Y .* fft(P_x,NFFT) / NFFT;
end
end
y = ifft(Y, NFFT);
x_plot = x(1) + (0:dx:(NFFT-1)*dx);
plot(x_plot, y / max(y), '.');
end
我的问题是,产生的概率的形状。窝点。功能完善。但是,x 轴不适合x
我一开始创建的,而是移动了。在示例中,峰值在 1.5,而它应该是 0.5。
如果我添加第三个随机变量或修改x
. 但我无法弄清楚如何。
恐怕这可能与我有负值的事实有关x
,而傅立叶变换通常在frequencies < 0
没有意义的时域/频域中工作。
我知道我可以找到例如峰值并将其转移到适当的位置,但看起来很讨厌且容易出错......
很高兴有任何想法!