1

次の要素で行列 A[i,j,k] を作成したいと思います。

A[i,j,k] = 0 if k+jsi =/= 0

A[i,j,k] = p[s] if k+jsi =0 ( p[s] に vector が与えられる)

これは、特性関数によって p[s]*ð(k+jsi) として記述されるか、クロネッカーのデルタ関数によって p[s]*ð(0,k+jsi) として記述されます。Rにそれを与える「ビルドイン」機能はありますか?つまり、「ð」が組み込まれていますか?

それとも自分で書く必要がありますか?

少なくとも線形 f(x) の場合、f(x)=0 の場合は 1 を返し、それ以外の場合は 0 を返す関数を作成すると非常に便利だと思います。

4

1 に答える 1

3

これを次のように書き直します

A[i,j,k] = p[k+j-i] if that exists, otherwise 0

その後、次のように実装できます

p <- c(1,2,3,4,5)

pfun <- function(x) {
  if (x < 1 | x > length(p)) {
    0
  } else {
    p[x]
  }
}

n <- 5
A <- array(0, c(n, n, n)) 

for (i in 1:n) {
  for (j in 1:n) {
    for (k in 1:n) {
      A[i,j,k] <- pfun(k+j-i)
    }
  }
}

三重にネストされたforループよりもエレガントなものがあるかもしれません。

あなたが尋ねる機能に関しては、

as.numeric(f(x)==0)

動作します。

于 2013-03-11T19:12:39.823 に答える