void MatrixGenerator::executeComputing() {
  maxIndex = n -1;
  generateMatrixA(true);
  //printMatrix();
  saveAsCRS("CRS_A.txt");
  //saveAsCCS("CCS_A.txt");
  multiplyMatrixVectorCRS("CRS_A.txt");
  clearResultVector();
  //multiplyMatrixVectorCCS("CCS_A.txt");
  //clearMatrixAndResultVector();
  cout << endl;

  //maxIndex = n -1;
  //generateMatrixB(true);
  //printMatrix();
  //saveAsCRS("CRS_B.txt");
  //saveAsCCS("CCS_B.txt");
  //multiplyMatrixVectorCRS("CRS_B.txt");
  //clearResultVector();
  //multiplyMatrixVectorCCS("CCS_B.txt");
  //clearMatrixAndResultVector();
  //cout << endl;

  //maxIndex = m -1;
  //generateMatrixC(true);
  //printMatrix();
  //saveAsCRS("CRS_C.txt");
  //saveAsCCS("CCS_C.txt");
  //multiplyMatrixVectorCRS("CRS_C.txt");
  //clearResultVector();
  //multiplyMatrixVectorCCS("CCS_C.txt");
  //clearMatrixAndResultVector();
  //cout << endl;

  //maxIndex = m -1;
  //generateMatrixD(true);
  //printMatrix();
  //saveAsCRS("CRS_D.txt");
  //saveAsCCS("CCS_D.txt");
  //multiplyMatrixVectorCRS("CRS_D.txt");
  //clearResultVector();
  //multiplyMatrixVectorCCS("CCS_D.txt");
  //clearMatrixAndResultVector();  
}
Exemplo n.º 2
0
int main(int argc, char *argv[])
{
	printf("Jacob Factorization\n");
	int  i=0, j=0;
	double dbsum = 0, error = 0, bladKoncowy=0, bladLaczny=0;
	double czasLaczny=0;
	printf("Inicjalizacja macierzy\n");

	double* x = malloc(sizeOfMatrix * sizeof(double));
	double* x_old = malloc(sizeOfMatrix * sizeof(double));
	double* Mx = malloc(sizeOfMatrix * sizeof(double));
	double* N = malloc(sizeOfMatrix * sizeof(double));
	double * b = malloc(sizeOfMatrix * sizeof(double*));

	double** A = malloc(sizeOfMatrix * sizeof(double *));
	double ** D = malloc(sizeOfMatrix * sizeof(double *));
	double ** M = malloc(sizeOfMatrix * sizeof(double *));
	double ** sumLU = malloc(sizeOfMatrix * sizeof(double *));

	int counter=0;

	for(i = 0; i < sizeOfMatrix; i++)
	{
        A[i] = malloc(sizeOfMatrix * sizeof(int));
		D[i] = malloc(sizeOfMatrix * sizeof(double));
		M[i] = malloc(sizeOfMatrix * sizeof(double));
		sumLU[i] = malloc(sizeOfMatrix * sizeof(double));
	    if(A[i]==NULL||D[i]==NULL||M[i]==NULL||sumLU[i]==NULL)
	    {
	    	fprintf(stderr, "out of memory\n");
	    }
	}

    if(b== NULL)
    {
    	fprintf(stderr, "out of memory\n");
    }

    for (counter=0;counter<10;counter++)
    {
    	printf("Iteracja %d\n", counter+1);
		printf("Generacja macierzy A i b\n");
		generateMatrixA(A, b);
		printf("Przygotowanie macierzy D,M,sumLU,Mx,N,x,x_old\n");

		time_t start = time(NULL);
		jacobFactorization(A, D, M, sumLU, x, x_old, Mx, N, b);
		czasLaczny+=(double)(time(NULL) - start);
	    printf("Czas trwania: %.2f\n", (double)(time(NULL) - start));



		printf("Sprawdzam!");
		for(j=0;j<sizeOfMatrix;j++)
		{
			for(i=0;i<sizeOfMatrix;i++)
			{
				dbsum += A[i][j]*x[i];
			}
			error += pow( dbsum-b[j], 2);
			dbsum=0;
		}
		bladLaczny+=bladKoncowy=sqrt(error);
		printf("Blad : %f\n", bladKoncowy);
		if(bladKoncowy>0.1)
			 printf("Blad obliczen jest za duzy!\n");
	}//for
    printf("Sredni czas : %f\n", czasLaczny/counter);
    printf("Sredni blad : %f\n", bladLaczny/counter);

    for(i = 0; i < sizeOfMatrix; i++)
    {
    	free(A[i]);
    	free(D[i]);
    	free(sumLU[i]);
    	free(M[i]);
    }

    free(A);
    free(b);
    free(D);
    free(sumLU);
    free(M);
    free(x);
    free(x_old);
    free(Mx);
    free(N);

    printf("Koniec\n");
    return 0;
}