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 : 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
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);
}