Marc BUFFAT

Professeur au département de Mécanique, Lyon 1 e-mail

Blog scientifique et pédagogique utilisant des notebooks IPython et Linux

cours en ligne INPROS: chapitre 1


Ipython notebook : cours INPROS LyonHPC

Auteur: Marc BUFFAT, Pr dpt de Mécanique, UCB Lyon 1

Contributeurs: Violaine Louvet, Michel Kern, Loic Gouarin, Laurence Viry </h5>

Licence Creative Commons
Mise à disposition selon les termes de la Licence Creative Commons
Attribution - Pas d’Utilisation Commerciale - Partage dans les Mêmes Conditions 2.0 France
.
In [2]:
%matplotlib inline
%autosave 300
import numpy as np
import matplotlib.pyplot as plt
from IPython.display import HTML,display
css_file = 'style.css'
try:
    display(HTML(open(css_file, "r").read()))
    print("using ",css_file)
except :
    print("using default css")
Autosaving every 300 seconds
using  style.css

LyonHPC LyonHPC
</div> histoire des ordinateurs

Format du cours

  • Utilise un document écrit interactif (IPython notebook) avec du texte, des diagrammes, des exemples de code et des programmes interactifs
    • Vidéo, notes de cours en PDF , notebook en HTML
  • A la fin de chaque leçon de cours: quiz et exercices en ligne
  • La programmation s’apprend en pratiquant !!
  • Cours basé sur des exemples

Que peut-on faire avec un ordinateur ?

Équation de base des ordinateurs (Nick Parlante)

Ordinateur = Puissance + Stupidité

  • **puissance**: un ordinateur peut traiter des masses de données en exécutant des milliards d’opérations par seconde.
  • **stupidité**: mais les opérations sont simples et mécaniques et l’ordinateur ne possède aucune capacité d’analyse.
  • **l’intelligence**: vient du programme, c’est à dire de l’être humain !

The effective exploitation of his powers of abstraction must be regarded as one of the most vital activities of a competent programmer” (Edsger W. Dijkstra)

Les ordinateurs sont cependant extrêmement utiles. Mais toute l’intelligence est dans le logiciel, d’où l’importance de connaître les principes de la programmation pour maîtriser l’outil informatique, particulièrement en science.

Les ordinateurs actuels ne sont pas les ordinateurs HAL 9000 (Heuristically programmed ALgorithmic computer), imaginés par de Stanley Kubrick dans l’odyssée de l’espace

odyssée de l'espace        odyssée de l'espace

Un ordinateur exécute très rapidement des instructions élémentaires codées en binaire: $\approx 4*6000$ MIPS ou bogoMIPS (millions d’instruction par seconde) sur un ordinateur de bureau (Intel Core I5 4 coeurs). Et il les exécute de façon mécanique.

Question: Comment peut-on utiliser un ordinateur pour simuler un problème physique ?

Par exemple calculer le mouvement d’un pendule simple, puisque l’ordinateur ne connaît ni la mécanique, ni les équations, ni les méthodes de résolutions de ces équations !

Modélisation numérique

Programmation

**méthode**

le scientifique imagine un algorithme pour résoudre le problème de façon mécanique, et le traduit ensuite dans un langage de programmation pour être exécuté par un ordinateur. Il peut ensuite faire l’étude paramétrique du problème comme avec une expérience.

Physique **Modèle mathématique**
$$ m l \frac{d^2 \theta}{d t^2} = m g \sin(\theta) $$ $$ Y = [ \theta, \frac{d \theta}{dt} ] $$ $$ Y_0=[\theta_0, 0]$$ $$ \frac{d Y}{dt} = F(Y,t) $$
**Algorithme RK2**
Y = Y0
Pour i de 1 a n
   Y1 = Y + 0.5 * dt *F(Y,t)
   Y = Y + dt *F(Y1,t+dt/2)
   t=t+dt
Fin Pour
In [5]:
import numpy as np
from anim_pendule import Trace
# parametres
g, l = 9.81, 1.
omega = np.sqrt(g/l)
#  second membre de l'EDO
def F(Y):
    return np.array([Y[1], -omega**2*np.sin(Y[0])])
# condition initiale: angle à t=0
theta0 = 0.5*np.pi
Y = np.array([theta0, 0.])
# n=nbre points par période, etude sur 3 periodes
n = 128
dt = 2 * np.pi / omega / n
N = 3 * n
# calcul solution theta
t = np.zeros(N)
theta = np.zeros(N)
theta[0] = theta0
# boucle d'intégration en temps
for i in range(1, N):
    t[i] = t[i-1] + dt
    Y1 = Y + 0.5 * dt * F(Y)
    Y = Y + dt * F(Y1)
    theta[i] = Y[0]
# trace et animation
anim=Trace(l,theta,t)
In [7]:
HTML(anim.to_html5_video())
Out[7]:

Un algorithme est une suite finie et non ambigüe d’opérations ou d’instructions permettant de résoudre un problème. Les algorithmes sont connus depuis l’antiquité (Euclide).

Le mot algorithme vient du nom du mathématicien perse du 9ième siècle (AJC) Abu Abdullah Muhammad ibn Musa al-Khwarizmi. L’algorithmique correspond à la phase préparatoire avant une quelconque programmation. Elle permet de décrire un problème sous une forme que l’on peut ensuite programmer sur un ordinateur et ceci dans un langage naturel, indépendant d’un langage de programmation.

algorithme numérique suite finie et non ambiguë d’opérations ou d’instructions sur des nombres permettant de résoudre un problème.

Et il n’est pas nécessaire d’avoir un ordinateur pour exécuter un algorithme (machine de Turing inventé en 1936 avant l’ordinateur)!

Quelques repères historiques

  • Boulier (12e siècle): 1er abaque (dans # civilisations)
  • Pascaline (1642): 1ere machine à calculer mécanique
  • Arithmométre (1820) (cylindre de Leibnitz 1706)
  • Principe d’un ordinateur (Babbage 1834): machine analytique à partir de cartes perforées
  • Première définition d’un ordinateur (machine de Turing 1936)
  • Premier ordinateur à lampe ENIAC (1943)
  • Premier ordinateur à base de transistors IBM 7000 (1960)
  • Création d’Internet (Arpanet 1969)
  • Premier micro-ordinateur: Micral et Altair 8000 (1973)
  • Micro-ordinateurs personnels : Apple (1976), IBM PC (1981)
  • Loi de Moore (1965) : doublement de la puissance des ordinateurs tous les 18 mois
  • Naissance du système Linux (Linus Torvalds 1991)
  • Supercalculateur Curie (2012) $10^{10}$ fois plus puissant qu’un IBM PC de 1981

Puissance de calcul de Curie en 1s $\equiv 10^{15} flops $ (peta flops) $\approx$ calcul pendant 48h de la population du globe équipée de boulier

histoire des ordinateurs

Python langage de programmation scientifique

Historique

Créé en 1989 par Guido van Rossum

  • « Benevolent Dictator For Life » (BDFL)
  • Gratuit, libre et multi-plateformes (portable)
  • Le nom provient de la série britannique

Propriétés

  • Langage interprété (facile à utiliser)
  • Usage général: on peut tout faire
    • interfaces graphiques
    • calcul scientifique
    • applications webs
    • base de données
    • etc.
  • Vaste librairie de modules (bibliothèques)
  • Syntaxe cohérente
    • Langage orienté objet
    • Langage fonctionnel
  • Facile à apprendre / agréable à utiliser
  • Excellent premier langage de programmation
  • Interfaçage facile avec les autres langages (C/C++, Fortran, Java)
  • Défauts ?
    • selon les circonstances, les programmes écrits en Python peuvent comporter des problèmes de performance
    • mais c’est le cas de tous les langages interprétés

Le Zen de Python

Voici 19 règles de programmation Python d’après le BDFL, que l’on trouve sur tout interpréteur python en tapant

In [8]:
import this

traduction de Cécile Trevian et Bob Cordeau

  1. Préfère la beauté à la laideur,
  • Préfère l’explicite à l’implicite,
  • Préfère le simple au complexe
  • Préfère le complexe au compliqué,
  • Préfère le déroulé à l’imbriqué,
  • Préfère l’aéré au compact.
  • Prends en compte la lisibilité.
  • Les cas particuliers ne le sont jamais assez pour violer les règles.
  • Mais, à la pureté, privilégie l’aspect pratique.
  • Ne passe pas les erreurs sous silence, ou bâillonne-les explicitement.
  • Face à l’ambiguïté, à deviner ne te laisse pas aller.
  • Sache qu’il ne devrait avoir qu’une et une seule façon de procéder, même si, de prime abord, elle n’est pas évidente, à moins d’être Néerlandais.
  • Mieux vaut maintenant que jamais.
  • Cependant jamais est souvent mieux qu’immédiatement.
  • Si l’implémentation s’explique difficilement, c’est une mauvaise idée.
  • Si l’implémentation s’explique aisément, c’est peut-être une bonne idée.
  • Les espaces de nommage! Sacrée bonne idée! Faisons plus de trucs comme ça.

Objectifs du cours

  • A la fin de ce cours, vous serez capable d’écrire des programmes à partir d’algorithmes pour résoudre des problèmes scientifiques.
  • Vous maîtriserez les bases du langage de programmation Python pour faire du calcul scientifique.

  • Attention: certains aspects du langage Python ne seront pas traités.

  • Mais n’oubliez pas, la programmation, si elle peut être une science ou un art, peut aussi être ludique.

Most good programmers do programming not because they expect to get paid or get adulation by the public, but because it is fun to program”.

Linus Torvalds (créateur de Linux)

Linux     Linux     Linux
In [ ]: