HP RPL - intégrales numériques avec fonction+programme-48G KO, 28S OK

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

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

HP RPL - intégrales numériques avec fonction+programme-48G KO, 28S OK

Message par OlidaBel »

Salut à tous,
N'ayant pas beaucoup de retour sur le forum HP je vous soumets cette énigme.

Je reteste une intégration numérique en RPL que je faisais il y a bien longtemps sur la 28S.
L'équation algébrique donnée pour l'intégration appelle un programme RPL, celui-ci utilisant la variable d'intégration spécifiée.
La 28S avale cela sans soucis, la 48G bloque. Bizarre bizarre.
Je colle le texte en anglais.
Je ne m'attends pas à un miracle, au moins j'en ferai suer l'un ou l'autre, et ça me ravit déjà. :pirat:

I create an equation for the integration: EQ1. This equation calls a small RPL program ('F1') where the integration variable (here 'Y') is also used. I simplified the scenario here, but I had this problem in a much larger application.
The 28S does this very well, while the 48GX does not.
The 48GX does not want to understand that the 'Y' is the same as the Y for the integral.

If anyone can figure out why the 48GX can't do it...or show me how.
Rem1: on a Swissmicros DM42, I can carry out this scenario without problem. This machine is still wonderful.
Rem2: syntax on the 28S was different than the syntax on the 48GX

28S:
EQ1 : 'F1(Y^2)'
F1: << -> x 'x*Y' >> (x is a local variable)
the stack before the command:
3: 'EQ1'
2: {Y 0.5 1}
1: 0.001 (accuracy)
integral command : S

answer 28S:
2: 0.234 (integral)
1: 2.34E-4 (error)

48GX : (flag -3 Set : numerical result)
EQ1: 'F1(Y^2)'
F1: << -> x 'x*Y' >> (x is a local variable)
the stack before the command:
4: 0.500
3: 1.00
2: 'EQ1'
1: 'Y'
integral command : S

answer 48GX:
^Error:
Undefined Name

What's happening here ?
Avatar du membre
Hobiecat
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 3626
Enregistré le : 06 sept. 2011 14:57
Localisation : Normandie

Re: HP RPL - intégrales numériques avec fonction+programme-48G KO, 28S OK

Message par Hobiecat »

Au lieu de passer par la pile, as-tu essayé de passer par le menu d'intégration, pour voir si l'erreur intervient lors de l'entrée d'un des paramètres ?
OlidaBel
Fonctionne à 300 bauds
Fonctionne à 300 bauds
Messages : 106
Enregistré le : 04 avr. 2021 16:09
Localisation : 50.693165,4.573478

Re: HP RPL - intégrales numériques avec fonction+programme-48G KO, 28S OK

Message par OlidaBel »

J'essaierai ce soir.
C'est vrai que j'aurais pu essayer (ou alors je ne m'en souviens pas).
Cette intégration particulière intervenait dans un ancien programme, plus large que cet exemple. Peu d'intérêt de passer par ce menu donc.
OlidaBel
Fonctionne à 300 bauds
Fonctionne à 300 bauds
Messages : 106
Enregistré le : 04 avr. 2021 16:09
Localisation : 50.693165,4.573478

Re: HP RPL - intégrales numériques avec fonction+programme-48G KO, 28S OK

Message par OlidaBel »

Hobiecat a écrit : 22 mars 2023 09:47 Au lieu de passer par la pile, as-tu essayé de passer par le menu d'intégration, pour voir si l'erreur intervient lors de l'entrée d'un des paramètres ?
Je vérifie à l'instant sur l'émulateur iHP48.
Je ne vois pas de menu d'intégration pour les intégrales. Tout se déroule dans la pile.
Avatar du membre
bernouilli92
Fonctionne à 14400 bauds
Fonctionne à 14400 bauds
Messages : 5226
Enregistré le : 21 nov. 2012 13:03
Localisation : Ile de France

Re: HP RPL - intégrales numériques avec fonction+programme-48G KO, 28S OK

Message par bernouilli92 »

Cela ne fonctionne pas car la fonction F1 n'est pas définie si la variable globale Y n'existe pas.
Qu'est-ce que tu veux calculer comme intégrale ?
La fonction F1 prend en paramètre une valeur qu'elle met dans x et ensuite calcule x* Y mais la variable Y n'existe pas.
HP, Casio, Sharp, Psion, quelques TI et divers autres
OlidaBel
Fonctionne à 300 bauds
Fonctionne à 300 bauds
Messages : 106
Enregistré le : 04 avr. 2021 16:09
Localisation : 50.693165,4.573478

Re: HP RPL - intégrales numériques avec fonction+programme-48G KO, 28S OK

Message par OlidaBel »

ok Bernouilli92, mais Y est pourtant une variable globale.
Sur la 28S, ça fonctionne. C'est un peu ça qui cloche 8O
(réponse courte, je dois partir ;-) )
Par rapport à Y : vu qu'elle est définie comme la variable d'intégration, à chaque appel de EQ1 le système donne une valeur à 'Y'.
Je m'attends à ce que, comme sur la 28S, ce Y défini puisse être évalué dans EQ1 et dans le programme appelé F1.

Sur 50g : pour que cela fonctionne , il faut le flag :
03 Function -> Symb
OlidaBel
Fonctionne à 300 bauds
Fonctionne à 300 bauds
Messages : 106
Enregistré le : 04 avr. 2021 16:09
Localisation : 50.693165,4.573478

Re: HP RPL - intégrales numériques avec fonction+programme-48G KO, 28S OK

Message par OlidaBel »

bernouilli92 a écrit : 22 mars 2023 15:03 Cela ne fonctionne pas car la fonction F1 n'est pas définie si la variable globale Y n'existe pas.
Qu'est-ce que tu veux calculer comme intégrale ?
La fonction F1 prend en paramètre une valeur qu'elle met dans x et ensuite calcule x* Y mais la variable Y n'existe pas.
l’intégrale : elle fait partie d’un calcul de volume : étant donnée une mesure de liquide restant dans une citerne cylindrique horizontale dont les extrémités ont une forme de dôme sphérique, le calcul du volume de liquide. Ce sont les dômes en partie remplis qui compliquent le calcul :wink:
OlidaBel
Fonctionne à 300 bauds
Fonctionne à 300 bauds
Messages : 106
Enregistré le : 04 avr. 2021 16:09
Localisation : 50.693165,4.573478

Re: HP RPL - intégrales numériques avec fonction+programme-48G KO, 28S OK

Message par OlidaBel »

bernouilli92 a écrit : 22 mars 2023 15:03 Cela ne fonctionne pas car la fonction F1 n'est pas définie si la variable globale Y n'existe pas.
Qu'est-ce que tu veux calculer comme intégrale ?
La fonction F1 prend en paramètre une valeur qu'elle met dans x et ensuite calcule x* Y mais la variable Y n'existe pas.
l’intégrale : elle fait partie d’un calcul de volume : étant donnée une mesure de liquide restant dans une citerne cylindrique horizontale dont les extrémités ont une forme de dôme sphérique, le calcul du volume de liquide. Ce sont les dômes en partie remplis qui compliquent le calcul :wink: J’arrivais à une intégrale double. La première réalisée algébriquement, la seconde numériquement. Encore un prétexte pour ouvrir sa calculette et impressionner Mémé (sic)
Avatar du membre
bernouilli92
Fonctionne à 14400 bauds
Fonctionne à 14400 bauds
Messages : 5226
Enregistré le : 21 nov. 2012 13:03
Localisation : Ile de France

Re: HP RPL - intégrales numériques avec fonction+programme-48G KO, 28S OK

Message par bernouilli92 »

J'ai fait quelques essais. Cela fonctionne si à la place de mettre EQ1 sur la pile, tu mets le contenu de EQ1.
C'est très bizarre que cela ne fonctionne pas avec EQ1.
J'ai essayé en mettant ´F1(T^2)' dans EQ1 et en faisant une intégration suivant la variable T mais cela ne fonctionne pas non plus.

Édit : d'après la doc, le niveau 2 de la pile doit contenir l'expression qu'on veut intégrer et non le nom d'une variable contenant une expression.
HP, Casio, Sharp, Psion, quelques TI et divers autres
Avatar du membre
Hobiecat
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 3626
Enregistré le : 06 sept. 2011 14:57
Localisation : Normandie

Re: HP RPL - intégrales numériques avec fonction+programme-48G KO, 28S OK

Message par Hobiecat »

OlidaBel a écrit : 22 mars 2023 13:10 Je vérifie à l'instant sur l'émulateur iHP48.
Je ne vois pas de menu d'intégration pour les intégrales. Tout se déroule dans la pile.
C'est dans "flèche à droite" puis "symbolic", ensuite choisir "integrate" dans le menu qui est sur l'écran.
Il faut sélectionner "numeric" au lieu de "symbolic" dans le mode, puis entrer les divers paramètres.
OlidaBel
Fonctionne à 300 bauds
Fonctionne à 300 bauds
Messages : 106
Enregistré le : 04 avr. 2021 16:09
Localisation : 50.693165,4.573478

Re: HP RPL - intégrales numériques avec fonction+programme-48G KO, 28S OK

Message par OlidaBel »

bernouilli92 a écrit : 22 mars 2023 21:43 J'ai fait quelques essais. Cela fonctionne si à la place de mettre EQ1 sur la pile, tu mets le contenu de EQ1.
C'est très bizarre que cela ne fonctionne pas avec EQ1.
J'ai essayé en mettant ´F1(T^2)' dans EQ1 et en faisant une intégration suivant la variable T mais cela ne fonctionne pas non plus.

Édit : d'après la doc, le niveau 2 de la pile doit contenir l'expression qu'on veut intégrer et non le nom d'une variable contenant une expression.
merci pour ton support.
Malheureusement sur ma 48GX, si je mets le contenu de EQ1 ('F1(Y^2)' donc) au niveau 2:, j'ai quand même l'erreur.

OK et merci pour le menu Symbolic, Hobbiecat. HP n'avait pas de Design Manager à l'époque (humour déformation professionnelle :D )

L'étape suivante, après la 48GX, sera de m'attaquer à la Prime et son curieux langage, mais j'ai un peu la flemme.
Avatar du membre
bernouilli92
Fonctionne à 14400 bauds
Fonctionne à 14400 bauds
Messages : 5226
Enregistré le : 21 nov. 2012 13:03
Localisation : Ile de France

Re: HP RPL - intégrales numériques avec fonction+programme-48G KO, 28S OK

Message par bernouilli92 »

Chez moi cela fonctionne en mettant une valeur dans le variable globale Y, le flag -3 a Set, et en mettant dans la pile :
4: 0,5
3: 1
2: 'F1(Y^2)'
1: 'Y'
Et en lançant ∫, j'obtiens 0,583333 (avec 2 dans Y)

Si le flag -3 est Clear, alors j'obtiens '∫(.5,1,F1(Y^2),Y)' qui me donne 0,583333 si j'utilise →NUM

F1 est définie comme cela :
« → x 'x*Y' »

J'ai testé sur 48sx et j'obtiens la même chose.
HP, Casio, Sharp, Psion, quelques TI et divers autres
OlidaBel
Fonctionne à 300 bauds
Fonctionne à 300 bauds
Messages : 106
Enregistré le : 04 avr. 2021 16:09
Localisation : 50.693165,4.573478

Re: HP RPL - intégrales numériques avec fonction+programme-48G KO, 28S OK

Message par OlidaBel »

bernouilli92 a écrit : 23 mars 2023 13:25 Chez moi cela fonctionne en mettant une valeur dans le variable globale Y, le flag -3 a Set, et en mettant dans la pile :
4: 0,5
3: 1
2: 'F1(Y^2)'
1: 'Y'
Et en lançant ∫, j'obtiens 0,583333 (avec 2 dans Y)

Si le flag -3 est Clear, alors j'obtiens '∫(.5,1,F1(Y^2),Y)' qui me donne 0,583333 si j'utilise →NUM

F1 est définie comme cela :
« → x 'x*Y' »

J'ai testé sur 48sx et j'obtiens la même chose.
ahh, vu comme ça, oui c'est logique.
Dans ce cas avec 'Y'=2, on intègre la fonction simplifiée "Y^2*2", dont la primitive est "2/3*Y^3", donc l'intégrale vaut 2/3*1^3 - 2/3*(0.5)^3 = 0.583
C'est une illusion malheureusement : Le Y de F1 n'est pas interprété de la même façon que celui de EQ1, en F1 il est statique et vaut 2, tandis que celui de EQ1 est bien variable pour l'intégrale.
Avatar du membre
bernouilli92
Fonctionne à 14400 bauds
Fonctionne à 14400 bauds
Messages : 5226
Enregistré le : 21 nov. 2012 13:03
Localisation : Ile de France

Re: HP RPL - intégrales numériques avec fonction+programme-48G KO, 28S OK

Message par bernouilli92 »

Ah ok. En fait vous voulez faire une intégrale double ?

Mais alors que contient la variable globale Y?
HP, Casio, Sharp, Psion, quelques TI et divers autres
OlidaBel
Fonctionne à 300 bauds
Fonctionne à 300 bauds
Messages : 106
Enregistré le : 04 avr. 2021 16:09
Localisation : 50.693165,4.573478

Re: HP RPL - intégrales numériques avec fonction+programme-48G KO, 28S OK

Message par OlidaBel »

bernouilli92 a écrit : 23 mars 2023 15:10 Ah ok. En fait vous voulez faire une intégrale double ?
Mais alors que contient la variable globale Y?
Oui une double est nécessaire pour le calcul du volume me semble t-il.

Evidemment à l'époque je l'avais écrit pour la 28S et c'était passé "comme une fleur" (avec validation sur une citerne réelle dont la jauge était fichue). J'avais pris des notes, revendu la 28S, et les années ont passé.
J'ai récupéré la 48GX familiale et tenté de faire tourner ce vieux programme. Curieusement ça ne fonctionnait plus. "RPL pourtant... :geek: "

EQ1, à intégrer selon la profondeur mouillée dans la citerne, contient la différence : primitive(borne supérieure) - primitive(borne inférieure).
et "F1" contient une formule exprimant cette primitive, dont le paramètre d'entrée est une de ces 2 bornes, dans une formule encore lisible.

Evidemment je pourrais éclater tout en une seule équation et me passer de l'appel supplémentaire, ce serait plus lourd à écrire et ce ne serait plus "élégant" :P
Etant un peu têtu et curieux j'ai essayé d'adapter pour la 48GX. On est face à une subtilité du RPL inattendue, mais un chouette exemple de calcul numérique et de petite programmation qui me plait.
Répondre

Retourner vers « Tous les Pockets »