Multiplication matrice [Matrice c++]

Signaler
Messages postés
2
Date d'inscription
dimanche 27 mai 2012
Statut
Membre
Dernière intervention
28 mai 2012
-
Messages postés
1137
Date d'inscription
lundi 17 novembre 2003
Statut
Membre
Dernière intervention
23 janvier 2016
-
Bonjour,

je dois réaliser un algorithme utilisant la méthode de Cholesky pour la décomposition en matrice L.Lt. voici mon code:


#include <QtCore/QCoreApplication>
#include
#include <math.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <float.h>

using namespace std;

//*************Déclaration d'une matrice******************//
int **allouer_matrice (int ligne, int colonne)

{
int i;

int **matrice = new int *[ligne];

for(i=0;i<ligne;i++)
{
matrice [i]= new int [colonne];
}

if(matrice == NULL)
{
exit(EXIT_FAILURE);
}

return matrice;
}


//************Remplir une matrice **********************//

void remplir_matrice (int ligne, int colonne, int **matrice)

{
int i,j;

for(i=0;i<ligne;i++)
{
for(j=0;j<colonne;j++)
{
cout<<"Rentrez la valeur de m "<> matrice [i][j];
}
}
}

//*****************Affichage matrice *******************//

void afficher_Matrice(int ligne,int colonne,int **matrice)

{
int i,j;

for(i=0;i<ligne;i++)
{
for(j=0;j<colonne;j++)
{
cout<< matrice [i][j]<<"\t";
}
cout<< endl;
}
}

//*****************Matrice Nulle *************************//

void matrice_nulle (int ligne, int colonne, int **matrice)

{
int i,j;

for(i=0;i<ligne;i++)
{
for(j=0;j<colonne;j++)
{
matrice [i][j]=0;
}
}
}

//*****************Désallocation mémoire matrice **********//

void vider_matrice(int **matrice)

{
delete[] matrice;

}


//***************Transposer une matrice********************//

void transposer_matrice(int **matrice1, int **matrice2, int ligne, int colonne)

{
int i,j ;

for(i=0; i<ligne; i++)

{
for(j=0; j<colonne; j++)

{
matrice2[j][i] = matrice1[i][j];
}
}
}

//***************Algorithme de Cholesky ********************//

void algo_cholesky(int ligne, int colonne, int **matrice_A)

{
int i,j,k;
float S;

double **matrice_L=allouer_matrice(ligne, colonne);
double **matrice_Lt=allouer_matrice(ligne,colonne);
matrice_nulle(ligne, colonne, matrice_L);
matrice_nulle(ligne, colonne, matrice_Lt);

for(i=0;i<=ligne;i++)

{
S=0;
for(j=0;j> lignes;
cout<<"Tapez le nombre de colonnes de la matrice" << endl;
cin >> colonnes;

int **matrices1= NULL;
int **matrices2= NULL;

matrices1 = allouer_matrice (lignes, colonnes);

remplir_matrice (lignes, colonnes, matrices1);

cout<< "\nLa matrice obtenue est la suivante :"<<endl;

afficher_Matrice(lignes, colonnes, matrices1);


algo_cholesky(lignes, colonnes, matrices1);

}


Je rencontre alors un problème concernant le sous programme "algo_cholesky". En effet, le programme compile bien, mais la fenêtre console plante lorsque le programme atteint la ligne " S+=pow(matrice_L[i][j],2)". J'ai beau chercher sur google mais aucune solution ne répond à mon problème. Merci de me faire part de vos idées.

A bientôt.

Joshua

3 réponses

Messages postés
1137
Date d'inscription
lundi 17 novembre 2003
Statut
Membre
Dernière intervention
23 janvier 2016
22
Salut,

Pour supprimer ta matrice,
le delete[] matrice; ne suffit pas (2 new = 2 delete)

Pour ta question, je pense que tes boucles devraient utiliser < ligne et pas < = ligne puisque tu démarres à 0.

for(i=0;i<=ligne;i++)
Messages postés
2
Date d'inscription
dimanche 27 mai 2012
Statut
Membre
Dernière intervention
28 mai 2012

Merci pour ta réponse, mais le code ne fonctionne toujours pas. J'ai bien changé l'inégalité en inégalité strict mais la console plante toujours au moment de l’exécution de la ligne "S+=pow(matrice_L[i][j],2)" (toutes les autres fonctions marchent).

Merci pour ton aide.
Messages postés
1137
Date d'inscription
lundi 17 novembre 2003
Statut
Membre
Dernière intervention
23 janvier 2016
22
Re,

Je ne comprends pas certaines choses dans ton algo,

1: la variable k n'est jamais initialisée, cela doit provoquer une erreur

2 : les boucles imbriquées partagent le même indice i qui je pense devrait etre local dans la 2eme boucle ? sinon au retour à la boucle principale, le i à varié ?

Sinon, pour le delete, il faut faire :

void vider_matrice(int **matrice, int ligne) 
{ 
for(int i=0;i<ligne;i++) 
{ 
delete[] matrice[i];
} 
delete[] matrice; 
}