{ "nbformat_minor": 0, "nbformat": 4, "cells": [ { "source": [ "$$\n", "\\def\\CC{\\bf C}\n", "\\def\\QQ{\\bf Q}\n", "\\def\\RR{\\bf R}\n", "\\def\\ZZ{\\bf Z}\n", "\\def\\NN{\\bf N}\n", "$$\n", "# Mathematica\n", "\n", "Les th\u00e8mes des chapitres 1 \u00e0 8 repr\u00e9sentent la base des fonctionalit\u00e9s offertes par les logiciels de calcul formel dont SymPy, Sage, Mathematica, Maple, Magma et d'autres font partie. Dans ces notes de cours, nous avons utilis\u00e9 SymPy dans les 8 premiers chapitres, mais nous aurions pu utiliser un autre logiciel.\n", "\n", "Entre deux logiciels qui font la m\u00eame chose, on retrouve de nombreuses ressemblances, mais aussi des diff\u00e9rences. Dans ce cours, nous n'aurons pas le temps d'apprendre \u00e0 utiliser tous les logiciels de calcul formel ni d'\u00e9tudier toutes les diff\u00e9rences entre les uns et les autres. Toutefois, il est pertinent d'avoir une id\u00e9e de ce que peuvent \u00eatre ces ressemblances et ces diff\u00e9rences afin d'\u00eatre pr\u00eat \u00e0 utiliser dans le futur un logiciel diff\u00e9rent de celui que l'on conna\u00eet. Pour ce faire, il faut apprendre \u00e0 utiliser au moins un deuxi\u00e8me logiciel de calcul formel.\n", "\n", "Dans ce chapitre, nous pr\u00e9sentons le logiciel commercial Mathematica. Nous pr\u00e9sentons les diff\u00e9rences et ressemblances principales avec SymPy. Puis, le chapitre se termine avec des tables qui traduisent en Mathematica l'ensemble des fonctions de SymPy que nous avons pr\u00e9sent\u00e9es dans les chapitre 1 \u00e0 8. La plupart du temps, les fonctions s'utilisent avec les m\u00eames arguments et dans le m\u00eame ordre. Pour voir des exemples ou pour avoir plus de d\u00e9tails, le lecteur sera invit\u00e9 \u00e0 consulter la documentation de Mathematica ou internet.\n", "\n", "## R\u00e9sum\u00e9 des diff\u00e9rences entre SymPy et Mathematica\n", "\n", "En Python, on doit importer les fonctions que l'on utilise. Une par une en \u00e9crivant `from sympy import factor,pi,sin` ou toutes \u00e0 la fois avec `from sympy import *`. En Mathematica, on n'a **pas besoin d'importer les fonctions** avant de les utiliser.\n", "\n", "Tout d'abord, la r\u00e8gle g\u00e9n\u00e9rale en Mathematica est que les fonctions commencent avec une **lettre majuscule** plut\u00f4t qu'avec des minuscules. On \u00e9crit donc `Sin`, `Pi`, `Factor` en Mathematica plut\u00f4t que `sin`, `pi` et `factor` en SymPy.\n", "\n", "Les **noms des fonctions sont le plus souvent les m\u00eames qu'en SymPy**, mais on note quelques diff\u00e9rences comme `FactorInteger`, `ArcSin` et `ParametricPlot` en Mathematica versus `factorint`, `asin` et `plot_parametric` en SymPy. On trouve quelques autres fonctions qui portent des noms diff\u00e9rents dans les tables \u00e0 la fin de ce chapitre.\n", "\n", "Pour \u00e9valuer une fonction, on utilise les parenth\u00e8ses en SymPy `sin(pi)` et les **crochets** `[]` en Mathematica `Sin[Pi]`.\n", "\n", "Pour \u00e9valuer une cellule dans Mathematica comme dans Jupyter, c'est la m\u00eame chose, on appuie sur les touches `MAJUSCULE + ENTR\u00c9E`.\n", "\n", "En SymPy comme en Python, la **multiplication implite** `3x` n'est pas possible et il faut toujours \u00e9crire `3*x` en sp\u00e9cifiant l'op\u00e9ration de multiplication (`*`). En Mathematica, les espaces vides sont interpr\u00e9t\u00e9s comme des multiplications et `3x` sans espace est interpr\u00e9t\u00e9 comme le produit du nombre `3` par la variable `x`.\n", "\n", "En Mathematica, l'**exponentiation** s'\u00e9crit avec le symbole chapeau `^` plut\u00f4t qu'avec `**` et la division de nombres entiers retourne bien un nombre rationnel.\n", "\n", "Les listes comme `[x, 0, 2*pi]` et les tuples comme `(x, 0, 2*pi)` en Python et SymPy sont souvent utilis\u00e9s comme arguments de fonctions. De la m\u00eame fa\u00e7on en Mathematica, les listes sont beaucoup utilis\u00e9es. Toutefois, en Mathematica, on utilise les **accolades** `{` **et** `}` **pour d\u00e9finir une liste**. On \u00e9crit alors `{x, 0, 2*Pi}`. Par exemple, l'int\u00e9grale de sin(x) s'\u00e9crit en SymPy:" ], "cell_type": "markdown", "metadata": {} }, { "execution_count": null, "cell_type": "code", "source": [ "integrate(sin(x), (x, 0, 2*Pi))" ], "outputs": [], "metadata": {} }, { "source": [ "En Mathematica, cela devient:" ], "cell_type": "markdown", "metadata": {} }, { "execution_count": null, "cell_type": "code", "source": [ "Integrate[Sin[x], {x, 0, 2*Pi}]" ], "outputs": [], "metadata": {} }, { "source": [ "En SymPy, on doit d\u00e9finir les symboles avec la fonction `Symbol` ou bien on peut les importer du sous-module `sympy.abc`. En Mathematica, **toute variable non d\u00e9finie est par d\u00e9faut un symbole** et prend la couleur bleue (Mathematica v.10.0) pour les identifier.\n", "\n", "En Mathematica, contrairement \u00e0 SymPy, il n'y a pas de distinction entre la variable `x` et le symbole `x`. On peut remarquer cette diff\u00e9rence en testant le code suivant qui ne retourne pas la m\u00eame chose en Mathematica et en SymPy:" ], "cell_type": "markdown", "metadata": {} }, { "execution_count": null, "cell_type": "code", "source": [ "Clear[x] # Mathematica\n", "from sympy.abc import x # SymPy\n", "expr = x + 1\n", "x = 100\n", "expr" ], "outputs": [], "metadata": {} }, { "source": [ "En Mathematica, la ligne `x = 100` change la valeur de la variable `x` et `x` n'est plus un symbole (sa couleur change et devient noir). Cela a un effet de bord sur l'expression `expr` qui retourne la valeur `101`. En SymPy, `expr` contient le symbole `x` plus `1`. La ligne `x = 100` change la valeur de la variable `x` mais n'a pas d'effet sur les expressions qui contiennent le symbole `x`. Donc, `expr` retourne bien `x + 1`.\n", "\n", "La **compl\u00e9tion automatique** par la touche tabulation en Jupyter a son \u00e9quivalent en Mathematica. Des suggestions de noms de fonctions apparraissent \u00e0 l'\u00e9cran en Mathematica pour compl\u00e9ter les premi\u00e8res lettres que l'on \u00e9crit.\n", "\n", "Pour **acc\u00e9der \u00e0 la documentation d'une fonction** en Mathematica, il suffit d'ajouter un point d'interrogation *avant* le nom de la fonction et d'\u00e9valuer la cellule. En Jupyter, le point d'interrogation peut \u00eatre plac\u00e9 avant ou apr\u00e8s le nom de la fonction pour acc\u00e9der \u00e0 sa documentation.\n", "\n", "Python et SymPy sont bas\u00e9s sur la programmation orient\u00e9e objet ce qui explique que l'on peut \u00e9crire la fonction *apr\u00e8s* l'objet comme par exemple `pi.n()` pour calculer les d\u00e9cimales de pi et `M.det()` pour calculer le d\u00e9terminant d'une matrice. En Mathematica, cela ne se produit jamais. Les **fonctions s'\u00e9crivent toujours avant les objets** comme `N[Pi]` et `Det[M]`.\n", "\n", "La plupart du temps, la **syntaxe** est exactement la m\u00eame en SymPy et en Mathematica, mais il y a quelques exceptions. Par exemple, le calcul d'une limite en SymPy s'\u00e9crit:" ], "cell_type": "markdown", "metadata": {} }, { "execution_count": null, "cell_type": "code", "source": [ "limit(sin(x)/x, x, 0)" ], "outputs": [], "metadata": {} }, { "source": [ "alors, qu'en Mathematica, on utilise la fl\u00e8che `->` pour indiquer qu'une variable tend vers une valeur:" ], "cell_type": "markdown", "metadata": {} }, { "execution_count": null, "cell_type": "code", "source": [ "Limit[Sin[x]/x, x->0]" ], "outputs": [], "metadata": {} }, { "source": [ "On trouvera une liste des particularit\u00e9s du langage SymPy ici: . On trouvera le manuel de r\u00e9f\u00e9rence de Mathematica en ligne \u00e0 l'adresse et des vid\u00e9os d'introduction \u00e0 l'adresse .\n", "\n", "## Tables de traduction entre SymPy et Mathematica\n", "\n", "Les tables ci-bas donnent les \u00e9quivalents en Mathematica pour chacune des fonctionnalit\u00e9s de SymPy que l'on a vu dans les chapitres 1 \u00e0 8. La plupart du temps, la syntaxe est essentiellement la m\u00eame. On doit simplement ajouter des majuscules et remplacer les parenth\u00e8ses par des crochets `[]` ou des accolades `{}` selon que l'on \u00e9value une fonction ou que l'on d\u00e9finit une liste.\n", "\n", "En cas de probl\u00e8me, il ne faut pas h\u00e9siter \u00e0 consulter la documentation de Mathematica en ajoutant un point d'interrogation avant le nom de la fonction, comme `?Factor` ou sinon chercher des exemples sur internet." ], "cell_type": "markdown", "metadata": {} } ], "metadata": { "kernelspec": { "display_name": "python2", "name": "python2" } } }