(Im)Précision de la méthode de Gauss

Discutez d'informatique ici !
coqp-ox
Membre Naturel
Messages: 52
Enregistré le: 22 Nov 2013, 10:00

(Im)Précision de la méthode de Gauss

par coqp-ox » 12 Déc 2013, 11:14

Bonjour, bonjour ! Je m'excuse à nouveau de vous déranger mais je requiers à nouveau votre aide afin de "finaliser" mon projet :zen:

Comme vous le savez, ayant créé auparavant une table de points à l'aide d'une méthode précise, je dois par la suite calculer, en résolvant un système n équations à n inconnues type AX=B, les coefficients de plusieurs polynomes.
(Afin d'accroitre la précision de mes données j'utilise [B]fixed -1 ; i--)
{
sum = 0 ;

for (j = n-1 ; j > i ; j--)
{
sum = sum + A[i][j]*x[j] ;
}
x[i] = (b[i][0] - sum)/A[i][i] ;
}
}[/CODE]



Avatar de l’utilisateur
fatal_error
Modérateur
Messages: 6610
Enregistré le: 22 Nov 2007, 13:00

par fatal_error » 12 Déc 2013, 21:15

hello,

ui Gauss est dépendant de la précision des données d'entrées.
Si tu mets des int en entrée, il faut pas t'attendre à des trucs super précis.
Si tu mets des floats, ca sera un peu mieux.
Si tu mets des doubles, ca sera peut etre encore un peu mieux.

Donc la précision avec Gauss, ca dépend du type des variables en entrée et en sortie.
Mais surtout, ca dépend de la gueule de la matrice. Tu vois dans ton algorithme, qu'on intervertit des lignes, pour raison de stabilité numérique. (genre si t'as un gros coeff, c'est pas pareil que si il est petit)

Il existe d'autres algorithmes qui "convergent" et dont tu peux te rapprocher de plus en plus de la précision souhaitée. Là comme ca, je sais pas trop, regarde relaxation ou Jacobi
la vie est une fête :)

coqp-ox
Membre Naturel
Messages: 52
Enregistré le: 22 Nov 2013, 10:00

par coqp-ox » 12 Déc 2013, 23:22

fatal_error a écrit:hello,

ui Gauss est dépendant de la précision des données d'entrées.
Si tu mets des int en entrée, il faut pas t'attendre à des trucs super précis.
Si tu mets des floats, ca sera un peu mieux.
Si tu mets des doubles, ca sera peut etre encore un peu mieux.

Donc la précision avec Gauss, ca dépend du type des variables en entrée et en sortie.
Mais surtout, ca dépend de la gueule de la matrice. Tu vois dans ton algorithme, qu'on intervertit des lignes, pour raison de stabilité numérique. (genre si t'as un gros coeff, c'est pas pareil que si il est petit)

Il existe d'autres algorithmes qui "convergent" et dont tu peux te rapprocher de plus en plus de la précision souhaitée. Là comme ca, je sais pas trop, regarde relaxation ou Jacobi


Je vais me pencher sur Jacobi oui! :mur:

Il n'y a pas un moyen qui permettrait d'améliorer la précisions pendant les calculs de la matrice ? Puisque les données en entrées sont déjà assez précises.

Merci de ta réponse :zen:

coqp-ox
Membre Naturel
Messages: 52
Enregistré le: 22 Nov 2013, 10:00

par coqp-ox » 16 Déc 2013, 12:03

Re-bonjour, excusez-moi de solliciter à nouveau votre aide, mais j'en ai malheureusement encore besoin !
Après un court échange avec mon prof de maths, celui-ci m'a conseillé d'utiliser la méthode du pivot maximum. Après une intense recherche sur internet, j'ai réussi à trouver ce site :

http://www.polytech-lille.fr/cours-algos-calcul-scientifique/progrcsl.html#lu2

Ou il est mentionné la fonction dont j'ai besoin (du moins c'est ce que je pense) :
Code: Tout sélectionner
int sl_gauss_pivmax(double a[NMAX][NMAX],double b[NMAX],int n)
{
 int i,j,k,l,err;
 double max,pivot,coef,s;
 double t[NMAX][N2MAX];
 for(i=1;i=1;i--)
  {
   s=t[i][n+1];
   for(j=i+1;j<=n;j++)
   s-=t[i][j]*b[j];
   b[i]=s/t[i][i];
  }
 }
 return(err);
}


J'ai donc fait un test avec les matrices suivantes :
a=
0.5 0 0 0
0 0.5 0 0
0 0 0.5 0
0 0 0 0.5

b=
5
4
3
2

et voila l'output :
5
8
6
4
(alors qu'on devrait avoir 10,8,6,4)


Et voila pour une matrice "quelconque" :
a=
27.7 4.1
28 4.3
29 4.1
30 3.0

b=
1.01
-2.6
-2.7
-1.2

output :
1.01
-0.864198
-0.353086
-0.423457
(alors qu'on devrait avoir : 2.262, -1.157, -0.269, -0.465)


Voila, en espérant que vous puissiez m'aider à discerner le problème, voire à le résoudre ^^'

EDIT : J'ai trouvé! En fait je définissais mes tableaux avec une double type (i=0;i<n;i++) alors qu'il fallait que je parte de d càd (i=1;i<=n;i++)

:++:

alavacommejetepousse
Membre Irrationnel
Messages: 1667
Enregistré le: 28 Fév 2008, 17:23

par alavacommejetepousse » 28 Déc 2013, 20:20

bonjour
-la méthode avec "pivot simple" ( c est à dire recherche d un élément non nul ds la colonne) n'est pas stable c'est à dire qu'en effet des petites imprécisions sur les coeffs donneront des grandes imprécisions en sortie c'est normal car on divise par le pivot
-la méthode du pivot partiel : recherche du plus grand ( en valeur absolue) coefficient ds la colonne pour servir de pivot est stable: petite imprécision en entrée ->petite imprécision en sortie
-la méthode du pivot total recherche du plus grand coeff ds toute la matrice à traiter est a fortiori stable

 

Retourner vers ϟ Informatique

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 5 invités

Tu pars déja ?



Fais toi aider gratuitement sur Maths-forum !

Créé un compte en 1 minute et pose ta question dans le forum ;-)
Inscription gratuite

Identification

Pas encore inscrit ?

Ou identifiez-vous :

Inscription gratuite