Example #1
0
inline Matrix *
fmsolve (const Matrix *m1, const Matrix *m2) {
  LUDecomposition lud;
  Matrix *result;

  lud = makeLUD(m1);
  result = solveLU(lud, m2);

  freeLUD(lud);
  return result;
}
Example #2
0
void runMyProgram(int N, FILE *output1, FILE *output2){
	double A[3*N];
	double X[N];

	generateTridag(N, A);

	generateX(N, X);
	fprintf(output1, "%i, ", N);
	fprintf(output2, "%i, ", N);
	GSLRunMyProgram(N, A, X, output1);
	double L[3*N];
	double U[3*N];
	zeroTridag(N, L);
	zeroTridag(N, U);
	clock_t startTime = clock();
	decompose(N, A, L, U);
	solveLU(N, L, U, X);
	fprintf(output2, "%f\n", 1000*(double)(clock()-startTime)/(double)(CLOCKS_PER_SEC));
	// printX(N, X);	

}
Example #3
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;
}
Example #4
0
int main()
{
	double ct_a = 16640030.0 / 1.e6;

	int n = 6;
	int i = 0;
	int j = 0;
	double** matrix = (double**)malloc(sizeof(double*) * n);
	double* vectorX = (double*)malloc(sizeof(double) * n);
	int* p = (int*)malloc(sizeof(int) * n);
	double det;

	assert(matrix != NULL);
	assert(vectorX != NULL);
	assert(p != NULL);

	printf("a = %lf\n", ct_a);

	for (i = 0; i < n; i++) {
		matrix[i] = (double*)malloc(sizeof(double) * n);

		assert(matrix[i] != NULL);
		for (j = 0; j < n; j++) {
			if (i == j) {
				matrix[i][j] = ct_a;
			} else if (i == j + 1 || i + 1 == j) {
				matrix[i][j] = ct_a + (i < j ? i : j);
			} else if (i == j + 2 || i + 2 == j) {
				matrix[i][j] = ct_a - (i < j ? i : j);
			} else {
				matrix[i][j] = 0;
			}
		}
	}

	for (i = 0; i < n; i++) vectorX[i] = 100;
	for (i = 0; i < n; i++) p[i] = i;

	print_matrix(matrix, n);

	det = lupp(n, matrix, p);

	print_matrix(matrix, n);

	printf("detA = %+.4e\n", det);

	printf("\nVECTOR P\n");
	for (i = 0; i < n; i++) {
		printf("%d -> %d\n", i, p[i]);
	}

	solveLU(n, matrix, vectorX);
	printf("\nSOLUCIO Ax=b:\n");
	for (i = 0; i < n; i++) {
		printf("%+.3e\n", vectorX[i]);
	}

	solveLU(n, matrix, vectorX);
	printf("\nSOLUCIO AAy=b:\n");
	for (i = 0; i < n; i++) {
		printf("%+.3e\n", vectorX[i]);
	}

	free(vectorX);
	free(p);
	for (i = 0; i < n; i++) {
		free(matrix[i]);
	}
	free(matrix);
	return 0;
}
/// Resolution by LU decomposition with pivot.
bool solveLU(const matrix<flnum>& A, const vector<flnum>& B, vector<flnum>& X)
{
    X = B;
    return solveLU(A, X);
}