示例#1
0
文件: utils.cpp 项目: e-sensing/tws
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;
}
示例#2
0
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;
}
示例#3
0
文件: main.c 项目: dxhunter/GC
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;
}