La difficulté avec l'algèbre matricielle est de déterminer ce qu'est un domaine sur la matrice à des fins de modélisation de données. Est-ce une valeur? Est-ce une matrice dans son ensemble? Ce n'est pas une question prédéfinie, alors je vais vous donner deux solutions et quels sont les compromis.
Solution 1: Valeur dans une cellule de matrice est un domaine:
CREATE TABLE matrix_info (
x_size int,
y_size int,
id serial not null unique,
timestamp not null,
);
CREATE TABLE matrix_cell (
matrix_id int references matrix_info(id),
x int,
y int,
value numeric not null,
primary key (matrix_id, x, y)
);
La grande préoccupation est que cela ne l'applique pas très bien la taille de la matrice. De plus, une valeur manquante pourrait être utilisée pour représenter 0 ou pourrait ne pas être autorisée. L'idée d'utiliser une matrice dans son ensemble a un certain attrait. Dans ce cas:
CREATE TABLE matrix (
id serial not null unique,
timestamp not null,
matrix_data numeric[]
);
Notez que beaucoup de db de PostgreSQL y compris appliquerons qu'un tableau est en fait une matrice. Ensuite, vous devrez écrire vos propres fonctions pour la multiplication, etc. Je vous recommande de le faire de manière relationnelle avec l'objet et sur PostgreSQL car il est assez programmable pour ce genre de choses. Quelque chose comme:
CREATE TABLE matrix(int) RETURNS matrix LANGUAGE SQL AS
$$ select * from matrix where id = $1 $$;
CREATE FUNCTION multiply(matrix, matrix) RETURNS matrix LANGUAGE plpgsql AS
$$
DECLARE matrix1 = $1.matrix_data;
matrix2 = $2.matrix_data;
begin
...
end;
$$;
Ensuite, vous pouvez appeler la multiplication matricielle:
SELECT * FROM multiply(matrix(1), matrix(2));
Vous pouvez même insérer dans la table le produit de deux autres matrices:
INSERT INTO matrix (matrix_data)
SELECT matrix_data FROM multiply(matrix(1), matrix(2));
Est-ce devoirs? –
Pouvez-vous être plus élaboré? Ce n'est pas encore clair. Ce que la table contiendra et ce qui sera extrait d'elle. –