본문 바로가기
과거에 공부했던 것들(저장용)/학부생

판다의 성장과정 맞추기

by under_coverzzz 2015. 7. 23.
반응형




Least mean square의 방식(편미분)


#include <stdio.h>

#define SIZE 4


double a=0.0,b=0.0;

//double x,y;

double x[SIZE] = {1, 2.5, 3, 3.9};

double y[SIZE] = {2.1, 3.4, 3.7, 3.1};

int i;


double calculate1(double a, double b)

{

   double gradienta=0.0,suma=0.0;

   for(i=0; i<SIZE; i++)

   {

      gradienta = (y[i] - (a*x[i] + b)) * (y[i] - (a*x[i] + b));

      suma += gradienta;

   }


   return suma;

}

double calculate2(double a, double b)

{

   double gradientb=0.0,sumb=0.0;

   //a에 대해 편미분

   for(i=0; i<SIZE; i++)

   {

      gradientb = 2*(y[i] - (a*x[i] + b)) * (-x[i]);

      sumb += gradientb;

   }


   return sumb;

}


double calculate3(double a, double b)

{

   double gradientc=0.0,sumc=0.0;

   //b에 대해 편미분

   for(i=0; i<SIZE; i++)

   {

      gradientc = 2*(y[i] - (a*x[i] + b)) * (-1);

      sumc += gradientc;

   }


   return sumc;

}


int main()

{

   double old_a=10.0,old_b=10.0;

   double result1,result2;


   while(1)

   {   

      old_a = a;

      old_b = b;

      result1 = calculate1(old_a,old_b);


      a = old_a - 0.0001 * calculate2(old_a,old_b);

      b = old_b - 0.0001 * calculate3(old_a,old_b);

      result2 = calculate1(a,b);


      if (result1 < result2)

         break;

   }


   printf("a = %f, b = %f\n",a,b);

   printf("8개월때 = %f",8*a+b);


   return 0;

}

반응형

'과거에 공부했던 것들(저장용) > 학부생' 카테고리의 다른 글

아이언돔 예측하기  (0) 2015.07.23
월세예측 프로그램  (0) 2015.07.23
QT) Timer를 이용하여 공움직이기  (0) 2015.07.23
QT) ThreadScaler  (0) 2015.07.23
QT) Mouse 움직임 나타내기  (0) 2015.07.23