change output
This commit is contained in:
		
							
								
								
									
										17
									
								
								src/main.c
									
									
									
									
									
								
							
							
						
						
									
										17
									
								
								src/main.c
									
									
									
									
									
								
							| @@ -12,7 +12,6 @@ | |||||||
| void test_stationary_distribution(const char *path) { | void test_stationary_distribution(const char *path) { | ||||||
|     struct timeval tvstart, tvend; |     struct timeval tvstart, tvend; | ||||||
|  |  | ||||||
|     // Read and prepare the matrix |  | ||||||
|     gettimeofday(&tvstart, NULL); |     gettimeofday(&tvstart, NULL); | ||||||
|     SparseMatrix *matrix = read_sparse_matrix_from_mtx(path); |     SparseMatrix *matrix = read_sparse_matrix_from_mtx(path); | ||||||
|     convert_to_stochastic(matrix); |     convert_to_stochastic(matrix); | ||||||
| @@ -22,32 +21,20 @@ void test_stationary_distribution(const char *path) { | |||||||
|     double epsilon = 1e-10; |     double epsilon = 1e-10; | ||||||
|     double alpha = 0.8; |     double alpha = 0.8; | ||||||
|  |  | ||||||
|     // pagerank |  | ||||||
|     gettimeofday(&tvstart, NULL); |     gettimeofday(&tvstart, NULL); | ||||||
|     double *pi_power = pagerank(matrix, epsilon, alpha); |     double *pi_power = pagerank(matrix, epsilon, alpha); | ||||||
|     gettimeofday(&tvend, NULL); |     gettimeofday(&tvend, NULL); | ||||||
|     print_time_diff("Pagerank", &tvstart, &tvend); |     print_time_diff("Pagerank", &tvstart, &tvend); | ||||||
|  |  | ||||||
|     // nable delta |  | ||||||
|     gettimeofday(&tvstart, NULL); |     gettimeofday(&tvstart, NULL); | ||||||
|     double *pi_new = gauss_seidel_pagerank(matrix, epsilon, alpha); |     double *pi_new = gauss_seidel_pagerank(matrix, epsilon, alpha); | ||||||
|  |  | ||||||
|     gettimeofday(&tvend, NULL); |     gettimeofday(&tvend, NULL); | ||||||
|     print_time_diff("Gauss Seidel algorithm", &tvstart, &tvend); |     print_time_diff("Gauss-Seidel:", &tvstart, &tvend); | ||||||
|  |  | ||||||
|     // Compare results |  | ||||||
|     double diff = diff_norm_vector(pi_power, pi_new, matrix->num_nodes); |     double diff = diff_norm_vector(pi_power, pi_new, matrix->num_nodes); | ||||||
|     printf("Difference between power method and new algorithm: %.16f\n", diff); |     printf("Difference norm Pagerank and Gauss-Seidel: %.16f\n", diff); | ||||||
|  |  | ||||||
|  |  | ||||||
|     for (int i = 0; i < 10; ++i) { |  | ||||||
|         printf("pi_old: %.16f\n", pi_power[i]); |  | ||||||
|         printf("pi_new: %.16f\n", pi_new[i]); |  | ||||||
|         printf("\n"); |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|  |  | ||||||
|     // Clean up |  | ||||||
|     free(pi_power); |     free(pi_power); | ||||||
|     free(pi_new); |     free(pi_new); | ||||||
|     free_sparse_matrix(matrix); |     free_sparse_matrix(matrix); | ||||||
|   | |||||||
| @@ -19,7 +19,6 @@ double* power_algorithm(const SparseMatrix *matrix, double epsilon) { | |||||||
|     init_vector(pi, N, 1.0/(double)N); |     init_vector(pi, N, 1.0/(double)N); | ||||||
|     pi2 = power_algorithm_step(matrix, pi); |     pi2 = power_algorithm_step(matrix, pi); | ||||||
|     while (diff_norm_vector(pi, pi2, N)>epsilon) { |     while (diff_norm_vector(pi, pi2, N)>epsilon) { | ||||||
|         printf("step\n"); |  | ||||||
|         memcpy(pi, pi2, vecsize); |         memcpy(pi, pi2, vecsize); | ||||||
|         pi2 = power_algorithm_step(matrix, pi); |         pi2 = power_algorithm_step(matrix, pi); | ||||||
|     } |     } | ||||||
| @@ -65,12 +64,15 @@ double* pagerank(const SparseMatrix *matrix, double epsilon, double alpha) { | |||||||
|         pi = pi_new; |         pi = pi_new; | ||||||
|         pi_new = malloc(vec_size); |         pi_new = malloc(vec_size); | ||||||
|  |  | ||||||
|         if ((++iter)%1 == 0) { |         // if ((++iter)%1 == 0) { | ||||||
|             printf("Iteration %d: diff = %.16f\n", iter, diff); |         //     printf("Iteration %d: diff = %.16f\n", iter, diff); | ||||||
|         } |         // } | ||||||
|  |         ++iter; | ||||||
|         free(temp); |         free(temp); | ||||||
|     } while (diff > epsilon); |     } while (diff > epsilon); | ||||||
|  |  | ||||||
|  |     printf("Pagerank: %d Iterations\n", iter); | ||||||
|  |  | ||||||
|     free(pi_new); |     free(pi_new); | ||||||
|     free(f); |     free(f); | ||||||
|     return pi; |     return pi; | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user