/*************************************/
/* Auteur : Rémi Synave */
/* Date de création : 01/03/07 */
/* Date de modification : 15/03/15 */
/* Version : 0.4 */
/*************************************/
/***************************************************************************/
/* This file is part of a2ri. */
/* */
/* a2ri is free software: you can redistribute it and/or modify it */
/* under the terms of the GNU Lesser General Public License as published */
/* by the Free Software Foundation, either version 3 of the License, or */
/* (at your option) any later version. */
/* */
/* a2ri is distributed in the hope that it will be useful, */
/* but WITHOUT ANY WARRANTY; without even the implied warranty of */
/* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the */
/* GNU Lesser General Public License for more details. */
/* */
/* You should have received a copy of the GNU Lesser General Public */
/* License along with a2ri. */
/* If not, see . */
/***************************************************************************/
#ifndef MATRIX__H
#define MATRIX__H
#include "util.h"
#include "point.h"
#include
#include
#include
#include
/**
Calcul du déterminant d'une matrice
@param m pointeur sur une matrice
@return le déterminant
*/
double matrix_determinant (
const gsl_matrix * const m);
/**
Calcul de la norme de Frobenius
@param m pointeur sur une matrice
@return la norme de Frobenius
*/
double matrix_frobenius_norm (
const gsl_matrix * const m);
/**
Addition de deux matrices
@param A pointeur sur la première matrice
@param B pointeur sur la seconde matrice
@return pointeur sur une matrice contenant l'addition A+B
*/
gsl_matrix *matrix_add (
const gsl_matrix * const A,
const gsl_matrix * const B);
/**
Soustraction de deux matrices
@param A pointeur sur la première matrice
@param B pointeur sur la seconde matrice
@return pointeur sur une matrice contenant la soustraction A-B
*/
gsl_matrix *matrix_sub (
const gsl_matrix * const A,
const gsl_matrix * const B);
/**
Multiplication d'une matrice par un scalaire
@param A pointeur sur une matrice
@param n scalaire par lequel on multiplie la matrice
@return pointeur sur la matrice contenant n*A
*/
gsl_matrix *matrix_mul_scale (
const gsl_matrix * const A,
double n);
/**
Multiplication de deux matrices
@param A pointeur sur la première matrice
@param B pointeur sur la seconde matrice
@return pointeur sur une matrice contenant la multiplication A*B
@warning Erreur du programme si le nombre de colonne de la première matrice est différent du nombre de ligne de la seconde.
*/
gsl_matrix *matrix_mul (
const gsl_matrix * const A,
const gsl_matrix * const B);
/**
Calcul de l'inverse d'une matrice
@param m pointeur sur une matrice
@return pointeur sur une matrice contenant l'inverse \f$A^{-1}\f$
*/
gsl_matrix *matrix_inverse (
const gsl_matrix * const m);
/**
Affichage d'une matrice
@param m pointeur sur une matrice
@return aucun
*/
void matrix_display (
const gsl_matrix * const m);
/**
Initialisation d'une matrice à partir d'une liste de valeur
@param data liste de valeur
@param nbline nombre de ligne
@param nbcol nombre de colonne
@return pointeur sur la matrice initialisée avec la liste de valeur
Exemple de code
@code
double data[]={1.0,2.0,3.0,4.0,5.0,6.0};
gsl_matrix *mat=matrix_init(data,2,3);
matrix_display(mat);
@endcode
donne le résultat suivant
@code
1.0 2.0 3.0
4.0 5.0 6.0
@endcode
*/
gsl_matrix *matrix_init (
double *data,
int nbline,
int nbcol);
/**
Calcul de la transposé d'une matrice
@param m pointeur sur une matrice
@return pointeur sur une matrice contenant la transposé \f$A^T\f$
*/
gsl_matrix *matrix_transpose (
const gsl_matrix * const m);
/**
Calcul de la matrice de covariance
@param data_p premier ensemble de point
@param data_x second ensemble de point
@param nbpoint nombre de point
@return la matrice de covariance
*/
gsl_matrix *cross_variance (
const point3d * const data_p,
const point3d * const data_x,
int nbpoint);
#endif