Oh! Oui il est vrai que l' HP15C n'est pas rapide, et de loin. Je ne sais même plus comment utiliser son solveur. Heureusement que j'ai le manuel à portée de main. Chaque utilisation nécessite de réviser, je ne me souviens jamais de la procèdure et de l'ordre des arguments à mettre dans la pile.
Bon, j'ai retrouvé ma documentation, c'est en fait très simple:
Saisir la fonction dans la zone programme en y attribuant un label (par exemple [ A ] mais ce peut être un chiffre).
Pour simplifier la saisie de la fonction, SOLVE place une copie de chaque valeur X utilisée dans les quatre registres de la pile.
On peut donc utiliser une formule de Horner pour économiser les efforts: f(x) = x^3 - 2x -5 sera écrit f(x)=(x²-2)*x-5
On lance la détermination de la racine en donnant un intervalle de recherche : par exemple 0 [ENTER] 5 [SOLVE][ A ]
L'HP-15C fait son petit running pendant quelques secondes (j'ai compté environ 20 secondes) et affiche la racine 2.0946
Code : Tout sélectionner
g P/R
f CLEAR PRGM
000-
001-42.21.11 f LBL A // Label à utiliser pour SOLVE
002- 43 11 g x² // x²
003- 2 2
004- 30 - // x²-2
005- 20 × // (x²-2)*x
006- 5 5
007- 30 - // (x²-2)*x-5
008- 43 32 g RTN //
g P/R
Je me souviens aussi du programme que j'utilisais sur mon SHARP PC-1211 qui lui utilisait une méthode par dichotomie plus adaptée à l'usage de l'époque puisqu'il m'était demandé de trouver les racines dans chaque intervalle de variation déduit de l'étude de la fonction.
Je n'ai pas retrouvé le carnet où j'avais noté mes programmes de 1981 à 1988 pour mon SHARP, j'ai retrouvé celui plus récent de l' HP28S.
Peu importe, le code que j'utilisais en terminale puis en DEUG ressemblait à cela :
Code : Tout sélectionner
1:Y=XXX-2X-5:RETURN
10 "X" AREAD X:GOSUB 1:GOTO 44
20 "P" INPUT "PRES.";P:P=ABS P:IF P>1 LET P=10^-P
30 "S" INPUT "(A,B) A=";A,"B=";B:X=A:GOSUB 1:Z=Y:X=B:GOSUB 1:IF SGN ZY>0 BEEP 1:PAUSE "SIGNES !":GOTO 30
40 X=(A+B)/2:GOSUB1:IF Y<>0 LET A((3+SGN Y)/2)=X:IF ABS (B-A)>P GOTO 40
42 BEEP 3:PRINT A;B;" X0=";X
44 PRINT X,Y:X=X+1:GOSUB 1:GOTO 44
Il y avait deux choses importantes, l'intervalle était affiché en même temps que le zéro, car trop souvent j'avais 'merdé' en ne recherchant pas la bonne solution, les fonctions étaient souvent périodiques ou avait plusieurs solutions dont seule celle sur le bon intervalle avait de sens dans l'exercice ou le domaine de validité du modèle (je me souvient de cycle de croissance bactériennes et autres oscillations de l'univer…)
La seconde est le test des signes de f(a) et f(b) aux deux bornes de l'intervalle afin de ne pas perdre trop de temps, le programme tourne sans converger si les signes ne sont pas opposés.
Par contre, à l'époque, je n'avait pas envisagé d'utiliser une autre méthode. Par exemple celle de Newton ou qui ressemble fort à celle porposée par dprtl ; cela n'entrait pas dans mes préoccupations, utiliser une méthode automatique sans avoir besoin de tracer les courbes, c'était déjà un bon point d'avance. A l'époque on traçait, consommant du papier millimétré !
D'ailleurs la ligne 10 sert justement à tracer la courbe de 1 en 1. Avoir une idée, même grossière de la fonction évitait pas mal d'erreurs et de soucis
Je me souviens que très vite l'HP-28S a remplacé mon SHARP car la possibilité de tracer la courbe et le solveur intégré (avec son menu automatique) est fort efficace. Et plus besoin de se souvenir de l'ordre des paramètres.
Code : Tout sélectionner
[SOLV] 'X^3-2*X-5 [STEQ] [SOLVR] {0,5 [ X ]
.... X: { 0 5 } ...
[shift][ X ]
.... SOLVING FOR X ....
.... X: 2.09455148154 ....
.... Sign Reversal ....
1: 2.09455148154
Un peu comme l'est une bonne HP-prime ou autre calculatrice graphique ; où sans programmer, juste en saisissant la fonction on obtient très vite son étude, son graphe et la racine :
- HPprime_solver.png (4.73 Kio) Vu 7405 fois
Enfin, il y a depuis peu de temps une CASIO sur mon bureau.
J'ai trouvé à la page 25 de la
Librairie de Programmes (ouvrage livré avec la calculatrice et ses modes d'emploi) un code intitulé
"Solving an equation by the midpoint method" qui, contrairement au code de notre très dévoué
dprtl utilise l'avantage alphanumérique de la fx-602p et permet, comme ma méthode par dichotomie de spécifier l'intervalle de recherche:
Je retranscris ci-dessous une adaptation personnelle de ce code:
- CASIO_fx602p _ midpoint solver programs.gif (20.45 Kio) Vu 7384 fois
La fonction ainsi programmée en zone P0, peut comme pour le code de
dprtl, être utilisée pour calculer point par point les valeurs de la fonction. Contrairement au BASIC, il n'y a pas besoin d'un sous-programme supplémentaire, bien pensé ces CASIO et la 602 une belle réussite à l'utilisation.
- CASIO_fx602p _ midpoint solver usage.gif (23.7 Kio) Vu 7383 fois
En prenant le même intervalle [ 0 5 ] , j'observe avec ce code un temps de résolution tout à fait équivalent à l'HP-15C: la méthode par dichotomie étant bien moins efficace que la méthode utilisant la pente globale de la fonction, ceci prouve que le coeur de l' HP-15C bat lentement.