%matplotlib inline
import sys,os
import numpy as np
import scipy as sp
import matplotlib
import matplotlib.pyplot as plt
from random import random
import importlib
# initialisation
from validation.validation import info_etudiant, check_function,liste_functions, info_function
from validation.valide_markdown import test_markdown, test_code, test_algorithme
from IPython.display import display, Markdown, Latex
def printmd(string):
display(Markdown(string))
# test si numero étudiant spécifier
try: NUMERO_ETUDIANT
except NameError: NUMERO_ETUDIANT = None
if type(NUMERO_ETUDIANT) is not int :
printmd("## ERREUR: numéro d'étudiant non spécifié!!!")
NOM, PRENOM, NUMERO_ETUDIANT = info_etudiant()
#raise AssertionError("NUMERO_ETUDIANT non défini")
# parametres spécifiques
_uid_ = NUMERO_ETUDIANT
np.random.seed(_uid_)
printmd("**Etudiant** {} {} id={}".format(NOM,PRENOM,NUMERO_ETUDIANT))
Etudiant NBGrader Course id=2592889824
créer une variable x, qui contient successivement les valeurs suivantes
pour chaque cas, on affichera avec un print la valeur de la variable et son type (avec type)
x = None
## BEGIN SOLUTION
x = 1
print(x,type(x))
x = 1.0
print(x,type(x))
x = "1"
print(x,type(x))
x = "1.0"
print(x,type(x))
x = "un"
print(x,type(x))
## END SOLUTION
1 <class 'int'> 1.0 <class 'float'> 1 <class 'str'> 1.0 <class 'str'> un <class 'str'>
on veut ajouter 2 à la variable x précédente et mettre le résultat dans une nouvelle variable y. En reprenant les valeurs de x précédentes, choisissez la bonne instruction (pour avoir une valeur de y du même type que x)
x = None
y = None
## BEGIN SOLUTION
x = 1
y = x + 2
print(y,type(y))
x = 1.0
y = x + 2 # c'est volontaire pour expliquer la conversion automatique ou bien x + 2.0 ?
print(y,type(y))
x = "1"
y = x + "2"
print(y,type(y))
x = "un"
y = x + "deux"
print(y,type(y))
## END SOLUTION
3 <class 'int'> 3.0 <class 'float'> 12 <class 'str'> undeux <class 'str'>
soit l'expression $$ C_i = \frac{x^{i+1}}{2i}$$
pour les valeurs de i et de x suivantes, calculer cette expression en Python et mettre
le résultat dans une variable Ci et afficher sa valeur.
i = 4
x = -2.
Ci = None
## BEGIN SOLUTION
Ci = x**(i+1)/(2*i)
print(Ci)
## END SOLUTION
-4.0
Créer une liste LC3 contenant les 3 premières valeurs de $C_i$ pour i=1,2,3 . On calculera d'abord les 3 valeurs dans C1, C2 et C3 en réutilisant les instructions précédentes, et on affichera la valeur de LC3
LC2 = None
## BEGIN SOLUTION
i = 1
C1 = x**(i+1)/(2*i)
i = 2
C2 = x**(i+1)/(2*i)
i = 3
C3 = x**(i+1)/(2*i)
LC3 = [C1, C2, C3]
print(LC3)
## END SOLUTION
[2.0, -2.0, 2.6666666666666665]
On veut généraliser l'approche précédente pour créer une liste LC contenant les n premières valeurs de $C_i$ pour i=1 à n, où la valeur de n est stockée dans une variable. On commencera par choisir n=3 pour comparer avec le résultat précédent puis on l'appliquer pour n=10.
n = 3
LC = None
## BEGIN SOLUTION
LC = []
for i in range(1,n+1):
LC.append(x**(i+1)/(2*i))
print(LC)
## END SOLUTION
[2.0, -2.0, 2.6666666666666665]
On veut faire la meme chose, mais au lieu d'utiliser une liste, on utilisera
un tableau numpy Tab
import numpy as np
n = 3
Tab = None
## BEGIN SOLUTION
n = 10 # exercise suivant
Tab = np.zeros(n)
for i in range(1,n+1):
Tab[i-1] = x**(i+1)/(2*i)
print(Tab)
## END SOLUTION
[ 2. -2. 2.66666667 -4. 6.4 -10.66666667 18.28571429 -32. 56.88888889 -102.4 ]
Dans la cellule précédente, faites le calcul du tableau Tab pour n=10. On remarque que les valeurs de Tab alternent de signe car x est négatif.
En sélectionnant un élément sur deux, mettez tous les éléments positifs de Tab dans un nouveau tableau Tplus. Pour vérifier, affichez le tableau Tplus, sa valeur max, sa valeur min et sa valeur moyenne.
import numpy as np
Tplus = None
## BEGIN SOLUTION
Tplus = Tab[0::2]
print(Tplus,max(Tplus),min(Tplus),np.mean(Tplus))
## END SOLUTION
[ 2. 2.66666667 6.4 18.28571429 56.88888889] 56.888888888888886 2.0 17.24825396825397
On veut étudier la fonction $f(x)=sin(\pi x) + 2 cos(\pi x)$.
Écrire une fonction Python F(x) qui calcule la valeur de cette fonction pour une valeur de x passée en argument.
Calculer la valeur de F(x) sur deux périodes et tracer la fonction sur cet intervalle. Pour calculer la valeur de F(x) en N=51 points équi-répartis sur l'intervalle en utilisant, en créant 2 tableaux X et Y.
np.linspace()plt.plot(X,Y) pour tracer la fonction# définition de la fontion F(x)
import numpy as np
import matplotlib.pyplot as plt
## BEGIN SOLUTION
def F(x):
return np.sin(np.pi*x) + 2*np.cos(np.pi*x)
## END SOLUTION
# tracer
X = None
Y = None
## BEGIN SOLUTION
X = np.linspace(0,2*2,51)
Y = F(X)
plt.plot(X,Y,label="y=f(x)")
plt.xlabel('x')
plt.ylabel('y')
plt.title("Fonction périodique")
plt.legend()
## END SOLUTION
<matplotlib.legend.Legend at 0x7fa2f135b7c0>
On souhaite généraliser, pour étudier les fonctions $g(x)=sin(\omega\,x) + a cos(\omega\,x)$.
Ecrire une fonction python G(x,A,periode) qui prend comme argument x, l'amplitude A et la période periode , et renvoie la valeur de g(x).
Calculer la valeur de G(x) sur deux périodes et tracer la fonction sur cet intervalle
# Fonction G(x,A,periode)
import numpy as np
import matplotlib.pyplot as plt
## BEGIN SOLUTION
def G(x,A,periode):
omega = 2*np.pi/periode
return np.sin(omega*x) + A*np.cos(omega*x)
## END SOLUTION
# tracer
T = 2.0
a = 1.0
X = None
Y = None
## BEGIN SOLUTION
X = np.linspace(0,2*T,51)
Y = G(X,a,T)
plt.plot(X,Y,label="y=g(x)")
plt.xlabel('x')
plt.ylabel('y')
plt.title("Fonction périodique a={} T={}".format(a,T))
plt.legend()
## END SOLUTION
<matplotlib.legend.Legend at 0x7fa2f124df40>
Tester les instructions suivantes pour déterminer l'instruction correcte permettant de convertir la vitesse stockée dans la variable vit en km/h et
stocker le résultat dans vitkmh
Pour cela on affichera la valeur et le type (avec type) de la variable
vitkmh calculée
# valeur de la vitesse en m/s
import numpy as np
vit = 10.0
## afficher le type et la valeur des expressions suivantes
vitkmh = vit*3,6
## BEGIN SOLUTION
print(type(vitkmh),vitkmh)
## END SOLUTION
vitkmh = (vit*3,6)
## afficher le type et la valeur
## BEGIN SOLUTION
print(type(vitkmh),vitkmh)
## END SOLUTION
vitkmh = [vit*3,6]
## afficher le type et la valeur
## BEGIN SOLUTION
print(type(vitkmh),vitkmh)
## END SOLUTION
vitkmh = {vit*3,6}
## afficher le type et la valeur
## BEGIN SOLUTION
print(type(vitkmh),vitkmh)
## END SOLUTION
vitkmh = vit*3.6
## afficher le type et la valeur
## BEGIN SOLUTION
print(type(vitkmh),vitkmh)
## END SOLUTION
vitkmh = (vit*3.6)
## afficher le type et la valeur
## BEGIN SOLUTION
print(type(vitkmh),vitkmh)
## END SOLUTION
vitkmh = [vit*3.6]
## afficher le type et la valeur
## BEGIN SOLUTION
print(type(vitkmh),vitkmh)
## END SOLUTION
vitkmh = {vit*3.6}
## afficher le type et la valeur
## BEGIN SOLUTION
print(type(vitkmh),vitkmh)
## END SOLUTION
<class 'tuple'> (30.0, 6)
<class 'tuple'> (30.0, 6)
<class 'list'> [30.0, 6]
<class 'set'> {30.0, 6}
<class 'float'> 36.0
<class 'float'> 36.0
<class 'list'> [36.0]
<class 'set'> {36.0}
idem mais vit est maintenant un tableau numpy contenant des valeurs de vitesse
import numpy as np
vit = np.array([10,20.,30.,40.])
## afficher le type et la valeur des expressions
vitkmh = vit*3,6
## BEGIN SOLUTION
print(type(vitkmh),vitkmh)
## END SOLUTION
vitkmh = (vit*3,6)
## afficher le type et la valeur
## BEGIN SOLUTION
print(type(vitkmh),vitkmh)
## END SOLUTION
vitkmh = [vit*3,6]
## afficher le type et la valeur
## BEGIN SOLUTION
print(type(vitkmh),vitkmh)
## END SOLUTION
vitkmh = vit*3.6
## afficher le type et la valeur
## BEGIN SOLUTION
print(type(vitkmh),vitkmh)
## END SOLUTION
vitkmh = (vit*3.6)
## afficher le type et la valeur
## BEGIN SOLUTION
print(type(vitkmh),vitkmh)
## END SOLUTION
vitkmh = [vit*3.6]
## afficher le type et la valeur
## BEGIN SOLUTION
print(type(vitkmh),vitkmh)
## END SOLUTION
vitkmh = np.array([vit*3.6])
## afficher le type et la valeur
## BEGIN SOLUTION
print(type(vitkmh),vitkmh)
## END SOLUTION
<class 'tuple'> (array([ 30., 60., 90., 120.]), 6) <class 'tuple'> (array([ 30., 60., 90., 120.]), 6) <class 'list'> [array([ 30., 60., 90., 120.]), 6] <class 'numpy.ndarray'> [ 36. 72. 108. 144.] <class 'numpy.ndarray'> [ 36. 72. 108. 144.] <class 'list'> [array([ 36., 72., 108., 144.])] <class 'numpy.ndarray'> [[ 36. 72. 108. 144.]]
On souhaite utiliser python pour faire le calcul automatique de la somme suivante:
$$ S=1 -\frac{x^2}{2}+\frac{x^4}{4}-\frac{x^6}{6}+....\pm\frac{x^{2n}}{2n} = 1 + \sum_{i=1}^n (-1)^i \frac{x^{2i}}{2i}$$pour des valeurs de x et n fixées et stockées dans les variables x et n suivantes. On mettra la valeur calculée dans la variable S.
Tester les instructions suivantes pour déterminer l'instruction correcte permettant de calculer cette somme dans S
Pour cela on affichera la valeur et le type (avec type) de la variable S calculée
import numpy as np
x = 0.1
n = 11
#
for i in range(1,n):
S = 1 + ((-1)**i)*((x**(2*i))/(2*i))
## BEGIN SOLUTION
print(type(S),S)
## END SOLUTION
S = 1
for i in range(1,n):
S = ((-1)**i)*((x**(2*i))/(2*i))
## BEGIN SOLUTION
print(type(S),S)
## END SOLUTION
S = 0.0
for i in range(1,n):
S = S + ((-1)**i)*((x**(2*i))/(2*i))
## BEGIN SOLUTION
print(type(S),S)
## END SOLUTION
S = 1.0
for i in range(1,n):
S = S + ((-1)**i)*((x**(2*i))/(2*i))
## BEGIN SOLUTION
print(type(S),S)
## END SOLUTION
for i in range(1,n):
S += ((-1)**i)*((x**(2*i))/(2*i))
S = S + 1.0
## BEGIN SOLUTION
print(type(S),S)
## END SOLUTION
for i in range(1,n+1):
S = S + ((-1)**i)*((x**(2*i))/(2*i))
## BEGIN SOLUTION
print(type(S),S)
## END SOLUTION
S = 1.0
for i in range(1,n+1):
S = S + ((-1)**i)*((x**(2*i))/(2*i))
## BEGIN SOLUTION
print(type(S),S)
## END SOLUTION
<class 'float'> 1.0 <class 'float'> 5.000000000000006e-22 <class 'float'> -0.0049751654265840425 <class 'float'> 0.9950248345734161 <class 'float'> 1.9900496691468321 <class 'float'> 1.9850745037202482 <class 'float'> 0.9950248345734161
Créer un tableau $C=[C_i]$ (pour i de 1 à n) avec $$ C_i = (-1)^i \frac{x^{2i}}{2i}$$
On calcule la somme précédente en faisant la somme des éléments du tableau
Pour cela, on crée un tableau numpy C de n valeurs, on fait une boucle et on utilise avec la fonction python np.sum(C)
Tester les instructions suivantes pour déterminer l'instruction correcte permettant de calculer cette somme dans S
Pour cela on affichera la valeur et le type (avec type) de la variable S calculée et le type et la taille du tableau C.
import numpy as np
#
C = np.zeros(n)
for i in range(1,n):
C[i] = ((-1)**i)*(x**(2*i))/(2*i)
S = np.sum(C)
## BEGIN SOLUTION
print(type(S),S,type(C),C.size)
## END SOLUTION
C = np.zeros(n)
for i in range(1,n):
C[i-1] = ((-1)**i)*(x**(2*i))/(2*i)
S = 1 + np.sum(C)
## BEGIN SOLUTION
print(type(S),S,type(C),C.size)
## END SOLUTION
C = np.zeros(n)
for i in range(1,n+1):
C[i-1] = ((-1)**i)*(x**(2*i))/(2*i)
S = np.sum(C)
## BEGIN SOLUTION
print(type(S),S,type(C),C.size)
## END SOLUTION
C = np.zeros(n)
for i in range(1,n+1):
C[i-1] = ((-1)**i)*(x**(2*i))/(2*i)
S = 1 + np.sum(C)
## BEGIN SOLUTION
print(type(S),S,type(C),C.size)
## END SOLUTION
<class 'numpy.float64'> -0.0049751654265840425 <class 'numpy.ndarray'> 11 <class 'numpy.float64'> 0.995024834573416 <class 'numpy.ndarray'> 11 <class 'numpy.float64'> -0.0049751654265840425 <class 'numpy.ndarray'> 11 <class 'numpy.float64'> 0.995024834573416 <class 'numpy.ndarray'> 11
Dans les cellules suivantes, copiez les instructions Python suivantes, trouvez les erreurs et les corriger pour calculer la somme des carrés des 4 premiers entiers strictement positifs
for i in range(4)
somme = 0
somme = somme + j**2
# copier et corriger le code précédent
Idem pour le code suivant pour calculer le produit des carrés des p premiers entiers strictement positifs avec p = 4
def produit(n)
for i in range(n):
prod = 0
prod = prod*(i+1)**2
print(prod)
#
Produit(p)
# copier et corriger le code précédent