목차
<스플라인 함수>
<최소자승직선>
<최소자승직선>
본문내용
h[i]);
a3=y[i+1]/h[i]-h[i]*z[i+1]/6;
a4=y[i]/h[i]-h[i]*z[i]/6;
printf("S_%d=%lf(x-%lf)^3+%lf(%lf-x)^3+%lf(x-%lf)+%lf(%lf-x)\n\n",i+1,a1,t[i],a2,t[i+1],a3,t[i],a4,t[i+1]);
}
for(data=x1;data<=x2;data=data+in)
{
for(i=0;i<=n;i++)
{
if(data>=t[i] && data<=t[i+1])
{
k=i;
break;
}
}
a1=z[k+1]/(6*h[k]);
a2=z[k]/(6*h[k]);
a3=y[k+1]/h[k]-h[k]*z[k+1]/6;
a4=y[k]/h[k]-h[k]*z[k]/6;
s=a1*pow((data-t[k]),3)+a2*pow((t[k+1]-data),3)+a3*(data-t[k])+a4*(t[k+1]-data);
printf("x=%lf\t y=%lf\n",data,s);
if(data+in>x2)
fprintf(fp,"{%lf,%lf}}",data,s);
else
fprintf(fp,"{%lf,%lf},\n",data,s);
}
fclose(fp);
return;
}
double f(double x)
{
return(sin(pi*x));
}
<최소자승직선>
#include
#include
void least_square(int,double);
double x[50],y[50];
void main(void)
{
double data;
int i,n;
printf("\n입력 자료의 개수는?");
scanf("%d",&n);
for(i=0;i
{
printf("x[%d]=",i+1);
scanf("%lf",&x[i]);
printf("\ty[%d]=",i+1);
scanf("%lf",&y[i]);
}
printf("\n구하려고 하는 x의 값은?");
scanf("%lf",&data);
least_square(n,data);
return;
}
void least_square(int n,double data)
{
double A[2][3],sum=0,a,b;
int i;
for(i=0;i
sum=sum+x[i]*x[i];
A[0][0]=sum;
sum=0;
for(i=0;i
sum=sum+x[i];
A[0][1]=sum;
A[1][0]=sum;
A[1][1]=n;
sum=0;
for(i=0;i
sum=sum+x[i]*y[i];
A[0][2]=sum;
sum=0;
for(i=0;i
sum=sum+y[i];
A[1][2]=sum;
a=(A[0][2]-A[0][1]*A[1][2]/A[1][1])/(A[0][0]-A[0][1]*A[1][0]/A[1][1]);
b=(A[1][2]-A[1][0]*a)/A[1][1];
sum=a*data+b;
printf("\n\ny=%lf*x+%lf",a,b);
printf("\n%lf의 기대값=%lf\n\n",data,sum);
}
a3=y[i+1]/h[i]-h[i]*z[i+1]/6;
a4=y[i]/h[i]-h[i]*z[i]/6;
printf("S_%d=%lf(x-%lf)^3+%lf(%lf-x)^3+%lf(x-%lf)+%lf(%lf-x)\n\n",i+1,a1,t[i],a2,t[i+1],a3,t[i],a4,t[i+1]);
}
for(data=x1;data<=x2;data=data+in)
{
for(i=0;i<=n;i++)
{
if(data>=t[i] && data<=t[i+1])
{
k=i;
break;
}
}
a1=z[k+1]/(6*h[k]);
a2=z[k]/(6*h[k]);
a3=y[k+1]/h[k]-h[k]*z[k+1]/6;
a4=y[k]/h[k]-h[k]*z[k]/6;
s=a1*pow((data-t[k]),3)+a2*pow((t[k+1]-data),3)+a3*(data-t[k])+a4*(t[k+1]-data);
printf("x=%lf\t y=%lf\n",data,s);
if(data+in>x2)
fprintf(fp,"{%lf,%lf}}",data,s);
else
fprintf(fp,"{%lf,%lf},\n",data,s);
}
fclose(fp);
return;
}
double f(double x)
{
return(sin(pi*x));
}
<최소자승직선>
#include
#include
void least_square(int,double);
double x[50],y[50];
void main(void)
{
double data;
int i,n;
printf("\n입력 자료의 개수는?");
scanf("%d",&n);
for(i=0;i
printf("x[%d]=",i+1);
scanf("%lf",&x[i]);
printf("\ty[%d]=",i+1);
scanf("%lf",&y[i]);
}
printf("\n구하려고 하는 x의 값은?");
scanf("%lf",&data);
least_square(n,data);
return;
}
void least_square(int n,double data)
{
double A[2][3],sum=0,a,b;
int i;
for(i=0;i
A[0][0]=sum;
sum=0;
for(i=0;i
A[0][1]=sum;
A[1][0]=sum;
A[1][1]=n;
sum=0;
for(i=0;i
A[0][2]=sum;
sum=0;
for(i=0;i
A[1][2]=sum;
a=(A[0][2]-A[0][1]*A[1][2]/A[1][1])/(A[0][0]-A[0][1]*A[1][0]/A[1][1]);
b=(A[1][2]-A[1][0]*a)/A[1][1];
sum=a*data+b;
printf("\n\ny=%lf*x+%lf",a,b);
printf("\n%lf의 기대값=%lf\n\n",data,sum);
}