ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/REPOS_ERICCA/magic/lib/outil/src/ot_statistique.cpp
Revision: 283
Committed: Tue Sep 13 21:11:20 2011 UTC (13 years, 8 months ago) by francois
File size: 2442 byte(s)
Log Message:
structure de l'écriture

File Contents

# User Rev Content
1 foucault 27 //---------------------------------------------------------------------------
2    
3     #pragma hdrstop
4    
5     #include "ot_statistique.h"
6     //---------------------------------------------------------------------------
7     #pragma package(smart_init)
8    
9    
10     double OT_STATISTIQUE::moyenne (double * x, int n)
11 francois 283 {
12 foucault 27 int i;
13     double moyenne_x = 0;
14     for (i=0;i<n;i++)
15     moyenne_x += x[i];
16     moyenne_x /= n;
17     return moyenne_x;
18     }
19    
20     /// ecart type dans le cas d'une serie discrete
21 francois 283 /// racine carree de la moyenne de carr�s moins le carr� de la moyenne
22 foucault 27 double OT_STATISTIQUE::ecart_type (double * x, int n)
23     {
24     int i;
25     double moyenne_x = moyenne(x,n);
26 francois 283
27 foucault 27 double moyenne_x2 = 0;
28     for (i=0;i<n;i++)
29     moyenne_x2 += x[i]*x[i];
30     moyenne_x2 /= n;
31    
32     return sqrt(moyenne_x2-moyenne_x*moyenne_x);
33     }
34    
35     /// la moyenne des produits moins le produit des moyennes
36     double OT_STATISTIQUE::covariance (double * x, double * y, int n)
37     {
38     int i;
39    
40     double moyenne_xy = 0;
41     for (i=0;i<n;i++)
42     moyenne_xy += x[i]*y[i];
43     moyenne_xy /= n;
44    
45     double moyenne_x = 0;
46     for (i=0;i<n;i++)
47     moyenne_x += x[i];
48     moyenne_x /= n;
49    
50     double moyenne_y = 0;
51     for (i=0;i<n;i++)
52     moyenne_y += y[i];
53     moyenne_y /= n;
54    
55     return moyenne_xy - moyenne_x * moyenne_y;
56     }
57    
58 francois 283 /// la moyenne des carr�s moins le carr� de la moyenne
59 foucault 27 double OT_STATISTIQUE::variance (double * x, int n)
60     {
61     int i;
62    
63 francois 283 double moyenne_carres = 0;
64 foucault 27 for (i=0;i<n;i++)
65     moyenne_carres += x[i]*x[i];
66     moyenne_carres /= n;
67    
68     double moyenne = 0;
69     for (i=0;i<n;i++)
70     moyenne += x[i];
71     moyenne /= n;
72    
73     return moyenne_carres - moyenne*moyenne;
74     }
75    
76     ///
77     void OT_STATISTIQUE::regression_lineaire(double *x, double *y, int n, double *pente, double *valY0)
78     {
79     int i;
80    
81     // coef directeur de la droite
82     double a = variance(y,n) / covariance(x,y,n);
83    
84 francois 283 // b = valeur de y (0) par moindre carr�s
85 foucault 27 double b = 0;
86     for (i=0; i<n; i++)
87     b += y[i] - a*x[i];
88     b /= n;
89    
90     *pente = a;
91     *valY0 = b;
92     }
93 francois 283
94 foucault 27 double OT_STATISTIQUE::max(double *x, int n)
95     {
96     if (n==0)
97     return 0;
98    
99     double max_x = x[0];
100     for (int i=0;i<n;i++)
101     if (x[i] > max_x)
102     max_x = x[i];
103    
104     return max_x;
105     }
106    
107     double OT_STATISTIQUE::min(double *x, int n)
108     {
109     if (n==0)
110     return 0;
111    
112     double min_x = x[0];
113     for (int i=0;i<n;i++)
114     if (x[i] < min_x)
115     min_x = x[i];
116    
117     return min_x;
118     }