Pagina 1 di 1

Interpolazione Lineare con più di 2 punti C

Inviato: lunedì 9 maggio 2016, 18:21
da vidrik
Ciao a tutti ragazzi!
Ho bisogno urgente di una mano con questo programma in C per matematica.
In sostanza si tratta di un programma che, dati 5 punti (3 punti x e 2 punti y o viceversa) calcoli appunto la variabile mancante. Noi quei punti li prenderemo come riferimento in un piano cartesiano, e posso scegliere per uno di questi metodi:
Parabola
Retta che passa vicino ad ogni punto, ma non ne tocca nessuno
Retta spezzata

La parte complicata per me è proprio il calcolo del punto mancante, e mi serve assolutamente sapere quali casi bisogna controllare per i dati immessi (per esempio, se x è zero, allora fai questo, altrimenti ec...)

Ho già un codice scritto e funzionante
Questo: (è un programma che dati 4 punti cartesiani (2 x e 2y) trova la formula generica (y = mx + q) per gli altri due punti)

Codice: Seleziona tutto

 
#include<stdio.h>
main(){
	int i,j,k;	//i=righe j=colonne
	int m1[3][2], m2[3][1], m3[2][3], m4[2][2], m5[2][1];
	float a,b,m,q;
	for(j=0;j<1;j++){				//prendo dati sotto forma di tratrice
		for(i=0;i<3;i++){
			printf("dammi X");
			scanf("%d",&m1[i][j]);
			printf("dammi Y");
			scanf("%d",&m2[i][j]);
		}
	}
	for(i=0;i<3;i++){
		m1[i][1]=1;
	}
/*	for(i=0;i<3;i++){
		for(j=0;j<2;j++){
			printf("%d ",m1[i][j]);
		}
		printf("\n");
	}
	for(i=0;i<3;i++){
		for(j=0;j<1;j++){
			printf("%d ",m2[i][j]);
		}
		printf("\n");
	}*/
	for(i=0;i<3;i++){
		for(j=0;j<2;j++){
			m3[j][i]=m1[i][j];
		}
	}
/*	for(i=0;i<2;i++){
		for(j=0;j<3;j++){
			printf("%d ",m3[i][j]);
		}
		printf("\n");
	}*/
	for(i=0;i<2;i++){
		for(j=0;j<2;j++){
			for(k=0;k<3;k++){
				m4[i][j]=m4[i][j]+(m1[k][j]*m3[i][k]);
			}
		}
	}
/*	for(i=0;i<2;i++){
		for(j=0;j<2;j++){
			printf("%d ",m4[i][j]);
		}
		printf("\n");
	}*/
	for(i=0;i<2;i++){
		for(j=0;j<1;j++){
			m5[i][j]=(m2[0][j]*m3[i][0])+(m2[1][j]*m3[i][1])+(m2[2][j]*m3[i][2]);	
		}
	}
/*	for(i=0;i<2;i++){
		for(j=0;j<1;j++){
			printf("%d ",m5[i][j]);
		}
		printf("\n");
	}*/
	a=(m4[0][0]*m4[1][1])-(m4[0][1]*m4[1][0]);
	b=(m5[0][0]*m4[1][1])-(m5[1][0]*m4[0][1]);
	printf("%f %f ",a,b);
	m=b/a;
	q=(m5[1][0]-(m4[1][0]*m))/m4[1][1];
	printf("%f %f",m,q);
}

Grazie mille a tutti ^^

Re: Interpolazione Lineare con più di 2 punti C

Inviato: lunedì 9 maggio 2016, 21:51
da Gerry Ghetto
Non sono un programmatore C e non posso aiutarti molto, ma, ...
a) Non vedo nessun motivo per definire le variabili i, j, k globalmente.
b) for(j=0;j<1;j++){ }; Quanti cicli fai?

Re: Interpolazione Lineare con più di 2 punti C

Inviato: lunedì 9 maggio 2016, 22:00
da vidrik
Il codice non è il mio, e so già che non è del tutto corretto
Mi serve solo un indirizzamento per il codice che devo creare io
Grazie comunque ^^

Re: Interpolazione Lineare con più di 2 punti C

Inviato: lunedì 9 maggio 2016, 22:17
da Gerry Ghetto
Ahhh, adesso l'ho capito.

La formula matematica conosci? Hai scritto un diagramma di flusso?

Re: Interpolazione Lineare con più di 2 punti C

Inviato: martedì 10 maggio 2016, 21:43
da vidrik
@Gerry Ghetto
La formula teoricamente è y = mx + q
Utilizzando i 4 punti in precedenza, riesco a calcolare sia m che q (utilizzando il programma scritto prima)
se chiedo all'utente la x di conseguenza riesco subito a calcolare la y
viceversa identico
quindi il problema unico che rimane è: quali sono tutti i casi estremi di questa formula? per esempio quando m è uguale a 0, la retta è verticale
Insomma, tutti i casi eccezionali
Grazie, di nuovo ^^