2.8. Exercices Python#

Petits exercices Python sur les fonctions

Marc Buffat, Dpt Mécanique Lyon 1

%matplotlib inline
import numpy as np
from matplotlib import pyplot as plt
import matplotlib.pyplot as plt
plt.rc('font', family='serif', size='14')
from validation.valide_markdown import test_markdown, test_code
from validation.validation import info_etudiant, bib_validation
from IPython.display import display, Markdown, clear_output
bib_validation("cours","MGC2028L")
from SolutionExo import solution2
---------------------------------------------------------------------------
ModuleNotFoundError                       Traceback (most recent call last)
Cell In[1], line 10
      8 from IPython.display import display, Markdown, clear_output
      9 bib_validation("cours","MGC2028L")
---> 10 from SolutionExo import solution2

ModuleNotFoundError: No module named 'SolutionExo'
# nom etudiant
def printmd(string):
    display(Markdown(string))
# test si numero étudiant spécifier
try: NUMERO_ETUDIANT
except NameError: NUMERO_ETUDIANT = None 
if NUMERO_ETUDIANT is None:
    NOM,PRENOM,NUMERO_ETUDIANT = info_etudiant()
printmd("## Etudiant {} {}  id={}".format(NOM,PRENOM,NUMERO_ETUDIANT))
np.random.seed(NUMERO_ETUDIANT)
_X  = np.array([-np.random.randint(5),0,np.random.randint(5)])
_I  = [np.random.randint(10),np.random.randint(20),0]

2.8.1. Fonction: exo 1#

Soit la fonction mathématique

\[ f(x) = \frac{\sin{x}}{x (1+x^2)} \]

Ecrire une fonction Python F(x) qui renvoie la valeur de \(f(x)\) pour la valeur de x passée en argument. Attention, la fonction F(x) doit prendre en compte le cas particulier où \(x\) est proche zéro, i.e.

si \(|x| < 1.e-5\) alors \(F(x)= \lim_{x\rightarrow 0} f(x) \)

Application: calculer la valeur de F pour x=x0,x1,x2 et mettre le résultat dans les variables v0,v1 et v2.

Les valeurs à utiliser sont affichées ci-dessous

printmd(f"**valeurs à utiliser x0={_X[0]} x1={_X[1]} x2={_X[2]}**")
import numpy as np
v0,v1,v2 = None,None,None
F = None
### BEGIN SOLUTION
### END SOLUTION

2.8.2. Fonction: exo 2#

Ecrire une fonction Fac(n) qui calcule n! (i.e. factorielle n) pour tout entier positif ou nul passé en argument.

On prendra en compte le cas particulier n=0.

Utiliser cette fonction pour calculer la valeur de Fac pour n=n0,n1,n2 et mettre le résultat dans les variables f0,f1 et f2.

printmd(f"**valeurs à utiliser n0={_I[0]} n1={_I[1]} n2={_I[2]}**")
f0,f1,f2 = None,None,None
Fac = None
### BEGIN SOLUTION
### END SOLUTION

2.8.3. Fonction: exo 3#

Ecrire une fonction Scube(n) qui calcule la somme des cubes des n premiers entiers positifs ou nuls.

Calculer la valeur de cette fonction pour n=n0,n1,n2 et mettre le résultat dans les variables c0,c1 et c2.

printmd(f"**valeurs à utiliser n0={_I[0]} n1={_I[1]} n2={_I[2]}**")
c0,c1,c2 = None,None,None
Scube = None
### BEGIN SOLUTION
### END SOLUTION

2.8.4. Fonction: exo 4#

Ecrire une fonction Python Trapz(x,y) qui à partir d’un tableau de n valeurs de x et de valeur de y, calcule et renvoie la valeur de I suivante:

\[ I = \sum_{i=1}^{n-1} \frac{y_i + y_{i-1}}{2} ( x_i - x_{i-1}) \]

Créer un tableau numpy X1 de n1 valeurs équi-répartis entre a=0 et b=2, et un tableau Y1 contenant le carré des éléments de X1. Calculer la valeur de cette fonction pour X1 et Y1 et mettre le résultat dans I1.

Vérifier le résultat en notant que la formule correspond à la méthode des trapèzes pour calculer une approximation de l’intégrale : \(\int_a^b y\, dx \)

printmd(f"**valeurs à utiliser n1={_I[1]}**")
v1 = None
Trapz = None
### BEGIN SOLUTION
### END SOLUTION

2.8.5. Fonction: exo 5#

Ecrire une fonction Python Colineaire(U,V) qui détermine si les 2 vecteurs \(\vec{u}\) et \(\vec{v}\), de composantes U et V, sont colinéaires et renvoie la valeur logique True si c’est le cas et False sinon.

On note que si \(\vec{u}\) et \(\vec{u}\) sont colinéaires, alors leur produit scalaire vérifie :

\[\vec{u} . \vec{u} = \pm |\vec{u}| |\vec{v}| \mbox{ soit } (\vec{u} . \vec{v})^2 = |\vec{u}|^2 |\vec{v}|^2\]

Attention, en algorithmique numérique, il faut tester l’égalité avec une précision \(\epsilon= 10^{-6}\)

Créer un tableau numpy X de N=21 éléments équi-répartis entre a et b. Calculer les 2 tableaux Y1et Y2 tels que \(y1=-2x\) et \(y2=x^2\), et appliquer la fonction Colineaire avec comme arguments X,Y1 et X,Y2 et vérifier le résultat.

printmd(f"**valeurs à utiliser a={_X[0]}  b={_X[2]}**")
### BEGIN SOLUTION
### END SOLUTION

2.8.6. FIN#