A calculer quelques valeurs de fonctions cylindriques du premier ordre sur mon HP-15C

Les derniers trucs auxquels vous avez joué, les derniers ordinateurs que vous avez bidouillés.

Modérateur : Politburo

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: A calculer quelques valeurs de fonctions cylindriques du premier ordre sur mon HP-15C

Message par C.Ret »

OlidaBel a écrit : 04 sept. 2021 12:31 [...]La précision "ACC" pour l'intégrale : 0.0001
Connaissant la vraie solution = 2.4048255577 (cfr la Prime plus haut et confirmée par https://keisan.casio.com/exec/system/1180573472)
Et par mon HP-28S avec Acc = 1E-12 :
J0(x)=0 - HP-28S - Acc 1E-12.gif
J0(x)=0 - HP-28S - Acc 1E-12.gif (101.23 Kio) Vu 4823 fois
OlidaBel a écrit : 04 sept. 2021 12:31 et pendant ce temps, C.Ret nous pond de jolis graphiques un peu plus haut :D
Bessel du premier ordre  J0(x) - HP Prime.png
Bessel du premier ordre J0(x) - HP Prime.png (10.66 Kio) Vu 4823 fois
Bessel du premier ordre  J0(x)J1(x) - HP Prime.png
Bessel du premier ordre J0(x)J1(x) - HP Prime.png (15.21 Kio) Vu 4823 fois
Bessel du premier ordre  J0-J2(x) - HP Prime.png
Bessel du premier ordre J0-J2(x) - HP Prime.png (16.3 Kio) Vu 4823 fois
Bessel du premier ordre  J0-J3(x) - HP Prime.png
Bessel du premier ordre J0-J3(x) - HP Prime.png (17 Kio) Vu 4823 fois
Bessel du premier ordre  ROOTs - HP Prime.png
Bessel du premier ordre ROOTs - HP Prime.png (40.17 Kio) Vu 4823 fois
Juste histoire de voir comme cela est facile et immédiat sur une HP Prime.
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
pcscote
Fonctionne à 300 bauds
Fonctionne à 300 bauds
Messages : 160
Enregistré le : 11 juil. 2018 01:06
Localisation : Québec/Canada

Re: A calculer quelques valeurs de fonctions cylindriques du premier ordre sur mon HP-15C

Message par pcscote »

OlidaBel a écrit : 03 sept. 2021 19:04 Je vais finir par écrire à Thomas Okken si ça continue :D car j'ai trouvé des situations où le SOLVE trouve une solution assez vite, p.ex. en plaçant une valeur différente de 0 dans B.
Voici un commentaire de Thomas Okken fait sur le forum de SwissMicros concernant la fonction Solve de Free42:
DM42/Free42 - which algorithm used in SOLVE ?
SOLVE in Free42 uses the secant method, until it has two guesses that evaluate to values with opposite signs.
It then proceeds by using Ridders root refinement, falling back on the secant method, or bisection as a last resort, if the function is not well-behaved.
Sylvain
Sylvain
Calculatrices et Pockets HP > J'ai tous les modèles, manuels, accessoires et périphériques, mes préférés: 41, 71 & 75.
Techno : 41 > 41CL, MLDL2K, Clonix-d, NoV-64d, MAXX | 71 > FRAM71, MultiMod | IL > PIL-Box, PIL-IO, GPIO | ...
OlidaBel
Fonctionne à 300 bauds
Fonctionne à 300 bauds
Messages : 106
Enregistré le : 04 avr. 2021 16:09
Localisation : 50.693165,4.573478

Re: A calculer quelques valeurs de fonctions cylindriques du premier ordre sur mon HP-15C

Message par OlidaBel »

pcscote a écrit : 04 sept. 2021 21:18 Voici un commentaire de Thomas Okken fait sur le forum de SwissMicros concernant la fonction Solve de Free42:
DM42/Free42 - which algorithm used in SOLVE ?
SOLVE in Free42 uses the secant method, until it has two guesses that evaluate to values with opposite signs.
It then proceeds by using Ridders root refinement, falling back on the secant method, or bisection as a last resort, if the function is not well-behaved.
Sylvain
Oui, en effet, il a répondu. Je prépare une réponse compréhensible. Free42 atteint la réponse et s'arrête après 30 s sur un iPhone récent (Xs), c'est très long vu la rapidité du bestiau.
OlidaBel
Fonctionne à 300 bauds
Fonctionne à 300 bauds
Messages : 106
Enregistré le : 04 avr. 2021 16:09
Localisation : 50.693165,4.573478

Re: A calculer quelques valeurs de fonctions cylindriques du premier ordre sur mon HP-15C

Message par OlidaBel »

C.Ret a écrit : 04 sept. 2021 20:46
Juste histoire de voir comme cela est facile et immédiat sur une HP Prime.
Oui, c'est sa force, la vitesse, les graphiques, une bête mathématique. L'intégration d'une fonction devient un "détail", et on peut encore bricoler autour.
Ces impressions avec l'HP-28s ne vont pas s'effacer avec le temps, du moment que Silicium.org existe :D
Je reviendrai au RPL prochainement sur cette question.
OlidaBel
Fonctionne à 300 bauds
Fonctionne à 300 bauds
Messages : 106
Enregistré le : 04 avr. 2021 16:09
Localisation : 50.693165,4.573478

Re: A calculer quelques valeurs de fonctions cylindriques du premier ordre sur mon HP-15C

Message par OlidaBel »

La réponse de Thomas Okken (auteur de Free42, le moteur de la DM42) pour ceux que cela intéresse, je laisse le texte en anglais.
Il reconnait que c'est un scénario actuellement difficile et connu. Free42 et la DM42 ont du mal à gérer un Solve sur une intégrale dans ce cas de figure. L'algorithme pense que l'erreur relative ne s'améliore pas, et cela entraine encore plus d'itérations.

"Ah, that looks familiar. The function you're solving is an integral, so in the process of approaching a root, INTEG is having to evaluate an integral that is close to zero. And that is something the Free42 INTEG doesn't handle well, because such integrals appear not to converge, because the estimated absolute error is decreasing at the same rate as the function value, which means the estimated relative error doesn't improve, and so INTEG keeps iterating until it reaches the maximum number of iterations. Since the maximum number of iterations is 20 and the number of function evaluations doubles with each iteration, INTEG may evaluate the function up to a million times, and that can take a few seconds even on a fast computer or smartphone... and on the DM42, it is completely impractical.

This is a known problem. INTEG needs to handle integrals of zero, or close to zero, better. Maybe that means the maximum number of iterations simply needs to be lower, but the real HP-42S seems to break out of such integrals much faster... there may be some cleverness there that Free42 should emulate, but I don't know how its termination criterion works for such cases
."
OlidaBel
Fonctionne à 300 bauds
Fonctionne à 300 bauds
Messages : 106
Enregistré le : 04 avr. 2021 16:09
Localisation : 50.693165,4.573478

Re: A calculer quelques valeurs de fonctions cylindriques du premier ordre sur mon HP-15C

Message par OlidaBel »

De retour avec quelques clarifications.
Sur Free42/DM42, le SOLVE travaille correctement.
Le soucis avec la recherche d'une racine sur Bessel (voir plus haut) tourne autour de la fonction d'intégration INTEG car la valeur attendue est zéro (forcément, pour un SOLVE). La précision à 34 chiffres n'arrange rien, elle incite à chercher fort loin pour ce zéro.
L'intégrale se rapproche toujours plus loin en direction de zéro sans l'atteindre, et derrière le SOLVE valide des itérations supplémentaires.
Alors personne ne sait comment une HP-42s gère correctement un SOLVE sur une telle intégrale.

Un intervenant a confirmé ce que j'avais observé également, y a un truc.
Il "suffit" de gommer les valeurs minuscules retournées par l'intégrale avec cette méthode :
intégrer pour : (fonction + constante)
soustraire la constante : (intégrale-constante)
solve sur cette expression.

Dans notre cas, ajouter 1 puis soustraire 1, et appliquer le SOLVE.
Avec un ACC=0.00001, la valeur est retournée en une dizaine de s,
et en 4 sec avec le câble USB. x=2.4048255577
:roll: :geek: :ugeek:
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: A calculer quelques valeurs de fonctions cylindriques du premier ordre sur mon HP-15C

Message par C.Ret »

Sur le forum du MoHPc, je viens de découvrir que Namir à poster un code pour calculer les fonctions de Bessel avec un ordre non entier.

Je tiens à préciser que le code que je donne au début de ce fil ne permet pas de calculer les valeurs de ces fonctions. Pour des ordres non entier, la formule utilisée doit être complétée par une seconde intégrale qui permet de tenir compte du décalage d'ordre.

Bon, sur mon HP-15C de 1985, le code complété avec le second terme intégral est très long. Mais comme vous avez maintenant des machines 15C cent fois plus rapides que la mienne, ce ne doit pas être un soucis d'utiliser ce code plus général. J'ai quand même inclus un test pour éviter de réaliser la seconde intégration dans le cas où n est entier car rien ne sert de faire un tel calcul pour en multiplier le résultat par zéro.

Le programme s'utilise exactement comme la version courte, on saisit l'argument x, on lance par f B puis on entre l'ordre n de la fonction de Bessel qui cette fois peut être fractionnaire et enfin on lance le calcul par la touche R/S.
Après un temps qui peut paraitre long sur certaine machine ancienne, le résultat s'affiche. Pensez à bien régler le format d'affichage en fonction de la précision souhaitée ce qui peut vous permettre d'avoir plus rapidement le résultat.
Les registres R0, R1 et R2 contiennent alors respectivement x, n et Bn(x).
Bessel du premier ordre  Jn(x) avec n fractionnaire- HP-15C.gif
Bessel du premier ordre Jn(x) avec n fractionnaire- HP-15C.gif (74.35 Kio) Vu 545 fois
Le code de Namir est basé sur celui de l'HP-25 publié par Peter Henrici dans son livre "Computational Analysis with the HP-25 Pocket Calculator", page 253. Le fichier pdf du livre est disponible au téléchargement sur le site d'Eric rechlin. Le livre montre les équation utilisées ainsi que l'ordigramme du programme.
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: A calculer quelques valeurs de fonctions cylindriques du premier ordre sur mon HP-15C

Message par OlidaBel »

superbe présentation, merci C.Ret
Répondre

Retourner vers « A quoi t'as joué hier ? »