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

월세예측 프로그램

by under_coverzzz 2015. 7. 23.
반응형


Least Mean Square 알고리즘 이용


#include <stdio.h>

#define SIZE 6


double x[SIZE] = {2,1,2,2,2,1};

double y[SIZE] = {2,1,1,1,2,0};

double z[SIZE] = {30,15,20,22,35,15};


double cal1(double a, double b, double c)

{

   double gradienta=0.0 , suma=0.0;

   int i;


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

   {

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

      suma += gradienta;

   }

   return suma;

}


double cal2(double a, double b, double c)

{

   double gradientb=0.0,sumb=0.0;

   int i;


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

   {

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

      sumb += gradientb;

   }

   return sumb;

}


double cal3(double a, double b, double c)

{

   double gradientc=0.0,sumc=0.0;

   int i;


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

   {

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

      sumc += gradientc;

   }

   return sumc;

}


double cal4(double a, double b, double c)

{

   double gradientd=0.0,sumd=0.0;

   int i;


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

   {

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

      sumd += gradientd;

   }

   return sumd;

}


int main()

{

   double result1=0.0, result2=0.0;

   double old_a=0.0, old_b=0.0, old_c = 0.0;

   double a = 10.0, b = 10.0, c = 10.0;


   while(1)

   {

      old_a = a;

      old_b = b;

      old_c = c;

      result1 = cal1(a,b,c);


      a = old_a - 0.00001 * cal2(old_a,old_b,old_c);

      b = old_b - 0.00001 * cal3(old_a,old_b,old_c);

      c = old_c - 0.00001 * cal4(old_a,old_b,old_c);


      result2 = cal1(a,b,c);


      if(result1 < result2)

         break;

   }

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

   printf("방4개 화장실4개는? %f",a*4+b*4+c);

}

반응형

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

Sudoku 해결 프로그램  (0) 2015.07.23
아이언돔 예측하기  (0) 2015.07.23
판다의 성장과정 맞추기  (0) 2015.07.23
QT) Timer를 이용하여 공움직이기  (0) 2015.07.23
QT) ThreadScaler  (0) 2015.07.23