aboutsummaryrefslogtreecommitdiff
path: root/src/maths/matrix.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/maths/matrix.h')
-rw-r--r--src/maths/matrix.h35
1 files changed, 35 insertions, 0 deletions
diff --git a/src/maths/matrix.h b/src/maths/matrix.h
new file mode 100644
index 0000000..1076310
--- /dev/null
+++ b/src/maths/matrix.h
@@ -0,0 +1,35 @@
+#pragma once
+
+#include <stddef.h>
+
+#include "maths/complex.h"
+#include "maths/vector.h"
+
+struct PsiMatrix
+{
+ struct PsiComplex *data;
+ size_t rows;
+ size_t cols;
+};
+
+struct PsiMatrix psi_new_matrix(size_t rows, size_t cols);
+struct PsiMatrix psi_new_matrix_from(const struct PsiComplex *data, size_t rows, size_t cols);
+struct PsiMatrix psi_clone_matrix(struct PsiMatrix m);
+void psi_free_matrix(struct PsiMatrix *m);
+
+#define psi_matrix(rows, cols, ...) \
+ psi_new_matrix_from((struct PsiComplex[]){ __VA_ARGS__ }, rows, cols)
+
+struct PsiComplex psi_get_matrix(struct PsiMatrix m, size_t row, size_t col);
+void psi_set_matrix(struct PsiMatrix *m, size_t row, size_t col, struct PsiComplex value);
+
+struct PsiMatrix psi_dot_matrix(struct PsiMatrix a, struct PsiMatrix b);
+struct PsiMatrix psi_kronecker_matrix(struct PsiMatrix a, struct PsiMatrix b);
+struct PsiMatrix psi_transpose_matrix(struct PsiMatrix m);
+struct PsiMatrix psi_add_matrix(struct PsiMatrix a, struct PsiMatrix b);
+struct PsiMatrix psi_sub_matrix(struct PsiMatrix a, struct PsiMatrix b);
+struct PsiMatrix psi_scale_matrix(struct PsiMatrix m, struct PsiComplex scalar);
+
+struct PsiMatrix psi_matrix_from_vector(struct PsiVector v);
+struct PsiVector psi_vector_from_matrix(struct PsiMatrix m, enum PsiVectorKind kind);
+struct PsiVector psi_mul_vector_matrix(struct PsiVector v, struct PsiMatrix m);