std::vector<tws::geoarray::dimension_t> tws::geoarray::read_dimensions(const rapidjson::Value& jdims) { if(!jdims.IsArray() || jdims.IsNull()) throw tws::parse_error() << tws::error_description("error parsing array dimensions in metadata."); std::vector<dimension_t> dims; const rapidjson::SizeType nelements = jdims.Size(); for(rapidjson::SizeType i = 0; i != nelements; ++i) { const rapidjson::Value& jdim = jdims[i]; if(jdim.IsNull()) continue; dims.push_back(read_dimension(jdim)); } return dims; }
int main() { int n = 0; char filename[256]; double** matrixA; clock_t time; double* vectorB; n = read_dimension(); printf("Dimensio n=%d\n", n); printf("Arxiu matriu A? (buit per matriu random) "); fgets(filename, 255, stdin); if (filename[0] != '\n') { if (filename[strlen(filename) - 1] == '\n') { filename[strlen(filename) - 1] = '\0'; } printf("\nMatriu de l'arxiu %s\n", filename); matrixA = read_matrix(filename, n); } else { printf("\nMatriu random\n"); matrixA = generate_random_matrix(n); } printf("Arxiu vector b? (buit per vector random) "); fgets(filename, 255, stdin); if (filename[0] != '\n') { if (filename[strlen(filename) - 1] == '\n') { filename[strlen(filename) - 1] = '\0'; } printf("\nVector de l'arxiu %s\n", filename); vectorB = read_vector(filename, n); } else { printf("\n Vector random\n"); vectorB = generate_random_vector(n); } printf("Començant calcul LUx = b...\n"); time = clock(); /*******/ solveLU(n, matrixA, vectorB); /*******/ time = clock() - time; printf("Calcul finalitzat.\n"); printf("S'escriura el vector X a l'arxiu output2.txt\n"); write_vector("output2.txt", vectorB, n); printf("n = %d, t = %.6f, t/n = %.6f\n", n, ((float)time)/CLOCKS_PER_SEC, (((float)time) / CLOCKS_PER_SEC)/n ); free_matrix(matrixA, n); free(vectorB); return 0; }
int main (int argc, char* argv[]) { int n; double *b; Cel *A = NULL; FILE *input; char opt; /* Tratamento da entrada */ if(argc < 2) { error(NO_OPTION); } else { opt = argv[1][0]; switch(opt) { case '1': n = MATRIX_TEST_SIZE; A = malloc_matrix(n); b = malloc_vector(n); build_test_matrix(A,0.01,n); build_test_vector(b,n); conjugate_gradient(A,b,n); free_matrix(n,A); free(b); break; case '2': n = MATRIX_TEST_SIZE; A = malloc_matrix(n); b = malloc_vector(n); build_test_matrix(A,0.05,n); build_test_vector(b,n); conjugate_gradient(A,b,n); free_matrix(n,A); free(b); break; case '3': n = MATRIX_TEST_SIZE; A = malloc_matrix(n); b = malloc_vector(n); build_test_matrix(A,0.1,n); build_test_vector(b,n); conjugate_gradient(A,b,n); free_matrix(n,A); free(b); break; case '4': n = MATRIX_TEST_SIZE; A = malloc_matrix(n); b = malloc_vector(n); build_test_matrix(A,0.3,n); build_test_vector(b,n); conjugate_gradient(A,b,n); free_matrix(n,A); free(b); break; case 'r': if(argc < 3) error(NO_FILE); else { input = fopen(argv[2],"r"); if(input == NULL) error(OPENING_FILE); n = read_dimension(input); A = malloc_matrix(n); b = malloc_vector(n); read_matrix_system(input,n,A,b); fclose(input); conjugate_gradient(A,b,n); free_matrix(n,A); print_vector(n,b); free(b); break; } default: printf("Opcao nao reconhecida\n"); exit(EXIT_FAILURE); } } return 1; }