Méthode de cholesky

znnoubia Messages postés 2 Date d'inscription   Statut Membre Dernière intervention   -  
Pacorabanix Messages postés 3248 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,
le professeur m'a demandé d'écrire un programme en langage c, qui utilise une matrice A et donne en sortie une matrice L qui est la décomposition de A à l'aide de l'algorithme de cholesky
voila le code source que j'au utilisé
#include <stdio.h>
#include <stdlib.h>
#include <math.h>


int main()
{
double A[10][10]={0},L[10][10]={0},b[10]={0};
int i=0,j=0,k=0,n=0,l=0;
float somme;

printf("Donner l'ordre de la matrice\n");
scanf("%d",&n);
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
printf("A[%d][%d]= ",i+1,j+1);
scanf("%f",&A[i][j]);
}
}

printf("\n\n");

for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
printf("%f",A[i][j]);
printf("\n\n");

}
L[0][0]=sqrt(A[0][0]);


for(i=1;i<n;i++)
{
for(j=0;j<i;j++)
{
somme=0;
for(k=0;k<j;j++)
{
somme=somme+L[i][k]*L[j][k];
}
L[i][j]=(A[i][j]-somme)/L[j][j];
}

somme=0;
for(k=0;k<i;k++)
{

somme=somme+(L[i][k]*L[i][k]);
}
L[i][i]=sqrt(A[i][i]-somme);
}
getchar();
}

il s'éxécute mais il me demande que l'ordre de la matrice et les différents éléments de A et ensuite il m'affiche A, pourtant moi j'ai besoin de L.
sssssssssssssssvpppppppppp aidez moi, c'est urgent
A voir également:

1 réponse

Pacorabanix Messages postés 3248 Date d'inscription   Statut Membre Dernière intervention   663
 
bonjour,

et bien un programme fait seulement ce qu'on lui demande :
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
printf("%f",A[i][j]);
printf("\n\n");

} 

ce bout de code affiche la matrice A, c'est évident,

Et c'est évident aussi que je ne vois aucun morceau de code qui affiche quoi que ce soit après.

Cdlt
0
znnoubia Messages postés 2 Date d'inscription   Statut Membre Dernière intervention  
 
bonjour et marci bien pour votre réponse Pacorabanix
donc
si j'ai bien compris, vous avez remarquer que j'ai demandé au programme que le faite de m'afficher la matrice A, pourtant j'ai ajouté encore un printf qui m'affiche la matrice L, et cette fois j'ai ni A ni L.
SVP essayez de voir pourquoi et merci d'avance
#include <stdio.h>
#include <stdlib.h>
#include <math.h>


int main()
{
double A[10][10]={0},L[10][10]={0},b[10]={0};
int i=0,j=0,k=0,n=0,l=0;
float somme;

printf("Donner l'ordre de la matrice\n");
scanf("%d",&n);
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
printf("A[%d][%d]= ",i+1,j+1);
scanf("%f",&A[i][j]);
}
}

printf("\n\n");

for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
printf("%f",A[i][j]);
printf("\n\n");

}
L[0][0]=sqrt(A[0][0]);


for(i=1;i<n;i++)
{
for(j=0;j<i;j++)
{
somme=0;
for(k=0;k<j;j++)
{
somme=somme+L[i][k]*L[j][k];
}
L[i][j]=(A[i][j]-somme)/L[j][j];
}

somme=0;
for(k=0;k<i;k++)
{

somme=somme+(L[i][k]*L[i][k]);
}
L[i][i]=sqrt(A[i][i]-somme);
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
printf("%f",L[i][j]);
printf("\n\n");

}
}
getchar();
}
0
Pacorabanix Messages postés 3248 Date d'inscription   Statut Membre Dernière intervention   663 > znnoubia Messages postés 2 Date d'inscription   Statut Membre Dernière intervention  
 
c'est un problème avec le scanf je pense.
Je cherche de mon coté et je te tiens au courant.
0
Pacorabanix Messages postés 3248 Date d'inscription   Statut Membre Dernière intervention   663 > Pacorabanix Messages postés 3248 Date d'inscription   Statut Membre Dernière intervention  
 
voilà le problème, c'est que comme tu as des double, c'est %lf qu'il faut utiliser, pas %f . (qui est pour les float)
0