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 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125
|
int main()
{
double Data1[k][n][d];
double Data2[k][n][d];
double x[d];
double sum=0;
//double ksi[k+1][d];
double k_nouveau[k+1][d];
double x_nouveau[k+1][d];
//double valeur[d];
double gamma[k];
double beta[k];
double ck[k];
double grad_discret[d];
double grad_W[d];
int deb=0;
double moyenne[d];
double sumgamma=0;
//initialisation generateur pseudo-aléatoire :
srand(time(0));
for(int i=0;i<d;i++)
{
x[i]=rand()/(double)RAND_MAX;
sum=sum+x[i];
}
for(int i=0;i<d;i++)
{
x[i]=x[i]*u/sum;
// cout << "init x "<< x[i] <<endl;
}
// cout << endl;
// on lit les données dans le fichier entree.txt qui contient
ifstream fichier1("C:/simple/prog/data1.txt", ios::in);
ifstream fichier2("C:/simple/prog/data2.txt", ios::in);
ifstream fichier3("C:/simple/prog/param_algo.txt",ios::in);
fichier1.precision(15);
fichier2.precision(15);
fichier3.precision(15);
if(fichier1&&fichier2&&fichier3)
{
for (int j=0;j<d;j++)
for (int i=0; i<n; i++)
for (int p=0; p<k; p++)
{
fichier1 >> Data1[p][i][j];
fichier2 >> Data2[p][i][j];
}
for (int p=0;p<k;p++) fichier3 >> gamma[p] >> beta[p] >> ck[p];
fichier1.close();
fichier2.close();
fichier3.close();
}
else
cerr << "Impossible d'ouvrir les fichiers !" << endl;
for (int j=0;j<d;j++)
{ grad_discret[j]=0;
grad_W[j]=0;
// valeur[j]=0;
k_nouveau[0][j]=0;
x_nouveau[0][j]=x[j];
// ksi[0][j]=0;
moyenne[j]=0;
}
deb=int(k/2);
// cout << " debut "<<deb<<endl;
for (int p=1;p<(k+1);p++)
{
// cout <<"p="<<p<<" "<<gamma[p-1]<<" "<<beta[p-1]<<" "<<ck[p-1]<<" ";
H(grad_discret,x_nouveau[p-1], Data1[p-1], Data2[p-1],ck[p-1]);
for (int j=0;j<d;j++)
{//cout<<" Data1 et Data2 "<<setprecision(5)<<Data1[p-1][0][j]<<" "<<setprecision(5)<<Data2[p-1][0][j];
k_nouveau[p][j]=k_nouveau[p-1][j]-gamma[p-1]*grad_discret[j];
}
// cout<<endl;
W(grad_W,k_nouveau[p], beta[p-1]);
for (int j=0;j<d;j++)
{
x_nouveau[p][j]=grad_W[j];
// cout << "j="<<j<<" grad_discret " <<grad_discret[j]<<" grad_W "<<grad_W[j]<<" x " << x_nouveau[p][j] << " ksi " << k_nouveau[p][j]<<endl;
//if (p>deb)
if(p>deb)
{
moyenne[j]=moyenne[j]+gamma[p-1]*x_nouveau[p-1][j];
if (j==0) sumgamma=sumgamma+gamma[p-1];
}
}
}
for (int i=0;i<d;i++) {
moyenne[i]=moyenne[i]/sumgamma;
// cout << "i="<< i <<" "<<moyenne[i]<<" ";
}
// cout << endl;
ofstream fichier4("C:/simple/prog/resultats.txt", ios::out); // Ecriture résultats
ofstream fichier5("C:/simple/prog/details.txt",ios::out);
fichier4.precision(12);
fichier5.precision(12);
if(fichier4&&fichier5)
{ //cout<<"Ecriture des resultats";
for (int i=0; i<d; i++) {
fichier4 << moyenne[i] << " ";
for (int p=0; p<(k+1);p++)
{
fichier5<<x_nouveau[p][i]<<" ";
}
fichier5<<endl;
fichier4<<endl;
}
}
else cout << "Erreur d'ouverture du fichier resultats !" << endl;
fichier4.close();
return(0);
} |
Partager