/* 여러개의 실험 데이터를 가장 잘 만족시키는 Y=a*x^b 구하는 코드 */
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define e 2.718281
#define nd 20
double x[nd],y[nd],sumx,sumy,sumxy,sumx2;
int n;
void bang(double *a0, double *a1)
{
int i;
sumxy = 0;
sumx = 0;
sumx2 = 0;
sumy = 0;
for(i=1;i<=n;i++){
sumxy=x[i]*y[i]+sumxy;
sumx=x[i]+sumx;
sumy=y[i]+sumy;
sumx2=x[i]*x[i]+sumx2;
}
*a1=((n*sumxy)-(sumx*sumy))/((n*sumx2)-(sumx*sumx));
*a0=(sumy/n)-(*a1*sumx)/n;
printf("a1값:%lf\t a0값:%lf\n",*a1,*a0);
}//end of bang
int main()
{
int i;
double a0=0,a1=0,a=0,f=0,x1=0,x2=0;
printf("데이터의 수:"); scanf("%d",&n);
printf("X(i) 입력:");
for(i=1;i<=n;i++)
scanf("%lf", &x[i]);
printf("Y(i) 입력:");
for(i=1;i<=n;i++)
scanf("%lf", &y[i]);
for(i=1;i<=n;i++) {
x[i]=log(x[i]+1);
y[i]=log(y[i]);
}
for(i=1;i<=n;i++)
printf("바뀐 x[%d]:%lf\t y[%d]:%lf\n",i,x[i],i,y[i]);
bang(&a0,&a1);
printf("구하려는 x 값을 입력:"); scanf("%lf",&x1);
a=pow(e,a0);
f=a/pow((x1+1),-a1);
printf("x가 %lf일때 구하려는 y값:%lf\n",x1,f);
printf("구하려는 x2값을 입력:"); scanf("%lf",&x2);
f=a/pow((x2+1),-a1);
printf("x가 %lf일때 구하려는 y값:%lf\n",x2,f);
}//end of main
'언어 > Coding' 카테고리의 다른 글
Jacobi (0) | 2015.12.21 |
---|---|
GaussN (0) | 2015.12.21 |
Thomas(Tridia) (0) | 2015.12.21 |
LUCrout (LU분해,해 구하기, 역행렬 구하기) (0) | 2015.12.21 |
Newton Raphson Method (0) | 2015.12.21 |