int main() { FILE *fp; float a1, a2; double Aarray[] = { 1,1,-0.1,1 }; double Harray[] = { 1,1,0,1 }; Mat *X[100],*Qk,*Rk,*A,*H,*Z,*Pk,*K; int iter = 0; fopen_s(&fp, "measure.txt", "r"); Z = mallocMat(2, 1, TYPE_FLOAT); X[0] = mallocMat(2, 1, TYPE_FLOAT); setVecVal(X[0], 0, 0.1); setVecVal(X[0], 1, 0.9); A = scanMat(2, 2, TYPE_FLOAT, Aarray); H = scanMat(2, 2, TYPE_FLOAT, Harray); Qk = identity(2, TYPE_FLOAT); Rk = identity(2, TYPE_FLOAT); Pk = identity(2, TYPE_FLOAT); K = zerosMat(2, 2, TYPE_FLOAT); if (!fp) { return -1; } while (!feof(fp)) { fscanf_s(fp, "%f %f", &a1, &a2); if (iter == 0) { iter++; continue; } setVecVal(Z, 0, a1); setVecVal(Z, 1, a2); X[iter] = mallocMat(2, 1, TYPE_FLOAT); predictState(A, X[iter - 1], X[iter]); predictErrorVariance(A, Pk, Qk, Pk); if (iter % 5 == 0) { getK(Pk, H, Rk, K); stateCorrect(X[iter], K, Z, H, X[iter]); varianceCorrect(Pk, K, H, Pk); } iter++; } return 1; }
int main(void) { double **a, **b; int i, j, k, n; FILE *f; char strIn[256]; clock_t start, end; printf("Doneu la dimensio de la matriu: "); scanf("%d", &n); a = mallocMat(n); b = mallocMat(n); do { printf("1. Dades aleatories\n2. Fitxer\n"); scanf("%d", &i); }while( i != 1 && i != 2 ); // Aleatori if(i == 1) { srand(time(NULL)); for( i = 0; i < n; i++ ) for( j = 0; j < n; j++ ) a[i][j] = rand()/RAND_MAX * 2 - 1; } else { printf("Doneu el fitxer d'entrada: "); scanf("%s", strIn); f = fopen(strIn, "r"); if( f == NULL ) { printf("Fitxer no valid.\n"); exit(1); } for( i = 0; i < n; i++ ) for( j = 0; j < n; j++ ) fscanf(f, "%lf", &a[i][j]); fclose(f); } start = clock(); for( i = 0; i < n; i++ ) { for( j = 0; j < n; j++ ) { for( k = 0; k < i; k++ ) { if( k <= j) b[i][j] += a[i][k]*a[k][j]; } if( j >= i ) b[i][j] += a[i][j]; } } end = clock(); printf("t\tn\tt/n\n%.4lf\t%d\t%lf\n", difftime(end, start)/CLOCKS_PER_SEC, n, n/difftime(end, start)/CLOCKS_PER_SEC); f = fopen("1.res", "w"); if( f == NULL ) printf("caca"); for( i = 0; i < n; i++ ) { for( j = 0; j < n; j++ ) fprintf(f, "%lf\t", b[i][j]); fprintf(f, "\n"); } return 0; }
int main (void) { double **a, *x, *y; int i, j, n; FILE *f; char strIn[256]; printf("Doneu la dimensió de la matriu: "); scanf("%d", &n); a = mallocMat(n); x = mallocVec(n); y = mallocVec(n); printf("Doneu el fitxer d'entrada: "); scanf("%s", strIn); f = fopen(strIn, "r"); if( f == NULL ) { printf("Fitxer no valid.\n"); exit(1); } for( i = 0; i < n; i++ ) for( j = 0; j < n; j++ ) fscanf(f, "%lf", &a[i][j]); for( i = 0; i < n; i++ ) fscanf(f, "%lf", &x[i]); fclose(f); for( i = 0; i < n; i++ ) { y[i] = 0; for( j = i; j < n; j++ ) y[i] += a[i][j]*x[j]; } for( i = 0; i < n; i++ ) { x[i] = y[i]; for( j = 0; j < i; j++ ) x[i] += a[i][j]*y[j]; } f = fopen("3.res", "w"); if( f == NULL ) printf("caca"); for( i = 0; i < n; i++ ) { fprintf(f, "%lf\t", x[i]); } fprintf(f, "\n"); fclose(f); }
int main(void) { double **a, *b; int i, j, n; FILE *f; char strIn[256]; printf("Doneu la dimensió de la matriu: "); scanf("%d", &n); a = mallocMat(n); b = mallocVec(n); printf("Doneu el fitxer d'entrada: "); scanf("%s", strIn); f = fopen(strIn, "r"); if( f == NULL ) { printf("Fitxer no valid.\n"); exit(1); } for( i = 0; i < n; i++ ) for( j = 0; j < n; j++ ) fscanf(f, "%lf", &a[i][j]); for( i = 0; i < n; i++ ) fscanf(f, "%lf", &b[i]); fclose(f); for( i = 0; i < n; i++ ) if(a[i][i] == 0) { printf("Matriu U Singular!\n"); exit(1); } for ( i = 0; i < n; i++ ) for( j = i + 1; j < n; j++ ) b[j] = b[j] - a[j][i] * b[i]; for ( i = n - 1; i >= 0; i-- ) { b[i] = b[i] / a[i][i]; for( j = i - 1; j >= 0 ; j-- ) b[j] = b[j] - b[i] * a[j][i]; } f = fopen("2.res", "w"); if( f == NULL ) printf("caca"); for( i = 0; i < n; i++ ) { fprintf(f, "%lf\t", b[i]); } fprintf(f, "\n"); fclose(f); return 0; }