aboutsummaryrefslogtreecommitdiff
path: root/src/maths/matrix.h
diff options
context:
space:
mode:
authorhachem <im@hachem.wtf>2026-09-02 18:56:09 +0200
committerhachem <im@hachem.wtf>2026-09-02 18:56:09 +0200
commit4d404450cd53946e56cc64c66372f0b2d439dbc6 (patch)
treeb577c728f0541552dff1c5e50ee6b5cd3011a1e0 /src/maths/matrix.h
parentcd69b3c1be9a515906954f48f7f1dbc582f8ad83 (diff)
c: port over matrices
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);