Lambert W

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

Répondre
Avatar de l’utilisateur
gege
Fonctionne à 14400 bauds
Fonctionne à 14400 bauds
Messages : 6975
Inscription : 31 janv. 2008 15:24
Localisation : Banlieue Paârisienne
Contact :

Lambert W

Message par gege » 10 oct. 2019 01:06

Bonjour,
Non il ne s'agit pas d'un acteur mais de la fonction W de Lambert, qui tente de la calculer ?
A bientôt pour quelques méthodes !
G.E.

Edit : alors la fonction W est définie par :
y*e^y = x => y = W(x)
La première idée est d'utiliser Solve ou tout équivalent sur votre machine, mais cette méthode ne sera pas simple sur nos voeux Basic ou LMS...

Avatar de l’utilisateur
dprtl
Fonctionne à 1200 bauds
Fonctionne à 1200 bauds
Messages : 440
Inscription : 27 janv. 2013 01:26
Localisation : Strasbourg
Contact :

Re: Lambert W

Message par dprtl » 10 oct. 2019 21:43

Je me suis toujours demandé à qui pourrait bien être utiles ces fonctions intégrées dans le firmware de la WP-34S ? Extraits du manuel :

Image

Image

Nikass
Fonctionne à 1200 bauds
Fonctionne à 1200 bauds
Messages : 941
Inscription : 12 nov. 2015 23:00
Localisation : trouducul du 31 et 34 aux lunes bleues

Re: Lambert W

Message par Nikass » 10 oct. 2019 22:26

Ouh... c'est pas un des modèles de la combinaison diode-résistance, ça ???

vous voulez calculer ça pour dépanner de la logique DTL/RTL... qui c'est qui a attrapé un 1401 et qui le dit pas, hein ? :lol: :lol: :lol: :lol: :lol:

a+

Avatar de l’utilisateur
gege
Fonctionne à 14400 bauds
Fonctionne à 14400 bauds
Messages : 6975
Inscription : 31 janv. 2008 15:24
Localisation : Banlieue Paârisienne
Contact :

Re: Lambert W

Message par gege » 11 oct. 2019 11:19

Bonjour,
En fait avec cette fonction on peut facilement calculer directement les solutions de tout un tas de types d'équations par exemple :
X^n.e^(a.X) = B
X + a.log(X) = B
X + a.e^X = B
qui demanderaient l'usage de "Solve" normalement.
Bon, on ne s'en sert pas constamment non plus… ;-)
G.E.

Avatar de l’utilisateur
C.Ret
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 2566
Inscription : 31 mai 2008 23:43
Localisation : N 49°22 E 6°10

Re: Lambert W

Message par C.Ret » 15 oct. 2019 17:09

gege a écrit :
10 oct. 2019 01:06
[…] la fonction W est définie par : y*e^y = x équivaut à y = W(x)
La première idée est d'utiliser Solve ou tout équivalent sur votre machine, mais cette méthode ne sera pas simple sur nos voeux Basic ou LMS...
Comme je n'ai pas trouvé de fonction SOLVE sur mon SHARP PC-1211, j'utilise une boucle de recherche. Newton et sa méthode fonctionne bien. Je me limite aux valeurs réelles. Les réponses complexes seront envisagées avec une HP-15C

X abscisse [-1/e +oo [ , la fonction de Lambert n'étant pas définie en dessous de -1/e
Y et Z les valeurs pour W(x); la fonction est divalente pour tous les x négatifs fournit deux valeurs Y=W(x) et Z=W(x)
P précision de la détermination; la recherche des résultats se faisant par itérations, soyez modeste et patient.
U,L,E,V et W variables intermédiaires pour le calcul des approximations initiales puis pour l'affinage par la méthode de Newton


La plus grande difficulté a été que les touches W et P ne sont pas disponibles en mode DEF.
J'ai donc choisi DEF-S (en dessous de W) pour saisir l'abscisse et DEF-= (en dessous de P) pour préciser la précision.

Code : Tout sélectionner

1 "S" INPUT "W(X) X=";X : IF -X>EXP -1 PRINT X,"NO VALUE":GOTO 1
2 Y=0 , Z=0 : IF X<>0 LET L= LN ABS X , U=-L-1 , Z=-1-√ABS 2U-U , Y=.56714329 : IF L>0 LET Y=L-LN L+LN L/2L
3 "=" IF X<>0 INPUT "PRES.  ";P : W=Y : GOSUB 8 : Y=W , W=Z : IF X<0 GOSUB 8 : Z=W : PRINT Y,Z:GOTO 3
4 PRINT "W(";X;")=";Y : GOTO 3
8 V=W : IF W<>-1 LET E=EXP W , W=W-(WE-X)/(E+WE) : IF ABS (V-W)>P GOTO 8
9 RETURN
Alternativement pour un affichage plus clair remplacer la dernière ligne par:     9 W=P*INT (W/P):RETURN
En appuyant sur ENTER, la précision est redemandée afin d'avoir éventuellement plus de décimales.
Contrairement à ce qui ce passe lorsqu'une nouvelle valeur de X est saisie, les valeurs initiales de Y et Z ne sont pas réestimées.
En ne changeant que la précision les valeurs Y et Z sont réutilisées, ce qui facilite la convergence.

Quelques exemples de valeurs (à 1E-5 près)

Code : Tout sélectionner

          W(5) = 1.32672                      W(.25) = 0.20388
W(2.718281828) = 1.                             W(0) = 0.
          W(2) = 0.8526                      W(-.25) = -2.1533  et -0.35741
          W(1) = 0.56714                    W(-.367) = -1.0708  et -0.9324  
         W(.5) = 0.35173                      W(-.5)   No value
       W(0.367)= 0.27794                     W(-1/∏) = -1.63853 et -0.55383
Voilà qui est bien pratique même sur nos chers et désirés matériels vingt-ages.
Dernière édition par C.Ret le 25 déc. 2020 20:27, édité 4 fois.
SHARP PC-1211+CE-121+CE-122 | Commodore 128D+Printer P-803+SD2iec | TI-57 LCD | HP-28S+HP82240A | TI-74 BASICalc | HP-41C+2mem+stat+IR | HP-15C | SHARP PC-1360+64Ko+CE-126 | HP Prime | TI-92 II | CASIO fx-602p+FA-1 | HP-71B 64K+JPC-ROM+HPIL+card reader | Sommaire des M.P.O. | Ma...dov'il sapone !.

"All science is either physics or stamp collecting. That which is not measurable is not science." - E. R.

Avatar de l’utilisateur
Ythunder
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 4207
Inscription : 09 août 2008 17:46
Localisation : 03

Re: Lambert W

Message par Ythunder » 15 oct. 2019 17:41

Perso, je comprenais plus avec Lambert Wilson...
On cherche a vendre la voiture neuve de mon père décédé en janvier, une KONA Hyundai diesel à boite automatique, sans doute - de 10000 kms. Superbe état. On cherche à payer le LOA en cours, donc si qq est intéressé me faire signe. Vuus pouvez acheter les yeux fermé, 0 défauts.

Je suis CHARLIE
Tell me boy, do you have a room, in your heart, for the Computer boom...

Avatar de l’utilisateur
gege
Fonctionne à 14400 bauds
Fonctionne à 14400 bauds
Messages : 6975
Inscription : 31 janv. 2008 15:24
Localisation : Banlieue Paârisienne
Contact :

Re: Lambert W

Message par gege » 16 oct. 2019 08:40

Bonjour,
Bravo, avec le programme Basic que voici on obtient par exemple W(5)=1.32672466524.

10 INPUT A:Y=LOG(A)/(.6978+.02084*LOG(A))
20 IF 10000<A THEN Y=Y-5
30 IF 10000>=A THEN Y=Y-log(A)
40 B=EXP(Y):X=Y*B:Z=(X-A)/(X+B):Y=Y-Z
50 IF ABS(Z)<1E-8 THEN 40
60 PRINT Y

il ne fait que la branche principale.
C'est un Newton, qui fait 5 ou 6 boucles en général.
D'autres algorithmes sont plus rapides...
A affiner
G.E

Avatar de l’utilisateur
gege
Fonctionne à 14400 bauds
Fonctionne à 14400 bauds
Messages : 6975
Inscription : 31 janv. 2008 15:24
Localisation : Banlieue Paârisienne
Contact :

Re: Lambert W

Message par gege » 16 oct. 2019 08:50

Bonjour,
Hop un "Halley d'ordre 3" (moi non plus je ne sais pas ce que c'est) recopié du HP Museum et traduit du RPN :

10 INPUT A:X=LN(1+A):IF X>0 THEN X=X-LN(X)
20 FOR K=1 TO 5:Y=X:B=1+1/(1+X)
30 B=(X+1)/(X-A/EXP(X))-B/2:X=X-1/B
40 IF X=Y THEN K=6
50 NEXT K:PRINT Y

Pareil branche principale seulement, il fait 4 ou 5 boucles en général.
Qu'est-ce qu'on s'amuse !!
G.E.

Avatar de l’utilisateur
C.Ret
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 2566
Inscription : 31 mai 2008 23:43
Localisation : N 49°22 E 6°10

Re: Lambert W

Message par C.Ret » 16 oct. 2019 18:54

J'ai modifié un peu mon code pour compter le nombre de fois que la boucle se fait dans le sous-programme de la ligne 8.

Toujours pour une précision de 1.E-5, le nombre de tours varie entre 2 et 12 selon la valeur principale ou négative. Le nombre d'itération est d'autant plus important que l'on se rapproche de la valeur critique -1.

Je ne comprends pas pourquoi les programmes présentés par gégé ne fonctionnent que pour la branche principale. La courbe est très régulière, il suffit de nourrir la méthode de Newton (ou la méthode de Halley) avec une valeur initiale appropriée.
L'affinement du calcul se fait alors en quelques (4 ou 6) itérations. Il suffit juste de bien placer la première approximation sur la branche principale ou sur la branche négative (cf. courbe donnée par notre ami dprl).
W Lambert (branches réelles).gif
W Lambert (branches réelles).gif (19.41 Kio) Consulté 7158 fois
C'est ce que fait mon code à la ligne 2:
Y est la racine approchée se trouvant sur la branche principale estimée en fonction du X donné.
Z est la racine approchée se trouvant sur la branche négative estimée en fonction du logarithme népérien du X donné.
Ces deux valeurs servent d'estimations initiales (GOSUB 8) à la méthode de Newton. Evidemment, la recherche de la valeur sur la branche négative n'est déclenchée que sir le X donné est négatif (et supérieur à -1/e).

Pour approcher les estimations initiales, j'utilise les encadrements suivants:
Lambert W function bounds.gif
Lambert W function bounds.gif (10.39 Kio) Consulté 7165 fois

Par conception, Z est calculé quelque soit le signe de X car son estimation fait intervenir des variables intermédiaires servant conjointement à l'estimation de Y. Mais la valeur Z ainsi calculée pour les X positif n'a pas de sens (et ne peut servir pour la suite si X>0).
Insidieusement, l'estimation de Y ne peut être faite (division par zéro) lorsque X=1. Dans ce cas, Y est directement initialisé avec le GRAND OMEGA

Et YThunder va regretter que je n'ai pas utilisé le GRAND MEGATRON, mais avec les frais de représentation que me demande Lambert Wilson et ce très cher Newton, je n'ai plus les moyens d'inviter les Transformers.
SHARP PC-1211+CE-121+CE-122 | Commodore 128D+Printer P-803+SD2iec | TI-57 LCD | HP-28S+HP82240A | TI-74 BASICalc | HP-41C+2mem+stat+IR | HP-15C | SHARP PC-1360+64Ko+CE-126 | HP Prime | TI-92 II | CASIO fx-602p+FA-1 | HP-71B 64K+JPC-ROM+HPIL+card reader | Sommaire des M.P.O. | Ma...dov'il sapone !.

"All science is either physics or stamp collecting. That which is not measurable is not science." - E. R.

Avatar de l’utilisateur
Ythunder
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 4207
Inscription : 09 août 2008 17:46
Localisation : 03

Re: Lambert W

Message par Ythunder » 16 oct. 2019 22:56

Ah ! Les Transformers, ça je comprends aussi !!
Merci de m'égayer sur ce post, sérieux ça me fait super plaisir !!!!!!!!
:lol: :lol: :lol: :lol:
On cherche a vendre la voiture neuve de mon père décédé en janvier, une KONA Hyundai diesel à boite automatique, sans doute - de 10000 kms. Superbe état. On cherche à payer le LOA en cours, donc si qq est intéressé me faire signe. Vuus pouvez acheter les yeux fermé, 0 défauts.

Je suis CHARLIE
Tell me boy, do you have a room, in your heart, for the Computer boom...

Avatar de l’utilisateur
C.Ret
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 2566
Inscription : 31 mai 2008 23:43
Localisation : N 49°22 E 6°10

Re: Lambert W

Message par C.Ret » 20 oct. 2019 15:08

C.Ret a écrit :
15 oct. 2019 17:09
[…]Les réponses complexes seront envisagées avec une HP-15C
Chose promise, chose due !

Voici donc une version de code pour HP-15C qui tire partie de ses capacités à effectuer les calculs avec des nombres complexes.
HP15C - lambert W (real and complex).gif
HP15C - lambert W (real and complex).gif (43.36 Kio) Consulté 7057 fois

Ce code contient trois parties dont les deux premières permettent le calcul des valeurs réelles de la fonction W de Lambert se trouvant respectivement sur la branche principale (label A) et la branche négative (label B).
Le troisième programme (label C) permet le calcul des valeurs complexes de la fonction de Lambert : w=W(z) <=> z=w.e^w avec w = u +i.v et z=a+ i.b tous deux complexes

Pour déterminer la valeur réelle sur la branche principale de W, saisir le réel x et presser f-A.
Pour déterminer la valeur réelle sur la branche négative de W, saisir le réel x et presser f-B.
Pour déterminer la valeur complexe de la fonction W au point z, saisir le nombre complexe z et presser f-C.

Pour enter un nombre complexe z=a+i.b, procéder comme indiqué dans le manuel, saisir a, presser (ENTER), saisir b et presser f - I

L'HP-15C mouline pendant quelques dizaines de secondes puis affiche le résultat.
Guetter l'indicateur 'c' de l'affichage qui indique une valeur complexe. La partie réelle du résultat complexe est affichée, pour afficher la partie imaginaire presser f - (i) et maintenir la touche (i) enfoncée pour lire la partie imaginaire. Alternativement, utiliser f - re:im pour échanger partie réelle et complexe du registre x:

La justesse du résultat affiché peut être vérifiée en pressant (ENTER) (e^x) ( x ), la valeur ainsi calculée doit être identique à la donnée initiale.

" ERROR 0 " indique généralement une erreur de calcul due au fait que l'argument initiale n'existe pas sur la branche sélectionnée.
" ERROR 3 " indique que l'on a cherché à afficher la partie imaginaire d'un résultat réel.
" '-----.---' " un affichage clignotant indique un dépassement de capacité, la valeur demandée ne peut être déterminée.
" running " tout ce passe bien, le résultat est un cours de calcul, lors de l'itération les résultats approchés successifs s'affichent ponctuellement pour faire patienter.

Le code utilise trois registres et le mode complexe (activation/désactivation du drapeau 8 )
R0 : partie réelle de la donnée initiale
R1 : partie imaginaire de la donnée initiale
R I : compteur d'itération (initialisé à 9 à la ligne 041-)
Les trois sous-programmes sont :
Lbl 0 : calcul du résultat par itérations successives (la fonction (SOLVE) n'étant d'aucun intérêt lors de calculs avec les complexes)
Lbl 1 : calcul de l'approximation intiale et initialisation du compteur d'itération I
Lbl 2: sous-programme pour sous traction de la partie imaginaire (si flag 8 armé)
SHARP PC-1211+CE-121+CE-122 | Commodore 128D+Printer P-803+SD2iec | TI-57 LCD | HP-28S+HP82240A | TI-74 BASICalc | HP-41C+2mem+stat+IR | HP-15C | SHARP PC-1360+64Ko+CE-126 | HP Prime | TI-92 II | CASIO fx-602p+FA-1 | HP-71B 64K+JPC-ROM+HPIL+card reader | Sommaire des M.P.O. | Ma...dov'il sapone !.

"All science is either physics or stamp collecting. That which is not measurable is not science." - E. R.

Avatar de l’utilisateur
gege
Fonctionne à 14400 bauds
Fonctionne à 14400 bauds
Messages : 6975
Inscription : 31 janv. 2008 15:24
Localisation : Banlieue Paârisienne
Contact :

Re: Lambert W

Message par gege » 20 oct. 2019 23:17

Bonjour,
Curieux ton programme est incroyablement court et je ne vois pas où sont effectués les calculs ??
Je sors la LE...
G.E.

Avatar de l’utilisateur
ledudu
Fonctionne à 14400 bauds
Fonctionne à 14400 bauds
Messages : 5242
Inscription : 26 mars 2009 14:07
Localisation : Ile de France
Contact :

Re: Lambert W

Message par ledudu » 21 oct. 2019 01:12

Salut,
gege a écrit :
20 oct. 2019 23:17
ton programme est incroyablement court
Oui gégé, cela s'appelle la programmation synthétique. :mrgreen: :mrgreen: :mrgreen:

Avatar de l’utilisateur
gege
Fonctionne à 14400 bauds
Fonctionne à 14400 bauds
Messages : 6975
Inscription : 31 janv. 2008 15:24
Localisation : Banlieue Paârisienne
Contact :

Re: Lambert W

Message par gege » 21 oct. 2019 09:04

Bonjour,
Ah ok le programme court c'est synthétique ?
Tu es sûr qu'on parle caltos là ?
:-)
G.E.

Avatar de l’utilisateur
bernouilli92
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 4058
Inscription : 21 nov. 2012 14:03
Localisation : Ile de France

Re: Lambert W

Message par bernouilli92 » 21 oct. 2019 11:56

Il y a un une boucle entre les pas 12 et 31 avec des calculs utilisant notamment l'exponentielle.
HP, Casio, Sharp, Psion, quelques TI et divers autres

Répondre

Revenir vers « Tous les Pockets »