Inscription / Connexion Nouveau Sujet
Niveau algorithmique
Partager :

Courbe en connaissant les extremitées et la somme

Posté par
josse34
14-05-12 à 12:39

Bonjour
J'ai, imaginons, un fichier Excel de 32 lignes.
Je connais la valeur du point de la ligne 1 qui est de 1170.
Je connais la valeur du point de la ligne 32 qui est de 1318.
Je sais qu'il y a 30 valeurs à trouver entre ces deux extremitées mais surtout je connais la somme totale des 32 points qui est de 40574.

Je souhaite donc trouver simplement ces 30 valeurs en prenant en compte ces trois données (point 1, point 32, et somme totale) afin de tracer une courbe qui progresse logiquement (pas forcement en linéaire) du point 1 au point 32 et que la somme des 32 valeurs fasse 40574.

Vous allez me dire, il suffit de trouver le coefficient directeur qui est environ de 4.63 mais comme cela, la somme n'est pas de 40574 mais de 39738 !
Il faut vraiment un calcul progressif prenant en compte le point 1, le point 32 et la somme qui est de 40574.

Grand merci pour votre aide, si cela se trouve c'est simplissime!

Bonne journée

Posté par
josse34
re : Courbe en connaissant les extremitées et la somme 14-05-12 à 14:52

Bonjour.
Bon, c'est à but professionnel, je suis dans le domaine du solaire.
A l'heure actuelle si on prend deux mois, Avril et Mai, ma production théorique est par exemple de :
- 40 000kWh pour le mois d'Avril
- 50 000kWh pour le mois de Mai

Le mois d'avril comprend 30 jours soit 1333.33 kWh par jour
Le mois de Mai comprend 31 jours soit 1612.90 kWh par jour

Dans cette période, les jours s'allongent puisqu'on vas vers l'équinoxe du 21 Juin.

Ainsi donc du 1er au 30 Avril, nous devons avoir un total de 40 000 kWh mais le point fixe est au 21 Avril avec 1333.33 kWh
Idem du 1er au 31 Mai, nous devons avoir un total de 50 000 kWh mais le point fixe est au 21 Mai avec 1612.90 kWh
Du 21 Avril au 21 Mai, nous avons donc 32 jours et une production de 9 jours à 1333.33 et 21 jours à 1612.90 soit un total de 11999.97+33870.9 = 45870.87 kWh

Ma courbe (ou les cases de mon classeur) est composée de deux extremitées connues :
-point 1 équivalent au 21 Avril et ayant pour valeur 1333.33
-point 32 equivalent au 21 Mai et ayant pour valeur 1333.33
-Production totale à retrouver de 45870.87 sur cette période.

Je souhaite donc une formule à rentrer dans la case 2 de mon tableur, exploitant ces 3 précédentes valeurs à minima afin d'établir une progression dans les valeurs au lieu d'avoir comme aujoud'huis une "marche" à chaque changement de mois et des rapport qui sont donc pessimistes en début de mois et optimiste en fin de mois.

Grand merci pour votre aide.

Bonne journée

Posté par
Benwat
re : Courbe en connaissant les extremitées et la somme 14-05-12 à 19:06

Je vois pas bien le but mais...

Et bien... on pourrait essayer de trouver une fonction du type f(n) = a*ln(b*n+c). Ca te donnera une jolie courbe croissante (pour a et b positifs) et la somme est plus facile à calculer.

Ca donerait ceci :

\sum_{n=1}^{32}} f(n)  = \sum_{n=1}^{32}} aln(bn+c)  = ln( \prod_{n=1}^{32} (bn+c)^a )

C'est peut-être pas top comme système comem système à résoudre, mais au moins, c'est estéthique mathématiquement parlant.

Posté par
Benwat
re : Courbe en connaissant les extremitées et la somme 15-05-12 à 02:44

Il y a plus simple. Quitte à faire de l'interpolation, autant faire de l'interpolation polynomial.

On pose alors f(n) = a*n² + b*n + c et on résout le système liéaire suivant :

f(1) = 1333.33 = a + b + c
f(32) = 1612.9 = 1024a + 32b + c
somme = 45870.87 = 11440a + 528b + c

Celà donne :
a = -795697/119040
b = 45552583/198400
c = 20653711/18600

Ce qui donne une courbe affreuse avec un pic à plus de 3000 au jour 17.  

Posté par
Benwat
re : Courbe en connaissant les extremitées et la somme 15-05-12 à 16:28

Bon, du coup, j'ai repris l'idée de départ avec f(n) = a ln(bn+c), et j'ai entamé quelque calcul. Mais c'était un peu intorchable, à cause de la somme. Alors, au lieu de considérer la somme des f(n) de 1 à 32, je me suis dit, pourquoi pas considérer l'intégrale de f(n) entre 1 et 32.

Et ça simplifie les calculs.

On rappelle nos infos de base :
f_1 = a \ln (b+c)
 \\ f_{32} = a \ln (32b+c)

Ensuite, on considère donc notre fameuse équation avec l'intégrale au lieu de la somme :
\frac{31}{32} S = \int_{1}^{32} a \ln (bx+c) \mathrm dx
Le 31/32 est là parce qu'on a besoin de se normaliser. A la base, la somme est une somme de 32 termes, mais ici, notre intégrale est appliqué sur un intervales de taille 32-1 = 31.

Et à partir de cette équation, on arrive à déterminer b en fonction de c :
\frac{31}{32} S = \int_{1}^{32} a \ln (bx+c) \mathrm dx
 \\ 
 \\ \frac{31}{32} S = a \bigl[ (x+ \frac cb) \ln (bx+c) - x \bigl]^{32}_1
 \\ 
 \\ \frac{31}{32} S =  \Bigl((32+\frac cb)\, a \ln (32b+c) - 32 \Bigl) - \Bigl( (1+\frac cb)\, a \ln (b+c) -1 \Bigl)
 \\ 
 \\ \frac{31}{32} S = (32+\frac cb) f_{32} - 32 - (1+\frac cb) f_1 + 1
 \\ 
 \\ \frac{31}{32} S = 32f_{32}+\frac cb f_{32} - f_1 - \frac cb f_1 - 31
 \\ 
 \\ \frac{31}{32} Sb = 32f_{32}b+f_{32}c - f_1b - c f_1 - 31b
 \\ 
 \\ b \Bigl(\frac{31}{32} S - 32f_{32}+f_1+31 \Bigl) = c \Bigl(f_{32} - f_1 \Bigl)

b = cK  avec  K = \dfrac{f_{32} - f_1}{\frac{31}{32} S - 32f_{32}+f_1+31}

Ensuite l'idée c'était de pouvoir trouver une nouvelle équation qui ne fasse pas intervenir a afin de déterminer complétement b et c. J'ai donc tatonner et trouvé ceci :
f_1 \, f_{32} - f_{32} \, f_1 = 0
 \\ 
 \\ a \ln (b+c) \, f_{32} -  a \ln (32b+c) \, f_1 = 0
 \\ 
 \\ \ln (b+c) \, f_{32} - \ln (32b+c) \, f_1 = 0
 \\ 
 \\ \ln (b+c) \, f_{32} = \ln (32b+c) \, f_1
 \\ 
 \\ (b+c)^{f_{32}} = (32b+c)^{f_1}
 \\ 
 \\ (cK+c)^{f_{32}} = (32cK+c)^{f_1}
 \\ 
 \\ \Bigl(c(K+1)\Bigl)^{f_{32}} = \Bigl(c(32K+1)\Bigl)^{f_1}
 \\ 
 \\ c = \Bigg( \dfrac{(32K+1)^{f_1}}{(K+1)^{f_{32}}} \Bigg) ^{\frac{1}{f_{32} - f_1}}

Fort d'avoir la valeur de c, j'en déduit celle de b avec :
b = cK

Et ensuite, il ne reste que a à determiner :
a = \dfrac{f_1}{\ln (b+c)}

Voilà...

Honnêtement, je n'ai pas fait les calculs numériques. Et je n'ai pas non plus comparer la valeur de la somme qu'on nous impose et celle qu'on obtient avec nos calculs. Cette comparaison est importante, parce que si les valeurs sont trop différentes, la méthode est inéficace.

Je vais donc faire ses calculs numérique, comparer les sommes, et vous dire ce qu'il en est.


PS : Il serait bon que quelqu'un puisse vérifier mon travail. Une erreur est vite arrivée.
PPS : Si quelqu'un a une autre idée moins... hasardeuse, et moins moche, ce serait pas mal non plus.
PPPS : Si besoin est, je peux expliquer certaines étapes du calcul formel ci-dessus.

Posté par
Benwat
re : Courbe en connaissant les extremitées et la somme 15-05-12 à 17:02

Bon... je suis en train de faire les calculs est... il se passe un truc que je ne m'explique pas trop.  

Posté par
Benwat
re : Courbe en connaissant les extremitées et la somme 15-05-12 à 17:53

Bon... ben, j'ai une erreur minimum de 1,957% en prenant S = 29401 dans mes calculs.

Ce n'est pas du tout logique, mais bon...

Voici donc mes résultat (arrondis) :
f(n) = a ln(bn+c) avec :
a = -541,355
b = -0,00111
c = 0,0863

Alors (après arrondis) :
f(1) = 1333,288
f(32) = 1613,375
La somme des f(n) de 1 à 32 vaut 46774,300

La courbe ressemble à ça (ce qui n'est pas logique parce qu'elle est sensé être au dessus de la courbe linéaire joignant le point 1 et 32, ou alors vous avez comis une erreur dans vos calculs...)

Courbe en connaissant les extremitées et la somme

Voilà, c'est assez pe satisfaisant en fin de compte, mais bon...

Posté par
Benwat
re : Courbe en connaissant les extremitées et la somme 16-05-12 à 13:17

Je viens de remarquer que vos valeurs ne sont pas les mêmes dans le premier et second message.

Qu'est-ce qu'on demande exactement ?  ^^

Posté par
josse34
re : Courbe en connaissant les extremitées et la somme 16-05-12 à 14:05

Bonjour.
En effet, peu importe les données d'entrées, la formule doit etre la meme.
Dans l'exemple joint, j'explique que je dois utiliser les 3 parametres:
Point 1
Point 30
Somme des cases

J'ai 30 cases à remplir et donc 28 valeurs à déduire en respectivement impérativement (aucune erreur admise) la somme indiquée.

Il s'agit de lisser les prévisionnels mensuels fournis par les PVSYST mais du 21 au 21 de chaque mois.
Merci

Courbe en connaissant les extremitées et la somme

Posté par
Benwat
re : Courbe en connaissant les extremitées et la somme 16-05-12 à 15:19

Bon, je vais revoir un peu mes formules, mais elles sont supposées être juste.
Sinon, il doit y avoir moyen de pondérer la courbe logarithmique et la courbe linéaire afain d'obtenir la somme exacte.

Je me posais une question... ne serait-il pas plus interessant d'essayer de lisser les prévisions sur l'année entière ? Parce qu'en fait, si (par exemple) on accole les courbes 21/01-02 et 21/02-03 on va avoir, au jour du 21 février, une "pointe", ie la courbe ne sera pas lisse. Elle sera continue, mais pas lisse...

Posté par
josse34
re : Courbe en connaissant les extremitées et la somme 16-05-12 à 16:28

Bonjour, merci pour ton travail je m'attendais pas a une telle réactivité. J'au le droit à zéro écart. Voici un dessin qui explique plus clairement le problème. Je peux aussi l'envoyer par mail.

Aujourd'hui je me suis penché sur les moindres carré sans succès actuellement.

Courbe en connaissant les extremitées et la somme

Posté par
Benwat
re : Courbe en connaissant les extremitées et la somme 16-05-12 à 17:06

Le problème des moindres carrées c'est que ça ne fait qu'approximer...

Si vraiment on veut une fonction f qui à 1 associe une certaine valeur connue, à n ( = 30, 31 ou 32) associe une autre certaine valeur connu et dont la somme des images des entiers de 1 à n est un troisième valeur connu, on peut pas se permettre d'approcher.

Posté par
Benwat
re : Courbe en connaissant les extremitées et la somme 16-05-12 à 17:55

Bon, j'ai une méthode qui, a priori, devrait marcher. Mais c'est un peu compliqué et surtout vraiment... artificiel. Disons bricolé...

Donc... on part avec les données suivante :
Valeur au point 1 : P_1.
Valeur au point n : P_n.
Sommes des points entre 1 et n : S.

Voici les calculs à effectuer :

K = \dfrac{P_n - P_1}{P_1 - nP_n + n - 1}
 \\ 
 \\ c = \Bigg( \dfrac{(nK+1)^{P_1}}{(K+1)^{P_n}} \Bigg) ^{\frac{1}{P_n - P_1}}
 \\ 
 \\ b = cK
 \\ 
 \\ a = \dfrac{P_1}{\ln (b+c)}$
 \\ 
 \\ m = \dfrac{P_n - P_1}{n-1}
 \\ 
 \\ p = m - P_1
 \\ 
 \\ S_{lin} = \sum_{i=1}^n \bigg(mi+p\bigg)
 \\ 
 \\ S_{log} = \sum_{i=1}^n \bigg(a\ln(bi+c)\bigg)
 \\ 
 \\ t = \dfrac{S - S_{log}}{S_{lin} - S_{log}}

Alors la fonction que l'on désire est :
f(x) = (1-t)\,a\ln(bx+p) + tmx + tp

Posté par
Benwat
re : Courbe en connaissant les extremitées et la somme 16-05-12 à 17:57

En tout cas la méthode marche pour n = 32   P1 = 1333.33   Pn = 1612.9   S = 45877.87.

Ce serait bien que vous me donniez d'autre jeu de valeur que je puisse vérifier.  

Posté par
josse34
re : Courbe en connaissant les extremitées et la somme 23-05-12 à 11:28

Bonjour,
je suis actuellement en train d'essayer vos calculs mais je bloque sur la forme de la formule somme
Que dois-je rentrer pour somme log et somme lin?
=SOMME ?

Posté par
Benwat
re : Courbe en connaissant les extremitées et la somme 23-05-12 à 21:30

Non, leur valeur est donné juste au dessus.
Le mieux est d'utiliser pour les calculer une boucle for.
Un truc du style :

Slin=0
for i from 1 to n
    Slin = Slin + m*i+p

Slog=0
for i from 1 to n
    Slog = Slog + a*ln(b*i+c)

Au fait... juste une petite erreur dans la formule final :
f(x) = (1-t)\,a\ln(bx+c) + tmx + tp

Posté par
josse34
re : Courbe en connaissant les extremitées et la somme 24-05-12 à 15:25

J'ai du mal à voir comment tu programme une boucle for dans excel :s

Posté par
Benwat
re : Courbe en connaissant les extremitées et la somme 24-05-12 à 17:51

Ha oui, bah dans ce cas, le mieux c'est dévaluer les n valeurs de mi+p et d'en faire la somme ensuite.

Posté par
josse34
re : Courbe en connaissant les extremitées et la somme 30-05-12 à 11:47

tu aurais une adresse mail que je t'envois le fichier excel sur lequel je travail?

Posté par
Benwat
re : Courbe en connaissant les extremitées et la somme 30-05-12 à 15:36

Oui : space.reiser@wanadoo.fr



Vous devez être membre accéder à ce service...

Pas encore inscrit ?

1 compte par personne, multi-compte interdit !

Ou identifiez-vous :


Rester sur la page

Désolé, votre version d'Internet Explorer est plus que périmée ! Merci de le mettre à jour ou de télécharger Firefox ou Google Chrome pour utiliser le site. Votre ordinateur vous remerciera !