Lambert W
Modérateur : Politburo
- gege
- Fonctionne à 14400 bauds

- Messages : 7180
- Inscription : 31 janv. 2008 15:24
- Localisation : Banlieue Paârisienne
- Contact :
Lambert W
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...
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...
- dprtl
- Fonctionne à 1200 bauds

- Messages : 438
- Inscription : 27 janv. 2013 01:26
- Localisation : Strasbourg
- Contact :
Re: Lambert W
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 :




-
Nikass
- Fonctionne à 2400 bauds

- Messages : 1453
- Inscription : 12 nov. 2015 23:00
- Localisation : trouducul du 31 et 34 aux lunes bleues
Re: Lambert W
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 ?
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 ?
a+
- gege
- Fonctionne à 14400 bauds

- Messages : 7180
- Inscription : 31 janv. 2008 15:24
- Localisation : Banlieue Paârisienne
- Contact :
Re: Lambert W
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.
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.
- C.Ret
- Fonctionne à 9600 bauds

- Messages : 2483
- Inscription : 31 mai 2008 23:43
- Localisation : N 49°22 E 6°10
Re: Lambert W
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
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
Dernière édition par C.Ret le 25 déc. 2020 20:27, édité 4 fois.
SHARP PC-1211 + CE-121 + CE-122. | VIC 20 Commodore 128D + Printer P-803 + SD2iec. | TI-57 LCD | HP-28S + HP82240A | TI-74 BasiCalc | HP-41C + (2 memory + stat + IR) | HP-15C | HP Prime Color Touchscreen Graphing Calculator| TI-92 II | CASIO fx-602p + FA-1 | HP-71B 64K+JPC-ROM+HPIL+card reader . Sommaire des M.P.O..
Re: Lambert W
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...
Je suis CHARLIE
Tell me boy, do you have a room, in your heart, for the Computer boom...
- gege
- Fonctionne à 14400 bauds

- Messages : 7180
- Inscription : 31 janv. 2008 15:24
- Localisation : Banlieue Paârisienne
- Contact :
Re: Lambert W
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
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
- gege
- Fonctionne à 14400 bauds

- Messages : 7180
- Inscription : 31 janv. 2008 15:24
- Localisation : Banlieue Paârisienne
- Contact :
Re: Lambert W
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.
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.
- C.Ret
- Fonctionne à 9600 bauds

- Messages : 2483
- Inscription : 31 mai 2008 23:43
- Localisation : N 49°22 E 6°10
Re: Lambert W
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). 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
à 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:
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.
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). 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
Pour approcher les estimations initiales, j'utilise les encadrements suivants:
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. | VIC 20 Commodore 128D + Printer P-803 + SD2iec. | TI-57 LCD | HP-28S + HP82240A | TI-74 BasiCalc | HP-41C + (2 memory + stat + IR) | HP-15C | HP Prime Color Touchscreen Graphing Calculator| TI-92 II | CASIO fx-602p + FA-1 | HP-71B 64K+JPC-ROM+HPIL+card reader . Sommaire des M.P.O..
Re: Lambert W
Ah ! Les Transformers, ça je comprends aussi !!
Merci de m'égayer sur ce post, sérieux ça me fait super plaisir !!!!!!!!

Merci de m'égayer sur ce post, sérieux ça me fait super plaisir !!!!!!!!
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...
Je suis CHARLIE
Tell me boy, do you have a room, in your heart, for the Computer boom...
- C.Ret
- Fonctionne à 9600 bauds

- Messages : 2483
- Inscription : 31 mai 2008 23:43
- Localisation : N 49°22 E 6°10
Re: Lambert W
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.
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. | VIC 20 Commodore 128D + Printer P-803 + SD2iec. | TI-57 LCD | HP-28S + HP82240A | TI-74 BasiCalc | HP-41C + (2 memory + stat + IR) | HP-15C | HP Prime Color Touchscreen Graphing Calculator| TI-92 II | CASIO fx-602p + FA-1 | HP-71B 64K+JPC-ROM+HPIL+card reader . Sommaire des M.P.O..
- gege
- Fonctionne à 14400 bauds

- Messages : 7180
- Inscription : 31 janv. 2008 15:24
- Localisation : Banlieue Paârisienne
- Contact :
Re: Lambert W
Bonjour,
Curieux ton programme est incroyablement court et je ne vois pas où sont effectués les calculs ??
Je sors la LE...
G.E.
Curieux ton programme est incroyablement court et je ne vois pas où sont effectués les calculs ??
Je sors la LE...
G.E.
- ledudu
- Fonctionne à 14400 bauds

- Messages : 5599
- Inscription : 26 mars 2009 14:07
- Localisation : Ile de France
- Contact :
Re: Lambert W
Salut,

Oui gégé, cela s'appelle la programmation synthétique.
- gege
- Fonctionne à 14400 bauds

- Messages : 7180
- Inscription : 31 janv. 2008 15:24
- Localisation : Banlieue Paârisienne
- Contact :
Re: Lambert W
Bonjour,
Ah ok le programme court c'est synthétique ?
Tu es sûr qu'on parle caltos là ?

G.E.
Ah ok le programme court c'est synthétique ?
Tu es sûr qu'on parle caltos là ?
G.E.
- bernouilli92
- Fonctionne à 14400 bauds

- Messages : 4847
- Inscription : 21 nov. 2012 14:03
- Localisation : Ile de France
Re: Lambert W
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



