summaryrefslogtreecommitdiff
path: root/src/eigen.c
diff options
context:
space:
mode:
authorElizabeth Hunt <elizabeth.hunt@simponic.xyz>2023-11-15 14:30:39 -0700
committerElizabeth Hunt <elizabeth.hunt@simponic.xyz>2023-11-15 14:30:39 -0700
commitc02573cb66847abfcb9c679416cf14d373790792 (patch)
tree46a6dbe76e6fbdae29e1beb950ddc8836cec24af /src/eigen.c
parent1a6b95273628d898226eb448c8b671dc33f3c495 (diff)
downloadcmath-c02573cb66847abfcb9c679416cf14d373790792.tar.gz
cmath-c02573cb66847abfcb9c679416cf14d373790792.zip
generate leslie matrix
Diffstat (limited to 'src/eigen.c')
-rw-r--r--src/eigen.c17
1 files changed, 17 insertions, 0 deletions
diff --git a/src/eigen.c b/src/eigen.c
index aaacedc..6ea26c3 100644
--- a/src/eigen.c
+++ b/src/eigen.c
@@ -4,6 +4,23 @@
#include <stdio.h>
#include <string.h>
+Matrix_double *leslie_matrix(Array_double *age_class_surivor_ratio,
+ Array_double *age_class_offspring) {
+ assert(age_class_surivor_ratio->size + 1 == age_class_offspring->size);
+
+ Matrix_double *leslie = InitMatrixWithSize(double, age_class_offspring->size,
+ age_class_offspring->size, 0.0);
+
+ free_vector(leslie->data[0]);
+ leslie->data[0] = age_class_offspring;
+
+ for (size_t i = 0; i < age_class_surivor_ratio->size; i++) {
+ leslie->data[i + 1]->data[i] = age_class_surivor_ratio->data[i];
+ }
+
+ return leslie;
+}
+
double dominant_eigenvalue(Matrix_double *m, Array_double *v, double tolerance,
size_t max_iterations) {
assert(m->rows == m->cols);