algo recherche racine f(x) sur HP9100

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

OlidaBel
Fonctionne à 300 bauds
Fonctionne à 300 bauds
Messages : 106
Enregistré le : 04 avr. 2021 16:09
Localisation : 50.693165,4.573478

algo recherche racine f(x) sur HP9100

Message par OlidaBel »

Hello,
Curiosité "historique" et un algo dont je n'avais pas entendu parler.
J'étais tombé sur une video à propos du HP 9100, premier ordinateur/calculatrice de bureau chez HP, travaillant avec une pile à 3 registres.
On voit passer brièvement un énoncé de programme de recherche de racine f(x)=0, et son exécution.
Un peu de recherche, je vous file les détails.
https://youtu.be/8O-yftx41bc
Dans la vidéo ce programme est chargé par une carte magnétique.

En cherchant la référence du programme (PART NO. 09100-070014), on le documente ici (brochure HP, p.72) :
https://doc.lagout.org/science/0_Comput ... y_1969.pdf

J'ai repris +/- l'idée de l'algo décrit et adapté à ma sauce pour une HP-15C (pile XYZT, et des GTO avec label).
La fonction à évaluer est définie au LBL 0 (pas montrée).
On donne une valeur de X "quelconque", et un pas de recherche pour X, ensuite le programme avance jusqu'à ce que f(X) change de signe et alors il fait marche arrière sur l'axe des X et prend un pas plus petit (HP utilise delta/10), etc. Il converge, mais pas très vite :D

Valeur X de départ, ENTER
un R/S , pour inviter à rentrer la valeur de pas DeltaX
R/S
Une PSE montre les étapes, il s'arrête lorsque le f(X) est < epsilon (défini en R6)
Je suis paresseux, je n'ai pas nettoyé les lignes des programmes précédants celui-ci :? :lol:

Code : Tout sélectionner

   
   227 {    42 21 12 } f LBL B
   228 {       44  0 } STO 0
   229 {          31 } R/S
   230 {       44  1 } STO 1
   231 {          40 } +
   232 {       32  0 } GSB 0
   233 {       44  3 } STO 3
   234 {       45  0 } RCL 0
   235 {       32  0 } GSB 0
   236 {       44  2 } STO 2
   237 {    42 21  1 } f LBL 1
   238 {       45  2 } RCL 2
   239 {    45 20  3 } RCL × 3
   240 {    43 30  2 } g TEST x<0
   241 {    22 48  2 } GTO .2
   242 {    22 48  4 } GTO .4
   243 { 42 21 48  2 } f LBL .2
   244 {           1 } 1
   245 {           0 } 0
   246 {          16 } CHS
   247 {    44 10  1 } STO ÷ 1
   248 { 42 21 48  4 } f LBL .4
   249 {       45  3 } RCL 3
   250 {       44  2 } STO 2
   251 {       45  1 } RCL 1
   252 {    44 40  0 } STO + 0
   253 {       45  0 } RCL 0
   254 {       42 31 } f PSE
   255 {       32  0 } GSB 0
   256 {       44  3 } STO 3
   257 {       43 16 } g ABS
   258 {       45  6 } RCL 6
   259 {       43 10 } g x≤y
   260 {       22  1 } GTO 1
   261 {       45  0 } RCL 0
   262 {       43 32 } g RTN
Alors, pire ou pas que la méthode de bissection ? :?:
Qui aura envie de le réécrire avec le style de l'époque ?
Fichiers joints
274268367_278753254389552_2755103367044757720_n.jpg
274268367_278753254389552_2755103367044757720_n.jpg (8.14 Kio) Vu 3735 fois
Modifié en dernier par OlidaBel le 20 févr. 2022 22:41, modifié 1 fois.
Avatar du membre
Marge
Fonctionne à 14400 bauds
Fonctionne à 14400 bauds
Messages : 6172
Enregistré le : 01 oct. 2008 14:39
Localisation : En bas, tout au fond à gauche.

Re: algo recherche racine f(x) sur HP9100

Message par Marge »

Bonsoir,
Ce serait un bon sujet de MPO, pour grosse machine ou non ;)
3 hommes, 3 demis, un 3a... Magnéto, Serge !

Quelques-uns de mes petits programmes pour machines Hewlett-Packard :
15C : Knight's Tour ;
29C : (k-)Permutations, Combinations, Linear Regression and Pseudo-random number ;
34C : Hanoi Towers - Automatic & Manual resolutions ;
67
__: A L I E N .

« Boris », c'était juste Maurice enrhumé.
Avatar du membre
C.Ret
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 3404
Enregistré le : 31 mai 2008 23:43
Localisation : N 49°22 E 6°10

Re: algo recherche racine f(x) sur HP9100

Message par C.Ret »

Ah! Ah!

La simplicité de cet algorithme après avoir méticuleusement peaufiné un algorithme de Brent-Dekker sur son HP-15C ça doit être reposant !

Au fait Marge a raison c'est une bon exercice pour un MPO. Exercice que certains ont déjà commencé avec le
MPO n°89 et Olidabel vient d'y contribuer avec brio.

EDIT: Je viens de jeter un oeil sur le code du HP-9100. C'est de l'ancestral et du lourd ! Rien compris sauf que c'est bigrement compliqué.
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
Schraf
Fonctionne à 1200 bauds
Fonctionne à 1200 bauds
Messages : 499
Enregistré le : 05 mars 2020 20:45
Contact :

Re: algo recherche racine f(x) sur HP9100

Message par Schraf »

Bonjour,

J'ai tenté une version (3e révision) en APL sur IBM 5110 (1978) et... ça marche :P

ibm 5110
ibm 5110
apl.png (13.11 Kio) Vu 3541 fois

Code : Tout sélectionner

∇Y ← FNC X
Y ← (((*1) × (⍟○1) ÷ ⍟X) * X) - *○1∇	⍝ fonction proposée dans la vidéo

∇R←D RROF X
[1] →((1E¯4>|P),0<P←×/FNC(X←X+D),R←X)/0,1 	⍝ Sortie si < 10^-4 ou branchement vers 1 (même ligne)
[2] D←D÷¯10   					⍝ Sinon changement de direction
[3] →1∇

     .001 RROF 1.1
1.366
     .001 RROF 3
3.138
     .001 RROF 8
8.903
Modifié en dernier par Schraf le 23 févr. 2022 17:09, modifié 4 fois.
OlidaBel
Fonctionne à 300 bauds
Fonctionne à 300 bauds
Messages : 106
Enregistré le : 04 avr. 2021 16:09
Localisation : 50.693165,4.573478

Re: algo recherche racine f(x) sur HP9100

Message par OlidaBel »

Schraf a écrit : 21 févr. 2022 21:15 J'ai tenté une version en APL sur IBM 5110 (1978) et... ça marche :P

Code : Tout sélectionner

∇Y ← FNC X
Y ← (((*1) × (⍟○1) ÷ ⍟X) * X) - *○1∇	⍝ fonction proposée dans la vidéo

∇R←D RROF X
[1] P←×/L←FNC (X←X+D),X	⍝ Calcul de f(x+d), f(x) et du produit
[2] →6×⍳1E¯4>|P		⍝ si la valeur absolue du produit est < 1e-4 aller en 6
[3] →1×⍳P>0		⍝ Si produit > 0 alors aller en 1
[4] D←D÷¯10		⍝ Changement de direction
[5] →1
[6] R←X∇
Sur un ancêtre en plus...top.
Tu arrives encore à dormir après avoir écrit ce programme ? :)
Impressionnant, Eric. J'ai jeté un oeil sur une vidéo de vulgarisation sur l'APL en 1975, c'est quand même un peu... décalé. Alors que des languages plus lisibles existaient. La page wikipédia souligne bien cette originalité ;-)
bravo.
Avatar du membre
Schraf
Fonctionne à 1200 bauds
Fonctionne à 1200 bauds
Messages : 499
Enregistré le : 05 mars 2020 20:45
Contact :

Re: algo recherche racine f(x) sur HP9100

Message par Schraf »

@OlidaBel, je ne fais pas assez d'APL pour être à l'aise mais de temps en temps c'est amusant. J'ai d'ailleurs récupéré énormément de docs d'époque d'un vrai APListe, ça me permet d'entrevoir l'esprit de cette communauté assez hors norme. Quelques cadeaux de Michel :

Badges de séminaires et jeu de dés APL
Badges de séminaires et jeu de dés APL
apl.jpeg (50.43 Kio) Vu 3610 fois

Pour les personnes qui veulent tester "en vrai" le code, voici la procédure :
  • Clic droit n'importe où sur la page puis Inspecter et Console
  • Vous copiez-collez ce code :

Code : Tout sélectionner

joue("∇R←D RROF X⋄P←×/FNC (X←X+D),X⋄→((1E¯4>|P),P>0)/5,1⋄D←D÷¯10⋄→1⋄R←X∇")
  • Entrée et vous patientez jusqu'au ∇. Cliquez alors sur l'écran de l'ordinateur puis Entrée
  • Recommencez avec le code :

Code : Tout sélectionner

joue("∇Y←FNC X⋄Y←(((*1)×(⍟○1)÷⍟X)*X)-*○1∇")
  • Idem, validez par Entrée
  • Tapez : .001 RROF 1.1 puis Entrée et patientez...
OlidaBel
Fonctionne à 300 bauds
Fonctionne à 300 bauds
Messages : 106
Enregistré le : 04 avr. 2021 16:09
Localisation : 50.693165,4.573478

Re: algo recherche racine f(x) sur HP9100

Message par OlidaBel »

Un peu de RPL sans prise de tête, ça fait quelques mois sans programmer la 50G.
Il Beep à chaque changement de sens de delta :) , c'est plus vivant, on sent la progression :D :D

F : la fonction f(x)

Code : Tout sélectionner

 << -> X << π LN e * X LN / X ^ e π ^ -  >> >>
SOLVE9100 :
niveau 2: X
niveau 1 : delta
[ENTER]

Code : Tout sélectionner

<< -> x d
    << x F x d + F -> xF xdF
        <<1 CF
           WHILE xdF ABS 1E-9 >
           REPEAT
             IF xF xdF * 0 < THEN 1 SF END
             xdF 'xF' STO 
             x d + DUP 'x' STO 
             d + F 'xdF' STO
             IF 1 FS?C 
             THEN
               600 .01 BEEP
               'd' -10 STO/
             END
           END
           x d +
        >>
    >>
>>
2
.1
SOLVE9100
[ENTER]
1: 3.1415926538
Avatar du membre
C.Ret
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 3404
Enregistré le : 31 mai 2008 23:43
Localisation : N 49°22 E 6°10

Re: algo recherche racine f(x) sur HP9100

Message par C.Ret »

Pas mal le code RPL. Bien qu'un peu compliqué à mon goût...

Mais surtout, je vois une différence flagrante avec le déroulement sur le HP-9100 : sur ce dernier, apparaissent en temps réel et sur trois lignes superposées des nombres qui correspondent dans cet ordre à :
  • Image
  • Image
  • Image
Et ils défilent jusqu'à ce que les deux premières lignes affichent un zéro et la dernière donne la racine !

Voici un petit programme pour HP-28S (Version 2BB - les autres versions doivent utiliser une adresse SYSEVAL différente - si intéressé demandez-moi, je donnerai la liste des addresses en fonction des versions HP-28C )

Code : Tout sélectionner

« → Fct x d
  « x Fct EVAL x d
    DO → d
      « DO
          d + DUP Fct EVAL ROT OVER * SWAP ROT #25AFCh SYSEVAL
        UNTIL ROT 0 ≤ END
        d -.1 * »
    UNTIL DUP2 + 3 PICK == END
    3 ROLLD 1600 .1 BEEP » »
Usage : mettre dans la pile et dans l'ordre:
3: la fonction (soit son nom, soit une objet « ... » - celle-ci doit prendre son argument unique au sommet de la pile et le remplacer par f(x)),
2: la valeur initiale de x,
1: le Δx initial (avec éventuellement son signe pour indiquer le sens de la première marche).


Là, on voit comme sur une HP-9100 les trois niveaux de la pile qui défilent. Je vous fais une petite vidéo dès que possible.


Une fois la racine trouvée, la pile contient :
3: Dernier Δx utilisé (donne la précision du résultat
2: f(x₀) ≈ 0 valeur résiduelle à la racine x₀
1: x₀ la racine trouvée.


P.S.: Je déconseille vivement de faire un SST sur le SYSEVAL. Si vous voulez débugger ce code en l'exécutant pas à pas, quotter bien la séquence "#25AFCh SYSEVAL" - sinon vous aurez droit à la méchante surprise de l'appuis sur la touche SST qui appelle un SYSEVAL !
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.
OlidaBel
Fonctionne à 300 bauds
Fonctionne à 300 bauds
Messages : 106
Enregistré le : 04 avr. 2021 16:09
Localisation : 50.693165,4.573478

Re: algo recherche racine f(x) sur HP9100

Message par OlidaBel »

Ça marche, ça tourne très bien. Je n'ai cependant pas recopié ton SYSEVAL sur la 50g.
Ton code manque d'animations sonores pendant la recherche :D

Quant à la complication de mon code, oui c'est assumé, je le trouve un peu plus re-lisible après coup, mais un coup de balai logique était le bienvenu, oui. :geek:
Ton code est très bien, j'en apprends encore quelques ficelles côté compacité et optimisation.
Le RPL permet ce choix... relecture facile (parfois :D ) ou mpo-isation :)
Et l'essentiel, tu as reproduit le déroulement de la recherche comme sur le 9100, défi réussi ! :lol:

Il est pas mal cet algorithme.
Modifié en dernier par OlidaBel le 24 févr. 2022 13:48, modifié 2 fois.
Avatar du membre
Schraf
Fonctionne à 1200 bauds
Fonctionne à 1200 bauds
Messages : 499
Enregistré le : 05 mars 2020 20:45
Contact :

Re: algo recherche racine f(x) sur HP9100

Message par Schraf »

Pas bête d'ajouter un show audio-visuel pendant le déroulement, ça permet de patienter ! En APL il faut juste mettre ⎕←

Affichage de X et D
Affichage de X et D
suivi.jpg (22.48 Kio) Vu 3498 fois
OlidaBel
Fonctionne à 300 bauds
Fonctionne à 300 bauds
Messages : 106
Enregistré le : 04 avr. 2021 16:09
Localisation : 50.693165,4.573478

Re: algo recherche racine f(x) sur HP9100

Message par OlidaBel »

Schraf a écrit : 22 févr. 2022 15:34 Pour les personnes qui veulent tester "en vrai" le code, voici la procédure :
  • Clic droit n'importe où sur la page puis Inspecter et Console
  • Vous copiez-collez ce code :

Code : Tout sélectionner

joue("∇R←D RROF X⋄P←×/FNC (X←X+D),X⋄→((1E¯4>|P),P>0)/5,1⋄D←D÷¯10⋄→1⋄R←X∇")
  • Entrée et vous patientez jusqu'au ∇. Cliquez alors sur l'écran de l'ordinateur puis Entrée
  • Recommencez avec le code :

Code : Tout sélectionner

joue("∇Y←FNC X⋄Y←(((*1)×(⍟○1)÷⍟X)*X)-*○1∇")
  • Idem, validez par Entrée
  • Tapez : .001 RROF 1.1 puis Entrée et patientez...
un truc m'échappe, j'ai encore essayé ce matin. :cry:
Capture.JPG
Capture.JPG (38.4 Kio) Vu 3491 fois
Avatar du membre
Schraf
Fonctionne à 1200 bauds
Fonctionne à 1200 bauds
Messages : 499
Enregistré le : 05 mars 2020 20:45
Contact :

Re: algo recherche racine f(x) sur HP9100

Message par Schraf »

Le .001 RROF 1.1 doit se taper en vrai sur l'écran, pas dans la console JavaScript ! Faut cliquer sur l'écran gris, ensuite soit on utilise le clavier du PC (touche "," pour avoir le point) soit le clavier virtuel proposé.
Avatar du membre
zpalm
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 2919
Enregistré le : 03 mai 2008 15:33
Localisation : Grenoble

Re: algo recherche racine f(x) sur HP9100

Message par zpalm »

C.Ret a écrit : 23 févr. 2022 23:29 Voici un petit programme pour HP-28S (Version 2BB - les autres versions doivent utiliser une adresse SYSEVAL différente - si intéressé demandez-moi, je donnerai la liste des addresses en fonction des versions HP-28C )

Code : Tout sélectionner

« → Fct x d
  « x Fct EVAL x d
    DO → d
      « DO
          d + DUP Fct EVAL ROT OVER * SWAP ROT #25AFCh SYSEVAL
        UNTIL ROT 0 ≤ END
        d -.1 * »
    UNTIL DUP2 + 3 PICK == END
    3 ROLLD 1600 .1 BEEP » »
Excellent ! Ça m’a donné l’occasion de tester ma 28S récemment trouvée et après quelques hésitations dues aux différences avec la 48 j’ai pu lancer le programme et voir la recherche des racines se dérouler sur l’écran. Pour ça la vitesse, ou plutôt la lenteur de la 28S est un atout.

Petite question sur le SYSEVAL: où en trouve-t-on la description ?
Avatar du membre
C.Ret
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 3404
Enregistré le : 31 mai 2008 23:43
Localisation : N 49°22 E 6°10

Re: algo recherche racine f(x) sur HP9100

Message par C.Ret »

zpalm a écrit : 24 févr. 2022 13:17Petite question sur le SYSEVAL: où en trouve-t-on la description ?
HP-28 Insights
Principes and Programming of the HP-28C/S
Williams C. Wickes
Larkens Publications - 4517 NW Queens Avenue Corvallis, Oregon 97330

Copyright (c) Williams C. Wickes 1988 (May 1988)
¤3.10 SYSEVAL p. 35
Ce document est disponible dans les documents numérisés du MoHPc. C'est là que j'ai trouvé l'astuce qui évite de faire avec pleins de DISP.
OlidaBel a écrit : 24 févr. 2022 08:58Ça marche, ça tourne très bien. Je n'ai cependant pas recopié ton SYSEVAL sur la 50g.
C'est plus prudent, on a vite un Memory Lost avec cette instruction SYSEVAL.

Sinon, concernant la lisibilité du code, sans les quatre pages de mon block-note, je suis incapable de déchiffré mon propre code !
Suivre le chemin des arguments et des résultats au milieu d'un dédale de SWAP, DROP, ROLL OVER, PICK etc et un enfer ! Surtout lorsque ces coquines de boucles s'emboîtent et échangent leurs arguments dans la pile qui tricotte !
RROF9100 on HP-28S.gif
RROF9100 on HP-28S.gif (21.21 Kio) Vu 3459 fois
C'est très exactement ce qu'il ne faut pas faire ! C'est le mal ! ...
.. mais moi j'aime déroulé mes codes dans le vice et la luxure :evil:
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: algo recherche racine f(x) sur HP9100

Message par zpalm »

C.Ret a écrit : 24 févr. 2022 19:24
HP-28 Insights
Principes and Programming of the HP-28C/S
Williams C. Wickes
Ce document est disponible dans les documents numérisés du MoHPc. C'est là que j'ai trouvé l'astuce qui évite de faire avec pleins de DISP.
Ah oui, j’aurais du y penser, il est aussi disponible sur hpcalc.org.
J’avais cherché dans Voyage au centre de la HP28 c/s de Paul Courbis et Sébastien Lalande sans succès.
Répondre

Retourner vers « Tous les Pockets »