Bonjour,
j'ai un petit problème que j'ai repéré avec gdb mais je ne sais pas le résoudre. Pour vous expliquer, le programme marche correctement jusqu'à l'itération k=42 (incluse). Mais lorsque k passe à 43, les boucles sont effectuées mais aucunes instructions n'est réalisée.
Avez vous une raison ?
Merci !
Voila le code gdb :

260				x[k+1][i]=x[k][i]+a[k]*r[k][i];
(gdb) 
261				printf("x [%d] [%d] :%f\n",k,i,x[k][i]);
(gdb) 
x [43] [0] :0.989438
242			for (i=0;i<=n-1;i++)
(gdb) 
265				printf("\n");
(gdb) 

266			k++;
(gdb) 
267			nbiter++;
(gdb) 
268		}while((k<=itermax-1)/*&&(norme2(r,k-1,n)/norme2(b,0,n)>e)*/);
(gdb) 
232			for (i=0;i<=n-1;i++)
(gdb) 
242			for (i=0;i<=n-1;i++)
(gdb) 
265				printf("\n");
(gdb) 

266			k++;
(gdb) 
Voila le programme principale :

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
52
53
54
55
56
void main (void)
{
	double x[Max][Maxdim];
	double r[Max][Maxdim];
	double A[Maxdim][Maxdim];
	double b [1][Maxdim];
	double a [Maxdim];
	int i,n,w,z,k=0,nbiter=0,itermax,itermax2;
	double e;
	double Ar[Max][Maxdim];
 
 
	e=0.0000001;
	n=3;
	itermax=44;
	hilbert(A,b,n);             // hilbert dordre n avec sa fonction
 	for(w=0;w<n;w++)
 	{
 		for(z=0;z<n;z++)
 		{
 			x[w][z]=0;
 		}	
 	}
 
 
		do
	{
		for (i=0;i<=n-1;i++)
		{
			b[0][0]=11.0/6;
			b[0][1]=13.0/12;
			b[0][2]=47.0/60;
			r[k][i]=b[0][i]-indice_i_du_produit_matrice_vecteur(A,x,k,n,i);
			printf("b[0][%d] : %f\n",i,b[0][i]);
			printf("r[%d][%d] : %f\n",k,i,r[k][i]);
		}
		for (i=0;i<=n-1;i++)
		{
			produit_matrice_vecteur_2(A,r, Ar, k, n);
 
			printf("Ar[%d][%d] : %f\n",k,i,Ar[k][i]);
 
 
			a[k]=prodscal(r,r,k,n)/prodscal(r,Ar,k,n);
			printf("prodscal(r,r,%d,n): %.10f\n",k,prodscal(r,r,k,n));
			printf("prodscal(r,Ar,%d,n): %.10f\n",k,prodscal(r,Ar,k,n));
			printf("a[%d]: %f\n",k,a[k]);
			x[k+1][i]=x[k][i]+a[k]*r[k][i];
			printf("x [%d] [%d] :%f\n",k,i,x[k][i]);
 
 
		}
			printf("\n");
		k++;
		nbiter++;
	}while((k<=itermax-1)/*&&(norme2(r,k-1,n)/norme2(b,0,n)>e)*/);