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

아이언돔 예측하기

by under_coverzzz 2015. 7. 23.
반응형


#include <stdio.h>

#define SIZE 4


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

double x[SIZE] = {6,7,8,9};

double y[SIZE] = {100,90,70,30};


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

{

   double gradienta=0.0,suma=0.0;

   int i;


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

   {

      gradienta = (y[i] - (a*x[i]*x[i] + b*x[i] + c)) * (y[i] - (a*x[i]*x[i] + b*x[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*(y[i] - (a*x[i]*x[i] + b*x[i] + c)) * (-x[i]*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*(y[i] - (a*x[i]*x[i] + b*x[i] + c)) * (-x[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*(y[i] - (a*x[i]*x[i] + b*x[i] + c)) * (-1);

      sumd += gradientd;

   }

   return sumd;

}


int main()

{

   double old_a=0,old_b=0,old_c=0;

   double result1=0,result2=0;

   

   while(1)

   {

      old_a = a;

      old_b = b;

      old_c = c;

      result1 = cal1(old_a,old_b,old_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("10초일때 = %f",100*a+10*b+c);


}

반응형