Youpi !!
Mon programme compile enfin !!
Mais il n'en est pas pour autant moins buggé...
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 // // // ComputeLM - Compute Levenberg Macquardt // Le but final : calcule les coefficients de la fonction expectedFonction() // à partir d'un algorithme de Levenberg Macquardt // pour n points de coordonnées (x,y) // // #include <cstdio> #include <iostream> #include <cstdlib> #include <math.h> #include <vector> using namespace std; double noise = 0; // Déclare le bruit comme étant une constante, ce qui est faux comme chacun sait ! enum {a1,a2,a3,b1,b2,b3,nbParams}; // Déclare tous les paramètres de la fonction mathématique signalDecay double param[nbParams] = {1,2,3,0.1,0.2,0.3}; double expectedFonction (double params[] , double x) { return param[a1] * exp(-x * param[b1]) + param[a2] * exp(-x * params[b2]) + params[a3] * exp(-x * params[b3]) + noise ; } // Fonction de comparaison de la valeur observée et de la valeur prédite // retourne le carré de la différence double compareValues (double param[], vector<double> &datax, vector<double> &datay) { double res = 0.0; for ( int i = 0 ; i < datax.size() ; i++) { double sub = datay[i] - expectedFonction (param, datax[i]); res = sub * sub; } return res; } // Corps du programme int main (int nNumberofArgs, char * pszArgs[]) { vector<double> datax ; vector<double> datay ; cout << "\nPour le moment, ce programme calcule la somme des différences au carré des valeurs espérées passées dans l'initialisation\n" << "Il retourne la valeur obtenue\n" << "Faire un CC des 48 points sous la forme x1 ... x48 suivis de y1 ... y48 et terminer par un nombre negatif\n" << endl; // accumulation des suites de nombres // les range dans 2 jolis tableaux for (int j = 0 ; j = 47 ; j++) { double value = 0; cin >> value ; if (value < 0) { break ; } datax[j] = value; } for (int k = 0 ; k = 47 ; k++) { double value = 0; cin >> value ; if (value < 0) { break ; } datay[k] = value; } // affichage du résultat cout << "\n La somme des moindres carrés est : "; cout << compareValues(param, datax, datay) ; cout << "\n" << endl; cout << "A la prochaine - Kill prog dans 2 secondes..." << endl; // Attend pour terminer le programme que l'utilisateur lise // le contenu de la fenêtre puis appuie sur une touche system("SLEEP 2"); return 0; }Je dois mal parametrer mes fonctions...pcnrad33:computeLM_bin alexandre$ ./ComputeLM
Pour le moment, ce programme calcule la somme des différences au carré des valeurs espérées passées dans l'initialisation
Il retourne la valeur obtenue
Faire un CC des 48 points sous la forme x1 ... x48 suivis de y1 ... y48 et terminer par un nombre negatif
0 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 6 4,764753586 3,805805753 3,058150472 2,47256061 2,011680023 1,647096725 1,357148516 1,12527586 0,938783974 0,787911213 0,665126903 0,564601286 0,481804684 0,41320382 0,356031286 0,308110167 0,267720304 0,233496076 0,204348059 0,179402818 0,157956496 0,139438942 0,123385871 0,109417205 0,097220146 0,086535912 0,077149292 0,068880392 0,061578087 0,055114802 0,049382336 0,044288505 0,039754428 0,035712331 0,032103757 0,028878093 0,025991369 0,023405261 0,021086263 0,019004997 0,017135638 0,015455428 0,013944265 0,012584358 0,011359929 0,010256961 0,009262982 0,008366877 -1
/Developer/SDKs/MacOSX10.6.sdk/usr/include/c++/4.2.1/debug/vector:198:
error: attempt to subscript container with out-of-bounds index 47, but
container only holds 0 elements.
Objects involved in the operation:
sequence "this" @ 0x0x7fff5fbffa10 {
type = NSt7__debug6vectorIdSaIdEEE;
}
Abort trap
Partager