Guest User

Untitled

a guest
Jul 20th, 2018
90
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 4.01 KB | None | 0 0
  1. #define true 1
  2. #define false 0
  3. #define crit_arret 1e^-3
  4. #include "BIBLIO.h"
  5. #include <math.h>
  6. int PivotDeGauss(int dimension, double** Matrice_A1, double* Matrice_B)
  7. {
  8.     double* MatriceX = NULL;
  9.     double** Matrice_Triangulee = NULL;
  10.     int n, y, x, j, k, i;
  11.     double q, pivot, somme = 0;
  12.     n = dimension;
  13.  
  14.     Matrice_Triangulee = (double**) malloc (sizeof(double*)*n);
  15.     MatriceX = malloc(sizeof(double)*n);
  16.  
  17.     if(Matrice_A1 == NULL || Matrice_B == NULL || MatriceX == NULL || Matrice_Triangulee == NULL)
  18.     {
  19.         printf("Erreur dans l'allocation dynamique \n");
  20.         return false;
  21.     }
  22.     for (i=0; i<n; i++)
  23.     {
  24.         Matrice_Triangulee[i]=(double*) malloc (sizeof(double)*n);
  25.     }
  26.  
  27.     for(x = 0; x<n; x++)
  28.     {
  29.         for(y = 0; y<n; y++)
  30.         {
  31.             Matrice_Triangulee[x][y] = Matrice_A1[x][y];
  32.             printf(" %2.f ", Matrice_A1[x][y]);
  33.         }
  34.         printf("\n");
  35.     }
  36.  
  37.     for (j = 0; j<n; j++)
  38.     {
  39.         pivot = Matrice_Triangulee[j][j];
  40.         if(pivot == 0)
  41.         {
  42.             printf("Erreur pivot nul\n");
  43.             return false;
  44.         }
  45.         for(i=j+1; i<n; i++)//Triang
  46.         {
  47.             q = Matrice_Triangulee[i][j]/pivot;
  48.             for (k=0;k<n; k++)
  49.             {
  50.                 Matrice_Triangulee[i][k] = Matrice_Triangulee[i][k] - q*Matrice_Triangulee[j][k];
  51.             }
  52.             Matrice_B[i] = Matrice_B[i]-q*Matrice_B[j];
  53.         }
  54.     }
  55.     printf("\n MAT TRIANG \n");
  56.     for(x = 0; x<dimension; x++)
  57.     {
  58.         for(y = 0; y<dimension; y++)
  59.         {
  60.             printf(" %2.f ", Matrice_Triangulee[x][y]);
  61.         }
  62.         printf("\n");
  63.     }
  64.     MatriceX[dimension-1] = Matrice_B[dimension-1]/Matrice_Triangulee[dimension-1][dimension-1];
  65.     printf("%f\n", MatriceX[2]);
  66.     printf("%f\n", Matrice_B[2]);
  67.     printf("%f\n", Matrice_Triangulee[2][2]);
  68.     getchar();
  69.     for(i=dimension-2; i>=0; i--)
  70.     {
  71.         somme = 0;
  72.         for(j = i+1; j<dimension; j++)
  73.         {
  74.             somme = somme + Matrice_Triangulee[i][j]*MatriceX[j];
  75.         }
  76.         MatriceX[i] = (Matrice_B[i]-somme)/Matrice_Triangulee[i][i];
  77.     }
  78.  
  79.     for(i = 0; i<n; i++)
  80.     {
  81.         printf("%.2f \n", MatriceX[i]);
  82.     }
  83.  
  84.     for(i=0 ; i < dimension ; i++)
  85.     {
  86.         free(Matrice_Triangulee[i]);
  87.     }
  88.     free(Matrice_Triangulee);
  89.     free(MatriceX);
  90.     return true;
  91. }
  92.  
  93.  
  94.  
  95. int GaussSeidel(int dimension, double** Matrice_A2, double* Matrice_B)
  96. {
  97.  
  98.     int i, j, k, condition = 0;
  99.     double sommeA, sommeB, comp_max;
  100.     double* VecteurX0 = NULL;
  101.     double* VecteurX1 = NULL;
  102.     double* VecteurX2 = NULL;
  103.     VecteurX0 = malloc(sizeof(double)*dimension);
  104.     VecteurX1 = malloc(sizeof(double)*dimension);
  105.     VecteurX2 = malloc(sizeof(double)*dimension);
  106.     if(VecteurX0 == NULL || VecteurX1 == NULL || VecteurX2 == NULL)
  107.     {
  108.         printf("Erreur dans l'allocation dynamique \n");
  109.         return false;
  110.     }
  111.  
  112.     for( k = 0; k<dimension; k++)
  113.     {
  114.         VecteurX1[k] = k+1; // Cette boucle nous permet d'initialiser le premier tour du vecteur x
  115.     }
  116.     do
  117.     {
  118.         condition++;
  119.         for(i = 0; i<dimension; i++)
  120.         {
  121.             sommeA = 0;
  122.             sommeB = 0;
  123.             for(j = i; j<dimension; j++)
  124.             {
  125.                 sommeA = sommeA + Matrice_A2[i][j]*VecteurX1[j];
  126.             }
  127.             for(j = 0; j<i; j++)
  128.             {
  129.                 sommeB = sommeB + Matrice_A2[i][j]*VecteurX2[j];
  130.             }
  131.  
  132.             VecteurX2[i] = (Matrice_B[i]-sommeA-sommeB)/Matrice_A2[i][i];
  133.         }
  134.  
  135.         comp_max = 0;
  136.         for(i = 0; i<dimension; i++)
  137.         {
  138.              VecteurX0[i] = fabs(VecteurX1[i] - VecteurX2[i]);
  139.              VecteurX1[i] = VecteurX2[i];
  140.              printf("%.9f\n", VecteurX0[i]);
  141.             if(VecteurX0[i] > comp_max)
  142.             {
  143.                   comp_max = VecteurX0[i];
  144.             }
  145.         }
  146.  
  147.     }while(comp_max > 0.001);
  148.     printf("%d BOUCLES ! ", condition);
  149.  
  150.  
  151. return true;
  152. }
Add Comment
Please, Sign In to add comment