예제 #1
0
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 */
}
예제 #2
0
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;
}