/* vide {algebra_linear.h} */ #define algebra_linear_C_COPYRIGHT "Copyright © 2008 Danillo Pereira e J. Stolfi, UNICAMP" /* Last edited on 2008-07-21 20:34:08 by stolfi */ #include #include #include "geometria_basica.h" #include "algebra_linear.h" void LigaElementosSelecionados(double v[], int n, int sel[], double w[], int m) { //zera vetor: int i, j; for (i = 0; i < n; i++) { v[i] = 0.0; } for (j = 0; j < m; j++) { i = sel[j]; if ((i >= 0) && (i < n)) { v[i] = w[j]; } } } double MultiplicaVetores(double *A, double *B, int Dim) { int i = 0; double resultado = 0.0; //multiplica os dois vetores for(i = 0; i < Dim; i++) resultado += A[i]*B[i]; return resultado; } void MulMatrizVetor(double *A, double *B, double *C,int N,int M) { int i,j; double c[N];//variavel auxiliar //inicializa o vetor auxiliar for(i = 0; i < N; i++) c[i] = 0.0; //calcula a multiplicacao for(i = 0; i < N; i++) for(j = 0; j < M; j++) { c[i] += A[i*M+j]*B[j]; } //trasnfere resultado p/ o vetor C for(i = 0; i < N; i++) C[i] = c[i]; } void MultiplicaMatrizMatriz(double *A1, double *A2, double *A3, int N) { int i,j,k; //aloca uma matriz temporária para o resultado double *T = NOTNULL(malloc(sizeof(double)*N*N)); //multiplica for(i = 0; i < N; i++) for(j = 0; j < N; j++) { double sum = 0.0; for(k = 0; k < N; k++) sum += A1[i*N + k]*A2[k*N + j]; T[i*N + j] = sum; } //copia resultado para {A3}: for(i = 0; i < N; i++) for(j = 0; j < N; j++) A3[i*N+j] = T[i*N+j]; free(T); }