#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);
}
'과거에 공부했던 것들(저장용) > 학부생' 카테고리의 다른 글
Sudoku 정답이 맞는지 확인하는 프로그램 (0) | 2015.07.23 |
---|---|
Sudoku 해결 프로그램 (0) | 2015.07.23 |
월세예측 프로그램 (0) | 2015.07.23 |
판다의 성장과정 맞추기 (0) | 2015.07.23 |
QT) Timer를 이용하여 공움직이기 (0) | 2015.07.23 |