/* Calcul du coefficient de correlation */ /* lineaire existant entre deux series */ /* de valeurs reelles */ public class CoefficientCorrelationLineaire { ////////////////////////////////////////////////// /* Type agrege de stockage de deux tableaux */ /* de 15 double */ static class DeuxSeries { double [] x = new double[15]; double [] y = new double[15]; }; /* Fonction de calcul et retour */ /* de la moyenne des valeurs */ /* contenues dans un tableau de double */ /* t : Le tableau de double cible */ static double moyenne(double [] t) { double moyenne; int i; moyenne = 0.0; for ( i = 0 ; i < t.length ; i = i+1 ) { moyenne = moyenne+t[i]; } moyenne = moyenne/t.length; return moyenne; } /* Fonction de calcul et retour */ /* de l'écart quadratique des valeurs contenues */ /* dans un tableau de double */ /* t : Le tableau de double cible */ /* m : La valeur par rapport à laquelle */ /* l'écrat quadratique est calculé */ static double ecartQuadratique(double [] t, double m) { double v; int i; v = 0.0; for ( i = 0 ; i < t.length ; i = i+1 ) { v = v + (t[i]-m)*(t[i]-m); } v = Math.sqrt(v); return v; } /* Fonction de calcul et retour du coefficient */ /* de correlation lineaire existant */ /* entre deux series de valeurs reelles */ /* ds : Le parametre de type DeuwSeries */ /* dans lequel les deux series de valeurs */ /* sont stockées */ static double coefficientCorrelation(DeuxSeries ds) { double cc; int i; double mx; double my; double eqmx; double eqmy; mx = moyenne(ds.x); my = moyenne(ds.y); cc = 0.0; for ( i = 0 ; i < ds.x.length ; i = i+1 ) { cc = cc + (ds.x[i]-mx)*(ds.y[i]-my); } eqmx = ecartQuadratique(ds.x,mx); eqmy = ecartQuadratique(ds.y,my); cc = cc / (eqmx*eqmy); return cc; } ////////////////////////////////////////////////// /* Fonction d'initialisation d'un tableau */ /* de double avec une serie aleatoire */ /* croissante de reelles */ /* t : Les tableau de double à initialiser */ static void initAleatoire(double [] t) { int i; for ( i = 0 ; i < t.length ; i++ ) { t[i] = Math.random(); } } /* Fonction d'initialisation d'un tableau */ /* de double avec une serie aleatoire */ /* croissante de reelles */ /* t : Les tableau de double à initialiser */ static void initDecroissant(double [] t) { int i; t[0] = Math.random(); for ( i = 1 ; i < t.length ; i++ ) { t[i] = t[i-1]-Math.random(); } } /* Fonction d'initialisation d'un tableau */ /* de double avec une serie aleatoire */ /* croissante de reelles */ /* t : Les tableau de double à initialiser */ static void initCroissant(double [] t) { int i; t[0] = Math.random(); for ( i = 1 ; i < t.length ; i++ ) { t[i] = t[i-1]+Math.random(); } } /* Fonction d'initialisation d'une variable */ /* de type DeuxSerie avec deux series */ /* aleatoires croissantes de reelles */ /* ds : Le parametre de type DeuxSeries */ /* à initialiser */ static void initCroissants(DeuxSeries ds) { initCroissant(ds.x); initCroissant(ds.y); } /* Fonction d'initialisation d'une variable */ /* de type DeuxSerie avec une serie */ /* aleatoire croissante de reelles */ /* et une serie aleatoire decroissante */ /* ds : Le parametre de type DeuxSeries */ /* à initialiser */ static void initCroissantEtDecroissant(DeuxSeries ds) { initCroissant(ds.x); initDecroissant(ds.y); } /* Fonction d'initialisation d'une variable */ /* de type DeuxSerie avec deux series */ /* aleatoires de reelles */ /* ds : Le parametre de type DeuxSeries */ /* à initialiser */ static void initAleatoires(DeuxSeries ds) { initAleatoire(ds.x); initAleatoire(ds.y); } /* Programme principal */ public static void main(String [] args) { DeuxSeries ds = new DeuxSeries(); double cc; initCroissants(ds); cc = coefficientCorrelation(ds); Ecran.afficherln("Series croissantes"); Ecran.afficherln("Coefficient correlation = ",cc); initCroissantEtDecroissant(ds); cc = coefficientCorrelation(ds); Ecran.afficherln("Series croissante et decroissante"); Ecran.afficherln("Coefficient correlation = ",cc); initAleatoires(ds); cc = coefficientCorrelation(ds); Ecran.afficherln("Series aleatoires"); Ecran.afficherln("Coefficient correlation = ",cc); } }