aboutsummaryrefslogtreecommitdiff
path: root/src/maths/matrix.h
blob: 1076310d1bbe5ad38dee806563d1ac1f043feb3f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
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);