From 4d404450cd53946e56cc64c66372f0b2d439dbc6 Mon Sep 17 00:00:00 2001 From: hachem Date: Wed, 2 Sep 2026 18:56:09 +0200 Subject: c: port over matrices --- src/maths/matrix.h | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 src/maths/matrix.h (limited to 'src/maths/matrix.h') 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 + +#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); -- cgit v1.3