/* 여러개의 실험 데이터를 가장 잘 만족시키는 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
Posted by 知彼知己百戰不殆
,