Contrôle continu du 24/09/15

Vous devez envoyer vos résultats au format html sous le nom Nom_Prenom.html en remplaçant Nom et Prénom par les vôtres et l'envoyer à guillaume.roux@u-psud.fr

Fonctions

1/ Ecrire une fonction derive(f,x,eps) qui donne une estimation de la dérivée selon la formule $$f_{\varepsilon}'(x) \simeq \frac{f(x+\varepsilon)-f(x-\varepsilon)}{2\varepsilon}$$ avec comme arguments une fonction $f$, un réel $x$ et une précision $\varepsilon=\text{eps}$.
2/ Appliquer votre résultat en estimant la dérivée de la fonction racine carrée $f(x)=\sqrt{x}$ au point $x=3$ pour $\varepsilon = 10^{-6}$. Comparer au résultat analytique attendu.

In [33]:
def derive(f,x,eps=1e-6):
    return (f(x+eps)-f(x-eps))/(2.0*eps)

from math import sqrt
print derive(sqrt,3,1e-6), 1/(2*sqrt(3))
0.288675134685 0.288675134595

Listes

3/ Générer par une commande simple une liste notée L contenant les entiers de 0 à 29.
4/ Extraire et faire afficher la liste des entiers pairs à l'aide d'une sélection d'indices sur L.
5/ Extraire et faire afficher la liste des multiples de 7 contenus dans L à l'aide de la fonction filter().
6/ Trouver une commande qui permet d'inverser l'ordre des éléments de L et faire afficher le résultat.

In [34]:
L = range(30)
print L[::2]
print filter(lambda x: not x%7, L)
L.reverse()
print L
[0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28]
[0, 7, 14, 21, 28]
[29, 28, 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0]

Graphes

7/ Faites tracer avec pylab le graphe de la fonction $$f(x) = \frac{x^3}{e^{x}-1}$$ sur l'intervalle $[0.001,10]$ avec 100 points.

In [35]:
from pylab import *
%matplotlib inline

x = np.linspace(0.001,10.0,num=100)
y = x**3/(exp(x)-1)
plot(x,y)

xlabel('$x$',size=24)
ylabel('$f(x)$',size=24)
show()

Classes

8/ Créer une classe Vecteur en la dérivant de la classe list de Python et surcharger l'opérateur multiplier pour qu'il renvoie le produit scalaire entre deux vecteurs s'ils font la même taille.
9/ Utiliser cette classe pour calculer le produit scalaire des vecteurs $V_1 = (1,-1,\sqrt{2})$ et $V_2 = (\sqrt{2},1,-2)$ et vérifier votre résultat.
10/ Ecrire une méthode de cette classe Vecteur, appelée normalise, qui normalise le vecteur. L'appliquer au vecteur $V_1$ puis afficher le produit scalaire $V_1\cdot V_1$.

In [36]:
class Vecteur(list):
    "une courte classe Vecteur"
    
    def __mul__(self,other):
        "renvoie le produit scalaire"
        if not len(self) is len(other):
            return NoneType
        else:
            res = 0.0
            for i in range(len(self)):
                res += self[i]*other[i]
            return res
            # ou bien
            #return sum([ self[i]*other[i] for i in range(len(self)) ])
            
    def normalise(self):
        "normalise le vecteur"
        from math import sqrt
        norm = sqrt(self*self)
        for i in range(len(self)):
            self[i] /= norm

from math import sqrt       
V1, V2 = Vecteur([1,-1,sqrt(2)]), Vecteur([sqrt(2),1,-2])
print V1 * V2, -1-sqrt(2)
V1.normalise()
print V1, V1*V1
-2.41421356237 -2.41421356237
[0.5, -0.5, 0.7071067811865476] 1.0