From ee4219155b6c145e129aa50122fe8aa33234a24b Mon Sep 17 00:00:00 2001 From: Corey Bradshaw Date: Wed, 6 Oct 2021 13:18:17 +1030 Subject: [PATCH] Add files via upload --- echidna.png | Bin 0 -> 22597 bytes matrixOperators.r | 52 ++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 52 insertions(+) create mode 100644 echidna.png create mode 100644 matrixOperators.r diff --git a/echidna.png b/echidna.png new file mode 100644 index 0000000000000000000000000000000000000000..59256f3e0cd787fd1c39a0ea97fe1737d454624c GIT binary patch literal 22597 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 Uz>RH9q9%zB*ifTR&Hn9w0bg{NdH?_b literal 0 HcmV?d00001 diff --git a/matrixOperators.r b/matrixOperators.r new file mode 100644 index 0000000..61a607a --- /dev/null +++ b/matrixOperators.r @@ -0,0 +1,52 @@ +# Matrix operators for population models +# place in R 'Resources/R/' folder + +## maximum lambda function +max.lambda <- function(x) Re((eigen(x)$values)[1]) ## where 'x' is a Leslie matrix + +## Maximum r function +max.r <- function(x) log(Re((eigen(x)$values)[1])) ## where 'x' is a Leslie matrix + +## Stable stage distribution +stable.stage.dist <- function(x) ((x %*% (Re((eigen(x)$vectors)[,1])))/(sum((x %*% (Re((eigen(x)$vectors)[,1]))))))[,1] + +## Generation length function +R.val <- function(X,age.max) ## reproductive value (R0) where X = Leslie matrix; age.max = maximum age of females +{ + ## define the transition matrix + T <- X[1:age.max,1:age.max] + T[1,1:(age.max)] <- 0 + + ## define the fertility matrix + F <- X[1:age.max,1:age.max] + diag(F[2:age.max,1:(age.max-1)]) <- 0 + + ## define the identity matrix + I <- matrix(data<-0,nrow<-age.max,ncol<-age.max) + diag(I) <- 1 + + ## define the fundamental matrix + library(MASS) + N.fund <- ginv(I-T) + + ## define the reproductive matrix + R <- F %*% N.fund + + ## define R0 (number of female offspring produced per female during lifetime) + R0 <- Re((eigen(R)$values)[1]) + + ## output + print("number of female offspring produced per female during its lifetime") + print("_________________________________________________________________") + print(R0) + +} + +## Mean generation time function +G.val <- function (X,age.max) ## where X is a Leslie Matrix +{ + G <- (log(R.val(X,age.max)))/(log(Re((eigen(X)$values)[1]))) + print("mean generation time") + print("____________________") + print(G) +}