int main (void) { double** A = mat_cria(3,3); double** B = mat_cria(3,2); double** C = mat_cria(3,3); double** D = mat_cria(3,2); double** E = mat_cria(2,5); double x[5]; double v[3]; double w[3]; double XE[2]; // Vetor v v[0] = 0; v[1] = 1; v[2] = 2; // vetor x x[0] = 1; x[1] = 2; x[2] = 3; x[3] = 4; x[4] = 5; // Matriz A A[0][0] = 1; A[0][1] = 2; A[0][2] = 3; A[1][0] = 4; A[1][1] = 5; A[1][2] = 6; A[2][0] = 7; A[2][1] = 8; A[2][2] = 9; // Matriz B B[0][0] = 0; B[0][1] = 1; B[1][0] = 0; B[1][1] = 1; B[2][0] = 0; B[2][1] = 1; //Matriz E E[0][0] = 1; E[0][1] = 2; E[0][2] = 3; E[0][3] = 4; E[0][4] = 5; E[1][0] = 1; E[1][1] = 2; E[1][2] = 3; E[1][3] = 4; E[1][4] = 5; // Imprime a matriz printf(" Matriz A \n"); printm(3,3,A); mat_transposta(3,3, A, C); printf("\n\n Matriz Transposta C \n"); printm(3,3,C); printf("\n\n Vetor resultante da multiplicacao Matriz A x Vetor V \n"); mat_multv(3,3, A, v, w); printf("%g\n%g\n%g\n", w[0], w[1], w[2]); mat_multm(3,3,2, A, B, D); printf(" Matriz resultante da multiplicacao Matriz A x Matriz B \n"); printm(3,2,D); printf("\n\n Vetor resultante da multiplicacao vetor x * matriz E \n"); mat_multv(2,5, E, x, XE); printf("%g\n%g\n\n", XE[0], XE[1]); mat_libera(3, A); mat_libera(3, B); mat_libera(3, C); mat_libera(3, D); return 0; }
void test_mat_libera() { int i; double** A = mat_cria(100, 200); mat_libera(100, A); }
int main(){ double *x,*b, *bbarra; int n =100, i, tol =5; Matriz*** A, ***M, ***N; for(n=100; n<=10000;n=n*10){ A = mat_esparsa(n); x = (double*) calloc(n+IDX,sizeof(double)); b = (double*) calloc(n+IDX,sizeof(double)); bbarra = (double*) calloc(n+IDX,sizeof(double)); //Vetor solução for(int i =IDX; i< n+IDX; i++) x[i]=1; // Calculo do vetor b correto obtido atraves de Ax = b mat_multv(n,A,x,b); /*****SEM PRECOND*****/ //Redefinição de x[] para estimativa inicial vetor nulo for(int i =IDX; i< n+IDX; i++) x[i]=0; printf("\n\tMetodo gradiente Conjugado com pre condicionador de Sem PreCond , n= %d \n",n ); i = ConjugateGradient(n, A, b, x,tol); printf("\n\ti = %d \t\n",i ); /******Jacobi*********/ //Redefinição de x[] para estimativa inicial vetor nulo for(int i =IDX; i< n+IDX; i++) x[i]=0; // Matriz pre condicionador de Jacobi M = JacobiPC(A, n); //Minv Ax = Minv b/ N = mat_cria(n,n); mat_multm(n,M,A,N); mat_multv(n, M, b, bbarra); printf("\n\tMetodo gradiente Conjugado com pre condicionador de Jacobi , n= %d \n",n ); // Metodo gradiente Conjugado com pre condicionador de Jacobi , n= 1000 i = ConjugateGradient(n, N, bbarra, x,tol); printf("\n\ti = %d \t\n",i ); mat_libera(n,M); mat_libera(n,N); /******Gaus Seidel****/ //Redefinição de x[] para estimativa inicial vetor nulo for(int i =IDX; i< n+IDX; i++) x[i]=0; printf("\n\tMetodo gradiente Conjugado com pre condicionador de GaussSeidel , n= %d \n",n ); M = pre_cond(A,n,1); i = ConjugateGradientPC(n, A, M, b, x, tol); printf("\n\ti = %d \t\n",i ); mat_libera(n,M); /***** SSOR *********/ //Redefinição de x[] para estimativa inicial vetor nulo for(int i =IDX; i< n+IDX; i++) x[i]=0; printf("\n\tMetodo gradiente Conjugado com pre condicionador de SSOR , n= %d \n",n ); M = pre_cond(A,n,1.5); i = ConjugateGradientPC(n, A, M, b, x, tol); printf("\n\ti = %d \t\n",i ); mat_libera(n,M); //=======Fim do Loop======// free(x); free(b); free(bbarra); mat_libera(n,A); } for(n=100; n<=10000;n=n*10){ A = mat_esparsa_extend(n); x = (double*) calloc(n+IDX,sizeof(double)); b = (double*) calloc(n+IDX,sizeof(double)); bbarra = (double*) calloc(n+IDX,sizeof(double)); //Vetor solução for(int i =IDX; i< n+IDX; i++) x[i]=1; // Calculo do vetor b correto obtido atraves de Ax = b mat_multv(n,A,x,b); /*****SEM PRECOND*****/ //Redefinição de x[] para estimativa inicial vetor nulo for(int i =IDX; i< n+IDX; i++) x[i]=0; printf("\n\tMetodo gradiente Conjugado com pre condicionador de Sem PreCond , n= %d \n",n ); i = ConjugateGradient(n, A, b, x,tol); printf("\n\ti = %d \t\n",i ); /******Jacobi*********/ //Redefinição de x[] para estimativa inicial vetor nulo for(int i =IDX; i< n+IDX; i++) x[i]=0; // Matriz pre condicionador de Jacobi M = JacobiPC(A, n); //Minv Ax = Minv b/ N = mat_cria(n,n); mat_multm(n,M,A,N); mat_multv(n, M, b, bbarra); printf("\n\tMetodo gradiente Conjugado com pre condicionador de Jacobi , n= %d \n",n ); // Metodo gradiente Conjugado com pre condicionador de Jacobi , n= 1000 i = ConjugateGradient(n, N, bbarra, x,tol); printf("\n\ti = %d \t\n",i ); mat_libera(n,M); mat_libera(n,N); /******Gaus Seidel****/ //Redefinição de x[] para estimativa inicial vetor nulo for(int i =IDX; i< n+IDX; i++) x[i]=0; printf("\n\tMetodo gradiente Conjugado com pre condicionador de GaussSeidel , n= %d \n",n ); M = pre_cond(A,n,1); i = ConjugateGradientPC(n, A, M, b, x, tol); printf("\n\ti = %d \t\n",i ); mat_libera(n,M); /***** SSOR *********/ //Redefinição de x[] para estimativa inicial vetor nulo for(int i =IDX; i< n+IDX; i++) x[i]=0; printf("\n\tMetodo gradiente Conjugado com pre condicionador de SSOR , n= %d \n",n ); M = pre_cond(A,n,1.5); i = ConjugateGradientPC(n, A, M, b, x, tol); printf("\n\ti = %d \t\n",i ); mat_libera(n,M); //=======Fim do Loop======// free(x); free(b); free(bbarra); mat_libera(n,A); } }