giovedy | 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 :
- 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)*/);
|
Message édité par gilou le 26-11-2011 à 20:03:39
|