Programmation en C++ des méthodes numériques : formule des trapèzes ,formule de simpson, triangulaire inférieur , Gauss Pivot Partiel,Cholsky ,Jacobi








// Calcul d'intégral d'après la méthode des trapezes


#include <stdio.h>
#include <stdlib.h>
int main()
{
   int n,i=0;
   float  a,S1=0,S2,S,h,f[100],b;
   printf("saisir les bornes de l'intervalle : \n borne 1 = ");
   scanf("%f",&a);
   printf(" borne 2 = ");
   scanf("%f",&b);
   printf("\n saisir le nombre des points de la fonction  : ");
   scanf("%d",&n);
   h=(b-a)/(n-1);
    do{ printf("f[%f]=",a+i*h);
     scanf("%f",&f[i]);
     i++;}
     while(i!=n);
    
          for(i=1;i<=(n-1);i++)
        S1+=h*f[i];
        S2+=(h*(f[0]+f[n-1]))/2;
        S=S1+S2;
     printf("\n l'integrale d'apres la methode des trapezes est egale a : %f ",S);
     system("pause");
      }
    
   



2- FORMULE DE SIMPSON


// Calcul d'integral d'apres la methode de Simpson

#include <stdio.h>
#include <stdlib.h>
float f(float x);
 main()
{
       int n,i;
  float a,b,h,S,T=0,L=0,x;
   printf("saisir les bornes de l'intervalle : \n borne 1 = ");
   scanf("%f",&a);
   printf(" borne 2 = ");
   scanf("%f",&b);
  printf("\n Saisir un entier n :");
  scanf("%d",&n);
  h=(b-a)/n;
  S=f(a)+f(b);
  x=a+2*h;
  for(i=2;i<n-2;i+=2)
  {
      T+=f(x);
      x+=2*h;
      }
      S+=2*T;
       x=a+h;
        for(i=1;i<n-1;i++)
  {
        L+=f(x);
        x+=2*h;
        }
        S+=4*L;
        S+=h/3;
        printf(" l'integrale par la methode de Simpson est egale a : %f ",S);
   
system("pause");
return 0;}
float f(float x)
{
      return x*x;
      }





#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
main()
{float A[100][100],B[100],X[100],S;
      int n,i,j;
      printf("donner le nombre des inconnues:");
      scanf("%d",&n);
     
      for (i=1; i<=n; i++){
         for (j=1; j<=n; j++){
        if(i>j){
        A[i][j]=0;
        printf("A[%d][%d]=%f\n",i,A[i][j]);}
        else {
        printf("A[%d][%d]=",i,j);
        scanf("%f",&A[i][j]);}
        }
        }
       for (i=1; i<=n; i++){
         for (j=1; j<=n; j++)
        printf("%f\t",A[i][j]);
        printf("\n");
        }
        for (i=1; i<=n; i++){
            printf("B[%d]=",i);
             scanf("%f",&B[i]);}
            
           for (i=1; i<=n; i++){ 
         printf("%f\n",B[i]);    
         }
        X[n]=B[n]/A[n][n];
        for (i=n-1; i>=1; i--){ S=B[i];
           for (j=i+1; j<=n;j++){
                S=S-(A[i][j]*X[j]);} 
                X[i]=S/A[i][i];}
               printf("la solution donne par le programme est :\n");
               for (i=n; i>=1; i--){ 
         printf("%f\t",X[i]); }    
        getch();
        



3- TRIANGULAIRE INFÉRIEUR



#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
main()
{ float A[100][100],B[100],X[100],S;
      int n,i,j;
      printf("donner le nombre des inconnues:");
      scanf("%d",&n);
       for (i=1; i<=n; i++){
         for (j=1; j<=n; j++){
        if(i<j){
        A[i][j]=0;
        printf("A[%d][%d]=%f\n",i,A[i][j]);}
        else {
        printf("A[%d][%d]=",i,j);
        scanf("%f",&A[i][j]);}
        }
        }
       for (i=1; i<=n; i++){
         for (j=1; j<=n; j++)
        printf("%f\t",A[i][j]);
        printf("\n");
        }
        for (i=1; i<=n; i++){
            printf("B[%d]=",i);
             scanf("%f",&B[i]);}
             
           for (i=1; i<=n; i++){ 
         printf("%f\n",B[i]);   
         }
        X[1]=B[1]/A[1][1];
        for (i=2; i<=n; i++){
            S=B[i];
           for (j=1; j<=i-1;j++){
                 S=S-(A[i][j]*X[j]);}
              X[i]=S/A[i][i];}
                printf("la solution donne par le programme est :\n");
                for (i=1; i<=n; i++){ 
         printf("%f\t",X[i]); }    
        getch();
        }




4- GAUSS PIVOT PARTIEL


#include <stdio.h>
#include <math.h>
#include <stdlib.h>
// fonction de remplissage
void remplissage(float A[50][50],float B[50],int n)
{ int i,j;
    printf("\n * La matrice A:\n\n");
    for (i=0;i<n;i++)
    {printf(" | ");
        for (j=0;j<n;j++) scanf("%f",&A[i][j]);
    }
    printf("\n * Le vecteur B:\n\n");
    for (i=0;i<n;i++)
    { printf(" | ");
        scanf("%f",&B[i]);
    }}
// fonction d'affichage système
void aff_syst(float A[50][50],float B[50],int n)
{ int i,j;
    printf("\n\n");
    for (i=0;i<n;i++)
    {printf(" [");
        for (j=0;j<n;j++)
        {printf(" %.3f ",A[i][j]);}
        printf("] [ %.3f ]",B[i]);
        printf("\n");
    }}
// Résolution de Gauss avec pivot pariel
void gauss_pivot_partiel(float A[50][50],float B[50],int n)
{ float x[50],p,s,pivot,aide;
    int i,j,k,ligne;
    for (k=0;k<n-1;k++)
    {
// Recherche du max pour le pivot partiel
        pivot=0;  for (i=k;i<n;i++)
       
        if (fabs(A[i][k])>pivot)
         {  pivot=fabs(A[i][k]);
                ligne=i; }
// pivotation
        for (j=k;j<n;j++)
        { aide=A[k][j];
            A[k][j]=A[ligne][j] ;
            A[ligne][j]=aide;
        }
        aide=B[k];
        B[k]=B[ligne];
        B[ligne]=aide;
        if (A[k][k]==0)
        {printf("\n\n* MATRICE SINGULIERE\n\n");
        }
//réduction
        for (i=k+1;i<n;i++)
        {p=A[i][k]/A[k][k];
            for (j=k;j<n;j++)
            A[i][j]=A[i][j]-p*A[k][j];
            B[i]=B[i]-p*B[k];
        }
    }
//Résolution
    for (i=n-1;i>=0;i--)
    {
        s=0;
        for (j=i+1;j<n;j++) s=s+A[i][j]*x[j];
        x[i]=(B[i]-s)/A[i][i];
    }
    printf("\n        METHODE DE GAUSS AVEC PIVOT PARTIEL        \n");
    printf("\n * La matrice apres elimination de Gauss avec pivot partiel est :");
    aff_syst(A,B,n);
    printf("\n * apres resolution on trouve :\n\n");
    for (i=0;i<n;i++)
    printf(" X%d = %.3f ;\n",i+1,x[i]);
    printf("\n");
}
main(){float A[50][50],B[50];
    int n,i,j;
    printf("\n\n * Nombre d'equation-inconues : \n\n * N = ");
    scanf("%d",&n);
    remplissage(A,B,n);
    printf("\n\n * Le systeme est : ");
    aff_syst(A,B,n);
    gauss_pivot_partiel(A,B,n);
    system("pause");
}
 



5- CHOLSKY



#include <stdio.h>
#include <math.h>
#include <stdlib.h>
// fonction de remplissage
void remplissage(float A[50][50],float B[50],int n)
{ int i,j;
    printf("\n * La matrice A:\n\n");
    for (i=0;i<n;i++)
    {printf(" | ");
        for (j=0;j<n;j++) scanf("%f",&A[i][j]);}
    printf("\n * Le vecteur B:\n\n");
    for (i=0;i<n;i++)
    { printf(" | ");
        scanf("%f",&B[i]);
    }}
// fonction d'affichage systeme
void aff_syst(float A[50][50],float B[50],int n)
{ int i,j;
    printf("\n\n");
    for (i=0;i<n;i++)
    {printf(" [");
        for (j=0;j<n;j++)
        { printf(" %.4f ",A[i][j]);}
        printf("] [ %.4f ]",B[i]);
        printf("\n");
    }}
// fonction d'affichage matrice
void aff_mat(float A[50][50],int n)
{ int i,j;
    printf("\n\n");
    for (i=0;i<n;i++)
    {printf(" [");
        for (j=0;j<n;j++)
        {printf(" %.4f ",A[i][j]);
        }
        printf("]\n");
    }
}
// Resolution Par decomposition Cholesky
void cholesky(float A[50][50],float B[50],int n)
{ float L[50][50],Lt[50][50],x[50],y[50],s,p;
    int i,j,k;
// verification de la symetrie
    for (i=0;i<n;i++)
    for (j=0;j<n;j++)
            if (A[i][j]!=A[j][i])
            {printf("\n\n * votre matrice n'est pas symetrique , cette methode ne peut pas la resoudre\n\n");
                break; }
    for (i=0;i<n;i++)
    for (j=0;j<n;j++)
     L[i][j]=0;
    for (i=0;i<n;i++)
    { s=0;
        for (k=0;k<i;k++)
         s=s+pow(L[i][k],2);
        p=A[i][i]-s;
        if (p<=0)
        {printf("\n\n * votre matrice n'est pas  definie positive , cette methode ne peut pas la resoudre\n\n");
        }
        L[i][i]=sqrt(p);
        for (j=i+1;j<n;j++)
        { s=0;
            for (k=0;k<i;k++) s=s+L[i][k]*L[j][k];
            L[j][i]=(A[j][i]-s)/L[i][i];
        } }
    for (i=0;i<n;i++) for (j=0;j<n;j++) Lt[i][j]=L[j][i];
// resolution
    for (i=0;i<n;i++)
    { s=0;
        for (j=0;j<i;j++) s=s+L[i][j]*y[j];
        y[i]=(B[i]-s)/L[i][i];}
    for (i=n-1;i>=0;i--)
    {s=0;
        for (j=i+1;j<n;j++) s=s+Lt[i][j]*x[j];
        x[i]=(y[i]-s)/Lt[i][i];
    }printf("\n--------------- Cholesky --------------\n");
    printf("\n * A = L * Lt \n");
    printf("\n * La matrice L :");
    aff_mat(L,n);
    printf("\n * La matrice Lt :");
    aff_mat(Lt,n);
    printf("\n * La resolution donne :\n\n");
    for (i=0;i<n;i++) printf(" X_%d = %f ;\n",i+1,x[i]);
}main()
{ float A[50][50],B[50];
    int n,i,j;
     printf("\n\n * Nombre d'equation-inconues : \n\n * N = ");
        scanf("%d",&n);
        remplissage(A,B,n);
        printf("\n\n * Le systeme est : ");
        aff_syst(A,B,n);
        cholesky(A,B,n);
        system("pause");
}
 



6- JACOBI

 
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
float norme(float x[50],int n)
{
    float ref;
    int i;
    ref=0;
    for (i=0;i<n;i++) if (x[i]>ref) ref=x[i];
    return(ref);
}
// fonction de remplissage
void remplissage(float A[50][50],float B[50],int n)
{
    int i,j;
    printf("\n * La matrice A:\n\n");
    for (i=0;i<n;i++)
    {
        printf(" | ");
        for (j=0;j<n;j++) scanf("%f",&A[i][j]);
    }
    printf("\n * Le vecteur B:\n\n");
    for (i=0;i<n;i++)
    {
        printf(" | ");
        scanf("%f",&B[i]);
    }
}
// fonction d'affichage systeme
void aff_syst(float A[50][50],float B[50],int n)
{
    int i,j;
    printf("\n\n");
    for (i=0;i<n;i++)
    {
        printf(" [");
        for (j=0;j<n;j++)
        {
            printf(" %.4f ",A[i][j]);
        }
        printf("] [ %.4f ]",B[i]);
        printf("\n");
    }
}
// fonction d'affichage matrice
void aff_mat(float A[50][50],int n)
{
    int i,j;
    printf("\n\n");
    for (i=0;i<n;i++)
    {
        printf(" [");
        for (j=0;j<n;j++)
        {
            printf(" %.4f ",A[i][j]);
        }
        printf("]\n");
    }
}
// Resolution Par Jacobie
void jacobie(float A[50][50],float B[50],int n)
{  float x[50],x1[50],x2[50],s,eps=1e-4;
    int i,j,k,iter=0;
//initialisation du vecteur
    printf("\n * Veuillez initialisez le vecteur solution : \n\n");
    for (i=0;i<n;i++) {
        printf(" X(0)[%d]= ",i+1);
        scanf("%f",&x1[i]);   }
    do
    { for (i=0;i<n;i++)
        { s=0;
            for (j=0;j<n;j++) if (i!=j) s=s+A[i][j]*x1[j];
            x2[i]=(B[i]-s)/A[i][i]; }
        for (k=0;k<n;k++) {
            x[k]=fabs(x1[k]-x2[k]);
            x1[k]=x2[k]; }
        iter++;
    }while (norme(x,n)>eps) ;
    printf("\n-------------- Jacobie -------------\n");
    printf("\n * La resolution donne :\n\n");
    for (i=0;i<n;i++) printf(" X%d = %.3f ;\n",i+1,x2[i]);
    printf("\n * Apres %d iteration, precision 10^-4. \n",iter);
}
main()
{float A[50][50],B[50];
    int n,i,j;
     printf("\n\n * Nombre d'equation-inconues : \n\n * N = ");
        scanf("%d",&n);
        remplissage(A,B,n);
        printf("\n\n * Le systeme est : ");
        aff_syst(A,B,n);
        jacobie(A,B,n);
        system("pause");
}


Commentaires