Le calcul différentiel et intégral avec Julia
(jverzani.github.io)- 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
CalculusWithJuliapour 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
- Getting started with Julia : guide pour l’installation de Julia et la configuration utilisateur
- Julia interfaces : présentation des différentes façons d’interagir avec une installation de Julia
- 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.orgpermettant 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
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
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
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...
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
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 ?
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]etm = [[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 pointm ⋅ n, etA\bfonctionne 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.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.
f’etf’’.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.
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.
À 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.
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.
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...
https://www.emacswiki.org/emacs/MaximaMode
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
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 ?
Pour les différences détaillées, voir https://docs.julialang.org/en/v1/manual/noteworthy-differenc...
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
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
Le code Julia peut être bien plus lisible et bien plus performant que du code Matlab
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
« 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