當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


R toeplitz 創建對稱和非對稱托普利茨矩陣


R語言 toeplitz 位於 stats 包(package)。

說明

在最簡單的使用中,toeplitz() 形成一個給定第一列(或行)的對稱托普利茨矩陣。對於一般情況,不對稱和非方托普利茨矩陣可以通過分別指定第一列和行來形成,

T1 <- toeplitz(col, row)

或通過

T <- toeplitz2(x, nr, nc)

其中僅需要指定 (nr, nc) 之一。在後一種情況下,滿足簡單等價 其中 ncol(T)

用法


toeplitz (x, r = NULL, symmetric = is.null(r))
toeplitz2(x, nrow = length(x) +1 - ncol, ncol = length(x) +1 - nrow)

參數

x

對於 toeplitz(x, *) :托普利茨矩陣的第一列;對於 toeplitz2(x, *) 來說,它是 Toeplitz 矩陣的 upper-and-left 邊界,即從右上角到左下角,這樣 T[i,j] == x[i-j + ncol]

r

目標托普利茨矩陣的第一行;僅在不對稱情況下需要。

symmetric

可選的 logical 指示矩陣是否應該對稱。

nrow, ncol

行數和列數;隻需要指定一項。

托普利茨矩陣 ;為了

toeplitz()

在對稱情況下dim(T)(n,m)m == length(x)n == m,否則是n == length(r)

toeplitz2()

dim(T) == c(nrow, ncol)

例子

x <- 1:5
toeplitz (x)

T. <- toeplitz (1:5, 11:13) # with a  *Warning* x[1] != r[1]
T2 <- toeplitz2(c(13:12, 1:5), 5, 3)# this is the same matrix:
stopifnot(identical(T., T2))

# Matrix of character (could also have logical, raw, complex ..) {also warning}:
noquote(toeplitz(letters[1:4], LETTERS[20:26]))

## A convolution/smoother weight matrix :
m <- 17
k <- length(wts <- c(76, 99, 60, 20, 1))
n <- m-k+1
## Convolution
W <- toeplitz2(c(rep(0, m-k), wts, rep(0, m-k)), ncol=n)

## "display" nicely :
if(requireNamespace("Matrix"))
   print(Matrix::Matrix(W))    else {
   colnames(W) <- paste0(",", if(n <= 9) 1:n else c(1:9, letters[seq_len(n-9)]))
   print(W)
}

## scale W to have column sums 1:
W. <- W / sum(wts)
all.equal(rep(1, ncol(W.)), colSums(W.), check.attributes = FALSE)
## Visualize "mass-preserving" convolution
x <- 1:n; f <- function(x) exp(-((x - .4*n)/3)^2)
y <- f(x) + rep_len(3:-2, n)/10
## Smoothing convolution:
y.hat <- W. %*% y # y.hat := smoothed(y) ("mass preserving" -> longer than y)
stopifnot(length(y.hat) == m, m == n + (k-1))
plot(x,y, type="b", xlim=c(1,m)); curve(f(x), 1,n, col="gray", lty=2, add=TRUE)
lines(1:m, y.hat, col=2, lwd=3)
rbind(sum(y), sum(y.hat)) ## mass preserved

## And, yes, convolve(y, *) does the same when called appropriately:
all.equal(c(y.hat), convolve(y, rev(wts/sum(wts)), type="open"))

作者

A. Trapletti and Martin Maechler (speedup and asymmetric extensions)

相關用法


注:本文由純淨天空篩選整理自R-devel大神的英文原創作品 Create Symmetric and Asymmetric Toeplitz Matrix。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。