Advertisement
Guest User

Untitled

a guest
Mar 22nd, 2019
91
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.79 KB | None | 0 0
  1. #lang racket/base
  2.  
  3. (require math/array)
  4.  
  5. ;; scalar constants
  6. (define years 30)
  7. (define prop-female 0.5)
  8. (define egg-surv 0.6)
  9.  
  10. ;; age-specific fecundity and survival
  11. (define fecundity #(0 0 200 400 800))
  12. (define survival #(0.2 0.4 0.6 0.8 0))
  13. (define capacity #(1e6 1e5 1e4 1e3 1e2))
  14.  
  15. ;; multistage Beverton-Holt model
  16. (define (beverton-holt N p c)
  17. (/ N (+ (/ 1 p) (/ N c))))
  18.  
  19. ;; initialize empty results matrix and make mutable
  20. (define results (array->mutable-array (make-array (vector years (vector-length fecundity)) 0)))
  21.  
  22. ;; initialize abundances in first year to arbitrary non-zero value
  23. (array-slice-set! results (list '(0) (::)) (make-array (vector 1 (vector-length fecundity)) 10))
  24.  
  25. ;; iterate over results to fill matrix
  26. (for* ([i (in-range (sub1 years))]
  27. [j (in-range (vector-length fecundity))])
  28. ;; current abundance vector
  29. (define N (array-ref results (vector i j)))
  30. ;; reproduction
  31. (define fecundity-age-j (vector-ref fecundity j))
  32. (when (> fecundity-age-j 0) ;; not all age classes reproduce
  33. (define N-female (* N prop-female))
  34. ;; next year age-0
  35. (define Nt-age-0 (array-ref results (vector (add1 i) 0)))
  36.  
  37. (define new-age-0 (beverton-holt
  38. N-female
  39. (* fecundity-age-j egg-surv)
  40. (- (vector-ref capacity 0) Nt-age-0)))
  41. (array-set! results (vector (add1 i) 0) (+ Nt-age-0 new-age-0))
  42. )
  43. ;; survival
  44. (define survival-age-j (vector-ref survival j))
  45. (when (> survival-age-j 0)
  46. (define Nt-age-j (array-ref results (vector (add1 i) (add1 j))))
  47. (define new-age-j (beverton-holt
  48. N
  49. survival-age-j
  50. (- (vector-ref capacity (add1 j)) Nt-age-j)))
  51. (array-set! results (vector (add1 i) (add1 j)) (+ Nt-age-j new-age-j))
  52. )
  53. )
  54. results
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement