void calcular_base_ortonormal(Matriz& matriz, Matriz& matriz_ortonormal, int alfa){ //deja en matriz_ortonormal una matriz de alfa columnas double autovalor; int m = matriz_ortonormal.dimensionColumnas(); for (int i = 0; i < alfa; ++i) { //repito alfa veces (hay que experimentar con dicho valor) vector<double>& aux = matriz_ortonormal[i]; Matriz::cargarVector(aux); matriz.mostrar2(); autovalor = metodoPotencia(matriz, aux); //calculo el i-ésimo autovalor, en aux queda el autovector std::cout << "autovalor: " << i << " vale: " << std::scientific << autovalor << std::endl; /* Deflación */ Matriz auxiliar(m, m); std::cout << "-----------------------------------" << std::endl; normalizar(aux); auxiliar.multiplicarVectoresDameMatriz(aux, aux); auxiliar.multiplicarEscalar(autovalor); matriz.menos(auxiliar); matriz.mostrar2(); while (true) {} } /* Tengo en matriz_ortonormal la matriz con base de autovectores de matriz */ }
vector< typename PageRankEsparso::rankeable > PageRankEsparso::rankear() { vector<double> autovector = metodoPotencia(); // autovector asociado al autovalor 1 // cout << "Norma2: " << norma2(autovector) << endl; vector< typename PageRankEsparso::rankeable > ranking; for (unsigned int i = 0; i < autovector.size(); i++) { ranking.push_back(rankeable(i, autovector[i])); } sort(ranking.begin(), ranking.end()); return ranking; }