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 : Sélectionner tout - Visualiser dans une fenêtre à part
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:
Donc le programme ne doit pas s'arreter apres la premiere iteration comme à ce moment
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 } while(X1>=e && X2>=e && X3>=e); /*e=0.001*/
(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:
Merci pour votre attention.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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; }
Partager