Résolution méthode de Jakob
Bonjour,
je programme le systeme qui doit etre resolu en utilisant le methode de Jakob.
Pour m'indiquer ma faute ou conclure que mon compilateur ne fonction pas bien, il ne faut pas savoir le methode de Jakob.
Dans ce fragment de mon code j' essais d'obtenir la difference entre des nouvelles valeurs et des valeurs précédentes(je fais la sustraction).
Code:
1 2 3 4 5 6 7 8 9 10 11 12
| for(i=1;i<4;i++){
if(i==1){
X1=K2[i]-K1[i]; K1[i]=K2[i]; }
if(i==2){
X2=K2[i]-K1[i]; K1[i]=K2[i];}
if(i==3){
X3=K2[i]-K1[i]; K1[i]=K2[i];}
} |
D'après le methode cette difference doit etre inferieur à un nombre donné(par ex. e=0.001).
Voilà les valeurs initialles(que je passe en argument):
3.000
1.000
-0.5000
Les resultats du premiere itération:
3.2500
-3.2500
2.0000
et c'est correcte, j'ai verifié plusieure fois en calculant sur le feuille.
Les differences entre ces valeurs(vous aussi pouvez verifier) respectivement sont:
0.2500 -4.2500 2.500
Mais la machine n'affiche que:
2.0000 -4.2500 1.7500 :(
Le test d'arret est:
Code:
1 2
|
} while(X1>=e && X2>=e && X3>=e); /*e=0.001*/ |
Donc le programme ne doit pas s'arreter apres la premiere iteration comme à ce moment
(soit que ces valeurs sont fausses et je comprends pas pourquoi)
X1=2.0000; X2=-4.2500; X3=1.7500;
J'outilise "&&" donc ET logique.
Voilà le code:
Code:
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
|
#include<stdio.h>
#include<math.h>
main () {
float K1[3], K2[3], X1=0.0000, X2=0.0000, X3=0.0000;
float e=0.001;
int i=0, j=0;
for(i=1;i<4;i++){
scanf("%f", &K1[i]);}
/*la boucle commence ici*/
do
{
for(i=1;i<4;i++){
if(i==1){
K2[i]=0.5*(6-K1[2]-3*K1[3]);}
if(i==2){
K2[i]=0.5*(2-3*K1[1]-K1[3]);}
if(i==3){
K2[i]=-0.5*(1-K1[1]-2*K1[2]);}
}
for(i=1;i<4;i++){ /* ici je recoupere la difference entre les valeurs nouveaux et enciennes*/
if(i==1){
X1=K2[i]-K1[i]; K1[i]=K2[i]; }
if(i==2){
X2=K2[i]-K1[i]; K1[i]=K2[i];}
if(i==3){
X3=K2[i]-K1[i]; K1[i]=K2[i];}
}
j++;
} while(X1>=e && X2>=e && X3>=e); /*le test d'arret*/
for(i=1;i<4;i++)
printf("%.4f\n", K1[i]);
printf("%.4f %.4f %.4f\n",X1,X2,X3);
printf("%d",j);
return 0;
} |
Merci pour votre attention.