diff --git a/prog b/prog index feabe8ff3336cc1eeb87e8a89fcb0e99747d551c..9159202eeeb315f955a6a4693c39bc4338a14a99 100755 Binary files a/prog and b/prog differ diff --git a/src/main.c b/src/main.c index b351ff45275d27e1599340d13d07fa8971fd727b..c5c205161f7a7f0e28c72d53ce68dfef622ce262 100644 --- a/src/main.c +++ b/src/main.c @@ -62,9 +62,22 @@ int main() { p = descenteGradient(0.000001,drtTest,vecTest2); printf("Sol Numérique Test 2 : a: %f b: %f\n",p.x,p.y); + printf("Test validation croisée\n"); + vector ve1 = nuagePoints(drtTest, 100, 0, 100); + vector ve2 = nuagePoints(drtTest, 100, 0, 100); + vector ve3 = nuagePoints(drtTest, 100, 0, 100); + double* lol = validationCroisee(drtTest,ve1,ve2,ve3); + for(int i=0;i<3;i++){ + printf("Erreurs : %f\n",lol[i]); + } + vector_free(&v); vector_free(&vecTest); vector_free(&vecTest2); + vector_free(&ve1); + vector_free(&ve2); + vector_free(&ve3); + free(lol); return EXIT_SUCCESS; } diff --git a/src/main.o b/src/main.o index 24e9ab30a24c2b2fd28d17d9e6679a842c7a8569..8f898864a0b00b0d9e187f86ae82ef4ad35f40e7 100644 Binary files a/src/main.o and b/src/main.o differ diff --git a/src/regressionLin.c b/src/regressionLin.c index c0a6dd18a39abfce064958936508fccdb5207854..60301ef7d7c5bb00f6d40b1a29a4946d9a40f943 100644 --- a/src/regressionLin.c +++ b/src/regressionLin.c @@ -74,16 +74,64 @@ vector nuagePoints(point drt, int len, int minP, int maxP){ point add; // Il faut prend drt proche de la solution Analytique for(int i = 0; i < len; i++){ - // Le bruit doit être entre -1 et 1 par ex. => ici il est entre -0.5 et 0.5 - bruit = ((double) rand()*(1)/(double)RAND_MAX-(0.5)); + // Le bruit doit être entre -1 et 1 par ex. => ici il est entre -0.5 et 0.5 + bruit = ((double) rand()*(1)/(double)RAND_MAX-(0.5)); // printf("%f\n",bruit); - add.x = ((double) rand()*(maxP-minP)/(double)RAND_MAX-minP); - add.y = drt.x * add.x + drt.y + bruit; - vector_push(&vec,add); + add.x = ((double) rand()*(maxP-minP)/(double)RAND_MAX-minP); + add.y = drt.x * add.x + drt.y + bruit; + vector_push(&vec,add); } return vec; } -void validationCroisee(){ +double* validationCroisee(point drtTest, vector g1, vector g2, vector g3){ + double* erreurs = malloc(sizeof(double)*3); + + vector g1g2; + vector_concat(&g1g2,g1,g2); + // Calculer la descenteGradient sur g1g2 + point p1u2 = descenteGradient(0.000001,drtTest,g1g2); + // Test sur g3 => point 2.1 de l'Analytique avec a et b les valeurs retournée sur p1u2 + erreurs[0] = 0; + // On trouve le carré de l'erreur pour chaque point + for(int i = 0; i< g3.length; i++){ + erreurs[0] += pow(p1u2.x * g3.content[i].x + p1u2.y - g3.content[i].y,2); + } + // La valeur pour chaque points + erreurs[0] = sqrt(erreurs[0])/g3.length; + // free + vector_free(&g1g2); + + + vector g1g3; + vector_concat(&g1g3,g1,g3); + // Calculer la descenteGradient sur g1g3 + point p1u3 = descenteGradient(0.000001,drtTest,g1g3); + // test sur g2 + erreurs[1] = 0; + for(int i = 0; i< g2.length; i++){ + erreurs[1] += pow(p1u3.x * g2.content[i].x + p1u3.y - g2.content[i].y,2); + } + // La valeur pour chaque points + erreurs[1] = sqrt(erreurs[1])/g2.length; + // free + vector_free(&g1g3); + + + vector g2g3; + vector_concat(&g2g3,g2,g3); + // Calculer la descenteGradient sur g2g3 + point p2u3 = descenteGradient(0.000001,drtTest,g2g3); + // Test sur g1 + erreurs[2] = 0; + for(int i = 0; i< g1.length; i++){ + erreurs[2] += pow(p2u3.x * g1.content[i].x + p2u3.y - g1.content[i].y,2); + } + // La valeur pour chaque points + erreurs[2] = sqrt(erreurs[2])/g1.length; + // free + vector_free(&g2g3); + + return erreurs; } diff --git a/src/regressionLin.h b/src/regressionLin.h index bf9c0d075083adf032456f61331e316cb65fbce3..bff79dea94d7e7475bbc68200d4ca4e3993137c2 100644 --- a/src/regressionLin.h +++ b/src/regressionLin.h @@ -19,6 +19,6 @@ point descenteGradient(double precision, point drt, vector pts); // Tests vector nuagePoints(point drt, int len, int minP, int maxP); -void validationCroisee(); +double* validationCroisee(point drt, vector g1, vector g2, vector g3); #endif diff --git a/src/regressionLin.o b/src/regressionLin.o index c827e0018c5f7c15d79f3f39add6147ac78718c5..35e112910b6cce4d4dcd45d796793159a0f300a3 100644 Binary files a/src/regressionLin.o and b/src/regressionLin.o differ diff --git a/src/vector.c b/src/vector.c index 4f02bab8ef3bbdf5b37a45593f9e58fd387b1bf8..4bc6e0f98a048fae24876667d51f27ed3a1f71a7 100644 --- a/src/vector.c +++ b/src/vector.c @@ -164,3 +164,17 @@ error_code vector_empty(vector *v){ } return error; } + +error_code vector_concat(vector* v1,vector v2, vector v3){ + vector_init(v1); + error_code error =uninitialized; + for(int i=0;i < (v2.length + v3.length); i++){ + if(i<v2.length){ + vector_push(v1,v2.content[i]); + }else{ + vector_push(v1,v3.content[i-v2.length]); + } + } + error = ok; + return error; +} diff --git a/src/vector.h b/src/vector.h index 829019f27602da9b93b692c74e2296c0fa61d076..5866d4c036d4f1d19be5f0f1eac72518f42060b8 100644 --- a/src/vector.h +++ b/src/vector.h @@ -60,5 +60,6 @@ error_code vector_map(vector *v, type (*f)(type), vector *rhs); error_code vector_filter(vector *v, bool (*f)(type), vector *rhs); +error_code vector_concat(vector* v1,vector v2, vector v3); #endif diff --git a/src/vector.o b/src/vector.o index 975b949e63c195d145badfa60e030d4dd1ef599c..9dcdb2a81c35d2106b00e1a3a2b8f88edece5d8b 100644 Binary files a/src/vector.o and b/src/vector.o differ