Académique Documents
Professionnel Documents
Culture Documents
Mathématiques du Web.
c
Pascal Azerad
28 mars 2014
2
Table des matières
3
4 TABLE DES MATIÈRES
4 Résumé MATLAB. 57
TABLE DES MATIÈRES 5
Préambule
Ce document est une première version, l’auteur est très reconnaissant pour
toute erreur, coquille ou commentaire qu’on voudra bien lui adresser à
azerad@math.univ-montp2.fr
6 TABLE DES MATIÈRES
Chapitre 1
Le réseau : un graphe
gigantesque.
7
8 CHAPITRE 1. LE RÉSEAU : UN GRAPHE GIGANTESQUE.
Graphics (SGI) in 2003. The company has remained at this location ever
since, and the complex has since become known as the Googleplex (a play
on the word googolplex, a number that is equal to 1 followed by a googol of
zeros). In 2006, Google bought the property from SGI for 319 million.
Google’s declared code of conduct is « Don’t be evil », a phrase which they
went so far as to include in their prospectus, noting, « We believe strongly
that in the long term, we will be better served, as shareholders and in all
other ways, by a company that does good things for the world even if we
forgo some short term gains. » Vous pouvez regarder sur Youtube une video
de Serguei Brin devant des étudiants de l’Université de Berkeley.
% Initialize
clf
shg
set(gcf,’doublebuffer’,’on’)
axis([0 n 0 n])
axis square
axis ij
box on
set(gca,’position’,[.12 .20 .78 .78])
uicontrol(’style’,’frame’,’units’,’normal’,’position’,[.01 .09 .98 .07]);
uicontrol(’style’,’frame’,’units’,’normal’,’position’,[.01 .01 .98 .07]);
t1 = uicontrol(’style’,’text’,’units’,’normal’,’position’,[.02 .10 .94 .04], ...
’horiz’,’left’);
t2 = uicontrol(’style’,’text’,’units’,’normal’,’position’,[.02 .02 .94 .04], ...
’horiz’,’left’);
slow = uicontrol(’style’,’toggle’,’units’,’normal’, ...
’position’,[.01 .24 .07 .05],’string’,’slow’,’value’,0);
quit = uicontrol(’style’,’toggle’,’units’,’normal’, ...
’position’,[.01 .17 .07 .05],’string’,’quit’,’value’,0);
U = cell(n,1);
hash = zeros(n,1);
G = logical(sparse(n,n));
m = 1;
U{m} = root;
hash(m) = hashfun(root);
j = 1;
while j < n & get(quit,’value’) == 0
try
set(t1,’string’,sprintf(’%5d %s’,j,U{j}))
set(t2,’string’,’’);
drawnow
12 CHAPITRE 1. LE RÉSEAU : UN GRAPHE GIGANTESQUE.
page = urlread(U{j});
catch
set(t1,’string’,sprintf(’fail: %5d %s’,j,U{j}))
drawnow
continue
end
if get(slow,’value’)
pause(.25)
end
for f = findstr(’http:’,page);
% A link starts with ’http:’ and ends with the next quote.
e = min([findstr(’"’,page(f:end)) findstr(’’’’,page(f:end))]);
if isempty(e), continue, end
url = deblank(page(f:f+e-2));
url(url<’ ’) = ’!’; % Nonprintable characters
if url(end) == ’/’, url(end) = []; end
continue
end
i = 0;
for k = find(hash(1:m) == hashfun(url))’;
if isequal(U{k},url)
i = k;
break
end
end
if (i == 0) & (m < n)
m = m+1;
U{m} = url;
hash(m) = hashfun(url);
i = m;
end
if i > 0
G(i,j) = 1;
set(t2,’string’,sprintf(’%5d %s’,i,url))
line(j,i,’marker’,’.’,’markersize’,6)
drawnow
if get(slow,’value’)
pause(.25)
end
end
end
j = j+1;
end
delete(t1)
delete(t2)
delete(slow)
set(quit,’string’,’close’,’callback’,’close(gcf)’,’value’,0)
14 CHAPITRE 1. LE RÉSEAU : UN GRAPHE GIGANTESQUE.
%------------------------
function h = hashfun(url)
% Almost unique numeric hash code for pages already visited.
h = length(url) + 1024*sum(url);
1.4 TP1
le but de ce TP est d’apprendre les rudiments de MATLAB et de construire
le graphe d’une portion du web, ainsi que la matrice correspondante.
1. récuperer le fichier surfer.m sur l’espace pédagogique.
2. créer un répertoire mathduweb sur votre compte et y placer le fichier
surfer.m
3. ouvrir un terminal et lancer MATLAB : matlab &
4. lancer les demos de matlab intitulées : Basic Matrix Operations, Matrix
Manipulations pour vous familiariser un peu avec MATLAB. Ne pas
viser une connaissance exhaustive d’emblée. Nous apprendrons peu à
peu.
Nous allons utiliser le programme surfer.m pour créer le graphe d’une por-
tion du web. Le programme surfer(’racine’,n) part d’un site ’racine’ et
explore le web à partir de ce site, jusqu’à ce qu’il ait trouvé n sites distincts.
Ce qui suit reproduit la session matlab.
>> [U,G]=surfer(’http://www.math.univ-montp2.fr’,20);
>> U
U =
’http://www.math.univ-montp2.fr’
’http://www.univ-montp2.fr’
’http://www.cnrs.fr/languedoc-roussillon’
’http://ens.math.univ-montp2.fr/SPIP/Enseignement’
’http://ens.math.univ-montp2.fr/SPIP/I3M-UMR-5149’
’http://ens.math.univ-montp2.fr/SPIP/D’
1.4. TP1 15
’http://www.math.univ-montp2.fr/frontweb’
’http://ens.math.univ-montp2.fr/SPIP/auteur.php3’
’http://www.irem.univ-montp2.fr’
’http://ens.math.univ-montp2.fr/contacts.php’
’http://ens.math.univ-montp2.fr/adresse.php’
’http://ens.math.univ-montp2.fr/informatique’
’http://ens.math.univ-montp2.fr/informatique/intraweb.php’
’http://www.math.univ-montp2.fr/index_en.php’
’http://www.cnrs.fr’
’http://www.ufr.univ-montp2.fr’
’http://www.polytech.univ-montp2.fr’
’http://www.iutmontp.univ-montp2.fr’
’http://www.iut-nimes.fr’
’http://www.unimes.fr’
>> G
G =
(1,1) 1
(2,1) 1
(3,1) 1
(4,1) 1
(5,1) 1
(6,1) 1
(7,1) 1
(8,1) 1
(9,1) 1
(10,1) 1
(11,1) 1
(12,1) 1
(13,1) 1
(14,1) 1
(15,1) 1
(16,1) 1
(17,1) 1
(18,1) 1
(19,1) 1
(20,1) 1
(16,2) 1
(18,2) 1
16 CHAPITRE 1. LE RÉSEAU : UN GRAPHE GIGANTESQUE.
(19,2) 1
(15,3) 1
(1,4) 1
(2,4) 1
(4,4) 1
(7,4) 1
(9,4) 1
(16,4) 1
(1,5) 1
(2,5) 1
(3,5) 1
(4,5) 1
(7,5) 1
(9,5) 1
(15,5) 1
(1,6) 1
(2,6) 1
(4,6) 1
(7,6) 1
(9,6) 1
(15,6) 1
(16,6) 1
(1,7) 1
(1,8) 1
(2,8) 1
(3,8) 1
(4,8) 1
(7,8) 1
(9,8) 1
(15,8) 1
(2,9) 1
(1,10) 1
(2,10) 1
(3,10) 1
(4,10) 1
(5,10) 1
(6,10) 1
(7,10) 1
(8,10) 1
(9,10) 1
(10,10) 1
1.4. TP1 17
(11,10) 1
(12,10) 1
(13,10) 1
(14,10) 1
(15,10) 1
(16,10) 1
(17,10) 1
(18,10) 1
(19,10) 1
(20,10) 1
(1,11) 1
(2,11) 1
(3,11) 1
(4,11) 1
(5,11) 1
(6,11) 1
(7,11) 1
(8,11) 1
(9,11) 1
(10,11) 1
(11,11) 1
(12,11) 1
(13,11) 1
(14,11) 1
(15,11) 1
(16,11) 1
(17,11) 1
(18,11) 1
(19,11) 1
(20,11) 1
(1,12) 1
(2,12) 1
(3,12) 1
(4,12) 1
(5,12) 1
(6,12) 1
(7,12) 1
(8,12) 1
(9,12) 1
(10,12) 1
(11,12) 1
18 CHAPITRE 1. LE RÉSEAU : UN GRAPHE GIGANTESQUE.
(12,12) 1
(13,12) 1
(14,12) 1
(15,12) 1
(16,12) 1
(17,12) 1
(18,12) 1
(19,12) 1
(20,12) 1
(1,13) 1
(2,13) 1
(3,13) 1
(4,13) 1
(5,13) 1
(6,13) 1
(7,13) 1
(8,13) 1
(9,13) 1
(10,13) 1
(11,13) 1
(12,13) 1
(13,13) 1
(14,13) 1
(15,13) 1
(16,13) 1
(17,13) 1
(18,13) 1
(19,13) 1
(20,13) 1
(1,14) 1
(2,14) 1
(3,14) 1
(7,14) 1
(8,14) 1
(9,14) 1
(10,14) 1
(11,14) 1
(12,14) 1
(13,14) 1
(15,14) 1
(16,14) 1
1.4. TP1 19
(17,14) 1
(18,14) 1
(19,14) 1
(20,14) 1
(2,16) 1
(16,16) 1
(2,17) 1
(2,18) 1
(18,18) 1
(2,19) 1
(19,19) 1
>>
La figure 1 donne le profil de la matrice. On peut obtenir la profil d’une
matrice A par la commande spy(A) Essayer
>> A= ones(20,20);
>> spy(A)
Le nombre de coefficients non nuls est nz. Pour la matrice G, le nombre
de termes non nuls est faible par rapport au nombre total 400 = 20 × 20.
Ce fait est général, la matrice du web est creuse(beaucoup de termes sont
nuls). Vous pouvez essayer l’algorithme avec une autre racine, par exemple
’http ://www.montpellier.fr’ et n = 50. La matrice G obtenue est encore
creuse. Le programme s’arrête parfois, car certaines pages n’ont pas de liens
sortants et la navigation est alors bloquée (page sans issue.) Pour une grande
matrice, charger la matrice ’harvard500.mat’ de taille 500x500 ou bien té-
lécharger sur la plate-forme pédagogique mon.univ-montp2.fr, unité d’en-
seignement mathématiques du web, une matrice 1000x1000 obtenue par un
étudiant de 2009-2010, Bastien Vialla.
>> load(’harvard500.mat’);
>> size(U);
>>size(G);
>>spy(G);
21
22CHAPITRE 2. MODÉLISATION DE GRANDS ENSEMBLES DE DOCUMENTS POUR
der considering contain containing contains corresponding could couldn’t course currently
d definitely described despite did didn’t different do does doesn’t doing don’t done down
downwards during e each edu eg eight either else elsewhere enough entirely especially et
etc even ever every everybody everyone everything everywhere ex exactly example except f
far few fifth first five followed following follows for former formerly forth four from further
furthermore g get gets getting given gives go goes going gone got gotten greetings h had
hadn’t happens hardly has hasn’t have haven’t having he he’s hello help hence her here
here’s hereafter hereby herein hereupon hers herself hi him himself his hither hopefully
how howbeit however i i’d i’ll i’m i’ve ie if ignored immediate in inasmuch inc indeed
indicate indicated indicates inner insofar instead into inward is isn’t it it’d it’ll it’s its
itself j just k keep keeps kept know knows known l last lately later latter latterly least less
lest let let’s like liked likely little look looking looks ltd m mainly many may maybe me
mean meanwhile merely might more moreover most mostly much must my myself n name
namely nd near nearly necessary need needs neither never nevertheless new next nine no
nobody non none noone nor normally not nothing novel now nowhere o obviously of off
often oh ok okay old on once one ones only onto or other others otherwise ought our ours
ourselves out outside over overall own p particular particularly per perhaps placed please
plus possible presumably probably provides q que quite qv r rather rd re really reasonably
regarding regardless regards relatively respectively right s said same saw say saying says
second secondly see seeing seem seemed seeming seems seen self selves sensible sent serious
seriously seven several shall she should shouldn’t since six so some somebody somehow
someone something sometime sometimes somewhat somewhere soon sorry specified specify
specifying still sub such sup sure t t’s take taken tell tends th than thank thanks thanx that
that’s thats the their theirs them themselves then thence there there’s thereafter thereby
therefore therein theres thereupon these they they’d they’ll they’re they’ve think third
this thorough thoroughly those though three through throughout thru thus to together
too took toward towards tried tries truly try trying twice two u un under unfortunately
unless unlikely until unto up upon us use used useful uses using usually uucp v value va-
rious very via viz vs w want wants was wasn’t way we we’d we’ll we’re we’ve welcome well
went were weren’t what what’s whatever when whence whenever where where’s whereafter
whereas whereby wherein whereupon wherever whether which while whither who who’s
whoever whole whom whose why will willing wish with within without won’t wonder would
would wouldn’t x y yes yet you you’d you’ll you’re you’ve your yours yourself yourselves z
zero d’autre part à ne conserver que les racines des mots (en enlevant les pré-
fixes et suffixes). Cette étape s’appelle la lemmatisation.Ainsi, on ne conserve
que les mots importants (mots-clefs). Exemple : enseignement, enseignant,
enseignante, enseignants, enseigner, enseignent, sont représentés par un seul
terme enseigner. Cette étape est délicate à cause de la polysémie : le mot
enseigne par exemple peut avoir deux sens au moins. L’indexation consiste
alors à compter les fréquences et la position (comme la présence dans le titre,
dans les balises, . . . des mots-clefs dans la page. Finalement le web ou la base
2.2. MODÉLISATION PAR ESPACE VECTORIEL. 23
A = U ΣV T ,
AT Ax = λx ⇒ xT AT Ax = λxt x
autrement dit
||Ax||2 = λ||x||2 ⇒ λ ≥ 0.
Soit r l’indice au delà duquel λj = 0. Les valeurs propres de S sont donc
λ1 ≥ λ2 ≥ . . . ≥ λr > 0 et λr+1 = λr+2 = . . . λp = 0. Pour 1 ≤ j ≤ r, on
définit les valeurs singulières p
σ j = λj
et on pose
1
Uj = A Vj
σj
Comme A est de format m × p et Vj est de format p × 1, Uj est de format
m × 1. C’est un vecteur colonne à m composantes. Montrons que les vecteurs
U1 , U2 , . . . Ur sont de norme unité et orthogonaux deux à deux :
1 1 1
||Uj ||2 = UjT Uj = (A Vj )T A Vj = 2 VjT AT A Vj
σj σj σj
1 T λj
= V λj Vj = 2 VjT Vj = ||Vj ||2 = 1.
2 j
σj σj
Pour i 6= j
1 1 1
< Uj , Ui >= UjT Ui = (A Vj )T A Vi = VjT (AT A) Vi
σj σi σi σj
1 λi T
= VjT λi Vi = V Vi = 0.
σi σj σi σj j
On dispose donc d’une famille orthonormée r vecteurs colonnes de Rm . On la
complète par m − r vecteurs pour avoir une base othonormée (U1 , U2 , . . . Um )
de Rm . Soit la matrice U = [U1 , U2 , . . . , Um ] dont les colonnes sont les Ui . La
matrice U est orthogonale :
U T = U −1 .
2.4. UN PEU D’ALGÈBRE LINÉAIRE. 27
A = U ΣV T ⇔ AV = U Σ
où
σ1 0 ... 0 0 ... 0
... .. .. ..
0 σ2 . . .
.. .. .. .. ..
. . . 0 . .
Σ=
0 . . . 0 σr 0 ... 0
0 ... ... 0 0 ... 0
.. .. .. ..
. . . .
0 ... ... 0 0 ... 0
est une matrice m × p.
Montrons que AV = U Σ colonne par colonne.
Pour j ≤ r, par définition de Uj , on a AVj = σj Uj et U Σj = σj Uj donne le
même résultat.
Pour j > r, Vj est vecteur propre de AT A pour λj = 0 i.e. AT AVj = 0 donc
VjT AT AVj = 0 ce qui s’écrit encore ||AVj ||2 = 0, ce qui implique AVj = 0 et
U Σj = 0 donne le même résultat.
Il reste à constater que r est exactement le rang de A puisque c’est la di-
mension de l’espace ImA engendré par U1 = AV1 , U2 = AV2 , . . . , Ur = AVr .
Un dernier exemple :
√ √ √
√ √ √
1/√6 −2/ 6 1/√6
−1 1 0 −1/√2 1/√2 3 0 0
= · · −1/√2 √0 1/√2
0 −1 1 1/ 2 1/ 2 0 1 0
1/ 3 1/ 3 1/ 3
Ainsi X X
Ax = < x, Vi > AVi = < x, Vi > σi Ui
1≤i≤p 1≤i≤r
!
X X
kAxk2 =< Ax, Ax >= σi2 < x, Vi >2 ≤ σ12 < x, Vi >2 = σ12 kxk2 .
1≤i≤r 1≤i≤r
qui est bien l’équation d’un ellipsoïde de demi-axes σi dans la base ortho-
normée des Ui , 1 ≤ i ≤ p
– sinon r < p et
( )
X X y2
i
E= y= yi Ui , avec 2
≤1
1≤i≤r 1≤i≤r
σi
A = σ1 U1 V1T + . . . σr Ur VrT
où les matrices Ui ViT sont des matrices m × p de rang un. En effet il suffit
d’utiliser la définition du produit matriciel :
X r
X r
X
ai,j = (U Σ)i,k (V T )k,j = σk Ui,k Vj,k = σk (Uk VkT )i,j .
k k=1 k=1
Nous allons voir plusieurs applications de la SVD. Elles reposent toutes sur
le fait que la SVD permet une compression optimale de la matrice au sens
suivant : si on ne conserve dans Σ que les k < r valeurs singulières les plus
grandes σ1 ≥ σ2 ≥ . . . ≥ σk on obtient une matrice notée
Ak = σ1 U1 V1T + . . . σk Uk VkT
qui est de rang k. Nous allons montrer que c’est la meilleure approximation
de rang k de A au sens où kA − Ak k est minimum. Ainsi les matrices Ak
fournissent des compressions optimales de A pour un rang donné. le rang
correspond à la richesse de l’information contenue, c’est la dimension de
l’espace engendré par les colonnes ou les lignes de la matrice. Les matrices
Ak sont donc des versions appauvries de A puisqu’elles ont un rang inférieur
mais en quelque sorte ce sont les plus fidèles possibles à rang fixé.
Théorème 2 Soit k < r = rang(A) et soit
Ak = σ1 U1 V1T + . . . σk Uk VkT
2.4. UN PEU D’ALGÈBRE LINÉAIRE. 31
ce qui est impossible car ce sont des sous-espaces de Rp . Soit donc un vecteur
z ∈ ker B ∩V ect{V1 , V2 , . . . , Vk+1 } et tel que kzk = 1. On a d’une part Bz = 0
puisque z ∈ ker B. D’autre part Pz se décompose suivant laPfamille orthonor-
male V1 , V2 , . . . , Vk+1 en z = 1≤i≤k+1 < z, Vi > Vi = 1≤i≤k+1 (ViT z) Vi .
Donc X X
Az = (ViT z) A Vi = (ViT z) σi Ui .
1≤i≤k+1 1≤i≤k+1
32CHAPITRE 2. MODÉLISATION DE GRANDS ENSEMBLES DE DOCUMENTS POUR
kAxk
kAk = sup
x6=0 kxk
A = U ΣV T ,
AVj = σj Uj , j ≤ r; AVj = 0, j ≥ r + 1.
[U,Sigma,V]=svd(A)
[Uk,Sigmak,Vk]=svds(A,k)
2.6 TP 2
Construction d’un petite matrice terme document et SVD. D’après Berry-
Browne. le tableau suivant donne les titres de livre correspondant à une
recherche sur amazon.com.
2.6. TP 2 35
termes documents
T1 bab(y,ies,y’s) D1 infant and toddler first aid
T2 child(ren’s) D2 babies and children’s room (for your home)
T3 guide D3 child safety at home
T4 health D4 your baby’s health and safety : from infant to toddler
T5 home
T6 infant D5 baby proofing basics
T7 proofing D6 your guide to easy rust proofing
T8 safety D7 beanie babies collector’s guide
T9 toddler
1. Construire la matrice terme/document de taille 9×7. La normaliser, i.e.
faire en sorte que chaque colonne soit de norme euclidienne unité.Soit
A la matrice ainsi construite.
2. Effectuer la requête « child proofing ». Calculer le vecteur q correspon-
dant à la requête et calculer la pertinence de chaque document, i.e.
calculer cos θj de l’angle entre q et aj , où aj est la j-ème colonne de
A. Avec un seuil de pertinence de 0.5 ; quels seraient les documents
selectionnés ?
3. Quel est le rang de A ?
4. approximation de rang faible pour la recherche sémantique. Effectuer la
décomposition de valeur singulière de A. Construire une approximation
de A de rang 5 (resp. 4), notée A5 (resp. A4 ) . Quel est l’erreur relative
en norme euclidienne
||A − A5 ||
?
||A||
5. calculer à nouveau les cos θj (avec la matrice A remplacée par A5 ou
A4 ? Commenter. Indication : Soit Ak = Uk Σk VkT . Soit sj = Σk VkT ej .
Montrer que
sj T (UkT q)
cos θj =
||sj ||||q||
les k composantes de sj sont les coordonnées de la j-ème colonne de Ak
dans la base définie par les colonnes de Uk . Les k composantes de UkT q
sont les composantes dans cette même base de la projection Uk UkT q du
vecteur requête q sur l’espace des colonnes de Ak
36CHAPITRE 2. MODÉLISATION DE GRANDS ENSEMBLES DE DOCUMENTS POUR
Chapitre 3
37
38CHAPITRE 3. LE MOTEUR DE RECHERCHE GOOGLE ET LE PAGE RANKING.
r =r·H
ans =
Il faut veiller à ce que la matrice reste stochastique, donc on prend une com-
binaison convexe de S et n1 eeT .
On règle ainsi le problème de la régularité de la matrice (irréduc-
tibilité et apériodicité) :
1
G = αS + (1 − α) eeT
n
α est un paramètre à choisir judicieusement.
3.2. L’ALGORITHME PAGE RANK. 41
ans =
Remarque. En fait le page rank affiché dans la barre d’outil google et égale-
ment par différents « add-ons » du navigateur Firefox est une image logarith-
mique : au lieu de πi on affiche le nombre [(10 + log πi )+ ], de sorte que pour
42CHAPITRE 3. LE MOTEUR DE RECHERCHE GOOGLE ET LE PAGE RANKING.
T : x ∈ Rn 7→ x G ∈ Rn .
x G − y G = (x − y)(αS + (1 − α)1/neeT )
or
(x − y)eeT = 0
donc
xG − yG = α · (x − y)S
Prenons la norme
kxG − yGk = α|||S|||kx − yk
|||S||| ≤ 1 Il suffit de prendre la norme matricielle associée à la norme
Enfin P
|x| = |xi | sur Rn .
X X XX X X X
kzSk = | zi Si,j | ≤ |zi |Si,j ≤ |zi | Si,j ≤ |zi |.
j i j i i j i
Donc
kT (x) − T (y)k ≤ αkx − yk. (3.3)
Le théorème du point fixe de Banach pour l’application T : B → B permet
d’affirmer que T possède un unique point fixe π dans B. Cela signifie qu’il
3.2. L’ALGORITHME PAGE RANK. 43
De plus le théorème du point fixe est constructif : il dit aussi que la suite
définie par la relation de récurrence
x(k+1) = x(k) G (3.4)
où x(0) est un vecteur initial positif et normalisé quelconque de Rn converge
vers π et que la convergence s’effectue au moins aussi vite que la convergence
de la suite géométrique αk vers 0 :
kx(k) − πk ≤ αk kx(0) − πk.
Ce dernier point est facile à prouver par récurrence car
kx(k) − πk = kT (x(k−1) ) − T (π)k ≤ αkx(k−1) − πk
grâce à (3.3). On dispose donc d’un algorithme qui converge à vitesse géo-
métrique O(αk ) vers le page rank :
– Initialisation π ← (1/n, . . . , 1/n)
– Répéter πold ← π, π ← π G //itération
– jusqu’à kπ − πold k < tolerance// test d’arrêt
Le problème c’est que maintenant la matrice G est pleine et l’algorithme
itératif
π (k+1) = π (k) G
peut-être coûteux.
En fait on peut le réecrire en fonction de la matrice creuse H.
(k+1) (k) 1 T (1 − α) (k) T
π =π αS + (1 − α) ee = απ (k) S + π ee
n n
Comme π (0) est de somme unité (vecteur normalisé) et que G est stochastique
on a que π (k) est de somme unité et donc que π (k) e = 1.
π (k+1) = απ (k) H + απ (k) a + (1 − α) eT /n.
– Initialisation y ← 0
– Pour i=1 à n faire
– Pour j tels que i → j faire yj ← yj + xi /li Fin pour
– Fin pour
– Retourne y
Remarquez que tel qu’il est codé, l’algorithme effectue une boucle sur les liens
sortants de chaque page i et que chaque lien i → j est traitéPexactement une
fois. le nombre total d’opération est donc proportionnel à i li . Si les pages
¯ ¯
émettent en moyenne l liens, la complexité vaut i li = nl au lieu de n2 si
P
la matrice était pleine.
C’est ce qui fait que cette méthode, appelée méthode de la puissance peut
être utilisée en pratique pour les matrices creuses.
3.2.2 Le choix de α
α s’interprète comme le pourcentage du temps pendant lequel le googlebot
navigue suivant les probabilités données par S, 1 − α correspond au pourcen-
tage restant pendant lequel le googlebot navigue complètement au hasard sur
le web, suivant une loi uniforme (tous les sites ont la même probabilité 1/n).
La vitesse à laquelle αk → 0 donne le nombre d’itération nécessaires à une
précision donnée : Pour avoir le page rank à 10−10 près, il faut 34 itérations
pour α = 0.5 81 itérations pour α = 0.75 142 itérations pour α = 0.85
Mais si α est trop petit, la matrice S qui résume le web est complètement
absorbée par la matrice uniforme n1 eeT Il faut faire un compromis. Le choix
α = 0.85 en est un acceptable.
Le problème se pose aussi de la sensibilité du page rank vis à vis du paramètre
α. On peut prouver [3] le théorème :
dπj (α) 1
| |≤
dα 1−α
Ainsi si on prend α pas trop près de un, le résultat n’est pas trop sensible
vis à vis de α. La démonstration fait l’objet du TD 4.
dπj (α) 1
| |≤
dα 1−α
1. En utilisant π(α) · e = 1, montrer que
dπ(α)
·e=0
dα
2. En déduire
dπ(α) 1
· (I − α S) = π(α)(S − e eT )
dα n
I désigne la matrice identité.
3. On suppose 0 < α < 1. Montrer que (I − α S) est inversible et que
(I − α S)−1 est à coefficients positifs.
4. Soit x et y des vecteurs colonnes de Rn . On suppose que xT e = 0.
Montrer que
X (ymax − ymin )
|xT y| ≤ ( |xi |)
i
2
dπ(α) 1
= π(α)(S − e eT )(I − α S)−1
dα n
Et donc
dπj (α) 1
= π(α)(S − e eT )(I − α S)−1 ej (3.5)
dα n
où ej désigne le j e vecteur de la base canonique.
Poser alors xT = π(α)(S − n1 P e eT ) et y = (I − α S)−1 ej .
Montrer que xT e = 0 et que i |xi | ≤ 2.
6. En utilisant la question (3), prouver que ymin ≥ 0
1
7. En utilisant que (I − α S) e = (1 − α) · e, prouver que ymax ≤ 1−α
.
8. Conclure à l’aide de (4) et de l’équation (3.5).
46CHAPITRE 3. LE MOTEUR DE RECHERCHE GOOGLE ET LE PAGE RANKING.
Preuve. On décompose X
x= xj uj
j
On a immédiatement
X
||M k x − x1 u1 || ≤ |λ2 |k ( |λj /λ2 |k |xj |||uj ||) ≤ C · |λ2 |k
j≥2
Prenons le module.
X X
|λ||vi | = | pi,j vj | ≤ pi,j |vj |.
j j
Soit |vm | = maxj |vj | une composante de module maximum. On a |vm | > 0
car v 6= 0. On a X
|λ||vm | ≤ pm,j |vj |.
j
on tire X
|λ| ≤ pm,j = 1.
j
Donc |λ| ≤ 1. Nous avons donc prouvé à la fois que 1 est valeur propre
et que toutes les autres valeurs propres sont de module inférieur ou égal à
un. Montrons maintenant que la valeur propre 1 admet un vecteur propre à
gauche dont toutes les composantes sont positives (resp. strictement positives
si pi,j > 0. Comme P et P T ont les mêmes valeurs propres, on sait que 1 est
valeur propre de P T associée au vecteur propre colonne aT . Donc a · P = a.
X
aj = ai pi,j
i
or pi,j > 0 et au moins un des |ai | > 0 donc bj > 0 et ceci vaut ∀j.
Montrons enfin, et c’est la partie la plus délicate de la preuve, que 1 est valeur
propre simple de P et les autres valeurs propres sont de module strictement
inférieur à 1. Soit λ valeur propre associée à un vecteur propre v supposé non
colinéaire à u. Montrons que |λ| < 1. Nous avons déja prouvé que |λ| ≤ 1.
Envisageons le cas d’égalité |λ| = 1. Nous obtenons, avec la même notation
|vm | = maxj |vj |,
X |vj | X
|λ| = 1 ≤ pm,j ≤ pm,j = 1
j
|vm | j
Comme pm,j > 0 et |vj | ≤ |vm | cela implique que |vj | = |vm | donc tous les
coefficients vj sont de même module, disons ρ. Prenant le module de
X
pi,j vj = λvi .
j
Q = (e, X)
Considérons
T T T T
−1 y y y y e y T SX
Q SQ = S (e, X) = (Se, SX) = (e, SX) =
YT YT YT Y T e Y T SX
−1 1 ∗
Q SQ = T
O Y SX
50CHAPITRE 3. LE MOTEUR DE RECHERCHE GOOGLE ET LE PAGE RANKING.
Corollaire 1 Soit P matrice stochastique dont tous les coefficients sont stric-
tement positifs. Alors lorsque k → ∞, la matrice P k converge vers une ma-
P et égales à π unique vecteur ligne
trice dont toutes les lignes sont identiques
à coefficients positifs que π = π · P et i πi = 1.
Preuve. Si on admet que P est diagonalisable il suffit d’appliquer la prop 5.
Les valeurs propres sont 1, λ2 , . . . , λn et |λn | ≤ . . . ≤ |λ2 | < 1
P = QDQ−1
où D = diag(1, λ2 , . . . , λn ).
P k = QDk Q−1
où Dk = diag(1, λk2 , . . . , λkn ). Les coefficients diagonaux de Dk sont des suites
géométriques, donc Dk → diag(1, 0, . . . , 0) et
1 0 ... 0
0 0 ... 0
−1
P k → Q .. .. . Q .
. . . . . ..
0 0 ... 0
Il suffit ensuite d’effectuer le produit (associatif). Notant L = (l1 , l2 , . . . , ln )
la première ligne de Q−1 . On a
1 0 ... 0 l1 l2 . . . ln
0 0 ... 0 0 0 ... 0
−1
. Q = .. ..
.. .. ..
. . . . . .. . . ... .
0 0 ... 0 0 0 ... 0
Puis
l1 l2 . . . ln l1 c1 l2 c1 . . . l n c1
0 0 ... 0 l1 c2 l2 c2 . . . l n c2
Q· .. = .. .. = (l1 C, l2 C, . . . ln C).
.. .. ..
. . ... . . . ... .
0 0 ... 0 l1 cn l2 cn . . . ln cn
3.2. L’ALGORITHME PAGE RANK. 51
1
ci =
l1 + l2 + . . . + ln
La matrice
l1 ln
l1 +l2 +...+ln
... l1 +l2 +...+ln
.. ..
. ... .
Pk →
.. ..
. ... .
l1 ln
l1 +l2 +...+ln
... l1 +l2 +...+ln
Notons
l1 l2 ln
π=( , ,..., .
l1 + l2 + . . . + ln l1 + l2 + . . . + ln l1 + l2 + . . . + ln
Cette méthode est intéressante si la taille du réseau n’est pas trop grand
(intraweb, par exemple). La matrice H est creuse cependant. On peut en
déduire une formule théorique pour le vecteur pagerank :
∞
X
T
x = α k eT H k
k=1
une matrice stochastique dont toutes les lignes sont égales à α, que α
est la distribution limite des robots, quel que soit leur position initiale.
Montrer de plus que ∀i, αi > 0.
Indications : d’après Kemeny-Snell, Finite Markov chains [6],pp. 69-70. On
commencera par noter d = min pij . Montrer que pour N ≥ 2, 0 < d ≤ 1/2.
Considérant ensuite la j e colonne, poser
(n) (n)
Mn = max pij = pbj
i
et
(n) (n)
mn = min pij = paj .
i
Mn+1 ≤ Mn , mn+1 ≥ mn , Mn − mn → 0,
ce qui impliquera que la matrice P n converge vers une matrice constante par
colonne, i.e. dont toutes les lignes sont égales. Remarquer ensuite que
! !
X (n)
X (n)
Mn+1 = max pik pkj = max pik pkj + pia mn
i i
k k6=a
!
X
≤ pik Mn + pia mn = (1 − pia ) Mn + pia mn = Mn − (Mn − mn ) pia
k6=a
On obtient ainsi
Mn+1 ≤ Mn − (Mn − mn ) d.
Prouver de même
mn+1 ≥ mn + (Mn − mn ) d.
En soustrayant, cela donne
3.4 TP4
On suppose n = 500. A partir de la matrice G = harvard500.mat vue dans le
TP1, fabriquer une matrice de transition du web, i.e. une matrice stochastique
P dont tous les coefficients soient strictement positifs. On pourra d’abord
54CHAPITRE 3. LE MOTEUR DE RECHERCHE GOOGLE ET LE PAGE RANKING.
>> S=sum(G,2);
P
la commande » S=sum(G,2) effectue la somme de chaque ligne j G(i, j) et
range les résultats dans un vecteur colonne. On normalise à 1 la somme de
chaque ligne en divisant G(i, j)/S(i) lorsque S(i) est non nul.
G = G - diag(diag(G));
56CHAPITRE 3. LE MOTEUR DE RECHERCHE GOOGLE ET LE PAGE RANKING.
% c = out-degree, r = in-degree
[n,n] = size(G);
c = sum(G,1);
r = sum(G,2);
k = find(c~=0);
D = sparse(k,k,1./c(k),n,n);
% Solve (I - p*G*D)*x = e
e = ones(n,1);
I = speye(n,n);
x = (I - p*G*D)\e;
x = x/sum(x);
shg
bar(x)
title(’Page Rank’)
if nargout < 1
[ignore,q] = sort(-x);
disp(’ page-rank in out url’)
k = 1;
while (k <= n) & (x(q(k)) >= .005)
j = q(k);
disp(sprintf(’ %3.0f %8.4f %4.0f %4.0f %s’, ...
j,x(j),r(j),c(j),U{j}))
k = k+1;
end
end
Chapitre 4
Résumé MATLAB.
Auteur : Michel Cuer. (M. Cuer : attention il est indispensable de lire ce résumé devant un
ordinateur en effectuant les manipulations nécessaires à la compréhension)
A) Préliminaires.
Le sigle MATLAB signifie “matrix laboratory” et à l’origine ce logiciel était
utilisé, et l’est encore, pour la recherche en analyse numérique matricielle. La
partie analyse numérique matricielle repose sur les bibliothèques FORTRAN
du domaine public BLAS (basic linear algebra subroutines) et LAPACK (li-
near algebra package qui fait suite à LINPACK et EISPACK) disponibles à
l’adresse internet http ://www.netlib.org/lapack ainsi que sur des procédures
particulières aux grandes matrices creuses (contenant beaucoup de zéros) en
particulier celles de la bibliothèque C UMFPACK (Unsymmetric MultiFron-
tal method : voir http ://www.cise.ufl.edu/research/sparse/umfpack) pour
la résolution des grands systèmes linéaires creux, et celles de la bibliothèque
FORTRAN ARPACK (ARnoldi PACKage : voir http ://www.caam.rice.edu/software/ARPACK/)
pour le calcul de quelques valeurs propres de très grandes matrices creuses.
Les développements ultérieurs de ce logiciel en ont fait l’OUTIL de l’analyse
numérique et des bureaux d’études de l’industrie. MATLAB n’est pas gra-
tuit et est même très coûteux et les logiciels du domaine public, OCTAVE et
SCILAB, bien moins performants ont des syntaxes très voisines (octave en
particulier) permettant, le cas échéant, de faire quelques tests sans disposer
de MATLAB.
Il est indispensable de consulter la documentation en ligne pour utiliser mat-
lab et on peut recommander aussi les livres : Cleve Moler, 2004, Numerical
Computing with MATLAB, SIAM, Philadelphia (dont on peut récupérer une
version internet, avec des codes, à l’adresse http ://www.mathworks.fr/moler/,
via mozilla ; C. Moler, professeur d’analyse numérique, est le créateur du
logiciel et directeur scientifique de la société mathworks qui le commercia-
lise et l’améliore constamment ; ce livre est excellent à condition de faire les
57
58 CHAPITRE 4. RÉSUMÉ MATLAB.
exercices) ; D.J. Higham, N.J. Higham, 2005, Matlab Guide, Second Edition,
SIAM, Philadelphia (plutôt mathématique) et D.C. Hanselman, B.L. Little-
field, 2004, Mastering MATLAB 7 : Prentice Hall, Upper Saddle River, NJ
(plutôt complet).
B) Mise en train et tour d’horizon de la documentation en ligne.
Après avoir lancé MATLAB ou bien par la commande matlab& dans une
fenêtre ou bien au moyen de la souris après avoir repéré son emplacement
dans un des menus du bureau, on obtient une fenêtre où il n’est pas difficile
de constater ce que font par exemple les commandes :
> > 1+9
ans =
10
> > 4*8
ans =
32
> > A=[1 2 3; 4 5 6; 7 8 9], rand(’state’,0), x=rand(3,1), A*x, x’*A
...
> > xx=-pi:0.01:pi; plot(xx,sin(xx))
> > hold on, plot(xx,0), hold off
Il est important de comprendre que matlab, qui peut se comporter comme
une calculette, manipule des matrices, un scalaire étant une matrice 1×1.
Il n’y a aucune déclaration de type ou de dimension et les fonctions
size et length, permettent de connaître les dimensions
d’un
objet, la matrice
1 2 3
vide étant Av=[].Ici A est la matrice 3×3 A = 4 5 6 : les coefficients
7 8 9
d’une ligne sont séparés par des espaces ( ) ou des virgules (,) et les dif-
férentes lignes sont séparées par des points-virgules (;), l’ensemble étant
entre crochets ([ ]). L’instruction rand(’state’,0) initialise le générateur
de nombres pseudo-aléatoires, x est un vecteur colonne à 3 composantes, A*x
est le produit de A par x (vecteur colonne) et x’*A le produit de xT (vecteur
ligne) par A (vecteur ligne). À noter qu’il est possible de placer plusieurs ins-
tructions sur une ligne 1 à condition de les séparer par des virgules, auxquels
cas les résultats sont affichés, ou des points-virgules auxquels cas les résul-
tats ne sont pas affichés (c’est l’opposé de la convention de maple)... xx est
le vecteur ligne (−π, −π + 0.01, −π + 0.02, ..., “π 00 ), avec bien sûr des arrondis
qui font que par exemple la dernière composante xx(length(xx)) n’est pas
π mais 3.1384... (faire aussi, “pour voir”, plot(diff(diff(xx))) et consul-
1. Mais il me semble que pour la programmation, les experts matlab qui ont “le bon
style de programmation”, n’écrivent qu’une instruction par ligne.
59
lonnes par colonnes ; A(5) est donc ici 5 et A(5)=10 équivaut à A(2,2)=10. Si
z est un vecteur ou une matrice w=z(:) est un vecteur colonne contenant tous
les éléments de z dans l’ordre où ils sont en mémoire. À partir d’opérateurs
booléens (logiques) et de vecteurs, matrices et scalaires
fabrique des vec-
on
1 1 1
teurs ou matrices booléennes : B=A<=5 est 1 1 0 (attention ces 1
0 0 0
sont des “true”, vrai et ces 0 sont des “false”, faux et non des entiers ou des flot-
tants – il n’y a pas de déclarations de type mais il y a des types en matlab qui
sont produits par le “contexte” – attention aussi de manipuler avec la bonne
matrice A définie plus haut par exemple en la réinitialisant en utilisant la pe-
tite flèche verticale vers le haut du clavier, ou en copiant à la souris l’instruc-
tion convenable de la fenêtre “Command History” dans la fenêtre “Command
Window”). De plus si C et D sont deux matrices de mêmes dimensions, C étant
par exemple de type réel (flottant double) et D de type booléen, alors C(D)
donne un vecteur colonne qui contient tous les coefficients de C pour lesquels
le coefficient de D de même indice est vrai dans l’ordre du rangement des
colonnes de C ; par exemple A(A<=5) est [1 42 5 3]’. Aussi l’instruction
3 2 1
A(A<=5)=[3 5 2 4 1] fournit A = 5 4 6 (et A(A<=5)=11 fournit A =
7 8 9
11 11 11
11 11 6 car un scalaire peut toujours être apparié avec une matrice
7 8 9
4 5 6
–A+3 est 7 8 9 –). On a là un exemple d’indexation booléenne
10 11 12
et une autre illustration, si xx=linspace(-pi,pi,100), yy=sin(xx), est le
fait que zz=max(0,yy) équivaut à zz=yy, zz(zz<0)=0, mais cette deuxième
possibilité est plus lente que la première.
Il y a deux façons de définir des sous programmes en matlab en plus de la com-
mande inline qui n’est utilisable que par compatibilité avec les versions anté-
rieures. La première, à n’utiliser que pour des fonctions simples, est l’usage de
fonctions dites anonymes comme dans 2 f=@(x,y) cos(y*x)./(1+x.^2);
g=[]; for y=-5:0.1:5, g=[g, quad(f,-10000,10000,[],[],y)]; end, plot(-5:0.1:5
L’autre façon, la plus courante, consiste à taper, par exemple au moyen de
l’éditeur, le fichier suivant, dit “M-fonction”, dont le nom doit être f.m (on
peut rencontrer aussi function [args1,args1,...]=nom(arge1,arge2,...)) :
function z=f(x,y)
y=cos(y*x)./(1+x.^2);
et le calcul est fait au moyen des instructions suivantes lancées dans la fe-
nêtre “Command Window” comme plus haut : g=[]; for y=-5:0.1:5, g=[g,
quad(@f,-10000,10000,[],[],y)]; end, plot(-5:0.1:5,g). On fait ici
référence à la poignée (handle) @f de la “M-fonction” définie dans le fi-
chier f.m. Il est important de savoir que ce fichier sera dans le répertoire
visible dans la fenêtre “Current Directory” et il est donc judicieux de créer
un répertoire de travail appelé par exemple temp_matlab (la commande
unix est mkdir temp_matlab ; !mkdir temp_matlab peut se faire à partir de
matlab ...) et de faire en sorte que le “Current Directory” soit toujours
temp_matlab ou un de ses sous-répertoires. Si nécessaire, il peut être utile
de consulter les commandes eval et feval et de lancer type fcnchk.
Le troisième et dernier point non trivial, à propos des sous programmes,
concerne le fait que par l’intermédiaire des arguments varargin (en entrée)
et varargout (en sortie) on peut définir des sous programmes à listes
d’arguments non figées a priori . Ceci est utilisé dans l’exemple précé-
dent et cela se comprend en lançant type quad pour constater que la première
ligne de quad.m est (on peut savoir où se trouve ce code en lançant which
quad) : function [Q,fcnt] = quad(funfcn,a,b,tol,trace,varargin) et
que, dans ce sous programme, funfcn est calculée par exemple dans les ins-
tructions (ne pas trop chercher à éclaircir l’usage de fcnchk ; on peut consi-
dérer que f est funfcn ; nargin et nargout sont évidemment les nombres
d’arguments d’entrée et de sortie ; de plus les lignes commençant par % sont
des commentaires et il est possible d’introduire des blocs entiers de commen-
taires en les plaçant entre %{ et }%) :
f = fcnchk(funfcn);
if nargin < 4 || isempty(tol), tol = 1.e-6; end;
if nargin < 5 || isempty(trace), trace = 0; end;
% Initialize with three unequal subintervals.
h = 0.13579*(b-a); x = [a a+h a+2*h (a+b)/2 b-2*h b-h b]; y = f(x,
varargin{:}); fcnt = 7;
La variable supplémentaire y qui a été utilisée plus haut, est vue, dans la
fonction quad, comme varargin, varargin{1} en fait, et il peut y en avoir
autant qu’on veut varargin{1}, varargin{2}, ... et la même chose est vraie,
avec varargout pour les arguments de sortie. On notera aussi plus haut,
l’usage de vides [] pour tol et trace. Pour plus de détails, il faut consulter
la documentation en ligne, ainsi que les codes des “demos” ou du livre de
Moler.
Entre deux calculs il peut être nécessaire de libérer de la place mémoire –
la liste des variables conservées en mémoire avec leurs tailles et leurs valeurs
62 CHAPITRE 4. RÉSUMÉ MATLAB.
que le plus grand entier sur 8 bits est 27 − 1 et le plus petit −(28 − 27 ) = −27 , de la même
manière les entiers signés sur 16, 32 et 64 bits vont de −215 à 215 − 1, −231 à 231 − 1 et
de −263 à 263 − 1 ; bien évidemment les entiers non signés sont aussi utilisés et vont de 0
à 28 − 1 sur 8 bits et etc...
5. En simple précision ces flottants sont codés en général — cela a été fonction de la
technologie et ne change plus maintenant — sur 32 bits (4 octets de 8 bits) en une mantisse
et un exposant, un des octets servant à coder l’exposant et le signe : si b31 , b30 , ..., b0
représente ces bits le nombre est défini comme suit : “si b30 27 + ... + b23 = 255 mais
b22 ...b0 6= 0, la machine dit NaN (not a number) ; si b30 27 + ... + b23 = 255 et b22 ...b0 = 0,
on convient de dire que le nombreest +∞ si b31= 0 et −∞ si b31 = 1 ; si 1 ≤ b30 27 +
+ si b31 = 0 7
... + b23 ≤ 254, le nombre vaut : (1 + b222 + ... + 2b23
0
)2b30 2 +...+b23 −127 ;
− si b31 = 1
si b30 ...b23 = 0 et b22 ...b0 = 0, le nombre est zéro (on dit ± zéro selon que b31 est 0
1) ; si b30 ...b23 = 0 et b22 ...b0 6= 0, le nombre est dit dénormalisé, sa “valeur” est
ou
+ si b31 = 0
( b222 + ... + 2b230
)2−126 mais dans les opérations habituelles on considère
− si b31 = 1
que ce nombre est nul” ; ainsi en simple précision, le plus petit nombre machine non
négligeable devant 1, pour l’addition, est 2123 ' 1.2 10−7 , le plus petit nombre machine en
valeur absolue est 2−126 ' 1.2 10−38 et le plus grand ' 3.4 1038 .
En double précision, les flottants sont codés sur 64 bits (8 octets) et la règle pour
b63 b62 ...b0 est (l’exposant et la mantisse apparaissent dans un même octet ! ! !) : “si b62 210 +
... + b52 = 2047 mais b51 ...b0 6= 0, la machine dit NaN (not a number) ; si b62 210 + ... + b52 =
2047 et b51 ...b0 = 0, on convient de dire que le nombreest +∞ si b63 = 0 et −∞ si
+ si b63 = 0
b63 = 1 ; si 1 ≤ b62 210 + ... + b52 ≤ 2046, le nombre vaut : (1 + b251 + ... +
− si b63 = 1
b0 b62 210 +...+b52 −1023
252 )2 ; si b62 ...b52 = 0 et b51 ...b0 = 0, le nombre est zéro (on dit ± zéro
selon que b63 est 0 ou 1) ; sib62 ...b52 = 0 et b51 ...b0 6= 0, le nombre est dit dénormalisé, sa
+ si b63 = 0
“valeur” est ( b251 + ... + 2b52
0
)2−1022 mais dans les opérations habituelles on
− si b63 = 1
considère que ce nombre est nul” : ainsi en double précision, le plus petit nombre machine
non négligeable devant 1, pour l’addition, est eps= 2152 ' 2.2 10−16 (mais attention si
1 + 2153 fait 1 en machine 1 − 2153 ne fait pas 1, avec quelque chose du même genre en
simple précision : utiliser la nouvelle fonction matlab single pour expérimenter cela si le
temps le permet), le plus petit nombre machine en valeur absolue est 2−1022 ' 2.25 10−308
64 CHAPITRE 4. RÉSUMÉ MATLAB.
et le plus grand 2(1 − 2153 )21023 ' 1.8 10308 . On pourrait parler aussi d’architecture “little
endian” et “big endian” ; il suffit de savoir qu’il s’agit d’un problème d’ordre de rangement
des bits dans l’octet.
Pour voir tous les caractères ”standards” et visibles du code ACSII (American Stan-
dard Code for Information Interchange), faire, comme indiqué dans le livre de Moler :
x=reshape(32:127,32,3), char(x) (les 31 premiers caractères du code, caractères de
contrôle, ainsi que le 128ième en principe, ne sont pas visibles) mais vous pouvez aussi re-
garder les 129ième ... 256ième caractères avec char([129:256]) ; nos accents s’y trouvent.
65
ou(et) java ;
External Interfaces references
External Interfaces Reference
Release Notes
Printable Documentation (PDF) : fichiers qui sont sur internet.
Pour ne pas se noyer au début, il vaut se servir de Functions – Alphabe-
tical List, Functions – Categorial List, Handle Graphics Property
Browser. En cliquant sur un mot on est conduit vers les “bonnes” défini-
tions, et bien sûr il est très important de consulter des exemples de codes,
ceux du livre de Moler par exemple.
66 CHAPITRE 4. RÉSUMÉ MATLAB.
2,1,0,1,2,3,4,5.
b) Dans la documentation en ligne, partie “Mathematics”, chapitre “Po-
lynomials and Interpolation”, paragraphe “Interpolation”, lire les sections “
Two-Dimensional Interpolation” et “Comparing Interpolation Methods” et
exécuter les manipulations proposées concernant l’interpolation à deux va-
riables sur une grille régulière.
c) Dans la documentation en ligne, dans le même paragraphe, un peu loin,
lire la section “Triangulation and Interpolation of Scattered Data” et exécu-
ter les manipulations proposées concernant le calcul d’enveloppes convexes,
la triangulation de Delaunay et l’interpolation à deux variables à partir de
données obtenues sur une grille irrégulière.
67
2
1+4x
5) La fonction x → U (x) = − cosh(x) 2 a trois extremums : un maximum
Z xa Z xc2
dx dx
Ta = 4 p |E=−0.5 , Tc = 2 p |E=−1.5
0 E − U (x) xc1 E − U (x)
Ra
Ta , qui est aussi 2 −xa a √ dx |E=−0.5 , est la période du mouvement d’un
E−U (x)
point matériel de masse 1 et d’énergie E = −0.5 dans le potentiel U (x), de
même Tc est la période du mouvement d’un point matériel de masse 1 et
d’énergie E = −1.5 dans le potentiel U (x) : voir à ce sujet le paragraphe “11
Mouvement linéaire” (chapitre III, Intégration des équations du mouvement)
du livre L. Landau, E. Lifchitz, 1966, Mécanique : Mir, Moscou (on y trouve,
1
en exercice, le cas, calculable à la main, du potentiel U (x) = − cosh(x)2 ).
7a) Résoudre les deux problèmes de conditions initiales pour une équation
différentielle du deuxième ordre suivants, afficher les résultats et retrouver
les périodes des oscillations (qu’on a déjà calculées) :
2 2
dx dU 4x cosh(x) − (1 + 4x ) sinh(x) dx p
= − (x) = 2 , x(0) = xm , (0) = 2(E − U (xm )) pour E =
dt2 dx cosh(x)3 dt
(le choix de dx
dt
(0) provient de la conservation de l’énergie 12 ( dx
dt
(t))2 + U (x(t))
dans le mouvement).
7b) Résoudre les deux systèmes différentiels de Lorenz (d’abord dans un cas
qui montre un comportement chaotique puis dans un autre qui tend vers un
70 CHAPITRE 4. RÉSUMÉ MATLAB.
comportement périodique) :
− 38 y1 + y2 y3
y1 y1 (0) ∈ [5, 35]
d
y2 = −10y2 + 10y3 , y2 (0) ∈ [−39, 5]
dt
y3 −y2 y1 + (28 puis 99.65)y2 − y3 y3 (0) ∈ [−5, 35]
les valeurs initiales étant choisies de manière aléatoire dans les intervalles
indiqués.
71
x0=[x_m;sqrt(2*(-1.5-U(x_m)))];
[t,x,te,xe]=ode45(Up,[0 2*T_c],x0,opts,x0); te, figure(3), plot(t,x(:,1))
title([’E=-1.5 T=’,num2str(T_c)])
% et te est voisin de T_c
% Pour E=-1, normalement il faut un temps infini pour atteindre x=0
à partir de x=x_m , mais les
% erreurs d’arrondi font que ceci est impossible à illuster (de l’importance
des bases théoriques)
x0=[x_m;sqrt(2*(-1-U(x_m)))]; opts=odeset(’RelTol’,1e-3,’AbsTol’,1e-6);
[t,x]=ode113(Up,[0 20],x0,opts,x0); figure(4), subplot(2,1,1), plot(t,x(:,1))
title(’E=-1: Ces figures devraient être presque identiques’)
opts=odeset(’RelTol’,1e-10,’AbsTol’,eps);
[t,x]=ode113(Up,[0 20],x0,opts,x0); subplot(2,1,2), plot(t,x(:,1))
disp(’fin question 7a), appuyez sur une touche pour continuer’),
pause, close all, clear, clc
% 7b) Résolution de problèmes de conditions initiales pour le sys-
tème de Lorenz
F=@(t,y) [-8/3 0 y(2); 0 -10 10; -y(2) 28 -1]*y
% puis (faire les mêmes manipulations: ce n’est plus chaotique)
% F=@(t,y) [-8/3 0 y(2); 0 -10 10; -y(2) 99.65 -1]*y
sol=ode45(F,[0 50],[rand*30+5;rand*35-30;rand*40-5]);
xx=0:0.01:50; yy=deval(xx,sol);
figure(1), plot(xx,yy), figure(2), plot3(yy(1,:),yy(2,:),yy(3,:))
figure(3), comet3(yy(1,:),yy(2,:),yy(3,:))
% on peut faire aussi
figure(4), opts = odeset(’OutputFcn’,@odephas3);
ode45(F,[0 50],[rand*30+5;rand*35-30;rand*40-5],opts);
disp(’fin question 7b), appuyez sur une touche pour continuer’),
pause, close all, clear, clc
73
8) Résoudre le problème aux limites, dont la solution exacte est (1−x) exp(x) :
2
yj = −1+jhy , 1 ≤ j ≤ n, hy = n−1 (d’où le choix m = 2k+1 fait d’habitude).
La matrice G est définie par :
le numéro du noeud Nij si ce noeud est dans le maillage
G(i, j) =
0 si non
où Nij est le numéro de l’inconnue correspondante (numéro d’une ligne ou
colonne de la matrice du Laplacien).
p=find(G) donne donc les numéros (i.e. l’adresse dans G) des G(i, j) non nuls
organisés colonnes par colonnes comme dans G( :) (entiers dans 1,2,...,11*11=121
ici)
. ce G(p) est donc la suite des G(i, j) non nuls : 1,2,3,...56 ici
i=G(p); j=G(p); s=4*ones(size(p)) ; % sans commentaires supplémen-
taires
. dans la numérotation des colonnes ou lignes
du Laplacien
Q=G(p+k) est la suite des G(i, j) qui sont voisins en “position k” par rapport
aux G(p) ; il est intéressant d’afficher :
[G(p), G(p-1),G(p+m),G(p+1),G(p-m)]
. dans la numérotation de p=find(G) donc celle des
colonnes ou lignes du Laplacien
q=find(Q) donne les indices des composantes non nulles du vecteur Q et donc
(c’est la plus difficile à comprendre) :
i=G(p(q)) est la suite des numéros (dans la numérotation des colonnes du
Laplacien) des noeuds ayant un voisin dans le maillage dans la direction k,
la suite des numéros de ces voisins étant j=Q(q)
Il faudrait étendre les procédures à des domaines où la frontière n’est plus
constituée de lignes de noeuds (usage de la fonction matlab inpolygon), puis
aux cas des problèmes de Dirichlet non homogènes, de Neumann et enfin aux
schémas à 9 points. Ce n’est probablement pas hors de portée.
80 CHAPITRE 4. RÉSUMÉ MATLAB.
81