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;

}
Exemplo n.º 2
0
Arquivo: pr4_1.c Projeto: Nigsia/MN1
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;
}
Exemplo n.º 3
0
Arquivo: pr4_3.c Projeto: Nigsia/MN1
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);

}
Exemplo n.º 4
0
Arquivo: pr4_2.c Projeto: Nigsia/MN1
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;
}