diff --git a/prog b/prog index 5e114ca1adbd545e7798c5e681d8c04a5f7291e7..500cdfa1fef9ee4f743569be64c8a6487b98adc8 100755 Binary files a/prog and b/prog differ diff --git a/src/main.c b/src/main.c index f4e3c49d546985f2911c072ee11a8d784a926172..90cc658863668f598218459cde19a05372ed7396 100644 --- a/src/main.c +++ b/src/main.c @@ -10,23 +10,23 @@ int main() { point pt0; pt0.x=0; - pt0.y=0; + pt0.y=1; point pt1; pt1.x=1; - pt1.y=1; + pt1.y=2; point pt2; pt2.x=2; - pt2.y=2; + pt2.y=3; point pt3; pt3.x=3; - pt3.y=3; + pt3.y=4; point pt4; pt4.x=4; - pt4.y=4; + pt4.y=5; vector v; vector_init(&v); @@ -37,12 +37,12 @@ int main() { vector_push(&v,pt4); point p = findBestDroite(v); - printf("Sol Analytique : %f %f\n",p.x,p.y); + printf("Sol Analytique : a: %f b: %f\n",p.x,p.y); point drt; - drt.x=1; - drt.y=0; - p = descenteGradient(0.00001,drt,v); - printf("Sol Numérique : %f %f\n",p.x,p.y); + drt.x=3; + drt.y=3; + p = descenteGradient(0.0001,drt,v); + printf("Sol Numérique : a: %f b: %f\n",p.x,p.y); vector_free(&v); diff --git a/src/main.o b/src/main.o index 65995157d7e47db285d3f2f5d61bdf31f4bee87f..add5e0e88995975bd8050fef2f4487a3a2dd8ecb 100644 Binary files a/src/main.o and b/src/main.o differ diff --git a/src/regressionLin.c b/src/regressionLin.c index a297cdeb801bd714881f4b9ceadedf2078dc9e25..531e0773aa527263df083c4595e2504437141534 100644 --- a/src/regressionLin.c +++ b/src/regressionLin.c @@ -36,37 +36,36 @@ point descenteGradient(double precision, point drt, vector pts){ double gradienty = 0; double oldptx = 0; double oldpty = 0; - double testSortie; - - while(1){ + double testSortie=1; + double lambda = 0.000001; + while(testSortie > precision){ gradientx = 0; gradienty = 0; testSortie = 0; - + //drt.x est a et drt.y est b for(int i = 0; i < pts.length; i++){ - gradientx += ((pts.content[i].x * pts.content[i].x) * drt.x) + (drt.y * pts.content[i].x) - (pts.content[i].x * pts.content[i].y); - gradienty += (drt.x * pts.content[i].x) - pts.content[i].y; + gradientx += (pow(pts.content[i].x, 2) * pt.x) + (pt.y * pts.content[i].x) - (pts.content[i].x * pts.content[i].y); + gradienty += (pt.x * pts.content[i].x) - pts.content[i].y; } - gradientx = gradientx*2; + gradientx = gradientx * 2; gradienty += drt.y * pts.length; - gradienty = gradienty*2; + gradienty = gradienty * 2; + - double lambda = 0.1; - //drt.x est a et drt.b est b oldptx = pt.x; oldpty = pt.y; - pt.x = drt.x - lambda *(gradientx); - pt.y = drt.y - lambda *(gradienty); + pt.x = oldptx - (lambda * gradientx); + printf("ptx : %f\n",pt.x); + pt.y = oldpty - (lambda * gradienty); + printf("pty : %f\n",pt.y); + //Sortie testSortie = sqrt(pow(pt.x - oldptx,2) + pow(pt.y - oldpty,2)); - - if(testSortie < precision){ - break; - } + printf("%f\n",testSortie); } return pt; diff --git a/src/regressionLin.o b/src/regressionLin.o index e848455ca599c588cea6cc7e76440a0860701014..520a921ac1bcf7da3d0836881cd8d603852387a6 100644 Binary files a/src/regressionLin.o and b/src/regressionLin.o differ