Misez p'tit Optimisez n°82 : maximisez produit des termes

Ici, on fait dans le petit, le LCD qui déchire sa race, on y cause même calculatrices quand on est en manque !

Modérateur : Politburo

Avatar du membre
zpalm
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 2919
Enregistré le : 03 mai 2008 15:33
Localisation : Grenoble

Re: Misez p'tit Optimisez n°82 : maximisez produit des termes

Message par zpalm »

Je crois que le problème vient du calcul du nombre optimal de termes en fonction de la précision demandée. Par ex. mon programme utilise 20 termes pour la décomposition de 54 en termes entiers ce qui n'est pas optimal et doit être corrigé.

PS: j'ai compris (grâce au CAS de la Prime) comment tu calcules le nombre de termes. C'est très efficace et globalement ton programme est plus optimisé que le mien. Mais il faut revoir le calcul en fonction de la précision.
Avatar du membre
C.Ret
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 3405
Enregistré le : 31 mai 2008 23:43
Localisation : N 49°22 E 6°10

Re: Misez p'tit Optimisez n°82 : maximisez produit des termes

Message par C.Ret »

Oui, c'est bien cela, j'utilise FLOOR ce qui ne va pas, par exemple avec 54, je loupe l'optimum à 20 termes en me limitant à 19 !

En même temps, je viens de découvrir que le nombre de terme optimal dépend également de la précision (nombre de décimales des termes).

En effet pour 54 et des termes entiers le maximum est obtenu avec 18 termes seulement.

D'où une version corrigé du code :
mpo84hpprime2.png
mpo84hpprime2.png (23.5 Kio) Vu 4300 fois
EDIT: Qui ne semble pas convenir non-plus, par exemple pour 42 et des termes à une décimale !!! :evil:
Mais fonctionne pour le même nombre 42 avec des termes entiers ou à partir de 2 décimales !!!! :twisted:

Code : Tout sélectionner

MPO(42,0)  --->   42 { 3 3 3 3 3 3 3 3 3 3 3 3 3 3 }  (k=14)   4782969.
MPO(42,1)  --->   42 { 2.6 2.6 2.6 2.6 2.6 2.6 2.6 2.6 2.6 2.6 2.6 2.6 2.7 2.7 2.7 2.7 } 5071486.01572 ?????
MPO(42,2) ---->   42 { 2.7 2.7 2.7 2.7 2.7 2.7 2.7 2.7 2.7 2.7 2.7 2.7 2.7 2.7 2.7 }     5097655.35524  ok   
...
Espérons que la nuit porte conseil


EDIT :
Le sommeil a porté ses fruits:
mpo84hpprime3.png
mpo84hpprime3.png (14.58 Kio) Vu 4300 fois
Avec cette dernière version, je retrouve bien toutes les solutions que nous avons évoquées jusqu'ici.

Il me faut maintenant corriger le codes que j'avais préparé sur mes autres amies.
Modifié en dernier par C.Ret le 25 mars 2021 17:54, modifié 1 fois.
SHARP PC-1211 PC-1360 EL-5150 PC-E500 | Commodore C=128D | Texas Instruments Ti-57LCD Ti-74BASICalc Ti-92II Ti-58c Ti-95PROCalc Ti-30XPROMathPrint | Hewlett-Packard HP-28S HP-41C HP-15C HP-Prime HP-71B | CASIO fx-602p | NUMWORKS | Graphoplex Rietz Neperlog | PockEmul | Sommaire des M.P.O. | Ma...dov'il sapone.
Avatar du membre
zpalm
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 2919
Enregistré le : 03 mai 2008 15:33
Localisation : Grenoble

Re: Misez p'tit Optimisez n°82 : maximisez produit des termes

Message par zpalm »

Excellent! (il y a juste quelques ajustements à faire pour N<=4)

As-tu remarqué les valeurs min et max des termes qui maximisent le produit ?
Avatar du membre
C.Ret
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 3405
Enregistré le : 31 mai 2008 23:43
Localisation : N 49°22 E 6°10

Re: Misez p'tit Optimisez n°82 : maximisez produit des termes

Message par C.Ret »

OUi, j'ai vu il y a surtout des termes commençant par 2.6 2.7 ou 2.8.
Ce qui m'a donné l'idée de trouver les produits maximum à partir d'algorithmes génétiques.
je mets de l'ordre dans mes fiches et fichiers et je vous donne un petit exemple bien illustré.

En attendant, j'ai avancé dans la correction des codes pour mes amies, dont voici un exemple typique pour une amie polonaise inversée, célèbre calculatrice keystroke's programmable:
mpo84hp15c.png
mpo84hp15c.png (51.6 Kio) Vu 4299 fois
UTILISATION :
Saisir le code ci-dessus
Entrez le nombre à décomposer, pressez ENTER, saisir le nombre de décimale des termes de la décomposition additive puis lancer à l'aide de f-A (ou directement A en mode USER).

Ce code n'utilise que le registre 0 (pour mémoriser la précision 1, .1 .01 .001 etc. ) et le drapeau 0
Tous les calculs se font à la suite les uns des autres et se terminent par l'affichage du produit maximal.

001-005 Label, initialisation et détection termes entiers demandés (arme drapeau 0 lorsque d==0).
006-008 Calcul de la précision des termes et mémorisation dans registre 0 pour utilisation ultérieure : E = 10^-d
012-022 Caclul du nombre total de termes K avec arrondi à l'entier le plus proche. K=INT(.5+N/EXP(1)) où EXP(1) est arrondi à 3 en cas de termes entiers
023-031 Calcul des termes: X = E * INT( N/K/E )
032-036 Calcul de l'écart et du nombre J de termes augmentés nécessaires : J = ( N - K*X ) / E
037-037 Calcul du nombre I de termes X : I = K - J
040-045 Calcul du produit P = X^I * (X+E)^J

Remarque:
Ce code ne mémorise pas et n'affiche pas la valeur des termes, le nombres de termes ou tout autre paramètre intermédiaire.
L'utilisateur pourra ajouter des PauSE ou des STO s'il veut afficher ou conserver une trace du calcul.
Modifié en dernier par C.Ret le 25 mars 2021 17:57, modifié 1 fois.
SHARP PC-1211 PC-1360 EL-5150 PC-E500 | Commodore C=128D | Texas Instruments Ti-57LCD Ti-74BASICalc Ti-92II Ti-58c Ti-95PROCalc Ti-30XPROMathPrint | Hewlett-Packard HP-28S HP-41C HP-15C HP-Prime HP-71B | CASIO fx-602p | NUMWORKS | Graphoplex Rietz Neperlog | PockEmul | Sommaire des M.P.O. | Ma...dov'il sapone.
Avatar du membre
gege
Fonctionne à 14400 bauds
Fonctionne à 14400 bauds
Messages : 7141
Enregistré le : 31 janv. 2008 14:24
Localisation : Banlieue Paârisienne
Contact :

Re: Misez p'tit Optimisez n°82 : maximisez produit des termes

Message par gege »

Bonjour,
Ca semble bien, il faut regarder si la théorie valide ce calcul.
En force brute j'ai d'autres idées :
- pour N décimales avec le nombre M, trouver les solutions entières pour M*10^N
- pour les solutions entières, ne tester que les diviseurs
Je creuse.
La force brute marche plutôt pas mal si on n'est pas pressé.
G.E.
Avatar du membre
C.Ret
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 3405
Enregistré le : 31 mai 2008 23:43
Localisation : N 49°22 E 6°10

Re: Misez p'tit Optimisez n°82 : maximisez produit des termes

Message par C.Ret »

Tout à fait, personne n'a encore fait la moindre démonstration.

et donc, je me contente, pour l'instant, de noter les résultats obtenus sur nos différentes amies.

Et effectivement, contrairement à notre habitude, et à mon grand étonnement, nous n'avons pas commencé par des algorithmes de recherche par force brute.

Pourtant, celle-ci fonctionne très bien. la récurrence aussi d'ailleurs.
Tout cela bien mieux que les algorithmes génétiques
Mais une approche théorique est également possible à condition de maitriser les subtilités de l'inégalité arithmético-géométrique et avoir quelque notion d'analyse fonctionelle.

Peu importe la méthodologie, toutes ces approches devraient conduire à des codes fort intéressant et pertinents !!

P.S.: Où sont les Casio et les TI ?
SHARP PC-1211 PC-1360 EL-5150 PC-E500 | Commodore C=128D | Texas Instruments Ti-57LCD Ti-74BASICalc Ti-92II Ti-58c Ti-95PROCalc Ti-30XPROMathPrint | Hewlett-Packard HP-28S HP-41C HP-15C HP-Prime HP-71B | CASIO fx-602p | NUMWORKS | Graphoplex Rietz Neperlog | PockEmul | Sommaire des M.P.O. | Ma...dov'il sapone.
Avatar du membre
badaze
Fonctionne à 14400 bauds
Fonctionne à 14400 bauds
Messages : 8385
Enregistré le : 12 févr. 2007 18:36
Localisation : Pas très loin de Lyon
Contact :

Re: Misez p'tit Optimisez n°82 : maximisez produit des termes

Message par badaze »

Je suis une quiche en mathématique mais moins en programmation :mrgreen: .
Comme je suis une grosse feignasse j'ai fait un programme en PHP (trop la flemme de sortir un pocket et puis c'est trop long à entrer). Le programme utilise la "force brute" mais avec quelques grammes de douceur tout de même. Le maximum trouvé dépend de la précision de la machine je pense.

Voici ce que j'obtiens.

Code : Tout sélectionner

11 et 1 itérations => 2.75^4                       = 57.19140625
11 et 2 itérations => 2.75^4                       = 57.19140625
11 et 3 itérations => 2.7160493827161^4.05         = 57.206783631126
11 et 4 itérations => 2.7180627625402^4.047        = 57.206861057094
11 et 5 itérations => 2.7182642647095^4.0467       = 57.206861804118
11 et 6 itérations => 2.7182844165697^4.04667      = 57.206861808846
11 et 7 itérations => 2.7182817296377^4.046674     = 57.206861808951 <= max trouvé
11 et 8 itérations => 2.7182818639842^4.0466738    = 57.206861808951
11 et 9 itérations => 2.7182818438322^4.04667383   = 57.206861808951
11 et 10 itérations => 2.7182818404736^4.046673835 = 57.206861808951

17 et 1 itérations => 2.8333333333333^6            = 517.35187328532
17 et 2 itérations => 2.6984126984127^6.3          = 519.97533468375
17 et 3 itérations => 2.72^6.25                    = 520.06263275313
17 et 4 itérations => 2.7182603133994^6.254        = 520.06328168468
17 et 5 itérations => 2.7182603133994^6.254        = 520.06328168468
17 et 6 itérations => 2.7182820457471^6.25395      = 520.06328178654
17 et 7 itérations => 2.7182820457471^6.25395      = 520.06328178654
17 et 8 itérations => 2.7182818284219^6.2539505    = 520.06328178655 <= max trouvé
17 et 9 itérations => 2.7182818240754^6.25395051   = 520.06328178655
17 et 10 itérations => 2.7182818279872^6.253950501 = 520.06328178655

54 et 1 itérations => 2.7^20                       = 423911582.75216
54 et 2 itérations => 2.713567839196^19.9          = 424091531.12494
54 et 3 itérations => 2.7176648213387^19.87        = 424104019.15795
54 et 4 itérations => 2.7183488547697^19.865       = 424104233.71568
54 et 5 itérations => 2.7182804359316^19.8655      = 424104236.27567
54 et 6 itérations => 2.7182818042746^19.86549     = 424104236.27678 <= max trouvé
54 et 7 itérations => 2.7182818042746^19.86549     = 424104236.27678
54 et 8 itérations => 2.7182818179581^19.8654899   = 424104236.27678
54 et 9 itérations => 2.7182818289048^19.86548982  = 424104236.27678
54 et 10 itérations => 2.7182818289048^19.86548982 = 424104236.27678
Tout est bon dans le pocket.
Moi j'aime tout.... Casio, HP, Sharp, TI et les autres sauf que les TI semblent ne pas m'aimer :(
http://www.emmella.fr
Mes Casio - HP - Sharp - TI
Homme invisible.
Avatar du membre
badaze
Fonctionne à 14400 bauds
Fonctionne à 14400 bauds
Messages : 8385
Enregistré le : 12 févr. 2007 18:36
Localisation : Pas très loin de Lyon
Contact :

Re: Misez p'tit Optimisez n°82 : maximisez produit des termes

Message par badaze »

Bon je crois que le petit cheval est mort.

Code : Tout sélectionner

print exp((11/exp(1)))."<br/>";
print exp((17/exp(1)))."<br/>";
print exp((54/exp(1)))."<br/>";
exp c'est e exposant x sur les calculatrices.

Code : Tout sélectionner

11 -> 57.206861808951
17 -> 520.06328178655
54 -> 424104236.27678
Tout est bon dans le pocket.
Moi j'aime tout.... Casio, HP, Sharp, TI et les autres sauf que les TI semblent ne pas m'aimer :(
http://www.emmella.fr
Mes Casio - HP - Sharp - TI
Homme invisible.
Avatar du membre
badaze
Fonctionne à 14400 bauds
Fonctionne à 14400 bauds
Messages : 8385
Enregistré le : 12 févr. 2007 18:36
Localisation : Pas très loin de Lyon
Contact :

Re: Misez p'tit Optimisez n°82 : maximisez produit des termes

Message par badaze »

Je me lance avec un programme sur HP 67

Code : Tout sélectionner

ENTER
1
ex
/
ex
R/S
Tout est bon dans le pocket.
Moi j'aime tout.... Casio, HP, Sharp, TI et les autres sauf que les TI semblent ne pas m'aimer :(
http://www.emmella.fr
Mes Casio - HP - Sharp - TI
Homme invisible.
Avatar du membre
C.Ret
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 3405
Enregistré le : 31 mai 2008 23:43
Localisation : N 49°22 E 6°10

Re: Misez p'tit Optimisez n°82 : maximisez produit des termes

Message par C.Ret »

badaze a écrit : 12 nov. 2017 21:29 Bon je crois que le petit cheval est mort.

Code : Tout sélectionner

11 -> 57.206861808951
17 -> 520.06328178655
54 -> 424104236.27678
Le petit cheval a dû resté trop longtemps sous la pluie froide de Novembre !


Apparemment, il s'agit des produits maximum obtenus pour respectivement 11, 17 et 54 en décomposant ces trois nombres en une somme de termes.

Je n'ai pas tout compris, j'ai donc quelques questions :

Q1: Quel est le nombre de terme de chacune de ces trois sommes (ou le nombre de facteurs constituant chaque produit) ?
Q2: S'agit-il de termes (facteurs) entiers ou décimaux ?
Q3: S'il s'agit de termes décimaux, quel est le nombre de décimales ?
Q4: Arrive-t-on à un produit maximal aussi élevé en se limitant à 4 décimales ?


Par exemple pour 7 et en utilisant des termes à 4 décimales, je n'ai pas trouvé mieux que la décomposition additive suivante :
7 = 2,3333 + 2,3333 + 2,3334
Ce qui donne le produit suivant :
2,3333 * 2,3333 * 2,3334 = 12,703703695926
Produit qui est bien loin de exp(7/exp(1)) ~= 13.133669...

Quelle sont les décompositions de 11, 17 et 54 qui conduisent à des produits atteignant respectivement 57.206861808951, 520.06328178655
et 424104236.27678 ?

Ah! Zut cela fait une question de plus :(
SHARP PC-1211 PC-1360 EL-5150 PC-E500 | Commodore C=128D | Texas Instruments Ti-57LCD Ti-74BASICalc Ti-92II Ti-58c Ti-95PROCalc Ti-30XPROMathPrint | Hewlett-Packard HP-28S HP-41C HP-15C HP-Prime HP-71B | CASIO fx-602p | NUMWORKS | Graphoplex Rietz Neperlog | PockEmul | Sommaire des M.P.O. | Ma...dov'il sapone.
Avatar du membre
badaze
Fonctionne à 14400 bauds
Fonctionne à 14400 bauds
Messages : 8385
Enregistré le : 12 févr. 2007 18:36
Localisation : Pas très loin de Lyon
Contact :

Re: Misez p'tit Optimisez n°82 : maximisez produit des termes

Message par badaze »

Le petit cheval a dû resté trop longtemps sous la pluie froide de Novembre !
Ben je l’ai écrit. Je suis nul en maths
Apparemment, il s'agit des produits maximum obtenus pour respectivement 11, 17 et 54 en décomposant ces trois nombres en une somme de termes.
Oui au départ, non ensuite. Quand j’ai fait le programme en php (cf mon premier message), je n’ai pas tout de suite remarqué que le résultat du terme avant la mise en puissance tendait vers e. Ensuite je me suis rendu compte que mon programme, qui donnait les mêmes résultats (que ceux que vous avez publiés) et qui fonctionnait avec une boucle, pouvait être remplacé par quelques pas de programmes (cf. mon troisième message)
Je n'ai pas tout compris, j'ai donc quelques questions :

Q1: Quel est le nombre de terme de chacune de ces trois sommes ?
Q2: S'agit-il de termes entiers ou décimaux ?
Q3: S'il s'agit de termes décimaux, quel est le nombre de leur décimale ?
Q4: Arrive-t-on à un produit maximal aussi élevé en se limitant à 4 décimales ?
Q1: je ne sais pas puisque ce n’est pas une somme.
Q2-Q3:C’est tout en décimal. Quant au nombre, je ne sais pas.
Q4: 4 décimales où ?
Tout est bon dans le pocket.
Moi j'aime tout.... Casio, HP, Sharp, TI et les autres sauf que les TI semblent ne pas m'aimer :(
http://www.emmella.fr
Mes Casio - HP - Sharp - TI
Homme invisible.
Avatar du membre
C.Ret
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 3405
Enregistré le : 31 mai 2008 23:43
Localisation : N 49°22 E 6°10

Re: Misez p'tit Optimisez n°82 : maximisez produit des termes

Message par C.Ret »

En fait, oui badaze, tu as bien deviné et attrapé le bon cheval.

Le maximum e^(N/e) est effectivement le maximum théorique que l'on peut atteindre en effectuant le produit des termes dont la somme fait effectivement N. Mais, c'est théorique car cette décomposition se fait à l'aide d'un nombre non nécessairement entier de termes.
Par contre tous les termes sont identiques et possèdent un nombre infini de décimales.

Ce qui fait qu'en se limitant à des décompositions ayant un nombre entier de termes on ne peut tendre, sans jamais l'atteindre ce maximum théorique.
D'autant plus que l'on dispose pas de terme à précision infinie et que l'on se limite volontairement à un nombre de décimale très limitées !

Surtout par rapport à e qui ne fait que commencer par 2,7182818... et qui possède une infinité de décimale dont aucune séquence ne se répète. C'est un nombre transcendant comme ∏ !

Par contre, effectivement, on se rend compte que nos maigres déterminations se rapprochent d'autant plus du produit maximal théorique qu'elles se font à l'aide d'un plus grand nombre de décimales !
La difficulté est donc de trouver la décomposition additive du nombre N qui se rapproche le plus (à la précision demandée) de la décomposition théorique transcendantale où tous les termes sont identiques.
Modifié en dernier par C.Ret le 13 nov. 2017 20:20, modifié 1 fois.
SHARP PC-1211 PC-1360 EL-5150 PC-E500 | Commodore C=128D | Texas Instruments Ti-57LCD Ti-74BASICalc Ti-92II Ti-58c Ti-95PROCalc Ti-30XPROMathPrint | Hewlett-Packard HP-28S HP-41C HP-15C HP-Prime HP-71B | CASIO fx-602p | NUMWORKS | Graphoplex Rietz Neperlog | PockEmul | Sommaire des M.P.O. | Ma...dov'il sapone.
Avatar du membre
badaze
Fonctionne à 14400 bauds
Fonctionne à 14400 bauds
Messages : 8385
Enregistré le : 12 févr. 2007 18:36
Localisation : Pas très loin de Lyon
Contact :

Re: Misez p'tit Optimisez n°82 : maximisez produit des termes

Message par badaze »

Moi c’est badaze.
Tout est bon dans le pocket.
Moi j'aime tout.... Casio, HP, Sharp, TI et les autres sauf que les TI semblent ne pas m'aimer :(
http://www.emmella.fr
Mes Casio - HP - Sharp - TI
Homme invisible.
Avatar du membre
C.Ret
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 3405
Enregistré le : 31 mai 2008 23:43
Localisation : N 49°22 E 6°10

Re: Misez p'tit Optimisez n°82 : maximisez produit des termes

Message par C.Ret »

Oups pardon !
Ca m'apprendra à ne pas me relire. Je ne sais même pas pourquoi je me suis trompé.

Il faut que j'arrête de boire...
SHARP PC-1211 PC-1360 EL-5150 PC-E500 | Commodore C=128D | Texas Instruments Ti-57LCD Ti-74BASICalc Ti-92II Ti-58c Ti-95PROCalc Ti-30XPROMathPrint | Hewlett-Packard HP-28S HP-41C HP-15C HP-Prime HP-71B | CASIO fx-602p | NUMWORKS | Graphoplex Rietz Neperlog | PockEmul | Sommaire des M.P.O. | Ma...dov'il sapone.
Avatar du membre
badaze
Fonctionne à 14400 bauds
Fonctionne à 14400 bauds
Messages : 8385
Enregistré le : 12 févr. 2007 18:36
Localisation : Pas très loin de Lyon
Contact :

Re: Misez p'tit Optimisez n°82 : maximisez produit des termes

Message par badaze »

Bien. La réponse n'est pas 42 mais apparemment 1.4447 (approximation) => e(1/e1)

1.4447 ^ 17 = 520.06333
1.4447 ^ 11 = 57.2069
1.4447 ^ 54 = 424 104 236.1

Comme ça on a toujours des termes identiques en nombre entier.

Calculs faits sur i41CX.

Oilà. Sauf erreur le terme max est toujours e(1/e1). Si c'est ça alors ça me troue !!!
Tout est bon dans le pocket.
Moi j'aime tout.... Casio, HP, Sharp, TI et les autres sauf que les TI semblent ne pas m'aimer :(
http://www.emmella.fr
Mes Casio - HP - Sharp - TI
Homme invisible.
Répondre

Retourner vers « Tous les Pockets »