gpt4 book ai didi

r - 在 R 中使用 fft 从特征函数计算密度

转载 作者:行者123 更新时间:2023-12-03 21:40:16 27 4
gpt4 key购买 nike

我想计算特征函数已知的分布的密度函数。作为一个简单的例子,以正态分布为例。

norm.char<-function(t,mu,sigma) exp((0+1i)*t*mu-0.5*sigma^2*t^2)

然后我想使用 R 的 fft 函数。但我没有得到正确的乘法常数,我必须对结果重新排序(取第二半,然后取前半值)。我试过类似的东西
 xmax = 5
xmin = -5
deltat = 2*pi/(xmax-xmin)
N=2^8
deltax = (xmax-xmin)/(N-1)
x = xmin + deltax*seq(0,N-1)
t = deltat*seq(0,N-1)
density = Re(fft(norm.char(t*2*pi,mu,sigma)))
density = c(density[(N/2+1):N],density[1:(N/2)])

但这仍然不正确。在密度计算的背景下,有人知道 R 中的 fft 的一个很好的引用吗?显然,问题是连续 FFT 和离散 FFT 的混合。有人可以推荐一个程序吗?
谢谢

最佳答案

只是麻烦:拿笔和纸,
写出你想要计算的积分
(特征函数的傅立叶变换),
将其离散化,并重写条款,使它们看起来像
离散傅立叶变换(FFT 假设区间开始
在零)。

请注意 fft是非归一化变换:没有 1/N因素。

characteristic_function_to_density <- function(
phi, # characteristic function; should be vectorized
n, # Number of points, ideally a power of 2
a, b # Evaluate the density on [a,b[
) {
i <- 0:(n-1) # Indices
dx <- (b-a)/n # Step size, for the density
x <- a + i * dx # Grid, for the density
dt <- 2*pi / ( n * dx ) # Step size, frequency space
c <- -n/2 * dt # Evaluate the characteristic function on [c,d]
d <- n/2 * dt # (center the interval on zero)
t <- c + i * dt # Grid, frequency space
phi_t <- phi(t)
X <- exp( -(0+1i) * i * dt * a ) * phi_t
Y <- fft(X)
density <- dt / (2*pi) * exp( - (0+1i) * c * x ) * Y
data.frame(
i = i,
t = t,
characteristic_function = phi_t,
x = x,
density = Re(density)
)
}

d <- characteristic_function_to_density(
function(t,mu=1,sigma=.5)
exp( (0+1i)*t*mu - sigma^2/2*t^2 ),
2^8,
-3, 3
)
plot(d$x, d$density, las=1)
curve(dnorm(x,1,.5), add=TRUE)

关于r - 在 R 中使用 fft 从特征函数计算密度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10029956/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com