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 |