Você está na página 1de 6

Projeto 1 Representante de Turma MS211

Professor: Marcos Eduardo Valle


rico Nogueira Rolim RA 170610

Questo 1.
Primeiramente, necessrio importar os dados e computar informaes
importantes a seu respeito. Essas informaes so:
soma: um vetor que contm a soma de cada linha da matriz A, sendo,
portanto, a quantidade de pessoas que disseram conhecer o aluno de
cada ndice.
somay: um vetor que contm a soma de cada coluna da matriz A. O
vetor fornece, portanto, a quantidade de pessoas que o aluno de cada
ndice disse conhecer.
v: o termo de amortecimento pela frmula = 1/.
b: o termo de amortecimento multiplicado pelo seu peso: =
(1 ) .
O cdigo que executa essas aes :
load DadosProjeto1.mat

n = 77;

alpha = 0.85;

for i = 1:n
soma(i) = sum(A(i, :));
somay(i) = sum(A(:, i));
v(i) = 1/n;
b(i) = (1-alpha)*v(i);
endfor

for i = 1:n
for j = 1:n
if (soma(j) != 0)
P(i,j) = A(j,i)/soma(j);
else
P(i,j) = 1/n;
endif
endfor
endfor
Aps esses passos, necessrio calcular a matriz P, cujos elementos
contm o valor da probabilidade do aluno j indicar o aluno i. Os clculos
desse passo so feitos seguindo a regra:

,
.
= {
1
,

Nesse caso, o nmero de conhecidos de j igual ao valor soma(j).
Isso implementado no seguinte cdigo:
for i = 1:n
for j = 1:n
if (soma(j) != 0)
P(i,j) = A(j,i)/soma(j);
else
P(i,j) = 1/n;
endif
endfor
endfor

Feito isso, necessrio montar o sistema linear que define as


probabilidades de cada aluno ser escolhido como representante.
Tendo:

= ( ) + (1 ) , = 1, ,
=1

Podemos alterar para:


( ) = (1 )
=1

A partir disso, definimos o sistema como:


=
Onde
1 12 1
21 1 2
=[ ]

1 .1 1
1
=[ ]

(1 )1
=[ ]
(1 )
Isso implementado atravs do seguinte cdigo:
for i = 1:n
for j = 1:n
if (i != j)
S(i,j) = -alpha*P(i,j);
else
S(i,j) = 1;
endif
endfor
endfor

Depois disso, necessrio resolver o sistema. Essa resoluo foi feita


utilizando o comando \, e depois foram descobertos os dois alunos com
maior representatividade.
X = S\b';
[maximo, representante] = max (X);
X(representante) = 0;
[maximo2, vrepresentante] = max (X);

Depois disso, so mostrados o maior nmero de indicaes recebidas e de


indicaes feitas e tambm as representatividades do representante e do
vice-representante, assim como os RAs, o nmero de indicaes que
receberam, e o nmero de pessoas que indicaram. Isso feita de acordo
com o seguinte cdigo:
disp("Maior numero de indicados e indicacoes")
disp(max(soma))
disp(max(somay))
disp("")

disp("Representante:")
disp(maximo)
disp(RA{representante})
disp(soma(representante))
disp(somay(representante))
disp("")
disp("Vice-representante:")
disp(maximo2)
disp(RA{vrepresentante})
disp(soma(vrepresentante))
disp(somay(vrepresentante))

O cdigo completo est na sequncia em que est exposto aqui e gera a


seguinte sada:
Maior numero de indicados e indicacoes
19
20
Representante:
0.031769
183024
16
18
Vice-representante:
0.029777
177876
16
20

Analisando os dados, podemos ver que o representante no o aluno com


mais indicaes ou que indicou mais pessoas, tendo recebido a mesma
quantidade de indicaes que o vice. O vice, no entanto, indicou um nmero
de pessoas igual ao mximo encontrado. Com isso, podemos concluir que
essa maneira de determinar o representante de sala no definida por
quem indicou mais ou foi indicado por mais pessoas, e leva em conta outros
fatores.
importante tambm verificar se a soluo fornecida pelo software
satisfatria para o sistema. Para isso, calculamos = , onde a
soluo encontrada pelo software, e comparamos com , avaliando o
resduo absoluto. Para essa comparao, foi utilizada a norma infinito, e o
resduo absoluto obtido , infelizmente, um pouco alto. Entretanto, o resduo
no uma boa estimativa para o erro, pois a matriz pouco condicionada.
Esses dados podem ser vistos nos comandos de console abaixo:
>> residuo=norm(S*X-b', inf)
residuo = 0.031769
>> cond(S)
ans = 15.061

Questo 2.
Sim, possvel definir e a funo que determina de forma a ser eleito
representante da turma. Nesse caso, a frmula utilizada foi uma calculava o
valor absoluto do inverso da distncia do RA (utilizado como nmero) do
aluno at o nmero 170610 (meu RA) (o valor de cada foi depois dividido
pela soma do vetor , de forma que a soma continuasse igual a 1).
1
, 170610
= {(170610 )
1, = 170610
Isso pode ser visto no cdigo abaixo:
load DadosProjeto1.mat

RA2 = cell2mat(RA);

n = 77;

alpha = 0.85
valor = 1

for i = 1:n
soma(i) = sum(A(i, :));
somay(i) = sum(A(:, i));
if (RA2(i)!=170610)
v(i) = 1/abs(170610-RA2(i));
else
v(i) = valor;
endif
endfor

v=v/sum(v);
b = (1-alpha)*v;
Depois disso, o cdigo se manteve o mesmo. Houve, claro, uma alterao
no resultado final, que est mostrado abaixo:
Maior numero de indicados e indicacoes
19
20

Representante:
0.22624
170610
1
2

Vice-representante:
0.19261
184561
2
6

Assim, pode-se concluir que o resultado desse programa manipulvel, e


at que facilmente. Para o exemplo acima, no houve alterao no
parmetro , apenas na frmula que determina . Podemos verificar que
essa frmula vlida atravs do comando de console abaixo:
>> sum(v)
ans = 1.00000

Você também pode gostar