Skip to content
Snippets Groups Projects
Select Git revision
  • 1b4cf51edc79ec6fc9f0780a07e3635d922d096f
  • master default protected
2 results

regressionLin.c

Blame
  • user avatar
    simon.cirilli authored
    1b4cf51e
    History
    regressionLin.c 1.74 KiB
    #include "regressionLin.h"
    
    point findBestDroite(vector pts){
      // dans le cas que l'on a vu en exercice on peut directement dire :
      // car c'est la même fonction de base
      double gA=0; // somme des xi ^2
      double gB=0; // somme des xi
      double gC=0; // sommes des xi*yi
      double gD=0; // somme des yi
      double gN=pts.length; // nombre de points
    
      for(int i = 0; i < pts.length; i++){
        gA += pts.content[i].x * pts.content[i].x;
        gB += pts.content[i].x;
        gC += pts.content[i].x * pts.content[i].y;
        gD += pts.content[i].y;
      }
    
      double numerateur=gC * gN - gB * gD;
      double denominateur=gA * gN - gB * gB; // pas possible si = 0
      double a = numerateur / denominateur;
      double b = ( gC - a * gA ) / gB;
    
      point d;
      d.x=a;
      d.y=b;
      return d;
    }
    
    
    point descenteGradient(double precision, point drt, vector pts){
      point pt;
      pt.x = drt.x;
      pt.y = drt.y;
      double gradientx = 0;
      double gradienty = 0;
      double oldptx = 0;
      double oldpty = 0;
      double testSortie=1;
      double lambda = 0.0001;
      while(testSortie > precision){
        gradientx = 0;
        gradienty = 0;
        testSortie = 0;
    
        //pt.x est a et pt.y est b
        for(int i = 0; i < pts.length; i++){
          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) + pt.y - pts.content[i].y;//pt.y*pts.length
        }
        gradientx = gradientx * 2;
        gradienty = gradienty * 2;
    
    
        oldptx = pt.x;
        oldpty = pt.y;
    
        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));
    //    printf("%f\n",testSortie);
      }
    
      return pt;
    }