(pour l'enseigner l'an prochain, par exemple)
dimanche 19 mai 2013
mercredi 8 mai 2013
SEND+MORE=MONEY
petit exercice au stage de python au CIRM (*):
trouver à l'aide d'un programme python comment remplacer chaque lettre par un chiffre différent pour que l'addition suivante soit juste:
SEND
+ MORE
-------
= MONEY
bien sûr, S et M ne sont pas remplacés par 0
Une solution en python:
def verif(s,e,n,d,m,o,r,y):
if s != 0 and m != 0 and (d+n*10+e*100+s*1000)+(e+r*10+o*100+m*1000) == y+e*10+n*100+o*1000+m*10000:
return True
else: return False
sol = []
def choix_ordonne(l1,p,l):
global sol
if p==0:
if verif(*l1):
sol += [l1]
print(l1)
elif l==[]: pass
else:
for x in l:
l2 = [y for y in l if y != x]
choix_ordonne(l1+[x], p-1,l2)
verif(1,2,3,4,5,6,7,8)
choix_ordonne([],8,[0,1,2,3,4,5,6,7,8,9])
print(str(len(sol))+' solution'+ ('' if len(sol)<2 else 's')+':')
for s in sol:
print(s)
PS: la fonction choix_ordonne(l1,p,l) énumère tous les choix possibles de p éléments pris dans la liste l, et teste s'ils vérifient la fonction verif lorsqu'ils sont ajoutés à la fin de la liste l1. Ceux qui la vérifient sont ajoutés à la liste globale sol.
(*) j'ai appris plein de choses sur python pendant ces 3 jours, merci en particulier à Marc, Judicaël, Benjamin et Luc!
trouver à l'aide d'un programme python comment remplacer chaque lettre par un chiffre différent pour que l'addition suivante soit juste:
SEND
+ MORE
-------
= MONEY
bien sûr, S et M ne sont pas remplacés par 0
Une solution en python:
def verif(s,e,n,d,m,o,r,y):
if s != 0 and m != 0 and (d+n*10+e*100+s*1000)+(e+r*10+o*100+m*1000) == y+e*10+n*100+o*1000+m*10000:
return True
else: return False
sol = []
def choix_ordonne(l1,p,l):
global sol
if p==0:
if verif(*l1):
sol += [l1]
print(l1)
elif l==[]: pass
else:
for x in l:
l2 = [y for y in l if y != x]
choix_ordonne(l1+[x], p-1,l2)
verif(1,2,3,4,5,6,7,8)
choix_ordonne([],8,[0,1,2,3,4,5,6,7,8,9])
print(str(len(sol))+' solution'+ ('' if len(sol)<2 else 's')+':')
for s in sol:
print(s)
PS: la fonction choix_ordonne(l1,p,l) énumère tous les choix possibles de p éléments pris dans la liste l, et teste s'ils vérifient la fonction verif lorsqu'ils sont ajoutés à la fin de la liste l1. Ceux qui la vérifient sont ajoutés à la liste globale sol.
(*) j'ai appris plein de choses sur python pendant ces 3 jours, merci en particulier à Marc, Judicaël, Benjamin et Luc!
jeudi 2 mai 2013
diagonalisation d'une matrice
Avec numpy:
>>> from numpy import *
on donne une matrice $3\times 3$ ligne par ligne :
>>> A = matrix([[1,2,3],[4,5,6],[7,8,1]])
>>> A
matrix([[1, 2, 3],
[4, 5, 6],
[7, 8, 1]])
le tableau de ses valeurs propres :
>>> eigvals(A)
array([ 12.45416474, -0.37976219, -5.07440255])
$3$ racines réelles simples, $A$ est donc diagonalisable, voici ses valeurs propres suivies de la matrice de passage dans la base des vecteurs propres :
>>> eig(A)
(array([ 12.45416474, -0.37976219, -5.07440255]), matrix([[-0.29373774, -0.73967882, -0.29720654],
[-0.69005397, 0.66500848, -0.39870229],
[-0.66147083, -0.10314536, 0.86758559]]))
>>> P=eig(A)[1]
on construit une matrice diagonale à partir du tableau des valeurs propres :
>>> D=diag(eig(A)[0])
et on vérifie que $A = P D P^{-1}$
>>> A-P*D*inv(P)
matrix([[ -2.22044605e-15, -1.33226763e-15, -4.44089210e-16],
[ -1.77635684e-15, 0.00000000e+00, 1.77635684e-15],
[ -4.44089210e-15, -5.32907052e-15, -2.66453526e-15]])
comme mumpy fait des calculs approchés, le résultat n'est pas exactement $0$, mais pas loin...
>>> from numpy import *
on donne une matrice $3\times 3$ ligne par ligne :
>>> A = matrix([[1,2,3],[4,5,6],[7,8,1]])
>>> A
matrix([[1, 2, 3],
[4, 5, 6],
[7, 8, 1]])
le tableau de ses valeurs propres :
>>> eigvals(A)
array([ 12.45416474, -0.37976219, -5.07440255])
$3$ racines réelles simples, $A$ est donc diagonalisable, voici ses valeurs propres suivies de la matrice de passage dans la base des vecteurs propres :
>>> eig(A)
(array([ 12.45416474, -0.37976219, -5.07440255]), matrix([[-0.29373774, -0.73967882, -0.29720654],
[-0.69005397, 0.66500848, -0.39870229],
[-0.66147083, -0.10314536, 0.86758559]]))
>>> P=eig(A)[1]
on construit une matrice diagonale à partir du tableau des valeurs propres :
>>> D=diag(eig(A)[0])
et on vérifie que $A = P D P^{-1}$
>>> A-P*D*inv(P)
matrix([[ -2.22044605e-15, -1.33226763e-15, -4.44089210e-16],
[ -1.77635684e-15, 0.00000000e+00, 1.77635684e-15],
[ -4.44089210e-15, -5.32907052e-15, -2.66453526e-15]])
comme mumpy fait des calculs approchés, le résultat n'est pas exactement $0$, mais pas loin...
Inscription à :
Articles (Atom)