2017-12-21 50 views
1

xは、すべての繰り返しの参照行列です。合計2つの行列があります。行列を参照行列n倍で掛ける。

matrix A 
1 4 1 4 
4 2 4 2 
2 3 2 3 
3 3 3 3 

matrix B 
1 4 1 4 
4 2 4 2 
2 3 2 3 
3 3 3 3 


matrix x 
4 1 4 3 
2 4 2 2 
3 2 3 5 
3 5 1 1 

ここで、行列AとBは同じです。

C <- B %*% x 
D <- C %*% x 
E <- D %*% x 
F <- E %*% x 

xは、すべての反復の参照行列です。 この乗算は15回実行されるので、ループや関数の書き込みに役立つ必要があります。

+2

だから、[再帰関数]を必要とする(https://stackoverflow.com/questions/5273857/are-recursive-functions-used -in-r)基本的に – Sotos

+0

はいSotosには15を掛けなければなりません。 – Pradnya

+1

'nm1 < - LETTERS [2:5];を試してください。 (2:5の場合)を割り当てる(LETTERS [i + 1]、get(LETTERS [i])%*%x) ' – akrun

答えて

2

あなただけソトスにより示唆されるように、最後の行列は、我々は、再帰関数を使用することができますしたい場合:

A <- matrix(runif(9), 3) 
X <- matrix(runif(9), 3) 

repmult <- function(A,x,reps) 
{ 
    if(reps==0){ 
    return(A) 
    } 
    else 
    { 
    repmult(A%*%x,x,reps-1) 
    } 
} 

repmult(A,X,15) 

あなたにも、リスト内のすべての中間結果をしたい場合は、我々は機能を変更することができますthis SO questionの答え(あなたがその名前を変更したいかもしれないが)から:

Mpow <- function(A,x, n) { 
    L <- list(A%*%x) 
    if (n==1) return(L) 
    P <- A 
    for (i in 1:n) L[[i]] <- (P <- P %*% x) 
    return(L) 
} 

Mpow(A,X,3) 
+0

私は上記のコードを試しました:しかし、ここでの問題は、私は15番目の行列である直接アンサーを取得しています。私は1,2,3,4,5 ....までのすべての行列を求めています。助けてください。 – Pradnya

+0

こんにちはpradnya、私はそれのための2番目の機能を追加しました。 – Florian

+0

こんにちはフロリアン、あなたの助けをありがとう。 – Pradnya