我想在 R 中實作 Wiener 表示的功能(參見https://en.wikipedia.org/wiki/Wiener_process#Wiener_representation)。(我想實作第一個公式)當繪制這個函式時,它應該看起來更類似于標準布朗運動,隨機向量的維度越高,它看起來越低越平滑。我試圖實作它,但我認為回圈中的某個地方有一個錯誤,因為當 n 很高時,圖形看起來不應該更像布朗運動,我什至高達 10000 沒有足夠的波動在每個圖形內
brownmotion <- function(n, time=1000){
W <- rep(0, time)
Wp1 <- rep(0, time)
Wp2 <- 0
X <- seq(0, 1, length.out = time)
xsi <- rnorm(n)
for ( i in 1:length(X)){
for (j in 1:n){
Wp1[i] <- X[i]*xsi[1]
Wp2 <- Wp2 xsi[j]*sin(j*X[i]*pi)/(j*pi)
W[i] <- Wp1[i] sqrt(2)*Wp2
}
}
return (W)
}
uj5u.com熱心網友回復:
因為這是 R,所以最好不要回圈:
brownmotion <- function(n, time=1000){
X <- seq(0, 1, length.out = time)
xsi <- rnorm(n 1)
W <- xsi[1] * X sqrt(2) * colSums(xsi[-1] * sin(pi * 1:n %*% t(X)) / (pi * 1:n))
return (W)
}
編碼時,我注意到您的原始代碼中有一個小錯誤,因為您使用了 xsi[1] 兩次。我通過使 xsi 長度為 n 1 來避免這種情況,因此 xsi[1] 可能是初始值,并且還剩下 n 個值。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/383091.html
上一篇:如何將資料框列拆分為兩列
