Конкуренция за дискретное время для двух видов — достигнута с помощью векторов, но застряла с матрицами

#r #rstudio

#r #rstudio

Вопрос:

Я строил две разные популяции видов (вымышленные, для обучения) в Rstudio, используя векторы :

 ##I-With vectors : 

#Parameters
alphs <- matrix(c(0.01, 0.005, 0.008, 0.01), ncol = 2, byrow = TRUE)
years<-20
R1<- 0.9
R2<- 1.4

#Creating vectors
TimeVec<-seq(0,years,1)
N1<-rep(0,years)
N2<-rep(0,years)

#INITIALIZATION
N0 <- 50
N1[1] <-N0
N2[1] <-N0

for (t in 1:years){
  N1[t 1]<-(R1*N1[t])/(1 alphs[1,1]*N1[t] alphs[1,2]*N2[t])
  N2[t 1]<-(R2*N2[t])/(1 alphs[2,1]*N1[t] alphs[2,2]*N2[t])
}
plot(TimeVec,N1,type="l",xlab='Time (years)',ylab='Population Density',col='blue')
lines(TimeVec,N2,type="l",lwd=2,col='green')
legend("topright", legend = c("Species 1", "Species 2"),lty = 1, col = c("blue", "green"), bty = "n")
  

Я пытаюсь проверить свои результаты другим методом, используя матрицы. Но поскольку я в некотором роде новичок в них, я не уверен, что использую их правильно, и я не могу получить тот же график, что и в приведенном выше коде.

Я попытался использовать аналогичное упражнение, которое я делал на прошлой неделе, с двумя разными жизненными этапами вместо двух разных видов (litteraly Nj и Na вместо N1 и N2), которые отлично работали с матрицами, как показано ниже :

 ##Density dependance with matrix : 

#Parameters
zeta<-0.05
fert<-6
fert0<-30
matur<-0.9
sj<-0.2
sa<-0.6
years<-20
lambda<- 1.389 
##Creating input matrix
X<-matrix(0,2,years 1)

##Creating vectors
TimeVec<-seq(0,years,1)

##INITIALIZATION
N0 <- 30
X[1,1]<- 0 # initial number of juveniles
X[2,1]<- 30 # initial number of adults

for (t in 1:years){
  A<-matrix(c((1-matur)*sj,(fert0/(1 zeta*X[2,t])),matur*sj,sa),nrow=2,ncol=2,byrow=TRUE) 
  X[,t 1]<-A%*%X[,t]
}
plot(TimeVec,X[1,],type="l",xlab='Time (years)',ylab='Population Density',col='blue')
lines(TimeVec,X[2,],type="l",lwd=2,col='orange')
legend("topright", legend = c("Juveniles", "Adults"),lty = 1, col = c("blue", "orange"), bty = "n")
  

(Здесь X — матрица, содержащая Nj в первой строке и Na во второй.)

Однако уравнения сильно отличаются от этого примера, я не смог сделать это точно так же с конкуренцией видов, и моя матрица A заканчивается вектором данных, содержащим только две разные записи вместо четырех :

 ##II-With matrix : 

#Parameters
alphs <- matrix(c(0.01, 0.005, 0.008, 0.01), ncol = 2, byrow = TRUE)
years<-20
R1<- 0.9
R2<- 1.4

##Creating input matrix
X<-matrix(0,2,years 1)

##Creating vectors
TimeVec<-seq(0,years,1)

##INITIALIZATION
N0 <- 50
X[1,1]<- N0 # initial number of individuals from species 1
X[2,1]<- N0 # initial number of individuals from species 2

for (t in 1:years){
  A<-matrix(c(R1/(1 alphs[1,1] alphs[1,2]),R2/(1 alphs[2,1] alphs[2,2])),nrow=2,ncol=2,byrow=TRUE)
  A
  X
  ##A<-matrix(c(R1*alphs[1,1], alphs[1,2], alphs[2,1], R2*alphs[2,2]),nrow=2,ncol=2,byrow=TRUE)
  X[,t 1]<-A%*%X[,t]
}
plot(TimeVec,X[1,],type="l",xlab='Time (years)',ylab='Population Density',col='blue')
lines(TimeVec,X[2,],type="l",lwd=2,col='green')
legend("topright", legend = c("Species 1", "Species 2"),lty = 1, col = c("blue", "green"), bty = "n")
  

Я хочу иметь тот же график, что и в первом блоке кода, при тех же начальных условиях (перечисленных в параметрах и в инициализации). Потому что сейчас это не так, и я не понимаю, почему. Может быть, это на самом деле проблема математики?

Комментарии:

1. Я не совсем уверен, что это то, чего вы хотите, но почему бы вам просто не использовать векторы N1 и N2 из вашего первоначального примера и использовать X <- rbind(N1,N2) для генерации вашей матрицы?

2. Спасибо за ваш ответ, но проблема заключается не в X, а в том, что я считаю, что это так сложно. После этого мне нужно умножить его на W, и тогда это, вероятно, не сработает.

3. Хорошо. тогда я вообще не понимаю вашей проблемы, но ваш for цикл генерирует только один вектор, поэтому он будет дублироваться для каждой строки

4. Я хочу, чтобы метод с матрицами давал те же результаты, что и метод с векторами, который я показываю сначала, вот и все. Но вы правы, это дублирует, это проблема. Я постараюсь обойти это.