Méthode de cholesky

Fermé
znnoubia Messages postés 2 Date d'inscription mardi 5 janvier 2010 Statut Membre Dernière intervention 5 janvier 2010 - 5 janv. 2010 à 13:47
Pacorabanix Messages postés 3248 Date d'inscription jeudi 23 août 2007 Statut Membre Dernière intervention 19 mai 2013 - 5 janv. 2010 à 23:09
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

1 réponse

Pacorabanix Messages postés 3248 Date d'inscription jeudi 23 août 2007 Statut Membre Dernière intervention 19 mai 2013 660
5 janv. 2010 à 20:17
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 mardi 5 janvier 2010 Statut Membre Dernière intervention 5 janvier 2010
5 janv. 2010 à 22:10
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 jeudi 23 août 2007 Statut Membre Dernière intervention 19 mai 2013 660 > znnoubia Messages postés 2 Date d'inscription mardi 5 janvier 2010 Statut Membre Dernière intervention 5 janvier 2010
5 janv. 2010 à 23:02
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 jeudi 23 août 2007 Statut Membre Dernière intervention 19 mai 2013 660 > Pacorabanix Messages postés 3248 Date d'inscription jeudi 23 août 2007 Statut Membre Dernière intervention 19 mai 2013
5 janv. 2010 à 23:09
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