jeudi 11 septembre 2014

Calcul du déterminant d'une matrice 3x3.

Nous allons calculer le déterminant d'une matrice contenant 3 lignes et 3 colonnes avec la convention de notation ci dessous.







Le déterminant de cet matrice s'obtient en calculant a1(b2c3 - b3c2) - b1(a2c3-a3c2) + c1(a2b3-a3b2).
Le programme suivant permets à l'utilisateur d'entrer les 3 colonnes sous la forme de 3 vecteurs [a1, a2, a3 ], [b1, b2, b3] et [c1, c2, c3] lors des invitations A?, B? et C?.

PGRM TOP
M001 LBL M
M002 INPUT A
M003 INPUT B
M004 INPUT C
M005 [1,0,0]
M006 STO H
M007 [0,1,0]
M008 STO M
M009 [0,0,1]
M010 STO L
M011 RCL H
M012 RCL x A
M013 RCL M
M014 RCL x B
M015 RCL L
M016 RCL x C
M017 x
M018 x
M019 RCL H
M020 RCL x A
M021 RCL L
M022 RCL x B
M023 RCL M
M024 RCL x C
M025 x
M026 x
M027 -
M028 RCL H
M029 RCL x B
M030 RCL M
M031 RCL x A
M032 RCL L
M033 RCL x C
M034 x
M035 x
M036 -
M037 RCL H
M038 RCL x B
M039 RCL L
M040 RCL x A
M041 RCL M
M042 RCL x C
M043 x
M044 x
M045 +
M046 RCL H
M047 RCL x C
M048 RCL M
M049 RCL x A
M050 RCL L
M051 RCL x B
M052 x
M053 x
M054 +
M055 RCL H
M056 RCL x C
M057 RCL L
M058 RCL x A
M059 RCL M
M060 RCL x B
M061 x
M062 x
M063 -
M064 X<> T
M065 CLSTK
M066 X<> T
M067 RTN

Lancez le programme en faisant XEQ M ENTER.
Rappellons que les 3 colonnes doivent être entrées sous la forme de 3 vecteurs. Par exemple pour la matrice ci dessous, entrez [7, 6, 8] puis [3, 0, 8] puis [10, 6, 12].








Entrez la première colonne à l'invitation A?, continuez en tapant R/S, ensuite entrez la deuxième colonne à l'invitation B?, continuez en tapant R/S puis entrez la troisième colonne à l'invitation C? et terminez en tapant R/S.

Sur la ligne basse de l'écran sera alors affichée 0, la la valeur du déterminant de la matrice 3x3 entrée.

A très bientôt ;)

mercredi 10 septembre 2014

Dérivée d'un polynôme et d'une fonction (2ème partie).

Dans le dernier article nous avons calculé de façon exacte la dérivée d'un polynôme.
Ici nous allons utiliser la définition de la dérivée d'une fonction en une valeur donnée.







Le programme suivant entre en mémoire le polynôme P(X) = 8X^4 - 3X^3 + X^2 + 2X - 8 puis il calcule la valeur approchée de la dérivée en utilisant la variable entrée en D002.

PGRM TOP
# Le Label P correspond à la saisie du polynôme.
# Début de la saisie du polynôme en mode RPN.
P001 LBL P
P002 RCL X
P003 4
P004 Y^X
P005 8
P006 x
P007 RCL X
P008 3
P009 Y^X
P010 -3
P011 x
P012 +
P013 RCL X
P014 2
P015 Y^X
P016 +
P017 RCL X
P018 2
P019 x
P020 +
P021 -8
P022 +
P023 RTN
# Fin de la saisie du polynôme.
# le Label D correspond au programme de dérivation.
D001 LBL D
# On entre la valeur en laquelle la dérivée sera calculée.
D002 INPUT X
# Le programme va calculer P(X).
D003 XEQ P001
D004 STO T
D005 0.000001
D006 STO + X
# Le programme va calculer P(X+h) avec h=0.000001.
D007 XEQ P001
D008 RCL T
D009 -
D010 0.000001
D011 ÷
D012 X<> T
D013 CLSTK
D014 X<> T
D015 RTN

Lancez le programme en faisant XEQ D ENTER.
Entrez -2 à l'invitation X? puis continuez en tapant R/S.

Sur la ligne basse de l'écran sera alors affichée -294 soit la valeur de P'(-2), la valeur de la dérivée du polynôme P en X=-2.

Autre exemple: Si vous voulez entrer en mémoire le polynôme P(X) = -9X^5 + 3X^3 - 2X, vous devrez saisir P de cette façon:

PGRM TOP
# Le Label P correspond à la saisie du polynôme.
# Début de la saisie du polynôme en mode RPN.
P001 LBL P
P002 RCL X
P003 5
P004 Y^X
P005 -9
P006 x
P007 RCL X
P008 3
P009 Y^X
P010 3
P011 x
P012 +
P013 RCL X
P014 -2
P015 x
P016 +
P017 RTN
# Fin de la saisie du polynôme.
# La suite du programme est la recopie exacte du Label D au dessus.

Lancez le programme en faisant XEQ D ENTER.
Entrez 3 à l'invitation X? puis continuez en tapant R/S.

Sur la ligne basse de l'écran sera alors affichée -3566 soit la valeur de P'(3), la valeur de la dérivée du polynôme P en X=3.

Relancez le programme et cette fois-ci entrez -2 à l'invitation X? puis continuez avec R/S.

Sur la ligne basse de l'écran sera alors affichée -685.999 soit une valeur approchée de P'(-2), la valeur de la dérivée du polynôme P en X=-2.

La valeur exacte de P'(-2) est en fait -686 comme vous pourrez le constater avec le programme précédemment présenté.

Nota Bene: Il est possible de calculer avec ce programme la dérivée de n'importe quelle fonction si elle dérivable en la valeur entrée. Prenons par exemple la fonction F(X) = (Sin(2X))^2 qui a pour dérivée F'(X) = 4Sin(2x)Cos(2x).

PGRM TOP
# Le Label P correspond à la saisie de la fonction F.
# Début de la saisie de la fonction en mode RPN.
P001 LBL P
P002 RCL X
P003 2
P004 x
P005 SIN
P006 x^2
P007 RTN
# Fin de la saisie de la fonction.
# La suite du programme est la recopie exacte du Label D au dessus.

Lancez le programme en faisant XEQ D ENTER.
Entrez 1 à l'invitation X? puis continuez en tapant R/S.

Sur la ligne basse de l'écran sera alors affichée -1.513608 soit une valeur approchée de F'(1), la valeur de la dérivée de la fonction F en X=1.

La valeur exacte de F'(1) est 4.Sin(2).Cos(2) soit -1,513605.

A bientôt :)

samedi 6 septembre 2014

Calcul de la dérivée d'un polynôme (1ère partie).

Le but de ce petit programme est initialement d'entrer les coefficients du polynôme dans la mémoire de la calculatrice et ensuite de calculer sa dérivée en un point donné en entrant la valeur au clavier.

Le programme suivant entre en mémoire le polynôme P(X) = 8X^4 - 3X^3 + X^2 + 2X - 8 puis il calcule la valeur de la dérivée du polynôme en utilisant la variable entrée en D003 dans le programme.

PGRM TOP
# Le Label P correspond à la saisie du polynôme.
# Début de la saisie des coefficients du polynôme.
P001 LBL P
# On entre -8 coefficient de X^0.
P002 0
P003 STO I
P004 -8
P005 STO (I)
# On entre 2 coefficient de X^1.
P006 1
P007 STO I
P008 2
P009 STO (I)
# On entre 1 coefficient de X^2.
P010 2
P011 STO I
P012 1
P013 STO (I)
# On entre -3 coefficient de X^3.
P014 3
P015 STO I
P016 -3
P017 STO (I)
# On entre 8 coefficient de X^4.
P018 4
P019 STO I
P020 8
P021 STO (I)
# Fin de la saisie des coefficients du polynôme.
# le Label D correspond au programme de dérivation.
D001 LBL D
# CLSTK signifie vider les 4 niveaux du stack (Menu CLEAR choix 5).
D002 CLSTK
# On entre la valeur en laquelle la dérivée sera calculée.
D003 INPUT X
D004 X = 0 ?
D005 GTO D023
D006 RCL I
D007 1
D008 -
D009 Y^X
D010 RCL I
D011 RCL (I)
D012 x
D013 x
D014 +
D015 RCL X
D016 DSE I
D017 GTO D006
# Roll Down décale les contenus des registres d'un rang vers le bas.
D018 RD
# On échange le contenu du registre X avec la variable T vide.
D019 X<> T
D020 CLSTK
# On échange à nouveau le contenu du registre X avec la variable T.
D021 X<> T
D022 RTN
D023 1
D024 STO I
D025 CLSTK
D026 RCL (I)
D027 RTN

Lancez le programme en faisant XEQ P ENTER.
Entrez -2 à l'invitation X? puis continuez en tapant R/S.

Sur la ligne basse de l'écran sera alors affichée -294 soit la valeur de P'(-2), la valeur de la dérivée du polynôme P en X=-2.

Autre exemple: Si vous voulez entrer en mémoire le polynôme P(X) = -9X^5 + 3X^3 - 2X, vous devrez saisir les coefficients de la même façon:

PGRM TOP
# Le Label P correspond à la saisie du polynôme.
# Début de la saisie des coefficients du polynôme.
P001 LBL P
# On entre 0 coefficient de X^0.
P002 0
P003 STO I
P004 0
P005 STO (I)
# On entre -2 coefficient de X^1.
P006 1
P007 STO I
P008 -2
P009 STO (I)
# On entre 0 coefficient de X^2.
P010 2
P011 STO I
P012 0
P013 STO (I)
# On entre 3 coefficient de X^3.
P014 3
P015 STO I
P016 3
P017 STO (I)
# On entre 0 coefficient de X^4.
P018 4
P019 STO I
P020 0
P021 STO (I)
# On entre -9 coefficient de X^5.
P022 5
P023 STO I
P024 -9
P025 STO (I)
# Fin de la saisie des coefficients du polynôme.
# La suite du programme est la recopie exacte du Label D au dessus.

Lancez le programme en faisant XEQ P ENTER.
Entrez 3 à l'invitation X? puis continuez en tapant R/S.

Sur la ligne basse de l'écran sera alors affichée -3566 soit la valeur de P'(3), la valeur de la dérivée du polynôme P en X=3.

Liens intéressants:
HP-35S et Variables indirectes.

Nous verrons prochainement une autre technique (utilisant la définition de la dérivation) pour calculer des dérivées de façon approchée avec la HP-35s.

A très bientôt :)

samedi 23 août 2014

Test de primalité d'un nombre entier.

Nous allons rechercher si un nombre impair supérieur ou égal à 3 est un nombre premier en utilisant l'algorithme de test élémentaire suivant:

K = 3
Début Test
{
    Si ( K > RacineCarrée(P) ) Alors ( P est Premier - Fin du Test )
    Si ( K divise P ) Alors ( P est non Premier - Fin du Test ) 
    K = K + 2
}
Retourne Début Test

Le programme suivant active le drapeau 1 (Flag 1) si le nombre testé est premier.

PGRM TOP
R001 LBL R
# Efface et désactive le drapeau 1 (Flag 1).
R002 CF 1
R003 STO P
R004 3
R005 STO K
R006 RCL P
# Racine carré de X.
R007 √(X)
R008 RCL K
R009 X > Y ?
R010 GTO R020
R011 RCL P
R012 X<>Y
R013 ÷
# FP signifie Fractional Part de P/K (Menu INTG choix 5).
R014 FP
R015 X = 0 ?
R016 GTO R023
R017 2
R018 STO + K
R019 GTO R006
# Active le drapeau 1 (Flag 1).
R020 SF 1
# CLSTK signifie vider les 4 niveaux du stack (Menu CLEAR choix 5).
R021 CLSTK
R022 RTN
R023 CLSTK
R024 RTN

Entrez votre nombre impair dans la ligne basse de l'écran de la calculatrice (registre X) et lancez le programme en faisant XEQ R ENTER.
Le drapeau 1 est activé si le nombre est premier, le chiffre 1 apparait alors sur la ligne d'indicateurs de la calculatrice.

Par exemple entrez 137 puis XEQ R ENTER. Le drapeau 1 s'active.
Voici quelques autres nombres à tester: 567 est non premier, 571 est premier, 2603 est non premier et 524287 est premier.
Vous pouvez faire chauffer le processeur en testant 2147483647 ;).

NB: Il ne sert à rien de tester les nombres pairs qui sont tous divisibles par deux et donc non premiers (Le seul nombre premier pair est 2).

Liens intéressants:
Les divers tests de primalité.
Test de primalité élémentaire.

A très bientôt :)

mercredi 13 août 2014

Calcul du PGCD de deux nombres entiers positifs.

Vous trouverez ci-dessous le programme qui calcule le PGCD de deux nombres entiers positifs non nuls en utilisant l'algorithme des soustractions que voici:

Tant que ( Y > 0 )
{
    Si ( X > Y ) Alors ( X = X - Y ) Sinon ( Y = Y - X) 
}
Retourne X

Le programme suivant est le plus minimaliste que l'on puisse écrire.

PGRM TOP
R001 LBL R
R002 X > Y ?
R003 GTO R007
R004 -
R005 LAST X
R006 GTO R010
R007 X<>Y
R008 -
R009 LAST X
R010 X > 0 ?
R011 GTO R002
R012 X<>Y
R013 RTN

Entrez Y puis entrez X, ou bien X puis Y (peu importe l'ordre de saisie) et lancez le programme en faisant XEQ R ENTER.
Le résultat est affiché sur la ligne basse de l'écran dans le registre X du stack.

Par exemple entrez 357 puis 561, le résultat sera 51.
Voici quelques autres exemples: PGCD(2001,78) = 3 ou bien PGCD(108,608) = 4.

Liens intéressants:
Algorithme des soustractions successives 1.
Algorithme des soustractions successives 2.

A bientôt :)

samedi 9 août 2014

Suite de Fibonacci.

Voici donc mon premier article sur la HP-35S, vraie calculatrice scientifique programmable avec le mythique stack RPN à 4 niveaux de HP ! Son look rétro façon HP-34C ou HP-41CV est très sympathique, tout comme son prix d'environ 50 euros en juillet 2014.

Soit F(n) la suite dite Suite de Fibonacci définie par:
  • F(1) = F(2) = 1
  • F(n) = F(n-1) + F(n-2) pour n > 2
Chaque terme de la suite est donc la somme des deux termes précédents.

Vous trouverez ci-dessous un petit programme qui calcule le n-ième terme de cette suite.

PGRM TOP
F001 LBL F
# Entrez ici l'indice du terme à calculer, par exemple 15 pour
# obtenir F(15) = 610.
F002 INPUT I
F003 -1
F004 RCL + I
F005 1000
F006 ÷
F007 3
F008 +
F009 STO I
# I vaut alors 3.014 et sera utilisé comme compteur avec ISG I: le
# compteur bouclera de 3 à 14, sera incrémenté avec un pas de 1 et
# sortira de la boucle à 15.
F010 1
F011 1
F012 +
# On enregistre les différentes valeurs calculées: STO(3) à ST0(14).
F013 STO (I)
F014 LAST X
F015 X<>Y
F016 +
# Le compteur boucle tant que I ne vaut pas 15.014.
F017 ISG I
F018 GTO F013
# On enregistre la dernière valeur calculée après sortie de la
# boucle: STO(15).
F019 STO (I)
F020 RTN

Lancez le programme en faisant XEQ F ENTER.
Entrez 15 à l'invitation I? puis continuez en tapant R/S.

Sur la ligne basse de l'écran sera alors affichée 610 soit la valeur de F(15).
(Sur la ligne du haut, on retrouve la valeur du compteur 3.014 telle que calculée ligne F008.)

Si à ce stade on entre tout simplement RCL I, on obtiens dans notre exemple 15.014 la valeur finale du compteur I en sortie de boucle. En entrant RCL (I) on retrouve bien 610.

Ainsi en fixant I entre 3 et 15 on retrouve avec RCL (I) la valeur de F(I) intermédiaire gardée en mémoire, par exemple 10 STO I puis RCL(I) donnera 55 soit F(10).

Prendre garde en quittant à désallouer les variables indirectes (I) addressées en les effacant avec CLEAR et CLVAR000.
Il reste la variable (0) à effacer en faisant 0 STO I STO (I).

Liens intéressants:
La Calculatrice HP-35S en détail.
HP-35S et Variables indirectes.
Working with Indirectly Addressed Memory.

A très bientôt :)