Построение матрицы умножения - PullRequest
0 голосов
/ 07 декабря 2018

Я пытаюсь построить матричное умножение как функцию времени и столкнулся с проблемой невозможности включить исходное состояние в график (где n = c(100,1000,50)).

Я пытался найтирешение в других сообщениях SO, но он мог найти только функцию next , что, я думаю, не очень хорошо, потому что, если я запишу ее в секцию if (time ==1){}, она точно так же пропустит исходное состояние.В конце концов, я пришел с этим, который тоже не работает:

n = c(100,1000,50) #original state
G = matrix(c(0.6,0.4,0,0.005,0.9,0.1,0,0,0.5),3,3) 

population = function(time = 100){
  x = seq(0,100,1)
  plot(x = seq(0,100,1),y = seq(0,1000,10), col="white", xlab = "time", ylab = "sample")
  if(time == 1){
    points(x[1],n[1], col = "red") 
    points(x[1],n[2], col = "blue")
    points(x[1],n[3], col = "black")
  }
  for(i in 1:(time-1)){
    n = G%*%n
    print(n)
    points(x[i],n[1], col = "red") 
    points(x[i],n[2], col = "blue")
    points(x[i],n[3], col = "black")

  }
  return(n)

} 

population(100)

Любые намеки будут высоко оценены.

1 Ответ

0 голосов
/ 07 декабря 2018

Я бы предпочел использовать функцию matplot, потому что легче реально контролировать то, что она на самом деле производит.Кроме того, код становится намного понятнее.

N <- matrix(NA, 3, 100)
N[, 1] <- c(100, 1000, 50)
G <- matrix(c(0.6, 0.4, 0, 0.005, 
              0.9, 0.1, 0, 0, 0.5), 3, 3) 
for (i in 2:ncol(N)) {
  N[,i] <- G %*% N[, i-1]
}
matplot(x=0:99, t(N), type = "p", pch=1,
        xlab = "time", ylab = "N")

The result with matplot

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...