TD1/TME1 : Matrices g´
en´
eralit´
es
P. Tr´
ebuchet
17 f´
evrier 2010
Exercice 1 – Manipulations simples
Question 1
Donner la matrice Rde la rotation de centre l’origine et d’angle 30 degr´
es relativement `
a la base canonique. Puis
donner la matrice R0de ce mˆ
eme op´
erateur relativement `
a la base 2e1, e2.
Question 2
´
Ecrire la matrice Mdonnant les coordonn´
ees de e1puis e2dans la base {2e1, e2}. Donner les coordonn´
ees du vecteur
3e1+ 5e2dans la base {2e1, e2}, comparer avec le produit matrice-vecteur M 3
5!. Que conjecturer alors quant `
a
M. Calculer alors la matrice M0des coordonn´
ees de 2e1, e2dans la base e1, e2. Que vaut le produit M M0?
Question 3
Calculer le produit M1R0Met le comparer `
aR.Ret R0sont dites equivalentes.
Question 4
Dans le plan en deux dimensions, ´
ecrire la matrice de la rotation de centre l’origine et d’angle 30 degr´
es, en consid´
erant
comme base de d´
epart les vecteurs 2e1, e2et comme base d’arriv´
ee les vecteurs e1et e2.
Question 5
En consid´
erant l’espace `
a trois dimensions, ´
ecrire la matrice de la rotation autour de l’axe passant par l’origine, de
vecteur directeur (1,1,1) et d’angle 120 degr´
es relativement `
a la base canonique.
Exercice 2 – Espace projectif et repr´
esentation matricielle
Dans cet exercice nous allons ´
etudier la repr´
esentation que l’on fait habituellement de l’espace en trois dimensions
dans tous les programmes de mod´
elisation (et donc dans les jeux vid´
eos et plus particuli`
erement dans la biblioth`
eque
OpenGL).
Question 1
Expliquer `
a l’aide d’un exemple pourquoi la rotation autour de l’axe passant par le point (1,0,0) et d’axe de vecteur
directeur (0,1,0) n’est pas une application lin´
eaire.
Indication : regarder l’image de (0,0,0) par cette application et rappeler la d´
efinition de lin´
earit´
e.
Question 2
On repr´
esente les points de l’espace `
a trois dimensions (celui dans lequel on vit !) par leur trois coordonn´
ees usuelles
et une quatri`
eme pos´
ee `
a1. En faisant une analogie avec la construction des vecteurs dans le plan `
a partir de points,
donner une d´
efinition d’un vecteur de l’espace dans cette repr´
esantation. D´
efinir alors la translation d’un point Ppar
un vecteur v. Est-ce que cette translation est une application lin´
eaire dans ce contexte ? Si oui, en donner la matrice.
1
UE Calcul Formel Version enseignant (P. Tr´
ebuchet) – page 2/??
Question 3
On appelle espace projectif l’espace d´
efini plus haut. A quels point de l’espace affine correspondent les points projec-
tifs (1,1,1,1) et (2,2,2,2) ?
Question 4
La repr´
esentation d´
efinie `
a la question 2 est commun´
ement appel´
ee espace projectif. Dans cette repr´
esentation, donner
la matrice de la rotation d’angle 30 degr´
es autour d’un axe passant par l’origine de l’espace (i.e. le point (0,0,0,1))
et parall`
ele `
a l’axe des abscisses.
Question 5
Montrer que dans la contexte de espaces projectifs la translation dans l’espace affine est une op´
eration lin´
eaire et
donnez la matrice d’une translation par rapport `
a un vecteur v.
Question 6
En d´
eduire une construction de la matrice de rotation par rapport `
a un axe ne passant pas par l’origine.
Question 7
OpenGL utilise la notion de matrice de transformation pour creer ses objets ; les seules primitives de cr´
etion d’objet
disponibles cr´
eent un objet centr´
e en l’origine du rep`
ere en cours. Ce rep`
ere en cours est obtenu `
a partir du rep`
ere
canonique en multipliant l’identit´
e pour une matrice de transformation. Expliquer ce que fait le code ci dessous.
GLfloat rDG[] = { 1.0 - 1.0/4.0, -0.5, -0.5 - 1.0/6.0 };
GLfloat rDD[] = { 1.0 - 1.0/4.0, -0.5, 0.5 + 1.0/6.0 };
GLfloat rAG[] = { -1.0 + 1.0/4.0, -0.5, -0.5 - 1.0/6.0 };
GLfloat rAD[] = { -1.0 + 1.0/4.0, -0.5, 0.5 + 1.0/6.0 };
void automobile (void) {
parallelepipede(2.0, 1.0, 1.0, orange);
glPushMatrix();
glTranslatefv(rDG);
roue(0.05, 1.0/3.0, violet);
glPopMatrix();
glPushMatrix();
glTranslatefv(rDD);
roue(0.05, 1.0/3.0, cyan);
glPopMatrix();
glPushMatrix();
glTranslatefv(rAG);
roue(0.05, 1.0/3.0, vert);
glPopMatrix();
}
Exercice 3 – algorithmique matricielle
Question 1
Ecrire l’algorithme du produit matriciel naif (trois boucles).
Solution:
Voila du code ecrire juste l’algo :
c
2006/2007 (by UPMC/LMD/CF) 17 f´
evrier 2010
UE Calcul Formel Version enseignant (P. Tr´
ebuchet) – page 3/??
#include<stdio.h>
#include<stdlib.h>
#include<generateur.h>
//On supposera les matrices stockees column major
prodmat(double *res, double *a, double *b,int size)
{
int i,j,k;
for(i=0;i<size*size;i++)
res[i]=0;
for(i=0;i<size;i++)
for(j=0;j<size;j++)
for(k=0;k<size;k++)
res[i*size+j]+=a[k*size+i]*b[j*size+k];
}
int main(int argc, char** argv)
{
double *a,*b,*res;
int size=atol(argv[1]);
a=generate(size);
b=generate(size);
res=malloc(size*size*sizeof(double));
prodmat(res,a,b,size);
}
Question 2
Ecrire ensuite l’algorithme du produit matriciel par blocs dans le cas ou la taille des blocs divise la taille de la matrice.
Solution:
Voila du code ecrire juste l’algo :
#include<stdio.h>
#include<stdlib.h>
#include<generateur.h>
//#define SIZEBLOCK 10
//On supposera les matrices stockees column major
prodmat(double *res, double *a, double *b,int size)
{
int i,j,k;
for(i=0;i<size*size;i++)
res[i]=0;
for(i=0;i<size/SIZEBLOCK;i++)
for(j=0;j<size/SIZEBLOCK;j++)
for(k=0;k<size/SIZEBLOCK;k++)
{
int ii,jj,kk;
for(ii=0;ii<SIZEBLOCK;ii++)
for(jj=0;jj<SIZEBLOCK;jj++)
for(kk=0;kk<SIZEBLOCK;kk++)
res[(i*size+j)*SIZEBLOCK+ii*size+jj]+=
a[(k*size+i)*SIZEBLOCK+kk*size+ii]
*b[(j*size+k)*SIZEBLOCK+jj*size+kk];
c
2006/2007 (by UPMC/LMD/CF) 17 f´
evrier 2010
UE Calcul Formel Version enseignant (P. Tr´
ebuchet) – page 4/??
}
}
int main(int argc, char** argv)
{
double *a,*b,*res;
int size=atol(argv[1]);
a=generate(size);
b=generate(size);
res=malloc(size*size*sizeof(double));
prodmat(res,a,b,size);
}
Question 3
Que rajouter pour g´
erer aussi les autres cas ?
Exercice 4 – Multiplication rapide de matrices
Question 1 – Donn´
ees intuitives
Donner la complexit´
e de l’algorithme d’addition de deux entiers `
anchiffres, et celle de l’algorithme de multiplication
par l’algorithme na¨
ıf.
Question 2 – Un algorithme de Winograd
En d´
eveloppant le produit :
(ai,j +bj0,k)(ai,j0+bj,k),
en supposant npair et en posant j0=nj, donner un algorithme permettant de limiter le nombre de multiplications
coefficients/coefficients. Quelle est le nombre total de multiplications dans ce cas l`
a ?
Question 3 – Algorithme de Strassen
En consid´
erant deux matrices de taille 2×2,A= a b
c d !et B= α β
γ δ !, et en d´
eveloppant les produits :
q1= (ab)δ
q2= (cd)α
q3=d(α+γ)
q4=a(β+δ)
q5= (a+b)(δα)
q6= (a+c)(α+β)
q7= (b+d)(γ+δ)
Expliciter l’un des ´
el´
ements suivants :
q1q3q5+q7
q4q1
q2+q3
q2q4+q5+q6
Question 4 – Algorithme de Strassen, la suite
Compter le nombre de multiplications n´
ecessaires pour effectuer un produit de matrices 2×2. Imaginer alors un
algorithme r´
eccursif permettant de multiplier deux matrices de taille n= 2m.
Question 5
En appelant T(n)le coˆ
ut de la multiplication par cet algorithme de matrices de taille n, donner une formule de
c
2006/2007 (by UPMC/LMD/CF) 17 f´
evrier 2010
UE Calcul Formel Version enseignant (P. Tr´
ebuchet) – page 5/??
r´
ecurrence permettant de d´
eduire la complexit´
e de cet algorithme. R´
esoudre cette formule (log2(7) est voisin de
2.81).
Exercice 5 – Notion de suppl´
ementaire
Question 1
Soit Eun espace vectoriel, et E0et E00 deux sous espaces vectoriels de E. On d´
efinit l’addition de E0et E00 comme
´
etant l’ensemble des vecteurs vtel que vs’´
ecrive comme v=vE0+vE00 , o`
uvE0appartient `
aE0et vE00 appartient `
a
E00. Montrer E0+E00 est un espace vectoriel, et mˆ
eme un sous espace vectoriel de E.
Question 2
On dit que E0et E00 sont en somme directe si E0E00 ={0}. Montrer que dans ce cas on a unicit´
e de l’´
ecriture
v=vE0+vE00 pour vE0+E00.
Question 3
On appelle projection une application lin´
eaire φtelle que φoφ =φ, montrer que l’espace vectoriel des vecteurs vtels
que φ(v)=0est en somme directe avec l’espace vectoriel engendr´
e par les vecteurs vtels que φ(v)6= 0.
Question 4
En se plac¸ant dans l’espace, et en utilisant le produit vectoriel, d´
eterminer une matrice de la projection sur le plan
{(1,1,0),(0,0,1)}, attention il faudra recourir `
a la repr´
esentation projective de l’espace.
En TP leur faire faire des manipulations en Maple la dessus avec animate pour que cela soit joli.
Exercice 6 – Implantation de la multiplication na¨
ıve de matrices
Les matrices seront repr´
esent´
ees dans nos programmes Cpar repr´
esentations un gros tableau de coefficients, o`
u les
´
el´
ements seront stock´
es colonnes par colonne.
Question 1
´
Ecrire en Cune fonction prenant en entr´
ee trois matrice stock´
ees sous forme de gros tableau et calculant le produit
matrice-matrice des deux premi`
eres, de mani`
ere na¨
ıve, et mettra le r´
esultat dans le troisi`
eme param`
etre (cf canevas
donn´
e).
Question 2
En utilisant l’option -shared de gcc cr´
eer un biblioth`
eque dynamique contenant votre fonction de multiplication.
Question 3
´
Ecrire un programme Cprenant sur sa ligne de commande le nom d’une biblioth`
eque dynamique et un entier n,
utilisant les appels syst`
emes dlopen et dlsym pour trouver dans la bilbioth`
eque dynamaique le symbole mat mul,
g´
en´
erant deux matrices al´
eatoires de double de taille npar net appelant la fonction de multiplication sur ces deux
matrices. attention la notion de pointeur sur fonction est utilis´
ee ici !
Question 4
Ecrire une deuxi`
eme fonction de produit matriciel mais cette fois par bloc. Et cr´
eer une deuxi`
eme biblioth`
eque conte-
nant ce produit.
Question 5
En faisant varier la taille des blocs et la taille des matrices faire des comparaisons de performance.
Exercice 7 – Interface avec Maple
c
2006/2007 (by UPMC/LMD/CF) 17 f´
evrier 2010
1 / 6 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans linterface ou les textes ? Ou savez-vous comment améliorer linterface utilisateur de StudyLib ? Nhésitez pas à envoyer vos suggestions. Cest très important pour nous !