Le but de ce TP est de s'initier à sagemath.
Tout les documents sur sage et python se trouvent ici
from IPython.core.display import display, HTML
display(HTML("""<a href="https://drive.google.com/drive/folders/0B_YN6-I6vHnRNXRUbEo4V0xrV3c?usp=sharing">text</a>"""))
Pour trouver de l'aide, il suffit de taper le nom mathématique de l'objet que vous souhaitez utiliser (en utilisant une majuscule) suivi d'un point d'intérogation.
puis validez par les touches
solve
Si vous ne connaissez pas le nom de la fonction mathématique, vous pouvez le deviner en écrivant les premières lettre puis en tapant sur la touche tabulation.
sol
sol
solve??
Calculer 1+2
1+2
Attention: sagemath fait une différence entre les réelles, les entiers et rationelles
$1$ est un élément de $\mathbb{Z}$
$1.$ est un élément de $\mathbb{R}$
$1/2$ est un élément de $\mathbb{Q}$
$0.5$ est un élément de $\mathbb{R}$
Que va donner: 1+1/2 ?
1+1/2
Que va donner: 1+.5 ?
1+0.5
Plus difficile: la fonction in a pour sortie True ou False suivant que la partie de droite appartient à l'ensemble qui est à gauche. Exemple essayer: 1.2 in ZZ ou bien 1.2 in RR
1.2 in ZZ
1.2 in RR
f(x)=(x+2)^3/(2*x^2+1)
f(2)
f(2.)
f(2)
Attention: Il existe une difference entre la fonction, $f$, et la formule de la fonction, $f(x)$:
f(x)
expand((1-x)^5)
factor(x^2+2*x+1)
P(x)=(2*x-1)^3*(x+3)^2
expand(P(x))
factor(P(x))
Q=(x^2-7*x+12)/(x^2+3*x+2)
Q
factor(Q)
g(x)=diff(f(x))
g
g(0)
solve(g(x)==0,x)
find_root(g(x)==0,3,8)
solve(g(x)>0,x)
Attention: La resolution avec solve est analytique ce qui n'est pas toujours possible. Dans le cas ou ce n'est pas possible vous utiliserai la fonction find_root(g(x),0,4) , $0$ et $4$ sont les bornes de l'interval où on recherchera les racines de $g$
limit(f(x),x=+oo)
limit(f(x),x=-oo)
plot(f(x),-10,0)
plot(f(x),0,10)
a, x = var('a, x'); y = cos(x+a) * (x+1); y
y.subs(a=-x); y.subs(x=pi/2, a=pi/3); y.subs(x=0.5, a=2.3)
y(a=-x); y(x=pi/2, a=pi/3); y(x=0.5, a=2.3)
Attention: La substitution avec plusieurs paramètres est faite de façon parallèle, alors que plusieurs substitutions effectuent des réécritures séquentielles, comme le montrent les deux exemples ci-dessous :
x, y, z = var('x, y, z') ; q = x*y + y*z + z*x
bool(q(x=y, y=z, z=x) == q), bool(q(z=y)(y=x) == 3*x^2)
Notons que pour remplacer une sous-expression plus complexe qu’une variable, on dispose de la fonction subs_expr :
y, z = var('y, z'); f = x^3 + y^2 + z
f.substitute(x^3 == y^2, z==1)
Exercice: Soit la fonction $f(x)=\frac{(x^3+\alpha )}{(cx+3}$, pour $\alpha=0, 1$
Écrire une boucle calculant la somme des entiers de 1 à 100.
a=0
for i in range(1,101) :
a=a+i
print a
Écrire une boucle permettant de calculer le terme d’indice n de la suite (un) définie $u_0=1$ et $\forall n\in \mathbb{N}, u_{n+1}=\frac{1}{u_n}+\frac{u_n}{2}$
n=10
u=1
for i in range(n) :
u=1/u+u/2
print u
Écrire un boucle permettant de compter le nombre de fois où la lettre e apparait dans un texte. Vous utilisera la fonction len() qui donne la longueur d'un tableau.
def countage(text):
a=0
for i in range(len(text)) :
if (text[i]=='e') :
a=a+1
return a
countage("ffsehhd")
Écrire un programme qui permet de jouer au jeu suivant : l’ordinateur tire un nombre au hasard (l’instruction correspondante est donnée) entre 1 et 100, puis le joueur essaie de deviner le 4 nombre. À chaque essai, le programme doit préciser au joueur s’il a fait une proposition trop haute ou trop basse. Quand le joueur a trouvé le nombre, le programme doit afficher le nombre d’essais nécessaires au joueur pour gagner.
from random import *
r=randint(1,100)
a=-1
n=0
while a!=r :
a=input('Choisissez un entier entre 1 et 100')
if a>r :
print('Trop haut!')
elif a<r :
print('Trop bas !')
n=n+1
print('Gagne en '+str(n)+' essais')
Syntaxe des définitions de fonctions en Python : def fonction(par1,par2,. . .) : instructions return valeur
Exemple: Construire une foncction qui calcul $n!$
def factorielle(n) :
a=1
for i in range(1,n+1) :
a=i*a
return a
range(1,10+1)
def factorielle2(n) :
if (n<=1):
return 1
else :
return(n*factorielle2(n-1))
Calculer $10!$
factorielle(10)-factorielle2(10)
Python utilise des bibliotheque appelées modules Liste de modules utiles:
Pour importer un module on utlise l'une des commandes suivantes:
import numpy as np
a=np.array([[8,3,2,4],[5,1,6,0],[9,7,4,1]]); a
type(a)
Remarque : la méthode tolist d’un tableau numpy le transforme en la liste (éventuellement une liste de listes) de ses éléments. Attention, ce c’est pas une fonction du module numpy. On n’écrira donc pas np.tolist(a) mais a.tolist()
b=a.tolist();b
c = np.array(b);c # retour tableau
a.shape
np.alen(a)
a.size
np.size(a,0)
np.size(a,1)
a.ndim
Exercice: On considère la suite: $u_n=\frac{n^{100}}{100^n}$.
On defini d'abord la suite (on rappel qu'une suite réelle est une fonction $\mathbb{N}$ à valeurs dans $\mathbb{R}$)
Pour définir le terme de la suite un, on utilise une fonction symbolique. On effectue le calcul des 10 premiers termes « à la main »
Pour connaire la monotonie de la suite on va dessiner la fonction generatrice de la suite: Pour cela on va utiliser la fonction plot : plot(u(x), x, 1, 40)