3 points par GN⁺ 2024-05-19 | 1 commentaires | Partager sur WhatsApp
  • Ces notes d’apprentissage aident à comprendre le calcul différentiel et intégral sous plusieurs angles, en exploitant la syntaxe simple de Julia et ses capacités de calcul pour les graphiques et les expériences numériques
  • En suivant l’approche rule of four de Harvard, elles abordent ensemble les points de vue graphique, numérique, algébrique et verbal, tout en montrant avec Julia surtout les aspects graphiques, numériques et une partie de l’algèbre
  • Alors que des systèmes de calcul formel comme Mathematica, Maple ou Sage excellent dans le traitement symbolique, ces notes présentent Julia comme un outil centré sur le calcul numérique, auquel on ajoute le traitement algébrique nécessaire
  • Les apprenants peuvent préparer leur environnement en suivant le guide d’installation et d’interface, et utiliser le package CalculusWithJulia pour simplifier les tâches répétitives et les fonctions communes
  • Chaque page traite un concept de manière ciblée, comme une section de livre, et se termine par des exercices auto-corrigés permettant de vérifier les notions de calcul nécessaires pour résoudre des problèmes de calcul différentiel et intégral de niveau introductif

Une approche pour apprendre le calcul avec Julia

  • Calculus with Julia est un ensemble de notes pour apprendre le calcul différentiel et intégral avec le langage Julia
  • Julia est un langage de programmation open source, et dans ces notes, sa syntaxe facile à apprendre et ses capacités de calcul en font un outil adapté à l’apprentissage du calcul
  • Une documentation de préparation à l’apprentissage est également fournie
  • Depuis le milieu des années 1990, l’enseignement du calcul a vu émerger une tendance à mobiliser plusieurs points de vue à la fois, et le “rule of four” de Harvard vise à inclure autant que possible les dimensions graphique, numérique, algébrique et verbale
  • Ces notes sont conçues pour permettre d’explorer avec Julia les aspects graphiques et numériques du calcul, et parfois aussi ses aspects algébriques

Différence avec les systèmes de calcul formel

  • De nombreux exemples intègrent des systèmes de calcul formel comme Mathematica, Maple ou Sage dans l’apprentissage du calcul
  • WolframAlpha permet d’appeler les fonctionnalités de Mathematica tout en autorisant une syntaxe informelle et souple, et peut aussi servir de backend pour certaines fonctions d’Apple Siri
  • Ces systèmes modélisent bien le traitement algébrique et symbolique dans l’apprentissage, tout en fournissant aussi des moyens de montrer les aspects numériques
  • En revanche, ces notes utilisent Julia avant tout comme outil de calcul numérique, puis ajoutent par-dessus le traitement algébrique et symbolique
  • Le fait d’effectuer soi-même le traitement symbolique peut être bénéfique pour l’apprentissage, mais les systèmes de calcul formel produisent si facilement le résultat final que cet entraînement peut sembler redondant

Périmètre d’apprentissage et organisation des pages

  • L’objectif est d’aborder les concepts du calcul différentiel et intégral à l’aide de la technologie, sans se laisser enfermer dans les détails mécaniques d’un langage informatique
  • La syntaxe de Julia est présentée comme n’étant pas beaucoup plus difficile, au départ, que l’usage d’une calculatrice, tout en offrant un fort potentiel d’extension
  • Les notes ramènent les notions de calcul à un ensemble limité
    • Cet ensemble suffit néanmoins à résoudre de nombreux problèmes de calcul
    • Les différents aspects de la programmation n’y sont pas traités de manière exhaustive
    • Les apprenants plus curieux peuvent approfondir leur exploration avec Julia
  • Parmi ces notions limitées figurent des opérateurs qui ramènent les calculs de calcul à des appels de fonctions de la forme action(function, arguments...)
  • Un petit ensemble d’actions composables permet de traiter de nombreux problèmes de calcul de niveau introductif
  • Chaque page est organisée autour d’un concept relativement ciblé, comme une section de livre
  • En fin de page, des exercices à faire soi-même sont proposés, chacun avec un nombre limité de réponses auto-corrigées
  • Les idées proviennent de Strang, Knill, Schey, Hass et al., Rogawski et al., Angenent, de plusieurs pages de Wikipedia et d’autres sources

Ressources fournies et modes d’exécution

  • Les notes sont accompagnées du package Julia CalculusWithJulia
    • Il fournit de petites fonctions qui simplifient les tâches courantes
    • Il charge des packages utiles destinés à être réutilisés fréquemment
  • Les notes sont proposées au format Quarto book, et des informations sur les livres Quarto sont disponibles dans la documentation Quarto
  • Il est possible de compiler un PDF avec Quarto, mais cela demande d’ajuster plusieurs éléments, le résultat n’est pas optimal et la taille du fichier est assez importante
  • Une version PDF à télécharger est fournie
  • Il est possible de contribuer via le lien “Edit this page”, en proposant de nouveaux sujets, des corrections d’erreurs ou de fautes de frappe, et les contributeurs sont listés dans les contributors
  • Julia peut être installé facilement avec l’utilitaire juliaup
  • Des liens vers des instances binder.org permettant d’exécuter Julia sur le web sont également fournis, mais avec des contraintes de ressources
    • image sans SymPy
    • image avec SymPy, dont le chargement est plus long

1 commentaires

 
GN⁺ 2024-05-19
Avis de Hacker News
  • Mon enfant entre en première et va suivre SVC, donc ce support me paraît personnellement très bienvenu
    Si l’auteur voit ce fil, je me demande s’il conviendrait aussi à un lycéen qui n’a fait qu’une initiation à Python

    • Si un lycéen apprend le calcul infinitésimal, je pense qu’il vaut mieux commencer pendant un certain temps avec du papier et un crayon avant de programmer
      L’important est de résoudre les problèmes soi-même et de réfléchir aux concepts de base plutôt que de se soucier de la syntaxe du code ; s’exercer à la main aide à mieux intérioriser le contenu
    • Je dirais fermement non
      La partie programmation est correcte, mais à parcourir rapidement, les explications mathématiques semblent rédigées d’une manière très déroutante pour quelqu’un qui ne connaît pas déjà le calcul infinitésimal ; l’élève pourrait se dire qu’il est nul en maths alors qu’en réalité l’explication est simplement insuffisante
      Par exemple, le schéma de [1] montre une courbe qui traverse une zone ombrée en forme de L, sans même étiquettes sur les axes, puis dérive la formule de l’intégration par parties au moyen d’équations paramétriques et de plusieurs substitutions
      Même quand on connaît bien l’intégration par parties, c’est à peu près l’une des façons les plus confuses de dériver ou d’expliquer la formule, et le schéma n’aide guère si l’on n’a pas déjà compris le concept
      Si vous avez déjà vu les excellents schémas et les explications claires du “Calculus” de James Stewart, le contraste est très net
      En général, une explication de l’intégration par parties part de la règle de dérivation d’un produit, comme le fait l’auteur, mais commence par quelques exemples de dérivation de produits afin de construire une intuition sur la forme de la primitive du résultat, puis intègre les deux membres et sépare les intégrales pour obtenir la formule[2]
      C’est beaucoup plus clair et plus facile à suivre, et si l’on veut vraiment aider les étudiants, il est aussi utile d’enseigner des méthodes comme la méthode en tableau/“DI” pour éviter qu’ils ne se battent avec les signes lorsqu’ils font plusieurs intégrations par parties
      [1] https://jverzani.github.io/CalculusWithJuliaNotes.jl/integra...
      [2] Voici les notes de dérivation que j’avais prises quand je l’ai appris. Ce ne sont pas des notes écrites pour l’expliquer à des débutants, mais des notes personnelles ; elles restent toutefois beaucoup plus faciles à suivre que l’exemple ci-dessus https://publish.obsidian.md/uncarved/3+Resources/Public/Inte...
    • J’ai appris le calcul infinitésimal en autodidacte à cet âge-là, c’est-à-dire en première ; au début c’était évidemment difficile, mais j’ai tenu en feuilletant plusieurs livres à moitié jusqu’à trouver celui où les concepts s’emboîtaient vraiment
      Donc, si je devais recommander quelque chose, je dirais de regarder Quick Calculus de Kleppner et Ramsey
      Aucun livre que j’ai utilisé ne s’en approche pour construire l’intuition des concepts que l’on découvre
      Une fois cela assimilé, n’importe quel bon livre fait l’affaire ; le livre de James Stewart est excellent, mais il est tellement volumineux qu’il vaut mieux s’en servir comme ouvrage de référence, en choisissant les lectures et exercices appropriés, plutôt que de faire tous les problèmes depuis la page 1
      L’essentiel est de bien poser dès le départ les bases de ce que sont une dérivée, une intégrale et une limite ; sur ce point, Quick Calculus était largement supérieur
      Si l’étudiant s’intéresse à la programmation, il peut aussi compléter Stewart avec des exercices choisis à bon escient dans ce livre sur Julia ou dans un ouvrage similaire, et les résoudre en Python s’il le souhaite suffit amplement
      Moi aussi, au même âge, j’ai implémenté en Python un intégrateur numérique et un dérivateur symbolique pour consolider mes connaissances en calcul infinitésimal ; les deux ont été utiles et amusants
      En particulier, la dérivation symbolique donnait l’impression d’être magique, mais au final cela consistait à faire du parsing et à ajouter au fur et à mesure chacune des règles apprises en maths
    • Je ne pense pas qu’il soit nécessaire d’avoir déjà été exposé à Julia ou à la programmation pour suivre ce cours
    • Le terme “calcul infinitésimal” peut recouvrir pas mal de choses, et varier selon le cours, l’école ou le pays
      Le calcul infinitésimal que j’ai appris pendant les deux dernières années de lycée ressemblait aux années précédentes : on y apprenait plusieurs algorithmes de manipulation symbolique, quelques étapes nécessitant un peu d’intuition, et quelques faits sur les pentes et les aires afin de résoudre des problèmes énoncés
      La première chose que j’ai apprise était la règle selon laquelle la dérivée de x^n est n x^(n-1), qui fait partie des algorithmes de dérivation
      À l’université, le même sujet s’appelait analyse, et consistait à définir divers concepts puis à démontrer leurs propriétés
      Ce type de cours suit en général une structure en trois parties : suites et séries ainsi que convergence vers une limite ; continuité des fonctions et limites de fonctions ; dérivation et intégration, avec peut-être une partie du théorème de Taylor
      Depuis que Cauchy a introduit dans son manuel beaucoup de définitions “modernes”, cette structure n’a guère changé, l’exception évidente étant à peu près l’intégrale connue sous le nom d’intégrale de Riemann
      Je ne sais pas de quel type est ce cours, mais comme il commence par les limites, il pourrait être plus proche du second cas ; dans ce cas, je ne suis pas sûr de l’utilité de Julia
      Pour juger de son adéquation, le point essentiel me semble être qu’il peut exiger davantage de maturité mathématique que de programmation
      Par maturité mathématique, j’entends ici la capacité à manipuler des définitions précises et des concepts abstraits sans en tirer quantité de conclusions erronées, et à suivre des arguments sous forme de démonstrations mathématiques
  • J’ai parcouru le livre par endroits, je l’ai trouvé intéressant, et je me suis dit qu’on pourrait recommander aux enfants d’apprendre le calcul différentiel et intégral de cette manière.
    Cela dit, la phrase du premier paragraphe de la préface — « Julia est un langage de programmation open source doté d’une syntaxe facile à apprendre, et il convient bien à cette tâche » — m’intrigue.
    Pourquoi Julia serait-il plus adapté que d’autres langages ?

    • Julia a beaucoup de petits avantages utiles en mathématiques.
      Comme dans la notation mathématique standard, placer un scalaire devant une variable implique une multiplication : par exemple, si x vaut 2, 3x est évalué à 6.
      La prise en charge d’Unicode est aussi très riche : des opérateurs comme ∈ et ∉ peuvent sembler un peu excessifs, mais ils se comportent comme attendu ; π est prédéfini, et c’est même un type irrationnel ; √ peut aussi être utilisé comme opérateur, si bien que √2 est une expression valide qui donne une valeur en virgule flottante.
      Julia ne se contente pas de prendre en charge cette syntaxe : il fournit aussi des moyens simples de la saisir.
      C’est un peu moins directement lié au calcul, mais les vecteurs et les matrices y sont des types de première classe, ce qui les rend beaucoup plus faciles à saisir et à lire qu’en Python.
      C’est la différence entre m = [1 2 3; 4 5 6; 7 8 9] et m = [[1, 2, 3], [4, 5, 6], [7, 8, 9]].
      La transposée se fait avec l’opérateur d’un seul caractère ', le produit scalaire est possible avec l’opérateur point m ⋅ n, et A\b fonctionne comme dans Matlab.
      Il prend aussi en charge le broadcasting, et dispose de compréhensions, même si personnellement j’ai moins eu besoin des compréhensions grâce au broadcasting.
      Les rationnels sont également intégrés, avec une syntaxe très simple comme 1//2.
    • C’est parce que Julia a été conçu pour le calcul numérique.
      Son principal « concurrent », Python, est notoirement peu agréable pour la syntaxe des opérations mathématiques ; sa bibliothèque standard offre peu de support mathématique, son système de types est limité et ses performances d’exécution sont très mauvaises.
      Julia résout ces problèmes tout en proposant un langage relativement facile à lire, souvent proche de la notation mathématique, avec des performances assez correctes.
    • J’ai aussi cliqué un peu partout : le format et la progression du livre m’ont paru un peu déroutants, mais certaines fonctionnalités de Julia sont intéressantes, comme la notation postfixe qui permet d’obtenir des écritures manuscrites du type f’ et f’’.
      D’après mon expérience personnelle, le meilleur « livre de calcul » n’utilise pas Julia mais Haskell, et ne dépend que d’une bibliothèque pour tracer des graphiques : Learn Physics with Functional Programming.
      https://www.lpfp.io/
      Julia est connu comme un « langage de programmation pour les mathématiques », et cette orientation a guidé une grande partie de son développement.
      Explicitement, il prend en charge de nombreuses notations mathématiques correspondant à l’écriture manuscrite ou aux symboles LaTeX.
      Implicitement, cela semble renvoyer à une syntaxe simplifiée à la Python, à une large interopérabilité, à l’utilisation de SymPy auquel ce tutoriel délègue beaucoup de traitements, aux primitives intégrées de calcul parallèle, ainsi qu’à la compilation JIT, qui permet des itérations et de l’exploration rapides.
    • Il y a une bonne vue d’ensemble ici :
      https://computationalthinking.mit.edu/Spring21/
      Pour faire très court, c’est un langage assez proche de Python et tout aussi facile à utiliser, mais avec une syntaxe beaucoup plus riche pour exprimer directement les mathématiques.
      Les notebooks sont aussi plus riches.
      La différence clé est que, dans les notebooks Python, on exécute des cellules, tandis que les notebooks Julia gèrent des choses comme les dépendances.
      Si vous remplacez x par un nombre ou un curseur, tout ce qui en dépend est mis à jour.
      Vous définissez un graphique, vous ajoutez un curseur, et ça fonctionne tout simplement.
      Je ne suis pas spécialiste de Julia non plus, je travaille surtout en Python et JavaScript, mais dans des cours similaires ces deux points ressortent très clairement.
    • Julia a hérité d’une grande partie de l’ADN de MATLAB, comme l’algèbre linéaire dans la bibliothèque standard et les indices commençant à 1.
      À cela s’ajoute une prise en charge d’Unicode très souvent utilisée, et dans beaucoup de cas le code peut intentionnellement ressembler à du pseudocode.
  • Fait intéressant, comme je veux apprendre le ML, j’ai récemment recommencé à apprendre des maths — algèbre linéaire, calcul différentiel et intégral, statistiques.
    En apprenant ces différents sujets, je fais aussi de petites implémentations en Python ; j’ai un peu honte de l’avouer, mais je n’avais jamais vraiment utilisé Python auparavant.
    C’est assez agréable de pouvoir faire tourner des vecteurs et tracer des fonctions avec matplotlib.
    On peut aussi les dessiner à la main, mais pas aussi joliment.

  • Il faut être un peu prudent quand on conçoit ce genre de parcours.
    En général, cela risque surtout d’intéresser les personnes qui connaissent déjà un peu à la fois le calcul et la programmation, tandis que le public visé — des gens qui apprennent l’un des deux — n’est pas forcément prêt à suivre ce type de cours.
    Personnellement, quand j’ai essayé d’intégrer à un cours de calcul un système de calcul formel un peu exotique comme Maxima ou Sagemath, l’accueil a été au mieux tiède.
    Une partie du problème, à mon avis, venait du fait que des étudiants de première année n’étaient pas très motivés à installer un logiciel pour un cours qui n’était pas un cours d’informatique.
    Cela dit, dans des cours d’un niveau un peu plus avancé, cela peut très bien fonctionner comme élément optionnel, et j’ai obtenu de très bons résultats avec des projets Python dans un cours d’équations différentielles ordinaires.
    Le fait que Python ne soit pas un langage de niche a clairement aidé aussi.

    • C’est une difficulté fréquente aussi dans l’enseignement des statistiques, où les étudiants doivent apprendre en même temps les concepts statistiques et les logiciels statistiques.
      Malgré tout, je pense que ce défi vaut la peine d’être relevé, et que c’est mieux que de tout calculer à la main et d’aller chercher les valeurs dans des tables.
    • Du point de vue d’un programmeur autodidacte qui n’a pas appris au-delà de l’algèbre, cette ressource a vraiment l’air excellente, et je fais peut-être justement partie de cette petite cible.
    • Si vous avez obtenu de bons résultats avec des projets Python dans un cours d’équations différentielles ordinaires, je serais curieux de savoir quel support vous avez utilisé.
      J’aimerais beaucoup que vous puissiez partager les ressources de référence, qu’il s’agisse de notes de cours, de code, de diapositives, de livres, ou autre.
  • À ce sujet, si vous utilisez Emacs, il existe le paquet Calc, qui prend en charge le calcul formel.
    J’ai récemment publié une interface qui rend Calc beaucoup plus facile à utiliser, et j’en ai parlé ici :
    http://yummymelon.com/devnull/mathing-in-emacs-with-casual.h...

  • Le concept me plaît
    Mais j’aurais trouvé ça bien mieux si ce type de ressource avait été construit sur quelque chose comme MOOCulus, ou en était parti
    https://ximera.osu.edu/mooculus/calculus1
    Globalement, je préfère MOOCulus
    Cela dit, Calculus with Julia apporte tout de même beaucoup de valeur
    Ce serait bien si les deux pouvaient être intégrés d’une manière ou d’une autre
    Le point fort de MOOCulus, c’est que la qualité de l’écriture est meilleure et beaucoup moins verbeuse, et que les exercices intégrés obligent les étudiants à suivre le contenu attentivement
    Il est beaucoup utilisé en cours et il est aussi assez bien peaufiné
    Le forker pour y renforcer Julia serait une très grosse amélioration, et ajouter des exemples d’application le serait probablement aussi

    • J’ai jeté un œil au site web, et il est assez difficile de comprendre comment l’utiliser
      En plus, il y a une erreur dans le premier élément sur lequel j’ai cliqué, « Equal or Not? »
  • La combinaison Maxima et Gnuplot, avec la documentation fournie, est également assez bonne
    Il me semble qu’il existait aussi une introduction/un guide PDF assez abouti pour Maxima

  • Julia peut-il être une alternative valable pour quelqu’un qui utilisait Matlab ?

    • Tout à fait
      Pour les différences détaillées, voir https://docs.julialang.org/en/v1/manual/noteworthy-differenc...
    • Très clairement
      C’est un peu comme tendre un verre d’eau glacée à quelqu’un en enfer
      Pour reprendre ce que Steve Jobs disait d’iTunes pour Windows — sachant bien sûr qu’à l’époque, iTunes n’était pas encore devenu le bazar qu’il est devenu ensuite
      J’ai beaucoup de respect pour ce que Cleve Moler et Matlab ont accompli, en particulier le fait d’avoir rendu facilement accessibles LINPACK, EISPACK, etc.
      Ils ont aussi beaucoup travaillé pour dépasser la limitation initiale d’un seul type de données : les matrices
      Mais Julia est un langage généraliste moderne, bien plus agréable à utiliser, tout en conservant presque toute la puissance de Matlab
    • À bien des égards, oui
      Il est beaucoup plus rapide, dispose généralement de bien meilleures fonctionnalités en tant que langage de programmation, et la parallélisation y est beaucoup plus facile
      Pour avoir utilisé les deux professionnellement, je dirais qu’aujourd’hui, Julia est généralement le meilleur choix
      Cela dit, des langages comme Matlab ou Stata disposent d’une énorme quantité d’algorithmes existants déjà implémentés, et il se peut qu’il n’y ait pas d’implémentation équivalente en Julia
      Si ce que vous voulez en fait partie, il est souvent difficile de justifier l’usage d’un autre langage
      En pratique, porter du code Matlab/Python/Stata vers Julia a généralement été assez facile
    • Très clairement
      Le code Julia peut être bien plus lisible et bien plus performant que du code Matlab
    • Cela dépend si vous dépendez de toolboxes MATLAB ou de fonctionnalités d’intégration spécifiques
      Si ce n’est pas le cas, Julia donne une bonne impression et devrait être une alternative suffisante
      Sa syntaxe est assez similaire et il possède beaucoup des commodités de MATLAB liées aux tableaux
      En plus, il offre un bon système de types et une bien meilleure gestion de la programmation généraliste ; par exemple, l’emplacement des fonctions ne se comporte pas bizarrement
      Je recommande de l’essayer directement
  • Le lien PDF dans l’en-tête de la page renvoie une 404

    • Il semble avoir été désactivé volontairement
      « Ces notes peuvent être compilées en fichier PDF via Quarto. Comme le résultat est assez volumineux, aucun fichier n’est fourni au téléchargement. Les lecteurs intéressés peuvent récupérer le dépôt, instancier l’environnement, puis exécuter quarto depuis le sous-répertoire quarto pour effectuer le rendu en PDF ; le fichier sera alors généré. Cela prend un certain temps »
  • « Le calcul est une tentation à laquelle il faut résister aussi longtemps que possible »
    J.P. Boyd