Bonjour,
Cela fait des années que je n'ai pas codé avec C++. J'ai implémenté un algorithme simple, le code compile, l'exécutable est parfait, sauf que ça crash pour des performances faibles ( tableaux 5000*3*2 par exemple). pour être pratique, vous trouver ci-après le main du code si vous avez des propositions, sachant que je ne sais plus comment manipuler des vecteurs std::...Merci infiniment par avance!
Code:
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); }