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)*/); |
Partager