nastynas77
Messages postés2Date d'inscriptionsamedi 1 novembre 2008StatutMembreDernière intervention16 février 2009
-
14 févr. 2009 à 16:34
cs_Orohena
Messages postés577Date d'inscriptionvendredi 26 septembre 2008StatutMembreDernière intervention20 novembre 2010
-
16 févr. 2009 à 09:17
Slt à tous! :)
Voilà je vous explique mon problème.
J'ai une colonne dans mon fichier Excel représentant des relevés de températures sur 8760h (1 année civile..du 01 Janvier au 31 Décembre).
J'obtiens une moyenne m et un écart-type e pour cette colonne.
J'ai utilisé un logiciel de lissage (FindGraph) qui me donne une T°lissée = Tmoyenne - Ampli*cos(w*t - phi)
Connaissant m et e, je souhaiterai avoir en fait comme équation pour ma température :
T° = T°lissée + Nb aléatoire
Le Nb aléatoire devant respecter les statistiques m et e.
Celà est-il possible ou alors je m'enflamme pour rien :).
Si oui, quels instructions dois-je utiliser
Merci à vous!!
A voir également:
Générer nombre aléatoires avec base de données (connaissant donc moyenne et écar
cs_Orohena
Messages postés577Date d'inscriptionvendredi 26 septembre 2008StatutMembreDernière intervention20 novembre 20104 16 févr. 2009 à 00:00
Bonjour Adrien
Le thème n'est pas vb.net, mais VBA. Penses-y la prochaine fois.
Voici le programme VBA/Excel te permettant de générer une série de nombre entiers respectant une moyenne et un écart-type fixés ou plutôt espérés par l'utilisateur (mon programme tolèrant une erreur absolue de +/- 0.5 pour la moyenne et pour l'écart-type).
Il génère d'abord une série aléatoire grossière, dont il corrige ensuite progressivement la moyenne et l'écart-type, en translatant la population (correction de la moyenne), et en dispersant/concentrant les nombres autour de la moyenne (correction de l'écart-type).
Je ne suis pas certain que cela corresponde pile-poil à ton attente, car tes explications sur le lissage sont un peu obscures pour moi (je ne suis pas tombé dans la marmite des maths étant petit, loin de là), alors j'attends tes remarques.
Option Explicit
Type statistiques
moyenne As Double
ecart_type As Double
End Type
Dim nombre_echantillons As Integer
Dim echantillons() As Long
Dim espere As statistiques
Dim obtenu As statistiques
Sub principale()
' procédure principale, fixant les paramètres et générant une population
' definition des parametres de l'utilisateur
nombre_echantillons = 8760
espere.moyenne = 40
espere.ecart_type = 15
' cree une population proche des parametres esperes
creer_population
' affiche les parametres obtenus
Range("C2").Value = "moyenne : " & Round(obtenu.moyenne, 1)
Range("C4").Value = "ecart type : " & Round(obtenu.ecart_type, 1)
End Sub
Function creer_population()
' cree une population correspondant approximativement à la moyenne et l'écart-type
' et corrige progressivement l' approximation. La population est ensuite chargée dans
' la colonne A de la feuille active
Dim max As Long
Dim min As Long
Dim echantillon As Long
Dim i As Integer
Dim statistiques As statistiques
ReDim echantillons(nombre_echantillons - 1)
max = espere.moyenne + espere.ecart_type
min = espere.moyenne - espere.ecart_type
Randomize Timer
Cells.Clear
' generation d'une population aléatoire approximative
For i = 1 To nombre_echantillons
echantillon = Int((max - min + 1) * Rnd + min)
echantillons(i - 1) = echantillon
Next
' correction de l'approximation
' manipulation de la population, jusqu'à obtention d'une erreur maximale de +/- 0.5
' par rapport à la moyenne et l'écart-type espérés
'
Do
statistiques = stats
If Round(statistiques.moyenne, 0) <> espere.moyenne Then _
corriger_moyenne CDbl(Round(statistiques.moyenne, 0) - espere.moyenne)
If Round(statistiques.ecart_type, 0) <> espere.ecart_type Then _
corriger_ecart_type (statistiques.ecart_type - espere.ecart_type)
Loop Until Round(statistiques.moyenne, 0) = espere.moyenne And _
Round(statistiques.ecart_type, 0) = espere.ecart_type
' affichage du resultat
For i = 1 To nombre_echantillons
echantillon = echantillons(i - 1)
ActiveSheet.Cells(i, 1).Value = echantillon
Next
obtenu.moyenne = statistiques.moyenne
obtenu.ecart_type = statistiques.ecart_type
End Function
Sub corriger_moyenne(correction As Double)
' corrige l'erreur sur la moyenne par une translation de la population
Dim i As Integer
Dim echantillon As Long
For i = 1 To nombre_echantillons
echantillon = echantillons(i - 1)
echantillon = CDbl(echantillon - correction)
echantillons(i - 1) = echantillon
Next
End Sub
Sub corriger_ecart_type(correction As Double)
' corrige l'erreur sur l'écart-type par une dispersion ou concentration de la population autour de la moyenne
Dim i As Integer
Dim echantillon As Long
For i = 1 To nombre_echantillons
echantillon = echantillons(i - 1)
If echantillon < espere.moyenne Then
If correction < 0 Then
echantillon = echantillon + correction
Else
echantillon = echantillon - correction
End If
ElseIf echantillon > espere.moyenne Then
If correction < 0 Then
echantillon = echantillon - correction
Else
echantillon = echantillon + correction
End If
End If
echantillons(i - 1) = CDbl(echantillon)
Next
End Sub
Function stats() As statistiques
' calcule la moyenne et l'écart-type du tableau echantillons
Dim i As Integer
Dim echantillon As Double
Dim sommecarresX As Double
Dim sommeX As Double
For i = 1 To nombre_echantillons
echantillon = echantillons(i - 1)
sommecarresX = sommecarresX + echantillon ^ 2
sommeX = sommeX + echantillon
Next
stats.moyenne = sommeX / nombre_echantillons
stats.ecart_type = Sqr((nombre_echantillons * sommecarresX - sommeX ^ 2) / (nombre_echantillons ^ 2))
End Function
cs_Orohena
Messages postés577Date d'inscriptionvendredi 26 septembre 2008StatutMembreDernière intervention20 novembre 20104 16 févr. 2009 à 09:17
Adrien
J'ai apporté diverses modifications au code ci-dessus. En particulier, la moyenne et l'écart-type sont égaux à m et e à la 10e décimale près. Les nombres sont des réels en double précision.
Option Explicit
Type statistiques
moyenne As Double
ecart_type As Double
End Type
Dim nombre_echantillons As Integer
Dim echantillons() As Double
Dim critere As statistiques
Dim resultat As statistiques
Dim precision As Integer
Sub principale()
' procédure principale, fixant les paramètres et générant une population
' criteres imposés par l'utilisateur
precision = 10 ' precision requise pour la moyenne et l'ecart-type (nb de chiffres apres la virgule)
nombre_echantillons = 8760
critere.moyenne = 40
critere.ecart_type = 15
' cree une population correspondant approximativement à la moyenne et l'écart-type
' et corrige progressivement l' approximation. La population est ensuite chargée dans
' la colonne A de la feuille active
Dim max As Double
Dim min As Double
Dim echantillon As Double
Dim i As Integer
ReDim echantillons(nombre_echantillons - 1)
max = critere.moyenne + critere.ecart_type
min = critere.moyenne - critere.ecart_type
Randomize Timer
Cells.Clear
' generation d'une population aléatoire approximative
For i = 1 To nombre_echantillons
echantillon = (max - min + 1) * Rnd + min
echantillons(i - 1) = echantillon
Next
' correction de l'approximation.
' Redistribution des nombres en vue d'obtenir la moyenne et l'écart-type recherchés
' avec une précision de 10 chiffres après la virgule
Do
resultat = calculer_stats
If Round(resultat.moyenne, precision) <> critere.moyenne Then _
corriger_moyenne (Round(resultat.moyenne, precision) - critere.moyenne)
If Round(resultat.ecart_type, precision) <> critere.ecart_type Then _
corriger_ecart_type (resultat.ecart_type - critere.ecart_type)
Loop Until Round(resultat.moyenne, precision) = critere.moyenne And _
Round(resultat.ecart_type, precision) = critere.ecart_type
' affichage du resultat
For i = 1 To nombre_echantillons
echantillon = echantillons(i - 1)
ActiveSheet.Cells(i, 1).Value = echantillon
Next
End Function
Sub corriger_moyenne(correction As Double)
' corrige l'erreur sur la moyenne par une translation de la population
Dim i As Integer
Dim echantillon As Double
For i = 1 To nombre_echantillons
echantillon = echantillons(i - 1)
echantillon = echantillon - correction
echantillons(i - 1) = echantillon
Next
End Sub
Sub corriger_ecart_type(correction As Double)
' corrige l'erreur sur l'écart-type par une dispersion ou concentration de la population autour de la moyenne
Dim i As Integer
Dim echantillon As Double
For i = 1 To nombre_echantillons
echantillon = echantillons(i - 1)
If echantillon < critere.moyenne Then
echantillon = echantillon + correction * (critere.moyenne - echantillon) / critere.ecart_type
ElseIf echantillon > critere.moyenne Then
echantillon = echantillon - correction * (echantillon - critere.moyenne) / critere.ecart_type
End If
echantillons(i - 1) = echantillon
Next
End Sub
Function calculer_stats() As statistiques
' calcule la moyenne et l'écart-type du tableau echantillons
Dim i As Integer
Dim echantillon As Double
Dim sommecarresX As Double
Dim sommeX As Double
For i = 1 To nombre_echantillons
echantillon = echantillons(i - 1)
sommecarresX = sommecarresX + echantillon ^ 2
sommeX = sommeX + echantillon
Next
calculer_stats.moyenne = sommeX / nombre_echantillons
calculer_stats.ecart_type = Sqr((nombre_echantillons * sommecarresX - sommeX ^ 2) / (nombre_echantillons ^ 2))