programme HP-41

Je recherche. Tout et Rien, mais pas de petites annonces ici (pour les PA, c'est dans "Je donne, j'échange, j'achète et je vends")

Modérateur : Politburo

Répondre
rapy73
Fonctionne à 75 bauds
Fonctionne à 75 bauds
Messages : 5
Enregistré le : 16 févr. 2017 18:46

programme HP-41

Message par rapy73 »

Bonjour,

Je me lance dans la programmation de la HP-41.

Je souhaiterais savoir quelle méthode employer pour programmer " la méthode des moindre carrés" y = ax + b
je dois pour cela rentrer des données dans la HP-41, par exemple 10 valeurs de Xi et 10 valeurs de Yi. puis faire une série de calcules.
Comment rentrer ces valeurs et les stocker ? je pensais passer par les sommes statistiques mais les valeurs ne sont plus accessibles par la suite pour faire d'autres calcules.

Il y a t-il une autre méthode que de faire une boucle de n itérations correspondant au nombre de données à rentrer (sachant que le nombre de données ne devraient pas dépasser 6 à 10) , n x Xi et n x Yi puis les stocker en faisant sto 0, sto 1, sto 2 jusqu'à sto n ? de 0 à 10 pour les Xi et de 11 à 21 pour les Yi ?
une idée ?
merci pour vos suggestions
Avatar du membre
Hobiecat
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 3626
Enregistré le : 06 sept. 2011 14:57
Localisation : Normandie

Re: programme HP-41

Message par Hobiecat »

Si tu veux retrouver tes valeurs après les calculs, la seule solution est effectivement de les mettre en mémoire.

Ensuite, c'est basique (si je puis dire :mrgreen: ) à programmer.
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: programme HP-41

Message par C.Ret »

Si conserver les valeurs des X(i) etY(i) dans la calculette n'a pas d'intérêt, une autre solution pourrait être d'utiliser les registres mémoire de celle-ci pour les calculs.

Et dans ce cas, utiliser les fonctions statistiques intégrées (notamment la fonction Σ+, mais pas seulement) pourrait alors devenir une solution très efficace.


Mais, afin que nous puissions plus facilement collaborer sur ce projet, je propose que nous utilisions un exemple numérique commun.
Cherchons, par exemple à trouver la droite qui s'ajuste au mieux aux données suivantes :

Code : Tout sélectionner

┌────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐
│  x │ 6.9 │ 7.6 │ 7.6 │ 9.0 │ 8.1 │ 6.5 │ 6.4 │ 6.9 │
├────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
│  y │  12 │  10 │   9 │   5 │   6 │  15 │  14 │  12 │
└────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘
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: programme HP-41

Message par zpalm »

Voici un exemple de programme qui permet d’entrer des couples de valeurs Y,X ( Y [ENTER] X [R/S] ) , qui utilise la fonction Σ+ pour calculer la somme des X, la somme des Y, les sommes des carrés et la somme des produits, et qui stocke les valeurs X à partir du registre R20 et les valeurs Y à partir du registre R40 pour utilisation ultérieure.
Lorsque l’on a saisi tous les couples Y,X il suffit d’appuyer sur [R/S] sans entrer de valeur pour terminer le programme qui retourne alors dans X le nombre de couples de valeurs X,Y saisis.

Les registres utilisés sont:
R11-R16: registres statistiques de la fonction Σ+
R17 : index du registre courant pour stocker la valeur X
R18 : index du registre courant pour stocker la valeur Y

Code : Tout sélectionner

01 LBL "AA"
02 FIX 0
03 CLΣ
04 20            'les valeurs X seront stockées à partir de R20
05 STO 17
06 40            'les valeurs Y seront stockées à partir de R40
07 STO 18
08 CLx
09 LBL 00
10 "Y,X "
11 ARCL X
12 PROMPT
13 FC?C 22
14 RTN
15 Σ+
16 X<>Y
17 STO IND 18
18 X<> L
19 STO IND 17
20 CLx
21 1
22 ST+ 17
23 ST+ 18
24 RDN
25 GTO 00
rapy73
Fonctionne à 75 bauds
Fonctionne à 75 bauds
Messages : 5
Enregistré le : 16 févr. 2017 18:46

Re: programme HP-41

Message par rapy73 »

Bonjour,

Merci pour ce bout de code qui m'a bien aidé.
J'ai rajouté quelques lignes qui permettent juste de rentrer le nombre de couples de données que l'on veut travailler, pour que une fois les données rentrées, le calculateur passe à la phase calcule ( je vais programmer cela, rien de compliquer à première vue...mais en tant que débutant c'est surtout les méthodes qui sont travailler)

Code : Tout sélectionner

Code:
01 LBL "AA"
02 FIX 0
03 CLΣ
04 20            'les valeurs X seront stockées à partir de R20
05 STO 17
06 40            'les valeurs Y seront stockées à partir de R40
07 STO 18
08 0
09 STO 10
10 Nbr couples Donnees ?
11 PROMPT
12 STO 19
13 20
14 ST+ 19
15 CLx
16 LBL 00
17 "Y,X "              
18 RCL 10
19 ARCL X
20 PROMPT
21 FC?C 22
22 RTN
23 Σ+
24 X<>Y
25 STO IND 18         
26 X<> L                   
27 STO IND 17
28 CLx
29 1
30 ST+ 17
31 ST+ 18
32 RDN
33 STO 10
34 GTO 01
35 LBL 01
36 RCL 17
37 RCL 19
38 X=Y ?
39 GTO 02
40 GTO 00
41 RTN
42 LBL 02
43 « Données rentrées »
44 AVIEW
45 END
merci de vos avis
bon week-end
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: programme HP-41

Message par C.Ret »

Contrairement à zpalm, je ne vois pas d'intérêt à mémoriser les différentes valeurs des points, sauf si l'on souhaite par la suite effectuer d'autres calculs ou les imprimer sur un graphique.

Voici donc un petit code qui permet de trouver les coefficients de la droite de régression linéaire selon le critère des moindres carrés.

Ce code suppose que les données statistiques sont mémorisées dans les registre R11 à R16 comme le prévoit la valeur par défaut de l'instruction ∑REG. A défaut, penser à remettre celle-ci en place en exécutant ∑REG 11.
Image


La procédure est la suivante:
S'assurer que les registres statistiques sont dans les bons registres (éventuellement effectuer XEQ Alpha ∑REG Alpha 11 ou modifier le code afin d'utiliser les bons RCL-- )
Effacer les registres statistiques ( Cl∑ )
Saisir les points y(i) ENTER^ x(i) ∑+ ( Attention à l'ordre de saisie - Corriger les éventuelles erreurs comme prévu avec la fonction ∑- )
Exécuter le code XEQ Alpha LR Alpha qui déposera dans la pile les coefficients a et b de la droite de régression y = a + b*x
La coefficient directeur b de la droite s'affiche. Pour voir l'ordonnée à l'origine a, utiliser la touche [ x<>y ].

Image

Pour estimer une valeur y d'abscisse x, il suffit après avoir XEQuter LR, de saisir celle-ci et de presser les touches multiplier [ x ] et additionner [ + ].

Pour trouver à quelle abscisse la droite passe par un réponse y, il faut à l'issu de LR échanger a et b dans la pile (touche X<>Y), saisir y ,changer son signe (touche CHS), ajouter à a (touche [ + ], diviser (touche [ ÷ ]) et inverser (touche [ 1/x ] ),

Code : Tout sélectionner

001*LBL "LR
002   RCL 16  RCL 15  *  RCL 11  RCL 13  *  -
009   RCL 16  RCL 12  *  RCL 11  x^2   -   ÷     //  Calcul b
016   ENTER^   ENTER^   MEAN   RCL Z   *   -     //  Calcul a à partir des moyennes des x et y (Attention MEAN écrase les registres X: et Y: de la pile)
022   x<>y                                       //  Met dans l'ordre le plus pratique pour calculer y^ = a + b * x'
023 END
Exemple :

Code : Tout sélectionner

Données:
┌────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐
│  x │ 6.9 │ 7.6 │ 7.6 │ 9.0 │ 8.1 │ 6.5 │ 6.4 │ 6.9 │
├────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
│  y │  12 │  10 │   9 │   5 │   6 │  15 │  14 │  12 │
└────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘

Saisie:                    Affichage:
                            0.0000               Affichage initial
Cl∑                         0.0000               RàZ données statistiques
12   ENTER↑   6.9   ∑+      1.0000               1er points ...
10   ENTER↑   7.6   ∑+      2.0000
9    ENTER↑   7.6   ∑+      3.0000
5    ENTER↑   9.0   ∑+      4.0000
6    ENTER↑   8.1   ∑+      5.0000
15   ENTER↑   6.5   ∑+      6.0000
14   ENTER↑   6.4   ∑+      7.0000
12   ENTER↑   6.9   ∑+      8.0000                Les 8 points sont saisis.
XEQ alpha LR alpha          -3.9420               Coefficient directeur b
X<>Y                        39.4476               Ordonnée a à l'origine de la droite
13  -  ÷   1/x   CHS         6.7091               Estimation du point position (6.7091 , 13.0000)
XEQ alpha LR alpha          -3.9420               Coefficient directeur b (a est dans le registre Y: de la pile)
6.7  *   +                  13.0359               Estimation du point position (6.7000 , 13.0359)                
Le code LR peut être lancé en cours de saisie ou correction des points, il ne modifie en rien le contenu des registres statistiques.
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: programme HP-41

Message par zpalm »

C.Ret a écrit :Contrairement à zpalm, je ne vois pas d'intérêt à mémoriser les différentes valeurs des points, sauf si l'on souhaite par la suite effectuer d'autres calculs ou les imprimer sur un graphique.
J'ai répondu à la demande initiale qui était de garder les valeurs Xi et Yi pour faire d'autres calculs.
rapy73
Fonctionne à 75 bauds
Fonctionne à 75 bauds
Messages : 5
Enregistré le : 16 févr. 2017 18:46

Re: programme HP-41

Message par rapy73 »

Bonsoir,

Merci à zpalm et C.Ret pour votre apport.

Pourquoi je souhaite conserver les données ( pour l'instant) ?
la méthode des moindre carré me sert à faire des prévisions de CA, et avant de faire ces prévisions, je dois savoir s'il est pertinent de les faire.
Pour savoir cela il faut avant tout calculer le coefficient de corrélation (r) par rapport à ces données.
et comme le "r" reprend ces données par des calcules qui servent aussi bien à "r" qu'au calcul de "a" et "b" de l'équation y = ax + b
il est judicieux de conserver les données.

note : je ne suis pas arrivé à mettre l'image de l'équation de "r" , pas arrivé à utiliser les balises img ? ( je suis sous linux pour info)
comment aller chercher l'image crée sur le disque dur ? merci

Pour l'instant je vais programmer les différents calcules intermédiaires pour les raisons sitées ci-dessus, mais les vérifier par la méthode de C.Ret , je ne connaissanit pas la fonction "LR", il faut que je me plonge dans les registres statistiques, d'après vos écris on pourrait donc les déplacer ?

Je découvre la programmation de la HP-41, cela réserve de bons moments :D
Pour ceux qui en on une, avez-vous changer le condensateur interne pour accélérer les calcules ?

bonne soiré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: programme HP-41

Message par C.Ret »

zpalm a écrit :J'ai répondu à la demande initiale qui était de garder les valeurs Xi et Yi pour faire d'autres calculs.
Je ne voulais en aucun cas critiquer, uniquement donner une approche complémentaire.
De plus, il est vrai que cet objectif, pourtant explicité dans la demande, m'a échappé.


Alternativement, on peut utiliser SigREG pour "déplacer" les données statistiques (les sommes en fait) entre différentes applications.

rapy73 a écrit :note : je ne suis pas arrivé à mettre l'image de l'équation de "r" , pas arrivé à utiliser les balises img ? ( je suis sous linux pour info)
comment aller chercher l'image crée sur le disque dur ? merci
On ne peut pas 'uploader' directement une image lors de l'édition ou la création des posts sur le forum directement depuis son disque dur. Les balises [ img ] [ / img ] permettent uniquement d'indiquer l'adresse d'une image disponible sur Internet. Soit une image trouvée sur un site, soit une image que l'on aura 'uploader' sur un site d'hébergement.

Image


Et donc le code calculant r qui découle directement de la formule ci-dessus en supposant que les sommes statistiques sont aux registre R11 à R16 :

Code : Tout sélectionner

001*LBL "CORR
002   RCL 16  RCL 15  *  RCL 11  RCL 13  *  -
009   RCL 16  RCL 12  *  RCL 11  x^2   -  
015   RCL 16  RCL 14  *  RCL 13  x^2   -   *   SQR   ÷     //  Calcul r
024   END
Exemple :

Code : Tout sélectionner

Données:
┌────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐
│  x │ 6.9 │ 7.6 │ 7.6 │ 9.0 │ 8.1 │ 6.5 │ 6.4 │ 6.9 │
├────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
│  y │  12 │  10 │   9 │   5 │   6 │  15 │  14 │  12 │
└────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘

Saisie:                    Affichage:
                            0.0000               Affichage initial
Cl∑                         0.0000               RàZ données statistiques
12   ENTER↑   6.9   ∑+      1.0000               1er points ...
10   ENTER↑   7.6   ∑+      2.0000
9    ENTER↑   7.6   ∑+      3.0000
5    ENTER↑   9.0   ∑+      4.0000
6    ENTER↑   8.1   ∑+      5.0000
15   ENTER↑   6.5   ∑+      6.0000
14   ENTER↑   6.4   ∑+      7.0000
12   ENTER↑   6.9   ∑+      8.0000                Les 8 points sont saisis.
XEQ alpha CORR alpha        -0.9694               Coefficient de régression
shift X²                     0.9397               R² (la droite n'est peut-être pas la meilleure régression ?)
XEQ alpha LR alpha          -3.9420               Coefficient directeur b
X<>Y                        39.4476               Ordonnée à l'origine de la droite
13  -  ÷   1/x   CHS         6.7091               Estimation du point position (6.7091 , 13.0000)                
XEQ alpha LR alpha          -3.9420               Coefficient directeur b (a est dans le registre Y: de la pile)
6.7  *   +                  13.0359               Estimation du point position (6.7000 , 13.0359)
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.
rapy73
Fonctionne à 75 bauds
Fonctionne à 75 bauds
Messages : 5
Enregistré le : 16 févr. 2017 18:46

Re: programme HP-41

Message par rapy73 »

Bonjour,

J'ai réaliser mon programme pour obtenir toutes les données intermédiaires et les stocker :-)
j'ai vérifier avec les données de C.Ret d'après son tableau, j'obtiens bien les mêmes résultats.
C.Ret : oui tu as raison d'avoir un doute avec le coef de corrélation, il n'y a aucune corrélation entre les 2 séries de données, donc on peut en déduire qu'il ne faudrait pas faire de prévisions linéaires avec ces données.

Pour débuter cela à été un excellent exercice, merci à Zpalm pour m'avoir indiquer la méthode d'adressage indirect des registres, c'est génial.

Si quelqu'un veut se programme, je le partage bien évidement. il m'écrit en mp pour que je lui mette en téléchargement sur un serveur, car pas possible de mettre un fichier ici.
merci encore et à bientôt pour d'autres aventures :-)
Répondre

Retourner vers « Recherche informations / technique / etc ... [pas de petites annonces ici] »