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
Enregistrer un commentaire