La programmation par l`exemple

publicité
Chapitre 6
La programmation par l'exemple
Goldberg : Is the number 846 possible or necessary ?
Stanley : Neither.
Goldberg : Wrong ! Is the number 846 possible or necessary ?
Stanley : Both.
Goldberg : Wrong ! It's necessary but not possible.
Stanley : Both.
Goldberg : Wrong ! Why do you think the number 846 is necessarily possible ?
Stanley : Must be.
Goldberg : Wrong ! It's only necessarily necessary ! We admit possibility only after we grant
necessity. It is possible because necessary but by no means necessary through possibility. The
possibilitity can only be assumed after the proof of necessity.
McCann : Right !
Harold Pinter.
The Birthday Party.
Il n'est pas très ecace d'apprendre à programmer en lisant la longue liste des commandes
disponibles en Python et leurs syntaxes. Certes, cette liste gure dans la documentation ; le programmeur s'y reporte lorsqu'il cherche une information précise ; mais, dans la pratique, personne
ne lit in extenso les 8 Mo de la doc qui est téléchargeable à l'adresse :
http://docs.python.org/3/download.html.
La meilleure façon d'apprendre à programmer est de s'appuyer sur des exemples (c'est l'intérêt de ce livre ; sinon on pourrait se contenter de la doc). Choisissez un TD dont le thème vous
intéresse et lisez le code en vous aidant du lexique. Lorsque vous devrez réaliser vos premiers
programmes, inspirez vous de ces exemples en les adaptant à votre cas particulier.
Ainsi,
pour résoudre une équation
numériquement par dichotomie, rechercher les programmes qui contiennent l'instruction
bisect (ex : les calculs de pH, le temps de réponse d'un second ordre) ;
numériquement à partir d'un point, rechercher fsolve (ex : dosage conductimétrique)
65
66
CHAPITRE 6.
LA PROGRAMMATION PAR L'EXEMPLE
de façon symbolique, rechercher solve (ex : impédances complexes, oscillateur à réseau
déphaseur, arc en ciel)
pour rechercher un zéro dans une liste, rechercher index(min(...)) (ex : décollage d'une
bille, période du pendule) ;
pour résoudre un système d'équations non-linéaires, rechercher nsolve (ex : complexations
croisées)
pour résoudre une équation diérentielle
numériquement, rechercher odeint (ex : cinétique chimique, bille, Rutherford, jokari,
fusée, pendule, oscillateurs couplés, résonance paramétrique, boussole, double puits, Coriolis, transitoire du RLC, miroir magnétique) ;
de façon symbolique, rechercher dsolve (ex : oscillateur mécanique forcé) ;
pour intégrer une fonction
numériquement, rechercher quad (ex : parcours d'une ellipse, champ magnétique dans le
plan d'une bobine, champ magnétique hors de l'axe d'une spire, bobine de Helmoltz hors
de l'axe, diraction par une ouverture apodisée, diraction par une ouverture circulaire) ;
de façon symbolique, rechercher integrate (ex : intégrale multiple, transformée de
Fourier) ;
pour tirer des nombres au hasard, rechercher rand (ex : calcul de π , intégrale multiple,
marche aléatoire, fractales, désintégration radioactive, cryptage RSA) ;
pour eectuer une régression linéaire, rechercher polyfit (ex : diacide organique, intégrale
multiple) ;
pour prendre le gradient d'un champ de scalaires, rechercher gradient (ex : ligne de
champ d'un système de charges, inuence d'une charge sur une sphère) ;
pour faire du calcul matriciel, rechercher array (ex : quadripôle, instruments d'optique,
ondes e.m. stationnaire dans les diélectriques) ;
pour manipuler des nombres avec un grand nombre de chires signicatifs, rechercher
Decimal (ex : calcul de π )
pour manipuler des chaînes de caractères, rechercher str (ex : ressources externes des
entreprises) ; pour passer une chaîne de caractères en argument, rechercher eval (ex :
double puits) ;
pour dessiner une surface, rechercher plot_surface (ex : orbitales atomiques, lignes de
champ d'un système de charges, diraction par une ouverture rectangulaire) ;
pour tracer des lignes de niveau, rechercher contour (ex : lignes de champ d'un système
de charges, ligne de champ d'un condensateur, inuence d'une charge sur une sphère, gaz
de Van der Waals, diraction par une ouverture rectangulaire, ondes électromagnétiques
stationnaires) ;
pour réaliser des animations, rechercher animation (ex : miroir magnétique, ondes de
chaleur, onde e.m. non stationnaire, propagation d'onde) ;
pour réaliser une interface graphique, rechercher tkinter (ex : pH).
R . En eet,
Pour chaque TD, nous avons indiqué les codes en Python et en Mathematica
beaucoup d'ingénieurs connaissent Mathematica ; en comparant les deux codes, ils peuvent
rapidement se familiariser à Python. Réciproquement, les élèves de classes préparatoires seront
formés en Python mais, dans les bureaux d'étude, ils devront s'adapter à Mathematica.
67
Note.
Les codes sont réalisés avec la version de Python la plus récente au moment de la publication
du livre, à savoir la version 3.3.0 (v3.3.0 :bd8afb90ebf2, Sep 29 2012, 10 :55 :48) avec les bibliothèques : NumPy 1.7.0rc1, SciPy 0.12.0.dev-61649fe, MatPlotLib 1.2.0, SymPy 0.7.2 et
PyPrimes 0.1.1a.
En revanche, les mises à jour de Mathematica n'étant pas gratuites, nous avons réalisé les
codes avec une version quasi pré-historique, à savoir la version 2.2 sortie en 1993, an qu'ils
soient lisibles par le plus grand nombre.
Téléchargement