BCPST 1B (Informatique) 2013/2014 TD 4 : Carrés magiques

Download Report

Transcript BCPST 1B (Informatique) 2013/2014 TD 4 : Carrés magiques

BCP ST 1B (Informatique)
2013/2014
TD 4 : Carr´es magiques. Echelonnement d’une matrice. Matrices de convolution.
Dans les trois exercices de ce TD vous manipulerez des tableaux Numpy. Vous commencerez par importer ce
module. Pour le troisi`eme exercice vous devrez aussi le module Images de la biblioth`eque PIL.
Vous travaillerez en groupe et vous vous r´epartirez le travail, puis vous rassemblerez vos diff´erents r´esultats.
Vous pouvez traiter les exercices dans l’ordre que vous voulez.
I Carr´
es magiques.
1) R´ealiser une fonction testant si une matrice est carr´ee.
Remarque : On appelle matrice carr´e un tableau comportant autant de ligne que de colonnes.
On rappelle qu’une ”fonction test” retourne Vrai ou Faux (Plutˆ
ot : True ou False)
2) R´ealiser une fonction testant si une matrice de taille n × n contient bien tous les nombres de 1 `a n2 .
3) R´ealiser une fonction testant si une matrice carr´ee est un carr´e magique.
Remarque : On appelle carr´
e magique d’ordre n un tableau carr´e rempli avec tous les nombres entiers
compris entre 1 et n2 dont la somme de chaque ligne, de chaque colonne et de chaque diagonale est la
mˆeme.
4) Il existe plusieurs algorithme permettant de construire une carr´e magique d’ordre n, nous pouvons par exemple
utilis´e l’algorithme dit ”du cavalier”.
Description de l’algorithme du cavalier :
On place les nombres de 1 `
a n2 dans l’ordre croissant, on place le 1 n’importe o`
u, puis on se d´eplace de deux
cases `
a droite et d’une vers le bas on place le 2, on continue et si c’est impossible on se d´eplace d’une case
en diagonale `
a droite et vers le haut, puis on reprend le mouvement pr´ec´edent. Pr´ecision : quand on arrive
au bord du carr´e, on continue du cˆ
ot´e oppos´e (en haut ou `
a gauche).
Par exemple dans le cas n = 5, le d´ebut de l’algorithme du cavalier donne
1
8
9
2
3
4
7
6
5
Continuer l’algorithme et v´erifier qu’on obtient un carr´e magique.
R´
ealiser un programme ou une fonction permettant de construire le matrice d’ordre n obtenue
en appliquant l’algorithme du cavalier.
Les tableaux ainsi obtenus sont-ils des carr´es magiques pour tous les entiers n > 5 ?
II) M´
ethode du Pivot
On donne ci-dessous 4 algorithmes permettant d’´echelonner une matrice M.
- Une fonction ChoixPivot(M,i,j) qui d´etermine un pivot dans une colonne `a partir du coefficient en (i,j).
- Une fonction PermuteLigne(M,a,b) qui permute les lignes a et b de la matrice M.
- Une fonction OperationElem(M,a,b,x,y) qui remplace la ligne La de M par xLa+yLb
- Enfin la fonction principale Echelon(M) qui ´echelonne la matrice M.
Algorithme 1 : ChoixPivot
Entr´
ees : M (0 : n − 1; 0 : p − 1) : un tableau n × p de nombre r´eels, i et j deux entiers.
Variables : k un entier.
D´
ebut
k ← −1
Tant que (k = −1) et (i < n) faire
Si M (i, j) <> 0 alors
k←i
i←i+1
Sorties : La valeur de k
Algorithme 2 : PermuteLigne
Entr´
ees : M (0 : n − 1; 0 : p − 1) : un tableau n × p de nombre r´eels, a et b deux entiers.
Variables : x : un nombre r´eel.
D´
ebut
Pour j allant de 0 `
a p − 1 faire
x ← M (b, j)
M (b, j) ← M (a, j)
M (a, j) ← x
Sorties : La valeur de M
Algorithme 3 : OperationElem
Entr´
ees : M (0 : n − 1; 0 : p − 1) : un tableau n × p de nombre r´eels,
i et j deux entiers , x et y deux r´eels.
D´
ebut
Pour j allant de 0 `
a p − 1 faire
M (a, j) ← x ∗ M (a, j) + y ∗ M (b, j)
Sorties : La valeur de M
Algorithme 4 : Echelon
Entr´
ees : M (0 : n − 1; 0 : p − 1) : un tableau n × p de nombre r´eels,
i et j deux entiers , a et b deux r´eels.
D´
ebut
i←0
j←0
Tant que i < n et j < p faire
t ←ChoixPivot(M, i, j)
Tant que t = −1 et j < p − 1 faire
j =j+1
t ←ChoixPivot(M, i, j)
Si t <> −1 alors
M ←PermuteLigne(M, i, t)
Pour k allant de i + 1 `
a n − 1 faire
a = −1 × M (k, j)
b = M (i, j)
M ←OperationElem(M, k, i, b, a)
i←i+1
j ←j+1
sinon
j ←j+1
Sorties : La valeur de M
R´
ediger en Python ces quatre fonctions.
Pour chacune d’elles, vous ferez diff´erents appels sur des matrices pour v´erifier leur fonctionnement.
III) Algorithme de transformation d’images. R´
ealisation de filtres.
Le type de filtre envisag´ee ici est un filtre de matrice de convolution, mais aucune connaissance sur les matrices
n’est n´ecessaire, encore moins sur la convolution.


a b c
Prenons le cas d’une matrice 3 × 3 : d e f , les neufs coefficients de cette matrice sont les param`etres de
g h k
notre filtre nous pourrons donc les changer.
On veut appliquer ce filtre `a une image en niveaux de gris, repr´esenter par un tableaux d’entiers compris entre 0
et 255, que nous nommerons T
Appliquer le filtre `a l’image revient `a remplacer tous les nombres Ti,j par la somme :
aTi−1,j−1 + bTi−1,j + cTi−1,j+1
+ dTi,j−1 + eTi,j + f Ti,j+1
+ gTi+1,j−1 + hTi+1,j + kTi+1,j+1

Ti−1,j−1
On multiplie terme `
a terme la sous matrice  Ti,j−1
Ti+1,j−1
Ti−1,j
Ti,j
Ti+1,j


Ti−1,j+1
a b
Ti,j+1  avec la matrice du filtre d e
Ti+1,j+1
g h

c
f
k
pour trouver la nouvelle valeur de Ti,j
On utilise aussi les deux r`egles suivantes :
- On ne transforme pas les pixels se trouvant `a la bordure de l’image. (ils n’ont pas leurs 8 voisins)
- Si le r´esultat du calcul sort de l’intervalle [0, 255] on ram`ene `a 255 tout r´esultat sup´erieur `a 255 et `a 0 tout r´esultat
inf´erieur `a 0.
R´
ealiser une fonction Python permettant de filtrer une image avec diff´
erents filtres.
On pourra commencer avec les

0
0
0

−1
−1
−1
filtres suivants :


0 0
1
1
1 0
0 0
1

−1 −1
9 −1
−1 −1

−1/6
−2/3
−1/6

1 1
1 1
1 1


−1 −1 −1
−1
8 −1
−1 −1 −1

−2/3 −1/6
13/3 −2/3
−2/3 −1/6


−2 −1 0
−1 0 1
0
1 2