Informatique TP5 : Initiation aux outils de calcul scientifique CPP 1A

Documents pareils
Cours 7 : Utilisation de modules sous python

Exercices types Algorithmique et simulation numérique Oral Mathématiques et algorithmique Banque PT

Python - introduction à la programmation et calcul scientifique

Chapitre 2 Le problème de l unicité des solutions

FONCTIONS DE PLUSIEURS VARIABLES (Outils Mathématiques 4)

Chapitre 0 Introduction à la cinématique

Exercices Types Algorithmique et simulation numérique Oral Mathématiques et Algorithmique Banque PT Propositions de réponses

Continuité d une fonction de plusieurs variables

Fonctions de deux variables. Mai 2011

Théorème du point fixe - Théorème de l inversion locale

Calcul Formel et Numérique, Partie I

Premiers pas avec Mathematica

F411 - Courbes Paramétrées, Polaires

Exercices - Fonctions de plusieurs variables : corrigé. Pour commencer

Développements limités, équivalents et calculs de limites

pyensae StockPrices September 1, Manipulation de séries financières avec la classe StockPrices

Initiation à l algorithmique

Chapitre 3. Quelques fonctions usuelles. 1 Fonctions logarithme et exponentielle. 1.1 La fonction logarithme

OM 1 Outils mathématiques : fonction de plusieurs variables

Cours de mathématiques

Oscillations libres des systèmes à deux degrés de liberté

Correction de l examen de la première session

Exercices Alternatifs. Une fonction continue mais dérivable nulle part

* très facile ** facile *** difficulté moyenne **** difficile ***** très difficile I : Incontournable T : pour travailler et mémoriser le cours

Cours d Analyse. Fonctions de plusieurs variables

CHAPITRE IV Oscillations libres des systèmes à plusieurs degrés de liberté

3 Approximation de solutions d équations

Algorithmes pour la planification de mouvements en robotique non-holonome

a et b étant deux nombres relatifs donnés, une fonction affine est une fonction qui a un nombre x associe le nombre ax + b

Commun à tous les candidats

Image d un intervalle par une fonction continue

Développements limités. Notion de développement limité

6 Equations du première ordre

Mathématiques I Section Architecture, EPFL

Partie 1 - Séquence 3 Original d une fonction

MIS 102 Initiation à l Informatique

TD1 Signaux, énergie et puissance, signaux aléatoires

Calculatrice HP Prime

Chapitre 2 : Caractéristiques du mouvement d un solide

Modèles à Événements Discrets. Réseaux de Petri Stochastiques

La fonction exponentielle

Exercice autour de densité, fonction de répatition, espérance et variance de variables quelconques.

Exercices Alternatifs. Une fonction continue mais dérivable nulle part

Fonctions de plusieurs variables

Calcul intégral élémentaire en plusieurs variables

Chafa Azzedine - Faculté de Physique U.S.T.H.B 1

Chapitre 6. Fonction réelle d une variable réelle

BACCALAUREAT GENERAL MATHÉMATIQUES

Exercices et corrigés Mathématique générale Version β

SUJET ZÉRO Epreuve d'informatique et modélisation de systèmes physiques

Chapitre 2. Matrices

Calcul Formel et Numérique, Partie I

Baccalauréat ES/L Amérique du Sud 21 novembre 2013

Bac Blanc Terminale ES - Février 2011 Épreuve de Mathématiques (durée 3 heures)

Repérage d un point - Vitesse et

TP 1. Prise en main du langage Python

Fonctions de plusieurs variables. Sébastien Tordeux

nos graphiques font leur rentrée!

TP 7 : oscillateur de torsion

Notes du cours MTH1101 Calcul I Partie II: fonctions de plusieurs variables

Calcul Scientifique avec 3

C f tracée ci- contre est la représentation graphique d une

Carl-Louis-Ferdinand von Lindemann ( )

TP1 Méthodes de Monte Carlo et techniques de réduction de variance, application au pricing d options

Continuité en un point

Cours d Analyse 3 Fonctions de plusieurs variables

I. Polynômes de Tchebychev

Aide - mémoire gnuplot 4.0

Cours Fonctions de deux variables

Angles orientés et fonctions circulaires ( En première S )

Découverte du logiciel ordinateur TI-n spire / TI-n spire CAS

Les suites numériques

Calcul différentiel. Chapitre Différentiabilité

Equations différentielles linéaires à coefficients constants

Licence de Mathématiques 3

Dérivation : cours. Dérivation dans R

Le modèle de Black et Scholes

Optimisation non linéaire Irène Charon, Olivier Hudry École nationale supérieure des télécommunications

INTRODUCTION A L ELECTRONIQUE NUMERIQUE ECHANTILLONNAGE ET QUANTIFICATION I. ARCHITECTURE DE L ELECRONIQUE NUMERIQUE

Raisonnement par récurrence Suites numériques

Mathématiques financières

Licence Sciences et Technologies Examen janvier 2010

Chapitre 1 Régime transitoire dans les systèmes physiques

Les nombres entiers. Durée suggérée: 3 semaines

Comment tracer une droite représentative d'une fonction et méthode de calcul de l'équation d'une droite.

Amphi 3: Espaces complets - Applications linéaires continues

Master Modélisation Aléatoire Paris VII, Cours Méthodes de Monte Carlo en nance et C++, TP n 2.

Resolution limit in community detection

Introduction. Mathématiques Quantiques Discrètes

8.1 Généralités sur les fonctions de plusieurs variables réelles. f : R 2 R (x, y) 1 x 2 y 2

Découverte de Python

Simulation de variables aléatoires

Découverte du tableur CellSheet

ELEC2753 Electrotechnique examen du 11/06/2012

Logique. Plan du chapitre

4. Martingales à temps discret

COMPTE-RENDU «MATHS EN JEANS» LYCEE OZENNE Groupe 1 : Comment faire une carte juste de la Terre?

1 Recherche en table par balayage

Introduction à la statistique non paramétrique

Transcription:

Informatique TP5 : Initiation aux outils de calcul scientifique CPP 1A Romain Casati, Wafa Johal, Frederic Devernay, Matthieu Moy Avril - juin 2014 1 Rappels et compléments sur NumPy NumPy est une bibliothèque Python qui permet à la fois de manipuler des tableaux multidimensionels mais aussi de faire des calculs sur ces objets. En cours, vous avez vu comment créer un tableau avec NumPy : >>> import numpy >>> v = numpy.array([1, 2, 3]) >>> v array([1, 2, 3]) faire des opérations algébriques sur les tableaux : >>> w = 3 * v - numpy.array([3, 6, 9]) >>> w array([0, 0, 0]) multiplier des matrices et des vecteurs mais nous ne nous en servirons pas dans ce TP. NumPy peut faire beaucoup plus que ça. Comme le module math de Python, NumPy dispose de la plupart des fonctions mathématiques que vous connaissez. Cependant, les fonctions NumPy ont l avantage de s appliquer sur les tableaux (composantes par composantes). Exercice 1 (NumPy et les fonctions) Que donne le code suivant? import numpy v = numpy.array([1, 2, 3, 4]) * numpy.pi / 4 w = numpy.sin(v) print(w) # numpy.pi = π NumPy dispose aussi de fonctions permettant de générer des tableaux. Exercice 2 (Génération de tableaux) Que font les fonctions de NumPy suivantes : zeros([num]), ones([num]), linspace(debut, fin, num), random.random([num])? 2 Python + Matplotlib : mieux qu une calculatrice graphique Matplotlib est une bibliothèque Python qui permet de faire toutes sortes de tracés. Nous allons essentiellement l utiliser pour tracer des fonctions. Les instructions de base pour se servir de Matplotlib sont illustrées ici : # plt devient l abrege de matplotlib.pyplot x = [0, 1, 2] y = [1, -1, 0] # liste des abscisses # liste des ordonnees # trace y en fonction de x # affiche la fenetre du trace 1

Exercice 3 (Premiers tracés) En utilisant les fonctions linspace et cos de NumPy, tracer la fonction y = cos(x) sur [0, 10π]. Quelle est l influence du nombre de points passé à la fonction linspace? Grâce à un second appel à la fonction plt.plot avant l appel à plt.show, superposer le graphe de la fonction y = exp( x/10) cos(x). Toujours avant l appel à plt.show, ajouter un titre avec plt.title( Le titre de votre choix ) et des noms aux axes avec plt.xlabel( x ) et plt.ylabel( y=f(x) ). Matplotlib n est pas seulement capable de tracer des fonctions de variable réelle mais aussi des courbes paramétrées. Vous étudierez ces objets en deuxième année mais pour faire simple, vous pouvez penser à la trajectoire d un point au cours du temps. Décrire cette trajectoire, c est se donner à chaque instant t l abscisse et l ordonnée du point étudié. Plus formellement, on se donne une fonction d un intervalle I R de la forme t (x(t), y(t)). Exercice 4 (Courbes paramétriques) { En modifiant le code ci-dessous, tracer l une des courbes suivantes : x(t) = sin t La Lemniscate de Bernoulli 1+cos 2 t sin t cos t sur [0, 2π]. y(t) = { 1+cos 2 t x(t) = t cos(t) La spirale d Archimède sur [0, 10π]. { y(t) = t sin(t) x(t) = 16 sin La courbe du cœur 3 t sur [0, 2π]. y(t) = 13 cos ( t 5 cos(2t) ( )) 2 cos(3t) cos(4t) x(t) = 1 + cos p q Les cyclo-harmoniques t cos(t) ( ( )) y(t) = 1 + cos p q t pour p et q entiers sur [0, 2qπ]. sin(t) # np devient l abrege de numpy t = np.linspace(...,...,...) x =... y =... # x(t) # y(t) 3 Résolution d équations différentielles On considère l équation différentielle ordinaire (EDO) du premier ordre suivante y (x) = f(y(x), x), x [a, b]. Si l on se donne en plus une condition initiale de la forme y(a) = y 0, on obtient un problème de Cauchy. Sous certaines hypothèses de régularité sur la fonction f 1, on sait qu il existe une unique solution y sur [a, b]. Même si dans certains cas (e.g. f linéaire à coefficients constants) on connaît explicitement cette solution, il est la plupart du temps impossible de l écrire. On utilise alors des méthodes permettant d approcher cette solution en calculant des approximations de proches en proches. L intervalle [a, b] est découpé en N intervalles de taille h = b a N et la solution y est approchée aux points x n = a + nh, n = 0,..., N. On note y n y(x n ) l approximation de y au point x n. 3.1 Préliminaire : passage d une fonction en paramètre Dans la suite, nous allons avoir besoin d écrire des fonctions qui dépendent d autres fonctions. L exercice suivant montre que ceci n est pas gênant en Python. Exercice 5 Que fait le code suivant? Expliquer. def f(x): return x ** 2 1. f globalement lipschitzienne par rapport à y. 2

def g(x): return 2 * x def somme_ponderee(f1, f2, a, b, x): return a * f1(x) + b * f2(x) print(somme_ponderee(f, g, 2, 3, 10)) 3.2 Méthode d Euler Dans la suite, on se propose d étudier la méthode d Euler qui consiste à approcher la solution en utilisant la formule de la tangente y(x + h) y(x) + hy (x) y(x) + hf(y(x), x). Exercice 6 (Récurrence de la méthode d Euler) En utilisant cette dernière expression, donner l équation de récurrence qui permet de calculer y n+1 en fonction de y n, x n, h et f. Exercice 7 (Implémentation) Dans un fichier nommé edo.py, écrire une fonction euler(f, a, b, y0, N) qui retourne la liste des y n, n = 0,..., N approchant la solution de notre EDO par la méthode d Euler. Exercice 8 (Tests) Quelle est la solution attendue pour f(y, x) = λy et y(0) = 1? Utiliser ce résultat pour tester l implémentation de l exercice précédent : tracer la solution exacte et la solution approchée avec Matplotlib. Quelle est l influence du paramètre N? 3.3 Comparaison avec SciPy Le module SciPy de Python est consacré au calcul scientifique avancé. En particulier, en utilisant la fonction scipy.integrate.odeint, il est possible d approcher la solution d une EDO grâce à des méthodes plus performantes (mais bien plus complexes aussi) que la méthode d Euler. Il s utilise comme ceci : import scipy.integrate as scint return np.cos(10 * y) * np.cos(x) # f(y(x), x) = cos(10y(x)) cos(x) x = np.linspace(0, 10, 100) y = scint.odeint(f, 0, x) # f, y 0, points ou la solution est approchee Exercice 9 (Comparaison avec SciPy) Utiliser SciPy ainsi que la méthode d Euler pour approcher la solution du problème de Cauchy associée à f(y, x) = cos(10y) cos(x) et y(0) = 0. On prendra soin d utiliser de même nombre de pas N dans les deux méthodes. Comparer visuellement les deux solutions à l aide de Matplotlib. 3.4 Le pendule simple (en bonus) Une EDO du second ordre que vous connaissez bien est celle du pendule simple : θ + ω 2 0 sin θ = 0. (1) Toute EDO d ordre supérieure à 1 peut être ramenée à une EDO d ordre 1. Pour le pendule simple, il suffit de poser y = (y 1, y 2 ) = (θ, θ ) et de remarquer que y = (y 2, ω 2 0 sin y 1 ). Exercice 10 En utilisant cette dernière remarque, approcher la solution du pendule simple avec SciPy et la méthode d Euler pour les conditions initiales y 0 = ( π 2, 0). Que peut-on dire de la conservation de l énergie mécanique 2 E m = 1 2 θ 2 ω0 2 cos θ? 2. Cette quantité n est pas tout à fait l énergie mécanique, elle y est seulement proportionnelle. 3

4 Correction des exercices Correction exercice 1 On s attend à trouver [ 2 2, 1, 2 2, 0 ] [ 7.07106781e-01 1.00000000e+00 7.07106781e-01 1.22464680e-16] Correction exercice 2 zeros([num]) retourne un tableau de taille num ne contenant que des 0. ones([num]) retourne un tableau de taille num ne contenant que des 1. linspace(a, b, n) retourne un échantillonage uniforme de l intervalle [a, b] de taille n. Les éléments sont les a + k b a n 1 pour k = 0,..., n 1. random.random([num]) retourne un vecteur de taille n dont les éléments sont tirés aléatoirement entre 0 et 1. Correction exercice 3 Si le nombre de points passé à la fonction linspace n est pas suffisant, le graphe ressemble à une ligne brisée et n est pas lisse. Oscillateurs harmoniques libre et amorti 1 x = np.linspace(0, 10 * np.pi, 100) y1 = np.cos(x) y2 = np.exp(-x/10) * np.cos(x) plt.plot(x, y1) plt.plot(x, y2) plt.title( Oscillateurs harmoniques libre et amorti ) plt.xlabel( x ) plt.ylabel( y = f(x) ) y = f(x) 0.5 0.5 5 10 15 20 25 30 x Correction exercice 4 t = np.linspace(0, 2 * np.pi, 100) # Lemniscate de Bernoulli x = np.sin(t) / (1 + np.cos(t) ** 2) y = np.sin(t) * np.cos(t) / (1 + np.cos(t) ** 2) t = np.linspace(0, 10 * np.pi, 300) # Spirale d Archimede x = t * np.cos(t) y = t * np.sin(t) 0.2 0.5 0.5 0.2 20 20 20 20 4

t = np.linspace(0, 2 * np.pi, 100) # Courbe du coeur x = 16 * np.sin(t) ** 3 y = 13*np.cos(t) - 5*np.cos(2*t) - 2*np.cos(3*t) - np.cos(4*t) 10 10 10 10 p = 8 q = 3 t = np.linspace(0, 2 * q * np.pi, 400) # Cyclo-harmonique tmp = 1 + np.cos(p / q * t) x = tmp * np.cos(t) y = tmp * np.sin(t) p\q 1 2 3 4 5 6 7 8 9 1 2 3 4 5 6 7 8 9 Correction exercice 5 C est la valeur 260 qui est retournée. En effet, la fonction somme_ponderee appelle f sur la valeur 10 (ce qui retourne 100) et multiplie le résultat par 2 (200). Le second terme de la somme fait appel à g sur la valeur 10 (ce qui retourne 20) et multiplie la valeur par 3 (60). Correction exercice 6 y n+1 = y n + hf(y n, x n ). Correction exercice 7 # fichier edo.py def euler(f, a, b, y0, N): y = y0 x = a h = (b - a) / N res = [y] for i in range(n): y = y + h * f(y, x) x = x + h res.append(y) return res Correction exercice 8 La solution est y(x) = e λx. 5

import edo return 0.5 * y # on choisit λ = 1 2 N = 100 a = 0 b = 10 x = np.linspace(a, b, N + 1) y = edo.euler(f, a, b, 1, N) 140 120 100 80 60 40 Exact Euler N = 100 N = 30 N = 10 # truc : y(x) = e λx = e f(x,x) 20 plt.plot(x, np.exp(f(x, x))) 2 4 6 8 10 Correction exercice 9 import scipy.integrate as scint import edo return np.cos(10 * y) * np.cos(x) a = 0 b = 10 N = 150 y0 = 0 x = np.linspace(a, b, N + 1) y_scipy = scint.odeint(f, y0, x) y_euler = edo.euler(f, a, b, y0, N) 0.15 0.1 5 10 2 5 10 2 0.1 Exact SciPy Euler 2 4 6 8 10 plt.plot(x, y_scipy) plt.plot(x, y_euler) 0.15 Correction exercice 10 6

import scipy.integrate as scint import edo a = 0 b = 10 w02 = 10 y0 = np.array([np.pi / 2, 0]) N = 1000 return np.array([y[1], -w02 * np.sin(y[0])]) def energy(theta, thetadot): return 0.5 * thetadot ** 2 - w02 * np.cos(theta) x = np.linspace(a, b, N + 1) y_scipy = scint.odeint(f, y0, x) y_euler = np.array(edo.euler(f, a, b, y0, N)) theta_scipy = y_scipy[:, 0] thetadot_scipy = y_scipy[:, 1] theta_euler = y_euler[:, 0] thetadot_euler = y_euler[:, 1] plt.plot(x, energy(theta_scipy, thetadot_scipy)) plt.plot(x, energy(theta_euler, thetadot_euler)) 6 4 2 SciPy Euler 2 4 6 8 10 7