Page 1 of 2

Nouvelle mise-à-jour NumWorks 1.3.0

Unread postPosted: 01 Feb 2018, 14:42
by Admin
Depuis sa sortie pour la rentrée 2017, le développement de la calculatrice NumWorks s’était concentré sur des fonctionnalités novatrices encore jamais vues sur un modèle de milieu de gamme, et parfois même révolutionnaires tout court :
  • une application de probabilités polyvalente et très intuitive car parlant le langage des élèves :bj:
  • un environnement complet de développement Python :bj:
  • un moteur de calcul littéral :bj:
  • basé sur le précédent, un moteur de calcul exact complet, car non limité à un petit nombre prédéfini de formes remarquables contrairement aux autres modèles de milieu de gamme :bj:
Mais comme nous l’avions vu dans notre classement de rentrée QCC 2017, sur l’ensemble d’autres critères moins poussés la NumWorks était plus décevante, se comparant plutôt à l’entrée de gamme.

La nouvelle version 1.3.0 du firmware NumWorks sortant ce jour s’attaque à ce dernier point, et améliore de façon transversale nombre de fonctionnalités.
Voyons ensemble ce que ça donne pour chaque application :
Image Image Image Image Image Image Image Image




Application Calculs numérique, exact et littéral :Go to top

Du côté du moteur de calcul littéral et exact de l’application Calculs, nous bénéficions d’une meilleure simplification des logarithmes en base quelconque, et enfin du développement automatique des puissances de sommes ou différences. De plus, la touche
Ans
permettant de réutiliser le dernier résultat dans la saisie d’un calcul devient enfin fonctionnelle dans le contexte de résultats exacts et littéraux, ce qui facilitera nombre de manipulations.

Du côté du moteur d’affichage naturel, nous notons une amélioration en lisibilité de l’écriture des puissances qui était jusqu’alors assez contrastée avec celle des indices.

On apprécie l’arrivée de nouvelles fonctions dans la boîte à outils, dont enfin deux fonction de simulation :
  • random() qui renvoie un nombre aléatoire sur l’intervalle [0;1[
  • randint(a,b) qui renvoie un nombre entier aléatoire sur l’intervalle [a;b]
  • factor(n) qui effectue la décomposition d’un entier en facteurs premiers

De façon très pertinente depuis la dernière version, la réponse à un calcul pouvait être fournie sous forme d’une paire de résultats, l’un en écriture exacte et l’autre en écriture décimale. De quoi faire progresser l’utilisateur sur sa compétence Représenter, en mettant ainsi en évidence le lien qui les unit au lieu qu’il doive basculer manuellement de l’un à l’autre, et de façon pas toujours intuitive comme sur d’autres modèles. Toutefois, un problème était que ces deux résultats étaient systématiquement liés par le symbole environ, ce qui n’était pas toujours une notation correcte.
Désormais dans la nouvelle version, les paires de résultats utilisent le symbole environ ou égal adéquat. C’est bien mieux pour l’utilisateur, lui permettant non seulement de recopier sans crainte des réponses qui seront bien considérées comme exactes selon tous les critères de compétences, mais également sa leur propre compréhension du langage mathématique et sa compétence Communiquer qui va avec. :bj:

Niveau corrections de bugs, on peut citer la fonction inverse() qui certes fonctionnait quand on lui donnait une matrice, mais donnait une réponse assez originale quand on lui fournissait un nombre, multipliant l’inverse attendu par undef×i. Problème désormais corrigé.

Il y a aussi la fonction de calcul du nombre dérivé diff() qui dans certains cas renvoyait n’importe quoi pour la fonction valeur absolue, chose désormais corrigée.

D’ailleurs à ce sujet, l’algorithme interne de calcul du nombre dérivé semble avoir été profondément modifié, résistant dans la majorité des cas beaucoup mieux lorsque l’on tente de le piéger.

Enfin, comme Calculs devrait être l’application la plus utilisée, notons qu’il est maintenant possible d’y revenir très rapidement depuis une autre application grâce à un nouveau raccourci. Il suffit pour cela de taper
Maison
2 fois de suite puis de valider.



Application Fonctions :Go to top

Dans l’application Fonctions, nous notons déjà un affinage des axes sur la vue graphique, ainsi qu’un tout nouveau curseur, et un décalage sur la gauche des valeurs affichées lorsque le nombre dérivé est activé, évitant ainsi de tronquer la valeur de ce dernier dans certains cas.

On voit de plus que l’affichage du nombre dérivé pour la fonction valeur absolue bénéficie de la même correction déjà abordée pour l’application Calculs.

Rappelons que lorsque le curseur est activé sur cette vue la calculatrice nous invite à taper
OK
pour accéder à un menu contextuel.

Et bien il y a du nouveau dans ce menu contextuel, avec un nouveau sous-menu Calculer permettant de :
  • Rechercher et afficher des points remarquables (minimum local, maximum local, point d’intersection entre deux courbes, zéro soit point d’intersection avec l’axe des abscisses). Notons que contrairement à d’autres modèles, quand il existe plusieurs points répondant au critère sélectionné, l’on peut passer intuitivement de l’un à l’autre avec les flèches sans aucun besoin de reproduire toute la manipulation.
    On comprend d’ailleurs maintenant la raison d’être du nouveau curseur, sans lequel les points correspondant aux zéros auraient été fort mal mis en évidence.
  • Tracer et déterminer l’équation d’une tangente. On apprécie le rappel de la forme de l’équation accompagnant les valeurs de a et b, contrairement à d’autres modèles. :bj:
  • Calculer et représenter graphiquement la valeur d’une intégrale. On apprécie d’ailleurs dans ce cas le fait d’être guidé en direct lors de la sélection des bornes, par une indication textuelle en français, par la représentation graphique de l’aire correspondante, et aussi par une représentation en écriture naturelle de l’intégrale en bas à gauche pouvant permettre de vérifier si l’on est bien en train de spécifier ce que l’on pense. Un choix très pertinent qui tout en aidant l’utilisateur permettra de perfectionner sa compétence Représenter. :bj:




Application Suites :Go to top

Dans l’application Suites, quand on accède aux propriétés en sélectionnant son nom et faisant
OK
, on a désormais accès à une nouvelle option librement modifiable : l’indice du premier terme. De quoi s’adapter d’une part aux quelques exercices qui nous proposeront de temps en temps des suites ne démarrant pas au rang 0. Mais cela va bien plus loin que ça, car c’est aussi d’autre part une façon pour la calculatrice de s’adapter aux usages de différents pays. En effet, si la plupart des suites démarreront au rang 0 chez nous, en Amérique du Nord ce sera au rang 1.

Enorme nouveauté, il devient enfin possible de travailler sur des suites auxiliaires, c’est-à-dire des suites définies en fonction d’une autre, situation qui tombe quasiment chaque année au BAC. Avec cette amélioration tant attendue, on peut enfin qualifier la calculatrice NumWorks de conforme aux programmes de Première et Terminale, et la recommander sans réserve.

L’application Suites bénéficie de plus dans sa vue graphique de l’affinage des axes décrit plus haut pour l’application Fonctions.




Application Paramètres :Go to top

Il y avait un petit problème événementiel dans l’application Paramètres. Lorsque l’on validait un nouveau choix de nombre de chiffres significatifs, il n’était plus possible de changer d’avis et de valider les choix Automatique ou Scientifique. Du moins pas sans quitter puis revenir à cet écran. Problème désormais corrigé.




Applications Statistiques et Régressions :Go to top

Les application Statistiques et Régressions bénéficient elles aussi dans leurs vues graphiques de l’affinage des axes décrit plus haut pour l’application Fonctions.




Application Probabilités :Go to top

Un problème avec l’application Probabilités évoqué par certains enseignants aux journées APMEP, était la précision des résultats, limités à 3 décimales et non 3 chiffres significatifs. C’était embêtant dans le cas de probabilités très faibles, la calculatrice pouvant même retourner à tort une probabilité nulle. La nouvelle version corrige ce problème, la précision ayant été doublée avec dorénavant jusqu’à 6 décimales.

En conséquence de la taille d’affichage pouvant donc être accrue, les différents champs numériques permettant de saisir les données ou afficher les résultats ont désormais une taille variable, s’adaptant automatiquement à leur contenu. Fort appréciable dans le cas des intervalles, la relation de probabilité affichée contenant alors 3 champs numériques au lieu de 2.

Sur la relation de probabilité affichée, l’utilisateur avait le plus souvent le choix entre :
  • sélectionner et saisir la ou les bornes de la variable aléatoire X pour obtenir la probabilité
  • sélectionner et saisir la probabilité pour obtenir la ou les bornes de la variable aléatoire X
Notons que le 2ème choix n’est pas toujours offert dans le cas de relations du type P(?≤X≤?)=?, car il y a parfois plusieurs solutions et pas de critère permettant d’en privilégier une. La calculatrice permet par exemple d’obtenir les 2 bornes d’un intervalle à partir d’une probabilité dans le cas de la loi normale. Mais elle ne le permet pas dans le cas des lois binomiale, uniforme, exponentielle et de Poisson.
Même remarque pour les relations du type P(X=?)=? dans le cas des lois discrètes (binomiale et de Poisson).

Ce n’est pas un problème en soi, mais cela avait une conséquence assez embêtante. Nombre d’utilisateurs ont pris l’habitude d’utiliser
shift
copy
pour copier les valeurs numériques puis
shift
paste
pour les coller dans une autre application, Calculs par exemple, afin de pouvoir continuer à travailler dessus pour la suite de leur exercice.

Or, dans les situations où la calculatrice ne permettait pas la saisie de la probabilité, il était tout simplement impossible de sélectionner sa valeur pour la copier, obligeant donc à la retenir de tête ou à la copier temporairement sur un bout de papier, le temps de changer d’application.

Ce problème est désormais résolu lui aussi. Tous les champs numériques des relations, même ceux non modifiables, peuvent dorénavant être sélectionnés et copiés.

Enfin, comme visible ci-dessus, l’application Probabilités bénéficie elle aussi pour son interprétation graphique de l’affinage des axes décrit plus haut pour l’application Fonctions.




Application Python :Go to top

Comme l’application Fonctions et conformément aux programmes scolaires de l’enseignement secondaire, l’application Python permet désormais d’effectuer des simulations, grâce à l’ajout d’un tout nouveau module à importer, random.

En plus des guillemets, les chaînes de caractères deviennent délimitables avec des apostrophes suite à l’ajout de ce caractère dans le catalogue. Il sera est donc maintenant possible d’alterner entre les délimiteurs selon le contenu de la chaîne, afin d’éviter ou limiter le besoin de faire appel au caractère d’échappement.

Dans le contexte des listes, le caractère ‘:’ permettant de référencer une suite d’éléments de positions consécutives est maintenant reconnu et parfaitement fonctionnel.

Les fonctions min() et max() déjà listées au catalogue deviennent également fonctionnelles dans le contexte de listes.

Et puis nous avons une toute nouvelle instruction d'entrée, input(), permettant d'inviter avec le message de son choix l'utilisateur à saisir une donnée en cours d'exécution d'un programme.

Enfin, parlons performances. Cela ne concerne pas que l’application Python mais c’est celle où peut aisément mettre en évidence les différences. La NumWorks était déjà dans sa version 1.2.0 précédente la calculatrice graphique la plus performante à ce jour. Il n’empêche que comme déjà annoncé, les performances de la calculatrice ont été en prime améliorées de façon significative depuis la version précédente, suite à l’acceptation de deux contributions au code source officiel :
Voici ci-dessous en vidéo ce que donne le tracer d’un même programme de fractale avec l’ancienne version 1.2.0 et la nouvelle version :
Code: Select all
from kandinsky import set_pixel
def mandelbrot(W,H,N) :
w=2.7/(W-1)
h=1.87/(H-1)
n=255.0/N
for x in range(W):
  for y in range(H):
   z=complex(0,0)
   c=complex(w*x-2.1,.935-h*y)
   for j in range(N):
    z=z*z+c
    if abs(z)>2:
     break
   set_pixel(x,y,255*65792*j+256)


L’ancienne version mettait donc 1min14s quand la nouvelle ne met plus que 54 secondes, une progression extraordinaire ! :bj:




En conclusion, la nouvelle version NumWorks ratisse large et apporte du bon biscuit à tout-le-monde. Avec notamment la gestion des suites auxiliaires, nous n’aurions plus aucune objection ou mise en garde à formuler auprès d’élèves de Première ou Terminale envisageant de s’équiper de ce modèle. La NumWorks est désormais en adéquation globale avec l’ensemble du programme scolaire du lycée français, félicitations ! :bj:




Liens :

Re: Nouvelle mise-à-jour NumWorks 1.3.0

Unread postPosted: 01 Feb 2018, 15:55
by parisse
Le simulateur en ligne n'a pas l'air a jour.
On peut en effet saluer l'app fonction qui est maintenant au niveau de ce qu'on attend d'une calculatrice graphique (meme si on ne peut pas encore definir une fonction en fonction d'une autre), l'app suite qui permet d'en definir une en fonction de l'autre et l'ajout du module urandom (meme si je reste reserve sur le nom random qui risque de preter a confusion)
Je suis un peu etonne de ne rien voir de plus que ce que je listais il y a quelques jours. La factorisation des entiers a ete corrigee selon ma demande et permet donc d'aller jusqu'a 10007^2 (non inclus).
Je ne vois pas trop d'utilite a randint/random dans Calculs, heureusement parce que l'implementation fait peur:
Code: Select all
uint32_t Ion::random() {
  /* rand() returns a pseudo-random integral number in the range between 0 and
   * RAND_MAX which is garantueed to be at least 32767.*/
  uint32_t result = 0;
  for (int i = 0; i < 131077; i++) {
    result += rand();
  }
  return result;
}

Re: Nouvelle mise-à-jour NumWorks 1.3.0

Unread postPosted: 01 Feb 2018, 18:44
by parisse
Petit exercice de simulation de niveau terminale. Dans l'app Calculs (du simulateur parce que c'est un peu long, expliquez pourquoi!): entrez sum(random(),1,8192)/8192-0.5 et faites le calcul plusieurs fois. Est-ce que les resultats semblent se repartir selon la loi normale de parametre 0,sqrt(3)/6/sqrt(8192)?
http://www-fourier.ujf-grenoble.fr/%7eparisse/xcasfr.html#exec&python=0&+n%3A%3D2%5E13%3B%0Al%3A%3Dseq(%0A%20%20%20%20sum(rand()%2Cj%2C1%2Cn)%2Fn-0.5%2C%0A%20%20%20%20200)&+sigma%3A%3Dstddev(uniformd%2C0%2C1)%3B%0Aevalf(sigma%2Fsqrt(n))%0A&+histogram(l%2C-0.01%2C0.0005)%3B%0Aplot(normald(0%2Csigma%2Fsqrt(n)%2Cx)%2Cx%3D-0.01..0.01)&

Re: Nouvelle mise-à-jour NumWorks 1.3.0

Unread postPosted: 02 Feb 2018, 08:09
by parisse
Je suis assez etonne que le lievre que j'ai souleve sur le generateur aleatoire de Calculs n'amene aucun commentaire. Il me semble qu'au regard des programmes de lycee, generer un nombre aleatoire en faisant la somme de 131077 entiers aleatoires renvoyes par rand() aurait pourtant du questionner, meme en laissant de cote l'aspect efficacite (1 ou 2 appels a rand auraient du suffire). Heureusement que rand() renvoie un entier 31 bits et pas un entier entre 0 et 32767 comme le laisse entendre le commentaire et le choix de 131077=ceil(2^32/32767), les calculs modulo 2^32 evacuent la partie de poids fort de l'entier somme qui etait previsible par la loi des grands nombres. Heureusement aussi, 131077 ne divise probablement pas la periode du generateur congruentiel probablement implemente dans rand() (periode qui est je pense 2^31-1).
Mais du coup, on peut se demander s'il n'y a pas d'autres aberrations ailleurs dans le code source d'epsilon.

Re: Nouvelle mise-à-jour NumWorks 1.3.0

Unread postPosted: 02 Feb 2018, 08:28
by Wistaro
parisse wrote:Petit exercice de simulation de niveau terminale. Dans l'app Calculs (du simulateur parce que c'est un peu long, expliquez pourquoi!): entrez sum(random(),1,8192)/8192-0.5 et faites le calcul plusieurs fois. Est-ce que les resultats semblent se repartir selon la loi normale de parametre 0,sqrt(3)/6/sqrt(8192)?
http://www-fourier.ujf-grenoble.fr/%7eparisse/xcasfr.html#exec&python=0&+n%3A%3D2%5E13%3B%0Al%3A%3Dseq(%0A%20%20%20%20sum(rand()%2Cj%2C1%2Cn)%2Fn-0.5%2C%0A%20%20%20%20200)&+sigma%3A%3Dstddev(uniformd%2C0%2C1)%3B%0Aevalf(sigma%2Fsqrt(n))%0A&+histogram(l%2C-0.01%2C0.0005)%3B%0Aplot(normald(0%2Csigma%2Fsqrt(n)%2Cx)%2Cx%3D-0.01..0.01)&


Selon le theorème Centrale-Limite, je dirais que ça devrait effectivement suivre une gaussienne avec les paramètres indiqués. Du moins en theorie.
Bien sûr, si rand() renvoit réellement des réalisations de variables aléatoires suivant une loi uniforme sur [0,1[.

Après pourquoi ça n'est pas le cas....Aucune idée.

Re: Nouvelle mise-à-jour NumWorks 1.3.0

Unread postPosted: 02 Feb 2018, 09:21
by parisse
J'ai fait une vingtaine d'essais (c'est deja vraiment long!), mais sur un echantillon de cette taille, il n'est pas possible de voir s'il y a un biais. Je voulais tester si le fait qu'on depasse la periode du generateur aleatoire rand() des qu'on fait deux fois sum() allait creer un biais (c'est pour ca que j'ai pris la plus grande puissance de 2 pour laquelle sum est evaluee) mais ca prend trop de temps. En y reflechissant un peu plus, je pense que ca ne doit pas en faire apparaitre, parce que des qu'on ajoute un rand() a la somme, ca la modifie beaucoup modulo 2^32. Mais l'algorithme actuel doit quand meme absolument etre corrige!

Re: Nouvelle mise-à-jour NumWorks 1.3.0

Unread postPosted: 02 Feb 2018, 14:38
by Adriweb
Il se trouve que, apparemment, le firmware de la calculatrice n'utilise pas cette implementation la (elle, qui est en train de se faire corriger *, certes, était utiliser pour les simulateur et le fuzzing)

Sur la PR, on voit désormais : return (rand() << 24) ^ (rand() << 16) ^ (rand() << 8) ^ rand();

Pour le fun, sinon, mon IDE me dit/disait, ailleurs, par rapport à l'autre (mais c'est lié) :
Image

Re: Nouvelle mise-à-jour NumWorks 1.3.0

Unread postPosted: 02 Feb 2018, 14:44
by critor
Voilà.

Donc si je comprends bien, le problème ne concernerait que le simulateur, pas la calculatrice.

Et encore, sachant qu'au moment où j'avais vérifié et comme vous l'avez déjà dit plus haut, le simulateur en ligne ( https://www.numworks.com/fr/simulateur/ ) n'était toujours pas à jour en version 1.3.0, et donc toujours pas sorti officiellement.

Donc les seules personnes à avoir le problème sont celles qui recompilaient le simulateur à partir de github/Master, sans attendre sa sortie officielle de sa version 1.3.0.

Re: Nouvelle mise-à-jour NumWorks 1.3.0

Unread postPosted: 02 Feb 2018, 14:47
by Adriweb
Ca concernait les 2 simulateurs et la version blackbox (pour fuzzing etc.), oui, pas la version device.

Re: Nouvelle mise-à-jour NumWorks 1.3.0

Unread postPosted: 02 Feb 2018, 15:46
by critor
En passant, le changelog officiel est sorti :
Show/Hide spoilerAfficher/Masquer le spoiler
Version 1.3.0 - 1 février 2018

Résumé
Cette mise à jour contient de nouvelles fonctionnalités pour votre calculatrice et apporte certains correctifs qui améliorent les performances de votre appareil.

Amélioration de l'application Suites
Il est désormais possible de définir des suites liées : les termes utilisables sont dans la Toolbox
Ajout du choix de l'indice du premier terme de la suite dans les réglages de la suite

Amélioration de l'application Fonctions
Nouveau menu Calculs accessible en appuyant sur OK lorsque le curseur est sur une courbe
Calcul de minimum ou de maximum
Calcul de zéro
Calcul d'intersection
Calcul d'intégrale
Calcul d'équation de tangente
Modification du graphisme du curseur
Amélioration du graphisme de la fenêtre de graphe

Amélioration de l'application Python
Module random. Les fonctions disponibles ont été ajoutées à la Toolbox : getrandbits, seed, randrange, randint, choice, random, uniform
Ajout de input(), min(), max(), list[m:n], caractère apostrophe

Amélioration de l'application Probabilités
Tous les résultats peuvent maintenant être sélectionnés et copiés
Augmentation de la précision des résultats
Les champs de texte sont maintenant étirables et s’adaptent au texte qu’ils contiennent
Utilisation de erf et de l’inverse de erf pour la loi normale

Ajout de nouvelles fonctions dans la Toolbox
factor(n) : décomposition en facteurs premiers
random() : nombre aléatoire entre 0 et 1
randint(a,b) : entier aléatoire entre a et b

Amélioration de l'application Calculs
Développement des puissances de multinômes (a+b+c+...)^n
Le symbole Ans est maintenant remplacé par son expression mathématique exacte
Simplification des logarithmes en base a
Ajout du signe égal entre une expression et sa valeur décimale exacte dans les résultats

Correctifs et améliorations
Correction de l'alignement des exposants
Correction d'un bug dans le réglage du nombre de chiffres significatifs
Correction d'un bug de inverse(x)
Amélioration des performances de la calculatrice
Correction d'un bug sur la dérivée de la valeur absolue, amélioration du calcul de la dérivée
Sur le menu Home, l’appui sur la touche Home ou sur la touche Back amène la sélection sur l’application Calculs

Remerciements
Nous remercions les contributeurs qui ont aidé à l'élaboration de cette mise à jour : Adrien Bertrand, Jean-Baptiste Boric, Yoann Dupas, Max Lekeux, Damien Nicolet, Gabriel Potter, Jacob Young.

https://workshop.numworks.com/firmwares