1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79
|
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include "fonction.h"
#include "gauss.h"
#define NMAX 2
main()
{
double x0[NMAX],x1[NMAX],x[NMAX];
double e;
double f[NMAX], dpf[NMAX][NMAX],jacobinv[NMAX][NMAX];
double rac[NMAX];
double val,err;
double delta[NMAX];
int i,j,k,nmax;
printf("entrez la premiere approximation: \n");
for (i=0;i<NMAX;i++)
{
scanf("%lf",&x0[i]);
}
printf("entrez l'erreur maximale:\n");
scanf("%lf", &e);
printf("entrez le nombre maximale d'iterations : \n");
scanf("%d",&nmax);
i=1;
while(i<nmax)
{
fonction(x0,f); //fonction qui ressort les valeurs de f1 et f2 en x0
jacobienne(x0,dpf); // fonction qui ressort la jacobienne de f en x0
gauss(dpf,f,x,NMAX); // solution Ax=b ou A est la jacobienne; b la fonction f et x=-(x1-x0)
for(j=0;j<NMAX;j++)
{
x1[j]=x[j]-x0[j];
}
printf("\n %d iterations : (%.7lf, %.7lf)\n",i,x1[0],x1[1]);
for(j=0;j<NMAX;j++)
{
delta[j]=x1[j]-x0[j];
}
//CRITÈRE D'ARRET POSE PROBLÈME !!!!! Voilà tout ce que j'ai essayé pour le critère d'arret mais je ne parviens toujours pas...
//if ((module(delta,NMAX))<e) // module est une fonction qui ressort le module du vecteur delta
//if ((infini(delta,NMAX)/infini(x0,NMAX))<e) //infini est une fonction qui ressort la norme infinie du vecteur delta ou x0
//if ((fabs(delta[0])<e) && (fabs(delta[1])<e))
{
rac[0]=x1[0];
rac[1]=x1[1];
break;
}
else
{
for (j=0;j<NMAX;j++)
{
x0[j]=x1[j];
}
}
i++;
}
if ((rac[0]==x1[0]) && (rac[1]==x1[1]))
{
printf("racine (%.7lf , %.7lf)\n",rac[0],rac[1]);
j++;
}
else
{
printf("\nAugmentez le nombre d'itérations\n");
printf("\n");
} |
Partager