begin process at 2012 05 29 14:35:12
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C

 > 

Algorithme

 > 

Maths

 > 

probleme dans l'algorithme de jacobi


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

probleme dans l'algorithme de jacobi

mardi 17 avril 2007 à 00:33:03 | probleme dans l'algorithme de jacobi

mino1001

voila mon programme
,et je ne c pas pourquoi il ne calcule pas les solutions 
du systeme Ax=b telles que:
       5   -1 -1 -1                  -4                                                     1
       -1 10 -1 -1                  12                                                     2
A    -1 -1  5  -1              b   8                    solution a trouver:  x    3
       -1 -1 -1 10                   34                                                    4
on commence par Xi egale 0,0,0,0 

#include<stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])

 

 

{

    int i,j,k;
    float a,A[4][4],b[4],x[4],g[4],some;
   
   
   
   
   
   
    /*saisie de la matrice A */
   
   
    printf(" donner les composantes de la matrice A \n");
    for(i=0;i<4;i++)
    {
   
    for(j=0;j<4;j++)
  
    scanf("%f",&A[i][j]);
 
    getchar();
   
    }
    printf(" A egale : \n");
    for(i=0;i<4;i++)
    {
    {for(j=0;j<4;j++)
    printf(" %f ",A[i][j]);
    }
    printf("\n");
    }
   
   
    /*saisie de la matrice b*/
   
  printf(" donner les composantes du vecteur b \n");
     for(i=0;i<=3;i++)
     scanf(" %f \n",&b[i]);
    
     printf(" b egale : \n"); 
    
     for(i=0;i<4;i++)
     {
     printf(" %f \n ",b[i]);
      }
    
    /* saisie de la matrice x */
    
     printf(" donner les composantes du vecteur x \n");
     for(i=0;i<4;i++)
     scanf(" %f \n",&x[i]);
    
     printf(" x egale : \n"); 
    
     for(i=0;i<4;i++)
     {
     printf(" %f ",x[i]);
     printf("\n");
     }
    
    /* calcule des solutions*/
    
     do
     {
     for(i=0;i<4;i++)
     {
    
     for(j=0;j<4;j++)
     {some=0;
     if(i==j)
     continue;
     some=some+A[i][j]*x[j];
     }
     g[i]=(b[i]-some)/A[i][i];
     }
     for(k=0;k<4;k++)
     x[k]=g[k];
     }
     while(g[1]-x[1]<0.0001);
    
     /* affichage des solutions */
    
     for(k=0;k<4;k++)
     {
     printf(" %f ",x[k]);
     printf("\n");
     }

    
    
    system("PAUSE"); 
  return 0;
}

 

dimanche 6 mai 2007 à 10:45:55 | Re : probleme dans l'algorithme de jacobi

emmatopiak

Salut,

Je suis pas sûre de connaitre l'algo de jacobi mais voilà deux problèmes de ton programme :

1. Tu fais à un moment x[k] = g[k] et juste en dessous tu fais ton while (g[1]-x[1]<0.0001)
--et bien si x[k]=g[k], g[1]-x[1] vaut 0 et donc la boucle s'arrête au premier tour.
Donc y'a problème dans ta boucle :p

2. Quand tu testes x[1] et g[1], tu es conscient que c'est le deuxième élément n'est ce pas ? C'est étrange de tester le deuxième élément je trouve, pourquoi pas x[0] et g[0] ? ou pourquoi pas tous ?
--et puis c'est étonnant de se comparer à la solution x vu que cette solution est inconnue
=== @++


Une autruche ne se cuit pas aux petits lardons.
dimanche 6 mai 2007 à 10:47:26 | Re : probleme dans l'algorithme de jacobi

emmatopiak

Salut,

Je suis pas sûre de connaitre l'algo de jacobi mais voilà deux problèmes de ton programme :

1. Tu fais à un moment x[k] = g[k] et juste en dessous tu fais ton while (g[1]-x[1]<0.0001)
--et bien si x[k]=g[k], g[1]-x[1] vaut 0 et donc la boucle s'arrête au premier tour.
Donc y'a problème dans ta boucle :p

2. Quand tu testes x[1] et g[1], tu es conscient que c'est le deuxième élément n'est ce pas ? C'est étrange de tester le deuxième élément je trouve, pourquoi pas x[0] et g[0] ? ou pourquoi pas tous ?
--et puis c'est étonnant de se comparer à la solution x vu que cette solution est inconnue
=== @++


Une autruche ne se cuit pas aux petits lardons.
dimanche 20 mai 2007 à 02:17:25 | Re : probleme dans l'algorithme de jacobi

simafst

salut je sai pa exactement ton probléme mais je vai te donner un code qui marche.

/*Algorithme de JACOBI*/

#include<stdio.h>
#include<math.h>
#define DIM 200
#include<conio.h>
#include<stdlib.h>

void affiche_matrice_vecteur(double A[DIM][DIM],double B[DIM],int n)/*fonction pour l'affichage d'une matrice m de dimention n*/
{
    int i,j;
             
    printf("la matrice\n");
    for(i=0;i<n;i++)/*boucle for sur les lignes*/
    {
       printf("|");
       for(j=0;j<n;j++)/*boucle for sur les colonnes*/
       printf(" %6.2lf ",A[i][j]);
       printf("|\n");
    }
   
    printf("\n");        
    printf("le vecteur\n");
    for(i=0;i<n;i++)
        printf( "%6.2lf\n",B[i]);
           
}
void init_matrice(double m[DIM][DIM],int n)/*fonction pour l'initialisation d'une matrice m de dimention n*/
{
 int i,j;
 for(i=0;i<n;i++)/*boucle for sur les lignes*/
 {
 for(j=0;j<i;j++)/*boucle for sur les lignes de 0 à i*/
 {
  m[i][j]=(((double)i+1)/(i+j+2));
  m[j][i]=m[i][j];/*pour garentir La propriété du symétrique de la matrice m*/
}
m[i][i]=1;/*initialiser les éléments de la digonale de la matrice m*/
}
for(i=0;i<n;i++)/*pour garentir que la matrice m soit à diagonale stricte*/
{
for(j=0;j<i;j++)
m[i][i]+=m[i][j];     
for(j=i+1;j<n;j++)/*Un element de la diagonale est la somme des autres éléments de la meme ligne*/
m[i][i]+=m[i][j];
}
}
void init_vecteur(double m[DIM][DIM],double s[DIM],int n)/*fonction pour l'initialisation d'un vecteur s du SEL de dimention n*/
{
          int i,j;
          // Un élément de ce vecteur est la somme des éléments de A de la meme ligne
           for(i=0;i<n;i++)
          {     s[i]=0;   
            for(j=0;j<n;j++)
              s[i]+=m[i][j];
          }
}

 

void affiche_sys(double m[DIM][DIM],double s[DIM],double x[DIM],int n)/*fonction pour l'affichage du systeme mx=s*/

{
  int i,j;
  for(i=0;i<n;i++)
  {
    printf("|");
    for(j=0;j<n;j++)
      printf(" %lf ",m[i][j]);
    printf("| %lf | %lf \n",s[i],x[i]);
  }
}
void calcul_vecteur(double m[DIM][DIM],double s[DIM],double x[DIM],double y[DIM],int n)/*fonction qui calcul le vecteur x par la methode de JACOBI*/

{
   int i,j;       
   for(i=0;i<n;i++)/*boucle our l'initialisation du vecteur y*/
     y[i]=x[i];
   for(i=0;i<n;i++)/*appliquer la méthode de JACOBI*/
   {
     x[i]=s[i];
     for(j=0;j<i;j++)  
        x[i]-=m[i][j]*y[j];/*calcul des éléments du vecteur x(d'ordre n) àpatir de ceux du vecteur y(d'ordre n-1)*/
     for(j=i+1;j<n;j++)
        x[i]-=m[i][j]*y[j];
     x[i]=(x[i]/m[i][i]);
   }
}
int converge(double X[DIM],double XS[DIM],double eps,int n)/*fonction pour la condition de convergence d'un SEL*/
{
     int i;double s=0.00;
     for(i=0;i<n;i++)/* on teste si on a atteint le critére d'arret*/
     s+=pow((X[i]-XS[i]),2);
     s=sqrt(s);
     printf("%lf\n",s);
     if (s>eps)
       return(0);/*si le critére d'arret n'est pas verifié on retourne 0*/
       return(1);/*si le critére d'arret est verifié on retourne 1*/
}
void init_vect(double X[DIM],int n,double a)/*fonction pour l'initialisation d'un vecteur*/
{
    int i;
    for(i=0;i<n;i++)
       X[i]=a;/*On initialise la solution à a*/
}          
int main()
{
 double a[DIM][DIM],b[DIM],x[DIM],j[DIM][DIM],x0[DIM];
  int n;
  int nit_AJ=0;/*on init le compteur du nombre d'itération pour obtenir le résultat*/
  double eps=0.00;/* on init eps(pour le critére d'arret)*/
  printf("\n-DEBUT de l'algorithme de JACOBI-\n");
  printf("donner la dimention du systeme : ");
  scanf("%d",&n);
  init_matrice(a,n);
  init_vecteur(a,b,n);
  affiche_matrice_vecteur(a,b,n);
  printf("donner saisir epsilon:\n");
  while(eps<=0)
      scanf("%lf",&eps);
    init_vect(x0,n,2);/*partant de x0=2*/
    init_vect(x,n,0);
    while(!converge(x,x0,eps,n))/*tant que la convergence est vérifier*/
    {                          
    calcul_vecteur(a,b,x,x0,n);
    nit_AJ++;
  }
 affiche_sys(a,b,x,n);
 printf("Le nombre d'itérations est:%d\n",nit_AJ);
 system("pause");
}

samedi 10 mai 2008 à 15:27:26 | Re : probleme dans l'algorithme de jacobi

brahim08

je cherche de l'aide sur la source executable de jacobi pour calculer les valeurs propres en c++
samedi 10 mai 2008 à 15:32:22 | Re : probleme dans l'algorithme de jacobi

brahim08

je cherche de l'aide sur la source executable de jacobi pour calculer les valeurs propres en c++
mon émail    raahime@hotmail.com  merci


Cette discussion est classée dans : printf, for, some, egale, matrice


Répondre à ce message

Sujets en rapport avec ce message

Besoin d'aide en C - Fonction [ par bugs2600 ] Voici mon programme quelqu'un pourrait-il m'aider je dois faire une fonction et je ne vois pas comment la faire le non de ma fonction doit etre PRODMA compilation mai au lancement "erreur la memoire ne peu pas pas etre read" [ par touny23 ] je maitrise pas tro le C.mai comme j ai un projet a faire dessus pour la rentré , je sui obligé de m y mettre .j arrive a compiler sous dev-cpp mai lo quadrillage matrices [ par Gaston0510 ] Notre prof d cours nous a demand¨¦ de saisir et afficher des matrices .Les matrices affich¨¦ doivent etr entour¨¦ avec un double qudrillage on utilisa Return tableau? [ par zut69 ] Bonjour,Je suis en train d'écrire un petit programme sur les matrices en C, mais vu que je veux faire quelque chose d'assez général, j'ai besoin que d Produit matriciel en c renvoit des valeurs complètement fausses [ par bilel59 ] Bonjout à tous, je sollicite votre aide pour la raison indiquée dans le titre, en effet le produif matriciel que j'effectue renvoit des valeurs vraime fonction en c [ par badsha ] j'ai un code qui inverse une matrice et je veux l'appliquer sur plusieurs matrices je n'arrive pas à mettre à l'entrée de la fonction des matrices, je Problème de transport primal dual [ par mouradmaster ] Bonjour tous, Je cherche un code source (en C, C++, java ou C#) concernant le problème de transport par primal dual (optimisation des coûts !). En ef Problème générateur de grille de sudoku en C [ par Dovah ] Bonjour, je suis débutant en programmation, et pour m'entraîner j'ai décidé de créer un programme qui génère aléatoirement une grille de sudoku en C


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

Photothèque

A découvrir



 
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,406 sec (3)

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