Petite librairie de matrices

Soyez le premier à donner votre avis sur cette source.

Vue 8 108 fois - Téléchargée 3 411 fois

Description

Voila une librairie de matrices.
Les fonctions ci-dessous sont programmes :
- creation
- suppression
- initialisation (une nombre, ou par plusieurs a la fois)
- copie
- transposee
- affichage (dans un fichier, voir meme stdout)
- addition
- soustraction
- combinaison lineaire
- multiplication
- pivot de Gauss
- pseudo-inverse (resolution A.X=B, avec minimisation des residus)
- echanger des matrices
- distance carree, et distance (seulement pour des matrices vercteurs)
- remplissage par un nombre

voila c'est un peu pres tout

Je voudrait rajouter qqchose : il y a avec les matrices des utilitaires de debugage satisfaisant pour les matrcies. (par exemple matrice non liberee, matrice non initialisee, ....)

Voila, si ca peut vous etre util.
Dans le main il y a juste un exemple de resolution d'un systeme, masi les autre fonctions sont dans matrix.h

Source / Exemple :


#ifndef _UTIL_H_
	#include "util.h"
#endif // _UTIL_H_

#ifndef _MATRIX_H_
	#include "matrix.h"
#endif // _MATRIX_H_

#include <conio.h>

int main(int argc,char **argv)
{
InitializationLibUtil();
InitializationLibMatrix();

if(TRUE)
  {
  P_MATRIX A,B,X;

  A = NewMatrix(2,3);
  B = NewMatrix(1,3);

  SetItemsMatrix(A,6,
                      5.,-6.,
                      2.,3.,
                      1.,-4.
                      );
  SetItemsMatrix(B,3,
                      7.,
                      5.,
                      2.
                      );

  printf("Resoudre le systeme A.X=B en donnant la solution la plus probable\n");

  PrintMatrix(stdout,"A = \n",A);
  PrintMatrix(stdout,"B = \n",B);

  printf("Resolution du systeme avec la pseudo-inverse ...\n");

  if(NULL != (X = ResolveAX_B(A,B)))
    {
    PrintMatrix(stdout,"X = \n",X);
    DeleteMatrix(X);
    }
  else
    {
    printf("Pas de solution !\n");
    }

  DeleteMatrix(A);
  DeleteMatrix(B);
  }

CloseLibMatrix();
CloseLibUtil();

CheckingClosingLibMatrix();
CheckingClosingLibUtil();

getch();
return 0;
}

Codes Sources

A voir également

Ajouter un commentaire Commentaires
Messages postés
1138
Date d'inscription
mardi 10 juin 2003
Statut
Membre
Dernière intervention
25 janvier 2009
4
Le but est de resoudre un systeme d'equations A.X=B (en matrice bien-sur).
Le jour ou il y plus d'equation que d'inconnues, alors il n'y a pas de solutions (a part un coup de bol incroyable).
Donc le but est de trouver la solution la meilleur possible, i.e. de minimiser les residus carres.
Ainsi Gauss a demontrer que pour faire cela, alors X etait solution de l'equation :
(At.A).X=(At.B) , avec At la tranposee de la matrice A
En faisant une analyse dimansionnelle, on trouve que AtA est carree, et ue AtB a une bonne dimension pour faire l'inverse :
X = PivotDeGauss( At.A , At.B)

Donc on a : X=(((At.A)^-1).At).B
Et on apelle (((At.A)^-1).At) la pseudo inverse de la matrice A.
Comme a n'etait pas carree, elle n'avait pas d'inverse, c'est pourquoi qu'avec cette methode A n'est pas forcement carre, et dons on nomme cela la pseudo-inverse.

JCDjcd
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
10
qu'est ce que c'est que la pseudo-inverse?
Messages postés
700
Date d'inscription
mardi 30 décembre 2003
Statut
Membre
Dernière intervention
27 janvier 2009
4
contrairement a ce que tu dis, ton generateur aletoire n'est pas bon du tout. rand() a de grandes chances d'etre bien meilleur.
Messages postés
1138
Date d'inscription
mardi 10 juin 2003
Statut
Membre
Dernière intervention
25 janvier 2009
4
c'est des nombres bidons, c'est pour faire un bon generateur de nombre aleatoire, beaucoups mieux que celui standard "rand()".
Mais le ut de la source n'est pas vraiment la dessus, mais merci d'avoir poser la question, il est vrai que je ne comment pas tres bien (voire pas du tout ! :()
Messages postés
231
Date d'inscription
vendredi 21 mars 2003
Statut
Membre
Dernière intervention
22 avril 2007

Tres interessant ! Par contre, je vais peut être te paraitre con, mais a koi servent tous ces chiifres que tu mé dans math ? ++

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.