Você está na página 1de 7

Teste 12-13 (Álgebra Linear 2)

Caio Marques
caiomarques.eng@poli.ufrj.br
Professor: Marcelo Campos

31/12/2022
Sumário
1 Resumo 1

2 Introdução 1

3 Desenvolvimento do sistema 1

4 Resultados 2

5 Conclusões 3

6 Referências 3

7 Anexo do código 4
1 Resumo

Após a leitura do PDF e muita pesquisa, montei um código em Phyton que gera um gráfico com
setas, indicando entre os 8 sites qual possue link para o outro, além disso gera como resultado a
matriz L, sua transformação para uma matriz probabilidade de transição, depois gera a matriz com
d (ou alpha) = 0.9 (ou 90%) e por fim indica os valores das relevâncias de todos os sites usados em
ordem.

2 Introdução

Primeiramente é preciso fazer a leitura do gráfico fornecido, qual site liga atráves de uma seta
para o outro e qual esta sendo ligado por uma seta, para prosseguir com a matriz L inicial. Por isso
criei está tabela, facilitando a compreensão.

site possui link para


A BeG
B A, D e F
C AeD
D BeC
E C, F e G
F EeG
G E
H AeC

3 Desenvolvimento do sistema

Após usar a tabela criada como base e gerar a matriz L, foi preciso desenvolver o código em
Python, que transforme a matriz em uma matriz probabilidade de transição, no caso, se o site possue
2 links de direcionamento os 1 na coluna da matriz L viram 1/2, caso o site possue 3 links, os 1 viram
1/3 e assim em diante.
Depois de criado a matriz probabilidade de transição utilizamos a incerteza do d = 0.9, para
indicar a possibilidade do indivı́duo acessar o site sem clicar em links, no caso 90% de chance disso
acontecer.
Por fim, é feito o cálculo para achar a relevância de cada site, citando seus valores ao final.

1
4 Resultados

• Gráfico:

• Matriz L:
[[0. 1. 0. 0. 0. 0. 1. 0.]
[1. 0. 0. 1. 0. 1. 0. 0.]
[1. 0. 0. 1. 0. 0. 0. 0.]
[0. 1. 1. 0. 0. 0. 0. 0.]
[0. 0. 1. 0. 0. 1. 1. 0.]
[0. 0. 0. 0. 1. 0. 1. 0.]
[0. 0. 0. 0. 1. 0. 0. 0.]
[1. 0. 1. 0. 0. 0. 0. 0.]]

• Matriz probabilidade de transição:


[[0. 0.5 0. 0. 0. 0. 0.5 0. ]
[0.33333333 0. 0. 0.33333333 0. 0.33333333 0. 0. ]
[0.5 0. 0. 0.5 0. 0. 0. 0. ]
[0. 0.5 0.5 0. 0. 0. 0. 0. ]
[0. 0. 0.33333333 0. 0. 0.33333333 0.33333333 0. ]
[0. 0. 0. 0. 0.5 0. 0.5 0. ]
[0. 0. 0. 0. 1. 0. 0. 0. ]
[0.5 0. 0.5 0. 0. 0. 0. 0. ]]

2
• Matriz com d = 0.9:
[[0.0125 0.4625 0.0125 0.0125 0.0125 0.0125 0.4625 0.0125]
[0.3125 0.0125 0.0125 0.3125 0.0125 0.3125 0.0125 0.0125]
[0.4625 0.0125 0.0125 0.4625 0.0125 0.0125 0.0125 0.0125]
[0.0125 0.4625 0.4625 0.0125 0.0125 0.0125 0.0125 0.0125]
[0.0125 0.0125 0.3125 0.0125 0.0125 0.3125 0.3125 0.0125]
[0.0125 0.0125 0.0125 0.0125 0.4625 0.0125 0.4625 0.0125]
[0.0125 0.0125 0.0125 0.0125 0.9125 0.0125 0.0125 0.0125]
[0.4625 0.0125 0.4625 0.0125 0.0125 0.0125 0.0125 0.0125]]

• Relevâncias dos sites:


A : 0.11172436114703409
B : 0.11052067503233041
C : 0.13431813030518844
D : 0.1060993611470339
E : 0.2281613926300773
F : 0.11410462029872233
G : 0.18257145943961364
H : 0.012499999999999997

5 Conclusões

Após a conclusão do trabalho aprendi muito sobre o que é pagerank e como funciona esse sistema,
melhorei meus conhecimentos com autovalores e autovetores, desenvolvi minhas habilidades de pro-
gramação em phython importante bibliotecas que nunca tinha usado e melhorei minha habilidade
com a realização de relatórios, no caso, este relatório foi feito pelo sistema LaTeX no overleaf.

6 Referências

• http://pi.math.cornell.edu/ mec/Winter2009/RalucaRemus/Lecture3/lecture3.html

• https://www.cs.bu.edu/fac/crovella/cs132-book/L19PageRank.html

• https://openai.com/blog/chatgpt/

• https://www.youtube.com/watch?v=s9TSfY5nQJA

3
7 Anexo do código
1 import networkx as nx
2 import matplotlib . pyplot as plt
3 import numpy as np
4

5 g = nx . DiGraph ()
6 g . add_nodes_from ([ ’A ’ , ’B ’ , ’C ’ , ’D ’ , ’E ’ , ’F ’ , ’G ’ , ’H ’ ])
7 g . add_edge ( ’A ’ , ’B ’)
8 g . add_edge ( ’A ’ , ’G ’)
9 g . add_edge ( ’B ’ , ’A ’)
10 g . add_edge ( ’B ’ , ’D ’)
11 g . add_edge ( ’B ’ , ’F ’)
12 g . add_edge ( ’C ’ , ’A ’)
13 g . add_edge ( ’C ’ , ’D ’)
14 g . add_edge ( ’D ’ , ’B ’)
15 g . add_edge ( ’D ’ , ’C ’)
16 g . add_edge ( ’E ’ , ’C ’)
17 g . add_edge ( ’E ’ , ’F ’)
18 g . add_edge ( ’E ’ , ’G ’)
19 g . add_edge ( ’F ’ , ’E ’)
20 g . add_edge ( ’F ’ , ’G ’)
21 g . add_edge ( ’G ’ , ’E ’)
22 g . add_edge ( ’H ’ , ’A ’)
23 g . add_edge ( ’H ’ , ’C ’)
24

25 options = {
26 ’ node_color ’: ’ red ’ ,
27 ’ node_size ’: 1000 ,
28 ’ width ’: 1 ,
29 ’ arrowstyle ’: ’ -| > ’ ,
30 ’ arrowsize ’: 20 ,
31 }
32

33 npos = nx . circular_layout (g , scale =1)


34

35 nx . draw (g , pos = npos , with_labels = True , ** options , arrows = True )


36 plt . show ()
37

38 L = nx . to_numpy_matrix ( g )
39 print ( L )
40

41 N = L . shape [0]
42 P = np . zeros (( N , N ) )
43 for i in range (0 , N ) :
44 for j in range (0 , N ) :
45 if ( np . sum ( L [i ,:]) > 0) :
46 P [i , j ] = L [i , j ]/ np . sum ( L [i ,:])
47 else :
48 P [i , j ] = 1/ N
49 print ( P )

4
50

51 G = np . zeros (( N , N ) )
52 alpha = 0.85
53 for i in range (0 , N ) :
54 for j in range (0 , N ) :
55 G [i , j ] = alpha * P [i , j ] + (1 - alpha ) / N
56 print ( G )
57

58 eigvals , eigvecs = np . linalg . eig ( G . T )


59 eigvec1 = eigvecs [: , np . isclose ( eigvals , 1) ]
60 eigvec1 = eigvec1 [: ,0]
61

62 stationary = eigvec1 / eigvec1 . sum ()


63

64 stationary = stationary . real


65 for i in range (0 , N ) :
66 print ( chr ( i + 65) , ’: ’ , stationary [ i ])

Você também pode gostar