cerhu > comp.* > comp.algorithmes

Éric Lévénez (19/05/2012, 19h42)
Bonjour,

Ce que je veux faire est en théorie simple, c'est calculer la moyenne de
températures sur une période donnée.

Les données en entrée sont des couples date (en s) et température (en °C).

Le problème est que les intervalles entre les dates ne sont pas
identiques, sinon il suffirait de faire la somme des températures /
nombre de mesures.

J'avais pensé simuler des intervalles égaux d'une seconde en calculant
des températures intermédiaires par simple interpolation linéaire. La
moyenne est alors la somme des températures intermédiaires ou réels /
durée en s.

Mais il doit y avoir un autre moyen car l'interpolation linéaire, c'est
un peu trop rude je pense.
Pascal J. Bourguignon (19/05/2012, 22h25)
Éric Lévénez <usenet> writes:

> Mais il doit y avoir un autre moyen car l'interpolation linéaire,
> c'est un peu trop rude je pense.


L'interpolation quadratique?
Rémi Moyen (20/05/2012, 00h19)
On 19/05/12 18:42, Éric Lévénez wrote:
> Bonjour,
> Ce que je veux faire est en théorie simple, c'est calculer la moyenne de
> températures sur une période donnée.
> Les données en entrée sont des couples date (en s) et température (en °C).
> Le problème est que les intervalles entre les dates ne sont pas
> identiques, sinon il suffirait de faire la somme des températures /
> nombre de mesures.


Question bête, est-ce que faire la moyenne pondérée (par l'intervalle
entre les mesures, ou l'intervalle centré sur chaque mesure) ne
suffirait pas ?

Si la série est assez longue et pas trop irrégulière (i.e. tous les
intervalles sont du même ordre de grandeur), je pense que le résultat
doit être au pouillème près la même chose que ce que donnera une
interpolation plus complexe.

Sinon, quelles propriétés cherches-tu dans l'interpolation ? Simplicité
de l'algo ? Rapidité de calcul ? Précision du résultat (mais par rapport
à quel référence théorique) ? Continuité de la courbe/dérivée/dérivée
n-ième ? Similarité avec un processus physique (genre températures
journalières ou annuelles) ?

Je ne suis pas sûr de comprendre ce que tu veux dire par
"l'interpolation linéaire, c'est un peu trop rude"...
Éric Lévénez (20/05/2012, 09h19)
Le 19/05/12 22:25, Pascal J. Bourguignon a écrit :
> Éric Lévénez<usenet> writes:
>> Mais il doit y avoir un autre moyen car l'interpolation linéaire,
>> c'est un peu trop rude je pense.

> L'interpolation quadratique?


Oui, c'est ce que je pensais, mais le but n'étant pas de calculer la
courbe complète des points, mais juste la moyenne, j'espérais un
algorithme plus simple.
Pascal J. Bourguignon (20/05/2012, 10h09)
Éric Lévénez <usenet> writes:

> Le 19/05/12 22:25, Pascal J. Bourguignon a écrit :
> Oui, c'est ce que je pensais, mais le but n'étant pas de calculer la
> courbe complète des points, mais juste la moyenne, j'espérais un
> algorithme plus simple.


Le plus simple, c'est de calculer la surface.

? ?t?·T?
----------
? ?t?

(/ (sum i (* (delta-t i) (temp i)))
(sum i (delta-t i)))

Mais comme on suppose que la température évolue continuement, les sauts
de températures ne sont pas réaliste, donc on peut faire une
interpolation linéaire.

? ?t?·½(T???+T?)
---------------
? ?t?

(/ (sum i (* (delta-t i) (/ (+ (temp (+ i 1)) (temp i)) 2)))
(sum i (delta-t i)))

Maintenant, avec l'interpolation linéraire, on a des changements de
variation de température aux temps de mesures qui sont discontinus, et
ceci n'est probablement pas réaliste non plus. En tout cas, il n'y a
aucune raison pour que tous les changement de variation de température
discontinus se produisent toujours au moment de la mesure. Une
interpolation quadratique ne résoudrait pas ce problème.

Ainsi, on pourrait prendre comme contraintes que:

- la température évolue continument,
- la variation (dérivée) de température évolue continument.

Aux points de mesure, on a deux tangentes, une vers la gauche, et une
autre vers la droite. On pourrait faire une moyenne pondérée pour
obtenir une seule tangente (si on a une mesure plus proche que l'autre,
on peut supposer que la courbe ira plus directement vers elle).

Donc on a maintenant le problème d'imaginer une courbe entre deux points
et se finissant avec deux tangentes données. Les courbes de Bezier
cubiques pourraient faire l'affaire.

P(?)=P?(1-?)³+3P??(1-?)²+3P??²(1-?)+P??³

avec: ?-1 = t?-?t?
? = t?

P? et P? sont les points de mesure.
P? et P? sont sur les tangentes, mais on peut choisir leur position (ça
donne une variation plus ou moins brusque, je les prendrais trés proche
des points de mesure, par exemple 1/10 de ?t?).

Reste à intégrer ces courbes parametriques cubiques (entre t?-?t? et
t?), ie. effectuer le changement de variable de ? par t, et
l'intégration est alors toute simple (c'est un simple polynôme de degré
3).
Éric Lévénez (20/05/2012, 10h40)
Le 20/05/12 00:19, Rémi Moyen a écrit :
> On 19/05/12 18:42, Éric Lévénez wrote:


> Si la série est assez longue et pas trop irrégulière (i.e. tous les
> intervalles sont du même ordre de grandeur), je pense que le résultat
> doit être au pouillème près la même chose que ce que donnera une
> interpolation plus complexe.
> Sinon, quelles propriétés cherches-tu dans l'interpolation ? Simplicité
> de l'algo ? Rapidité de calcul ? Précision du résultat (mais par rapport
> à quel référence théorique) ? Continuité de la courbe/dérivée/dérivée
> n-ième ? Similarité avec un processus physique (genre températures
> journalières ou annuelles) ?
> Je ne suis pas sûr de comprendre ce que tu veux dire par
> "l'interpolation linéaire, c'est un peu trop rude"...


C'est pour de la domotique. j'ai des capteurs de températures qui
remontent des infos par intervalle de 60 à 90 s, de façon irrégulière,
et parfois l'info n'est pas remontée (émission perturbée). Je voudrais
calculer la température moyenne par capteur.

En pratique, donc, mon problème n'a pas besoin d'une grande précision,
voire pas de précision du tout. Mais c'est plus pour la beauté de l'art
que pour autre chose que je voudrais faire ce calcul.

Pour la moyenne je voudrais calculer celle d'une journée entière, celle
de la nuit et celle du jour. Il me faudra calculer l'heure de lever et
coucher du soleil pour connaître les bornes temporelles.

En y réfléchissant, comme les sondes de température émettent entre 60 à
90 s, et parfois pas, si j'obtiens 140 s entre 2 mesures, je peux
supposer qu'une mesure manque et faire l'interpolation linéaire simple
pour la retrouver (la température ne change pas brutalement). Cela
devrait aller.

Je vais quand même regarder du côté d'une interpolation quadratique,
mais bon en Perl, ce n'est pas simple à coder...
Éric Lévénez (20/05/2012, 11h14)
Le 20/05/12 10:09, Pascal J. Bourguignon a écrit :

> Le plus simple, c'est de calculer la surface.
> [snip]


Je vais réfléchir à tout cela.

Merci.
Tonton Th (31/05/2012, 12h24)
On 05/20/2012 10:40 AM, Éric Lévénez wrote:

> Je vais quand même regarder du côté d'une interpolation quadratique,
> mais bon en Perl, ce n'est pas simple à coder...

Si tu arrives à une solution sympa, j'aimerais bien
la voir...
Michel Olagnon (31/05/2012, 14h05)
Tonton Th écrivit :
> On 05/20/2012 10:40 AM, Éric Lévénez wrote:
>> Je vais quand même regarder du côté d'une interpolation quadratique,
>> mais bon en Perl, ce n'est pas simple à coder...

> Si tu arrives à une solution sympa, j'aimerais bien
> la voir...


La meilleure solution à mon avis est de se baser sur la formule de
Pascal, mais de ne pas interpoler :

? ?t?·T?
----------
? ?t?

(/ (sum i (* (delta-t i) (temp i)))
(sum i (delta-t i)))

delta-t i vaut
0.5 * [min (t_m, (t_{i}-t_{i-1})) + min (t_m, (t_{i+1}-t_{i}))]
où t_m est la durée maximale dont une mesure est représentative.
Cela revient à dire qu'une mesure est représentative de la durée depuis
le milieu de la période depuis la mesure précédente jusqu'au milieu de
celle jusqu'à la mesure suivante, avec un garde-fou au cas où ce serait
trop long. Quand on n'a pas de mesure, on ne change rien.
Si (sum i (delta-t i)), la durée dont la moyenne est représentative, est
trop courte par rapport au temps écoulé, on peut indiquer que la moyenne
est douteuse.

Interpoler n'est qu'une complication inutile, car on ne peut créer
d'information ex-nihilo.
Éric Lévénez (31/05/2012, 19h59)
Le 31/05/12 14:05, Michel Olagnon a écrit :
[..]
> Cela revient à dire qu'une mesure est représentative de la durée depuis
> le milieu de la période depuis la mesure précédente jusqu'au milieu de
> celle jusqu'à la mesure suivante, avec un garde-fou au cas où ce serait
> trop long. Quand on n'a pas de mesure, on ne change rien.
> Si (sum i (delta-t i)), la durée dont la moyenne est représentative, est
> trop courte par rapport au temps écoulé, on peut indiquer que la moyenne
> est douteuse.
> Interpoler n'est qu'une complication inutile, car on ne peut créer
> d'information ex-nihilo.


Je n'ai pas commencé à coder car c'est un projet que j'ai en tâche de
fond, alors ça peut prendre du temps. Mais je vais étudier toutes les
possibilités. Sans parler des complications annexes comme le calcul du
lever/coucher du soleil pour avoir une moyenne de température jour et
nuit, et le traitement du changement d'heure été/hivers (pour afficher
un graphique de statistique sur une journée, sur 23, 24 ou 25
heures...). Bref beaucoup de complications pour rien du tout, juste pour
le plaisir. Mais merci à tous pour les idées.
Discussions similaires
Temperatures

Moyenne harmonique ou moyenne pondérée ?????

Températures??

temperatures


Fuseau horaire GMT +2. Il est actuellement 16h07. | Privacy Policy