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.