begin process at 2012 02 11 00:53:13
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

Maths & Algorithmes

 > 

inverse de matrice dynamique


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

inverse de matrice dynamique

jeudi 3 avril 2003 à 16:37:59 | inverse de matrice dynamique

anaisa

Aidez nous please c pr programmer en langage Votre texte ICIC l inverse de la matrice dynamique merci bcp !!!!!!
jeudi 3 avril 2003 à 16:38:16 | Re : inverse de matrice dynamique

anaisa





-------------------------------
Réponse au message :
-------------------------------

> Aidez nous please c pr programmer en langage Votre texte ICIC l inverse de la matrice dynamique merci bcp !!!!!!
jeudi 3 avril 2003 à 16:38:50 | Re : inverse de matrice dynamique

anaisa





-------------------------------
Réponse au message :
-------------------------------

>
>
>
>
> -------------------------------
> Réponse au message :
> -------------------------------
>
> > Aidez nous please c pr programmer en langage Votre texte ICIC l inverse de la matrice dynamique merci bcp !!!!!!
>
samedi 12 avril 2003 à 18:04:24 | Re : inverse de matrice dynamique

CoreBreaker

#include <stdio.h>
#include <malloc.h>

typedef struct {double *v; int dim;} matrix;

void destruct(matrix m)
{
free(m.v);
}

void create(matrix *m, int dim)
{
m->dim= dim;
m->v= (double *)calloc(dim, sizeof(double));
}

double getVal(matrix m, int x, int y)
{
if( x >= m.dim )
{
printf("%d is an invalid x index to get value (dim=%d)\n", x, m.dim);
return 0.0;
}

if( y >= m.dim )
{
printf("%d is an invalid y index to get value (dim=%d)\n", y, m.dim);
return 0.0;
}

return m.v[(m.dim * y) + x];
}

void setVal(matrix m, int x, int y, double v)
{
if( x >= m.dim )
{
printf("%d is an invalid x index to set value (dim=%d)\n", x, m.dim);
return;
}

if( y >= m.dim )
{
printf("%d is an invalid y index to set value (dim=%d)\n", y, m.dim);
return;
}

m.v[(m.dim * y) + x]= v;
}

double getSignatureDim(int i)
{
return (i % 2)?-1.0:1.0;
}

double getSignature(int x, int y)
{
return getSignatureDim(x) * getSignatureDim(y);
}

matrix extract(matrix m, int x, int y)
{
matrix res;
int i, j, k, l, dim= m.dim;

create(&res, dim - 1);
for(j= l= 0; j < dim; j++)
{
for(i= k= 0; i < dim; i++)
{
if( (i != x) && (j != y) )
setVal(res, k, l, getVal(m, i, j));

if( i != x )
k++;
}

if( j != y )
l++;
}

return res;
}

double getDet(matrix m)
{
int dim= m.dim;

if( !dim )
{
printf("It's an empty matrix\n");
return 0.0;
}

if( dim == 1 )
return *m.v;
else
{
int i, j;
double res= 0.0;

for(j= 0; j < dim; j++)
for(i= 0; i < dim; i++)
{
matrix a= extract(m, i, j);
res+= getVal(m, i, j) * getSignature(i, j) * getDet(a);
destruct(a);
}

return res;
}
}

matrix inverse(matrix m)
{
matrix res= {0};
int dim= m.dim;

create(&res, dim);

if( dim == 1 )
setVal(res, 0, 0, 1.0 / getVal(m, 0, 0));
else
{
int i, j;
double det= getDet(m);

if( !det )
{
printf("This matrix is not inversable\n");
return res;
}

for(j= 0; j < dim; j++)
for(i= 0; i < dim; i++)
{
matrix a= extract(m, i, j);
setVal(res, i, j, getVal(m, i, j) * getSignature(i, j) * getDet(a) / det);
destruct(a);
}
}

return res;
}

int main()
{
matrix m;

create(&m, 2);

setVal(m, 0, 0, 1.0);
setVal(m, 0, 1, 2.0);
setVal(m, 1, 0, 3.0);
setVal(m, 1, 1, 4.0);

printf("%f\t", getVal(m, 0, 0));
printf("%f\n", getVal(m, 0, 1));
printf("%f\t", getVal(m, 1, 0));
printf("%f\n", getVal(m, 1, 1));
printf("\n");

m= inverse(m);

printf("%f\t", getVal(m, 0, 0));
printf("%f\n", getVal(m, 0, 1));
printf("%f\t", getVal(m, 1, 0));
printf("%f\n", getVal(m, 1, 1));

return 0;
}

Core Breaker


-------------------------------
Réponse au message :
-------------------------------

> Aidez nous please c pr programmer en langage Votre texte ICIC l inverse de la matrice dynamique merci bcp !!!!!!
samedi 12 avril 2003 à 20:01:47 | Re : inverse de matrice dynamique

CoreBreaker

Désolé je me suis trompé.
Voici le bon:

#include <stdio.h>
#include <malloc.h>

typedef struct {double *v; int dim;} matrix;

void destruct(matrix m)
{
free(m.v);
}

void create(matrix *m, int dim)
{
m->dim= dim;
m->v= (double *)calloc(dim * dim, sizeof(double));
}

double getVal(matrix m, int x, int y)
{
if( x >= m.dim )
{
printf("%d is an invalid x index to get value (dim=%d)\n", x, m.dim);
return 0.0;
}

if( y >= m.dim )
{
printf("%d is an invalid y index to get value (dim=%d)\n", y, m.dim);
return 0.0;
}

return m.v[(m.dim * y) + x];
}

void printM(matrix m)
{
int i, j;
printf("\n---------------\nmat:\n");
for(i=0; i < m.dim; i++)
{
for(j=0; j < m.dim; j++)
printf("%f\t", getVal(m, i, j));
printf("\n");
}
printf("---------------\n\n");
}

void setVal(matrix m, int x, int y, double v)
{
if( x >= m.dim )
{
printf("%d is an invalid x index to set value (dim=%d)\n", x, m.dim);
return;
}

if( y >= m.dim )
{
printf("%d is an invalid y index to set value (dim=%d)\n", y, m.dim);
return;
}

m.v[(m.dim * y) + x]= v;
}

double getSignatureDim(int i)
{
return ( i % 2 )?-1.0:1.0;
}

double getSignature(int x, int y)
{
return getSignatureDim(x) * getSignatureDim(y);
}

matrix extract(matrix m, int x, int y)
{
matrix res;
int i, j, k, l, dim= m.dim;

create(&res, dim - 1);
for(j= l= 0; j < dim; j++)
{
for(i= k= 0; i < dim; i++)
{
if( (i != x) && (j != y) )
setVal(res, k, l, getVal(m, i, j));

if( i != x )
k++;
}

if( j != y )
l++;
}

return res;
}

double getDet(matrix m)
{
int dim= m.dim;

if( !dim )
{
printf("It's an empty matrix\n");
return 0.0;
}

if( dim == 1 )
return *m.v;
else
{
int i, j;
double res= 0.0;

for(i= 0; i < dim; i++)
{
matrix a= extract(m, i, 0);
res+= getVal(m, i, 0) * getSignatureDim(i) * getDet(a);
destruct(a);
}

return res;
}
}

matrix transpose(matrix m)
{
int dim= m.dim;

if( dim > 1 )
{
int i, j;
double tmp;

for(j= 0; j < dim; j++)
for(i= j + 1; i < dim; i++)
{
tmp= getVal(m, i, j);
setVal(m, i, j, getVal(m, j, i));
setVal(m, j, i, tmp);
}
}

return m;
}

matrix inverse(matrix m)
{
matrix res= {0};
int dim= m.dim;

create(&res, dim);

if( dim == 1 )
setVal(res, 0, 0, 1.0 / getVal(m, 0, 0));
else
{
int i, j;
double det= getDet(m);

if( !det )
{
printf("This matrix is not inversable\n");
return res;
}

for(j= 0; j < dim; j++)
for(i= 0; i < dim; i++)
{
matrix a= extract(m, i, j);
setVal(res, i, j, getSignature(i, j) * getDet(a) / det);
destruct(a);
}
}

return transpose(res);
}

int main()
{
matrix m;

create(&m, 2);

setVal(m, 0, 0, 1.0);
setVal(m, 0, 1, 2.0);
setVal(m, 1, 0, 3.0);
setVal(m, 1, 1, 4.0);

printf("%f\t", getVal(m, 0, 0));
printf("%f\n", getVal(m, 0, 1));
printf("%f\t", getVal(m, 1, 0));
printf("%f\n", getVal(m, 1, 1));
printf("det:%f\n", getDet(m));
printf("\n");

m= inverse(m);

printf("%f\t", getVal(m, 0, 0));
printf("%f\n", getVal(m, 0, 1));
printf("%f\t", getVal(m, 1, 0));
printf("%f\n", getVal(m, 1, 1));

return 0;
}



Core Breaker


-------------------------------
Réponse au message :
-------------------------------

> Aidez nous please c pr programmer en langage Votre texte ICIC l inverse de la matrice dynamique merci bcp !!!!!!


Cette discussion est classée dans : dynamique, matrice, pink, inverse


Répondre à ce message

Sujets en rapport avec ce message

allococation dynamique d'une matrice carre en C [ par pedu ] COMMENT ALLOUER DYNAMIQUEMENT AVEC malloc UNE MATRICE CARRE DE DIMENSION[1][1] AFIN DE LA DIMENSIONNER A SA GUISE ET DE LA MANIPULER COMME UN TABLEAU[ Matrice dynamique mal allouée [ par wolflinger ] Bonjour, Je souhaite créer une matrice dynamique de type (int **Mat) en C. Mais j'ai un soucis à l'allocation de mémoire. Voici mon code en cours : Allocation Dynamique d'une Matrice Help [ par EMSIEN ] Salut à vous toutes et à vous tous,voilà je veux déclarer une matrice de la sorte:     int** MaMatrice;  dans Une ClassePuis au Niveau du Contructeur calculer l'inverse d'une matrice [ par leFeu ] SVP, j'ai bessoin de votre aide.je dois trouver un programme qui calcul l'inverse d'une matrice carré, je l'ai fait avec la méthode des cofacteurs mai constructeur [ par maymouna2008 ] salut t le monde svp repondez moi a cet question:c est une clase matrice chaqu ligne de la matrice représenté par un tableau dynamique ainsi tt les li inverse matrice creuse de dim 150*1500 [ par m1naruto ] voila je cherche une méthode pour optimisé le temps de calcul de l'inverse d'un matrice creuse de grosse dimension (114*114), j'utilise la méthode de inverse d'une matrice [ par rif59 ] bonjour,  je voudrai faire un programme ki calcul l'inverse d'une matrice (matx[5][5]) en visual C++ 2008, j'arrive pa à faire, si klkun peut m'aider matrice inverse [ par vladisback ] bonjour, j'utilise pour mes transformation des matrices 4x3: Xx Yx Zx Tx Xy Yy Zy Ty Xz Yz Zz Tz (Identique au matrice directX excepté une quatrieme Hessien d'une matrice [ par anne-lise ] Bonjour, je recherche des codes sources ou algorithmes simples pour calculer le Hessien d'une matrice donnée. Mercizezette


Nos sponsors


Sondage...

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 3,728 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales