begin process at 2010 03 20 15:17:21
  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 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 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 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 Deplacement dans le repere de la Camera [ par xabila ] bonjour,voilà j'ai une camera qui est defini avec un vec translation tx ty tzet une rotation h p rj'anrrive bien a recuperer la matrice 3*3 correspond


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mars 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
293031    

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 : 0,874 sec (3)

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