Bonjour!
Voici un problème qui je pense est très intéressant: , voici les données d'entrée dont nous disposons :
-> Une valeur pour chaque mois de l'année :
Janvier = 60
Février = 80
Mars = 130
Avril = 150
Mai = 180
Juin = 200
Juillet = 210
Aout = 170
Septembre = 140
Octobre = 90
Novembre = 60
Decembre = 50
-> Le nombre de jour par mois.
Pour connaitre la valeur chaque jour, je peux prendre Mars par exemple et le diviser par le nombre de jours dans le mois, soit 130 / 30 = 4,33.
Pour Février : 80 / 29 = 2,76.
Néanmoins je sais que ces valeurs de 2,76 et 4,33 concerne la moyenne en milieu du mois, je considère donc le 15 Février et 15 Mars.
Ainsi avec cette méthode simpliste, le 29 Février je suis à 2,76 tandis que je lendemain (1er Mars) je saute à 4,33 soit prés du double me créant une "marche".
Je souhaite donc lisser (par une formule mathématique) de façon journalière ces données mensuelles mais je dois respecter absolument la valeur du 15 de chaque mois (Février 2.76 et Mars 4.33) et surtout la somme mensuelle (Février 80 et Mars 130).
En gros en expliquant graphiquement, passer de barres (série 1) à une spline (série 2).
Mon explication est elle compréhensible?
Merci pour votre aide!
édit Océane : forum modifié
Bonsoir!
Toutes mes excuses et très honnêtement, je suis en train de me noyer tout seul!
Je tourne en rond depuis des jours sur ce problème et me demande si il existe une solution!
Je repose le problème d'une façon plus simple :
-> je connais seulement un valeur mensuelle comme ceci :
Janvier = 60
Février = 80
Mars = 130
Avril = 150
Mai = 180
Juin = 200
Juillet = 210
Aout = 170
Septembre = 140
Octobre = 90
Novembre = 60
Decembre = 50
Comment en déduire une valeur journalière tout en conservant strictement la valeur mensuelle (somme des valeurs journalières = valeur mensuelle).
En gros actuellement j'ai quelque chose qui ressemble à ça et souhaite obtenir le graph du dessous :
Désolé pour ces revirements mais je compte beaucoup sur votre aide pour éviter d'exploser!!!!!!
Grand merci!
Salut !
Je suis bien loin d'être calé dans le domaine, mais à vu de nez, je partirai sur une formule de Simpson composite. - je raconte peut-être n'importe quoi, je te conseil d'attendre l'avis d'une personne meilleure que moi
-
f représente ta fonction "en escalier" de départ, et P la fonction par laquelle tu l'approximes. [a,b] sera l'intervalle pour chacune de tes marches.

En première approximation, et très simple à réaliser sur tableur, prendre simplement la moyenne mobile centrée sur chaque jour.
Il suffit de placer les 365 jours de l'année avec la valeur mensuelle en colonne, et de calculer la colonne suivante avec chaque cellule égale à la moyenne des trente cellules de gauche (15 avant et 15 après).
Reste ensuite à faire une règle de trois pour transformer ces données en valeurs journalières.
Ca lisse la courbe, sans respecter les totaux mensuels, ni marquer un pallier pour le mois maximum.
Mais ça prend deux minutes à réaliser...
Bonjour!
Merci Dwarliz et LeDino, bien que la formule de l'un me fait peur!!!!!
Concernant les jours, il est certainement plus simple d'oublier le bissextile et de partir sur une base composée de numéros de jours fixes avec intervalles tout aussi fixes :
Janvier - 31 jours - du jour 1 au jour 31
Février - 28 jours - du jour 32 au jour 59
Mars - 31 jours - du jour 60 au jour 90
Avril - 30 jours - du jour 91 au jour 120
Mai - 31 jours - du jour 121 au jour 151
Juin - 30 jours - du jour 152 au jour 181
Juillet - 31 jours - du jour 182 au jour 212
Août - 31 jours - du jour 213 au jour 243
Septembre - 30 jours - du jour 244 au jour 273
Octobre - 31 jours - du jour 274 au jour 304
Novembre - 30 jours - du jour 305 au jour 334
Décembre - 31 jours - du jour 335 au jour 365
Voici une base excel de travail :
, la colonne A désigne les numéros de jours. La colonne B en orange les mois, la colonne C en jaune les valeurs mensuelles à respecter strictement, et en colonne D les valeurs journalières obtenues basiquement par division de la valeur mensuelle par le nombre de jours du mois.
Je veux donc éviter ce genre de marche entre les jours 59 et 60 passant de 2.85 à 4.19, lisser chaque jour tout en respectant la somme mensuelle.
Qu'en pensez vous?
Merci!!!!!
Bonjour!
Cela semble être aussi intéressant que la spline ou la loi de simpson mais je suis absolument incapable de la mettre en oeuvre dans un excel, HTML ou PHP!!
Avez vous des exemples à me conseiller?
Merci!
Merci bbomaths pour ton aide et ce lien, mais je ne comprends pas le lien [4] vers un wiki?!
Quant au programme, c'est pour MAC, en tout état de cause, on fonce vers quelque chose qui me dépasse de loin, n'y a t'il rien de plus simple à mettre en oeuvre (sur le fichier EXCEL par exemple)?
Grand merci
Par curiosité, josse34, quel est ton niveau scolaire en maths (Collège/Lycée/Prépa/Bac+5/ect) ?
Et en informatique (Débutant/Amateur/Confirmé/Pro) ?
Déjà, il faudrait dans un premier temps oublié la notion de mois.
Tu as une fonction f (continue) qui fonctionne par palier, et dont on va admettre qu'on ne connait pas d'expression simple.
Ce qui t'intéresse sur cette fonction f, c'est de la "lisser", en ne gardant que certaines valeurs :
par exemple, tu veux que f(45) = 2,46 - Note : 45 représente le 45ème jour de l'année, soit le 14 Février, soit le milieu de ce mois -
Maintenant, tu cherches à construire une fonction P (continue), telle que P passe par tous les points que tu as défini :
par exemple, tu veux que P(45) = 2,46 aussi.
Et bien, le formule de Simpson te donne une fonction P telle que tu cherches. Et la formule de Simpson composite est similaire, mais un peu plus précise ( un peu plus compliquée aussi, mais on a rien sans rien
)
Et donc, avec ces informations, je te conseil de relire mon 1er post.
Exemple : pour le 1er intervalle -> a = 15 (le 15 Janvier), b = 74 (le 15 Mars), f(a) = 60/31 = 1,94, f(b) = 4,33, m = 45 (le 14 Février), f(m) = 2.46
Maintenant tu n'as plus qu'a remplacer dans la formule
PS : en gros tu prends les milieux de tes mois 3 par 3, a c'est le milieu du 1er mois, b le milieu du 3ème, et m le milieu de 2nd mois.
Merci Dwarliz, cela me semble clair.
J'ai un BTS (donc mathématique léger et davantage tourné vers la physique électrique) et je suis entre amateur et confirmé en informatique.
Autant te dire que les maths ne sont pas mes copains mais malgré mes carences, je ne leur tourne pas le dos!
Actuellement, ma difficultés est de transcrire ta formule en informatique, sur tableur par exemple puis en PHP.
Autant je connais assez bien excel, autant je ne l'ai jamais utilisé pour des maths comme ceci, et donc ne sais pas établir un tableau + graphique selon une formule.
J'ai hâte de tester!
Merci pour ton aide précieuse!!
J'ai commencé le boulot pour toi : http://cjoint.com/?0KjuzP9rlCn
Tu n'as plus qu'à compléter en suivant le modèle
Upload le quand tu as fini, que j'y jette un coup d'œil stp.
La contrainte "atteint le palier mensuel au milieu du mois"...
... est relativement antagoniste avec la contrainte de respect des totaux mensuels.
Cette contradiction obligera souvent la fonction de lissage à des "contorsions" peu compatibles avec les objectifs habituels du lissage (recherche de la meilleure régularité...)...
Ce serait bien de préciser les contraintes EXACTES, et les raisons qui les motivent.
Est-il indispensable que la courbe passe par le milieu du palier ?
Est-il indispensable que le total mensuel soit respecté ?
Quelle est l'utilisation de la courbe lissée ? ... une modélisation ? ... une reconstitution de la courbe journalière la plus "vraisemblable ?
Les conditions aux bords sont également importantes à préciser... Si l'on connaît la courbe pour le mois de décembre précédent, cela peut avoir une incidence sur le lissage...
Bonjour Dwarliz!
Merci pour le boulot, je viens de le terminer : http://cjoint.com/?CKkmhjwz82v
J'ai quelques soucis avec le mois de janvier avec une somme de 143 au lieu de 60, néanmoins bien que cela soit un peu fastidieux et imprécis, la courbe à une bonne allure!
LeDino, la seule contrainte à respecter est cette somme mensuelle, le reste n'est pas important et faisait partie de ma démarche erronée.
Ainsi, il n'est pas du tout indispensable que la courbe passe par le milieu du palier mais indispensable de respecter strictement les totaux mensuelles par une courbe la plus lissée possible.
Quant à la connexion entre les années (décembre à janvier) on prends en compte une seule année type qui sera toujours sous ces conditions (mois de février à 28 jours sinon trop compliqué, enfin à moins que vous arriviez à le faire!!).
Merci à vous!!!!
Salut !
Fastidieux, oui en effet... mais imprécis ? pas du tout ! Qu'est-ce qui te faire dire que c'est imprécis ?
En effet, imprécis est un terme un peu fort pour désigner une erreur de 2.58% systématique, sachant en plus que je n'arrive pas à maîtriser la connexion entre les années de la fin du mois de décembre au début du mois de janvier.
En tout état de cause, on m'a suggéré un modèle qui fonctionne parfaitement :
a0+a1*cos((2*PI*t)/365)+a2*cos(2*((2*PI*t)/365))+a3*cos(3*((2*PI*t)/365))+a4*cos(4*((2*PI*t)/365))+a5*cos(2*((5*PI*t)/365))+b1*sin((2*PI*t)/365)+b2*sin(2*((2*PI*t)/365))+b3*sin(3*((2*PI*t)/365))+b4*sin(4*((2*PI*t)/365))+b5*sin(5*((2*PI*t)/365))+b6*sin(6*((2*PI*t)/365))
t étant le numéro de jour et les coefficients a0, a1, a2, a3, a4, a5, b1, b2, b3, b4, b5, b6 obtenus par équation à 12 inconnus que je n'arrive pas à déterminer simplement.
Par ailleurs, les COS et SIN sont ils placés en fonction de la phase montante ou descendante du mois?
Qu'en pensez vous?
Grand merci et bonne journée.
2.58% au mois de juillet entre la valeur donnée et la somme des valeurs calculées avec ton système dans le mois.
Oui en effet.
En réalité cette formule sert à approximer une fonction f dont on ne connait pas grand chose (quelque points uniquement) par un polynôme P.
Qui dit approximation dit erreur... je te conseil de te renseigner (sur wikipédia par exemple) si tu veux pouvoir calculer cette erreur.
?
?)...
Bonsoir!
Il est vrai LeDino que tu as raison sur toute la ligne!!
C'est simple à mettre en oeuvre et je ne me prends pas la tête avec des calculs!!
L'erreur sur le total est nulle, sur un résultat à 210 j'ai 2.58% d'erreur, je ne devrais pas subir mensuellement une erreur supérieure à 3% mais aurais bien voulu l'éliminer!!
Pourquoi ais je un palier non négligeable entre le 31 décembre à 1.389 et le 1er janvier à 1.754 ?
Merci!
Si tu prends les valeurs 3 par 3 comme je t'avais montré, il te faut prendre les 15 novembre, décembre et janvier pour finir ton année.
Si tu as fais ça, sans erreur dans la formule, il ne peut en aucun cas avoir de discontinuités.
Sauf erreur de ma part, c'est le cas mais j'ai bien ce palier : http://cjoint.com/?CKlauUaEpuB
Merci à vous deux!
LE PLUS SIMPLE EN PHP...
LISSAGE par MOYENNE MOBILE + REDRESSEMENT par DECALAGE de la QUANTITE NECESSAIRE pour RESPECTER le TOTAL MENSUEL
On répète ce cycle trois ou quatre fois, c'est amplement suffisant.
NB: A chaque cycle, on diminue la plage de calcul de la moyenne mobile (pour limiter le biais de lissage sur les totaux), par exemple :
... sur 31 jours centrés la première fois, puis 17, puis 9, puis 5.
Ca fonctionne très bien.
Il faut une double boucle pour la moyenne mobile.
Une simple boucle pour le calcul du total mensuel, et le redressement dans la foulée.
On itère quatre fois très facilement... si on a correctement défini la plage d'indices entrant dans la moyenne mobile.
Astuces :
Prolonger le mois précédent janvier avec les valeurs de janvier. Idem après décembre...
Pour illustration, premier lissage : VJ --> VJ'
Lissage par moyenne mobile centrée : 15 jours avant à 15 jours après.
Le lissage est "linéaire" et les totaux par mois sont en erreur quadratique de 2,7.
Pour illustration, deuxième lissage (redressé) : VJ --> VJ' --> VJ* --> VJ''
Le lissage V' est décalé chaque mois de la quantité nécessaire pour respecter le total.
L'erreur mensuelle quadratique devient nulle par construction...
... mais de ce fait, des "sauts" apparaissent aux jonctions.
Pour effacer ces sauts, on lisse donc à nouveau cette série par moyenne mobile.
La plage de lissage est réduite à 8 jours avant 8 jours après.
C'est suffisant pour lisser et cela atténue le biais sur le total mensuel.
L'erreur mensuelle quadratique passe à 2,0.
Pour illustration, quatrième lissage (redressé) : On répète deux fois le cycle précédent.
Décalage chaque mois de la quantité nécessaire pour respecter le total.
Effacement des sauts (de plus en plus petits), en lissant par moyenne mobile.
La plage de lissage est réduite à 4 jours avant 4 jours après (pour V''').
L'erreur mensuelle quadratique passe à 0,22 seulement.
La plage de lissage est réduite à 2 jours avant 2 jours après (pour V'''').
L'erreur mensuelle quadratique passe à 0,06 c'est à dire presque rien...
Erreur quadratique : 2,76 2,07 0,22 0,06
Mois Jours VM VM' VM'' VM''' VM''''
0 31 60 60,0 59,6 59,9 60,0
1 31 60 63,6 61,8 60,2 60,0
2 28 80 81,6 82,8 80,2 80,0
3 31 130 127,9 131,4 129,8 130,0
4 30 150 150,0 151,7 150,0 150,0
5 31 180 180,2 182,1 180,1 180,0
6 30 200 197,1 200,7 200,0 200,0
7 31 210 204,6 207,1 209,6 209,9
8 31 170 171,8 169,1 170,3 170,1
9 30 140 136,3 135,8 139,6 139,9
10 31 90 93,3 88,3 90,2 90,1
11 30 60 62,0 59,0 60,0 60,0
12 31 50 51,5 50,0 50,1 50,0
13 31 50 50,0 49,9 50,0 50,0
P est un polynôme, il ne peut être que continue. Ton problème est que si tu prend les 15 novembre, décembre et janvier, il faut que tu considère le mois de janvier comme un 13ème mois... donc le 15 janvier devrai être le 380ème (365+15) jour de l'année, et non le 15... sinon il y a une rupture.
Le moins que l'on puisse dire c'est que vous me l'avez vendu votre solution !!!!!!!!!!!!!!!!!!!!!!!
Merci Dwarliz pour la correction, c'est impeccable, j'apprécie!
LeDino, réduire cette erreur à 0,6% avec cette simplicité est absolument merveilleux pour moi! Pourrais tu me filer le fichier excel ayant servi à la création de ces graphiques??
Merci à vous deux et écrivez moi un petit mot sur boris3434 at voila point fr, c'est pour autre chose que cela!
Pour enfoncer le cou : 3 autres exemples du lissage + redressement itéré 4 fois, pour apprécier la "ROBUSTESSE" :
Le cas idéal de la courbe très régulière...
Un cas quelconque...
Un cas plus oscillant...
Commentaire :
Les moyennes mobiles sont ROBUSTES.
Elles restent toujours plus ou moins "collées" à la courbe d'origine.
Elles présentent moins d'opportunités "d'instabilité" que les lissages par des courbes paramétriques dont on ajuste les coefficients pour respecter les contraintes de continuité ou de totaux partiels : les solutions du système d'équation qui en résulte peuvent donner des surprises désagréables, comme des fortes vagues...
La meilleure solution serait un système de courbes paramétriques ayant de bonnes propriétés (pourquoi pas des courbes trigonométriques avec amplitude et période variables... comme proposé sur l'autre site et qui marche bien sur ton exemple), dont on cherche un minimum d'une fonction de "régularité", sous contraintes de continuité et de totaux.
La fonction de régularité à minimiser pourrait être la courbure absolue moyenne, ou la courbure quadratique (pour pondérer les variations fortes) ou encore le maximum de courbure (pour interdire les variations fortes)... la courbure pouvant être simplement le changement de pente...
Mais un tel système est lourd à développer. Surtout en PHP.
Donc les moyennes mobiles redressées et itérées restent un très bon compromis, assez simple à programmer en s'y prenant bien.
C'est sur que LeDino se bat férocement pour faire valoir cette solution!!!!
Elle me convient à merveille!! Merci!
Je suis dans ma dernière ligne droite, pourrais tu me transmettre le fichier Excel ayant servis à ces graphiques, cela m'aide beaucoup lors de la retranscription en PHP!
Et envoyez moi juste un petit mot sur mon mail LeDino et Dwarliz!!
Je l'ai prototypé sous EXCEL.
Je n'ai pas le temps tout de suite, mais ce soir en principe je te le mets sur "ci-joint"...
Je n'ai pas fait le PHP (que je ne connais pas).
Mais j'ai en tête l'algorithme qui est raisonnablement simple.
Il faut surtout définir les bons tableaux, et ça devient assez simple.
J'essaie aussi de t'envoyer ça, mais là je suis très pris sur les deux jours à venir...
Je viens de terminer le codage PHP, ça fonctionne à merveille !!!!
Grand merci à vous deux Dwarliz et LeDino, c'est énormément grâce à vous !!
Je cloture ce post avec plaisir!
Encore merci!
PS : LeDino, envois moi un mail sur boris3434 at voila point fr comme viens de le faire Dwarliz !!!!
Désolé mais vu qu'il est impossible de contacter par MP sur ce forum:
LEDINO DONNE MOI RAPIDEMENT TON ADRESSE POSTALE SUR boris3434 at voila point fr JE TE PRIE comme l'a fait Dwarliz.
Je ne ferais pas d'autres interruption de ce genre et bonnes fêtes à tous!
Merci!
Bonjour josse34,
Pourquoi tiens-tu à avoir mon adresse ?
Je préfère échanger sur le forum.
Comme ça tout le monde en profite
.
D'après toi patate! Je tiens à t'expédier un petit cadeau.
Réfléchi pas et envois le moi, je ne vais pas t'expédier de l'anthrax!
Cool !
C'est super gentil, je te remercie
.
Le fait que tu aies pu atteindre ton objectif est une récompense plus que suffisante pour moi.
Mais je suis touché par ton attention.
Si tu tiens à me faire plaisir, fais un geste pour quelqu'un qui en a sérieusement besoin 
Ecoute, c'est surtout grâce à toi que j'ai accompli mon projet (sans vexer Dwarliz), j'ai toujours fait ainsi et je trouve cela normal surtout quand il s'agit de monter modestement un projet à but commercial.
Ainsi, je ne vais pas te supplier, surtout qu'une bonne bouteille de vin ne se file pas à Emmaus, donc si tu ne veux pas filer ton adresse postale, choisie un relais http://www.mondialrelay.fr/trouver-le-point-relais-le-plus-proche-de-chez-moi/ et precise ton nom.
Bye!
Derniere chance LeDino, donne moi ton code postal par mail pour aller chercher un colis à un relais proche de chez toi!
Merci
Bye
Bonsoir Josse.
Toi, on peut dire que tu as de la suite dans les idées
!
C'est bien. C'est une belle qualité.
Je ne pensais pas avoir à être si "explicite", mais vu les circonstances... je préfère clarifier que risquer de te paraître grossier ou indifférent.
Le forum est pour moi un lieu d'évasion.
C'est important pour moi qu'il y ait une coupure nette et indiscutable entre cet espace de liberté... et mon univers personnel.
Donc pas de contact. D'où mon esquive.
Maintenant, tu peux être plus que rassuré : ton initiative, et ton insistance à vouloir faire ce geste pour me remercier et me faire plaisir, prouvent si c'était encore nécessaire à quel point tu m'es reconnaissant. Cette conviction vaut largement toutes les bouteilles, aussi bonnes fussent-elles.
Donc je te remercie, mais je décline définitivement cette jolie marque d'attention.
Mais n'aies aucun doute que le cœur y est.
Alors bonne année... et "Santé"
!!!
Vous devez être membre accéder à ce service...
Pas encore inscrit ?
1 compte par personne, multi-compte interdit !
Ou identifiez-vous :