fscanf(f,"%lf",&y[i]);
fclose(f);
xsr(x,xs);
ysr(y,ys);
ykr(x,y,xs,yk);
er(yk,ys,err);
min=err[0];
k=1;
for(i=1;i<m;i++)
if(err[i]<min)
{
min=err[i];
k=i+1;
}
switch(k)
{
case 1: f1(x,y,a1,a0); break;
case 2: f2(x,y,a1,a0); break;
case 3: f3(x,y,a1,a0); break;
case 4: f4(x,y,a1,a0); break;
case 5: f5(x,y,a1,a0); break;
case 6: f6(x,y,a1,a0); break;
case 7: f7(x,y,a1,a0); break;
case 8: f8(x,y,a1,a0); break;
case 9: f9(x,y,a1,a0); break;
}
// f1(x,y,a0,a1);
getch();
return 1;
}
double zar(double *z)
{
int i;
double s;
s=0;
for(i=0;i<n;i++)
s+=z[i];
return s/n;
}
double zge(double *z)
{
double p;
int i;
p=1;
for(i=0;i<n;i++)
p*=*(z+i);
return pow(p,1.0/n);
}
double zga(double *z)
{
double pg;
int i;
pg=0;
for(i=0;i<n;i++)
pg+=1/(*(z+i));
return n/pg;
}
void xsr(double *x,double *xs)
{
double xar,xge,xga;
int i;
xar=zar(x);
xge=zge(x);
xga=zga(x);
for(i=0;i<m;i+=3)
*(xs+i)=xar;
for(i=1;i<m;i+=3)
*(xs+i)=xge;
for(i=2;i<m;i+=3)
*(xs+i)=xga;
}
void ysr(double *y,double *ys)
{
double yar,yge,yga;
int i;
yar=zar(y);
yge=zge(y);
yga=zga(y);
for(i=0;i<3;i++)
*(ys+i)=yar;
for(i=3;i<6;i++)
*(ys+i)=yge;
for(i=6;i<9;i++)
*(ys+i)=yga;
}
void ykr(double *x,double *y,double *xs,double *yk)
{
int i,j;
for(i=0;i<n;i++)
{
if(fabs(xs[i]-x[i])<0.00001)
yk[i]=y[i];
else
{
for(j=0;j<n-1;j++)
if( (x[j]<xs[i]) && (x[j+1]>xs[i]))
{
yk[i]=(y[j+1]-y[j])/(x[j+1]-x[j])*(xs[i]-x[j])+y[j];
break;
}
}
}
}
void er(double *yk,double *ys,double *yer)
{
int i=0;
for(i=0;i<m;i++)
yer[i]=fabs((yk[i]-ys[i])/(yk[i]));
}
void f1(double *x,double *y,double &a0,double &a1)
{
a1=fa1(x,y);
a0=fa0(x,y,a1);
printf("y=%.2lf+(%.2lf)x",a0,a1);
}
void f2(double *x,double *y,double &a0,double &a1)
{
double x1[n];
int i;
for(i=0;i<n;i++)
x1[i]=1.0/x[i];
a1=fa1(x1,y);
a0=fa0(x1,y,a1);
printf("y=%.2lf+(%.2lf)/x",a0,a1);
}
void f3(double *x,double *y,double &a0,double &a1)
{
double x1[n];
int i;
for(i=0;i<n;i++)
x1[i]=log(x[i]);
a1=fa1(x1,y);
a0=fa0(x1,y,a1);
printf("y=%.2lf+(%.2lf)ln(x)",a0,a1);
}
void f4(double *x,double *y,double &a0,double &a1)
{
double y1[n];
int i;
for(i=0;i<n;i++)
y1[i]=log(y[i]);
a1=exp(fa1(x,y1));
a0=exp(fa0(x,y1,a1));
printf("y=%.2lf*(%.2lf)^x",a0,a1);
}
void f5(double *x,double *y,double &a0,double &a1)
{
double x1[n],y1[n];
int i;
for(i=0;i<n;i++)
{
x1[i]=log(x[i]);
y1[i]=log(y[i]);
}
a1=fa1(x,y1);
a0=exp(fa0(x,y1,a1));
printf("y=%.2lf*x^(%.2lf)",a0,a1);
}
void f6(double *x,double *y,double &a0,double &a1)
{
double x1[n],y1[n];
int i;
for(i=0;i<n;i++)
{
x1[i]=1.0/x[i];
y1[i]=log(y[i]);
}
a1=fa1(x1,y);
a0=fa0(x1,y,a1);
printf("y=exp(%.2lf+(%.2lf)/x)",a0,a1);
}
void f7(double *x,double *y,double &a0,double &a1)
{
double y1[n];
int i;
for(i=0;i<n;i++)
y1[i]=1.0/y[i];
a1=fa1(x,y1);
a0=fa0(x,y1,a1);
printf("y=1/(%.2lf+(%.2lf)x)",a0,a1);
}
void f8(double *x,double *y,double &a0,double &a1)
{
double x1[n],y1[n];
int i;
for(i=0;i<n;i++)
{
x1[i]=log(x[i]);
y1[i]=1.0/y[i];
}
a1=fa1(x1,y1);
a0=fa0(x1,y1,a1);
printf("y=1/(%.2lf+(%.2lf)lnx)",a0,a1);
}
void f9(double *x,double *y,double &a0,double &a1)
{
double x1[n],y1[n];
int i;
for(i=0;i<n;i++)
{
x1[i]=1.0/x[i];
y1[i]=1.0/y[i];
}
a0=fa1(x1,y1);
a1=fa0(x1,y1,a0);
printf("y=x/(%.2lf+(%.2lf)x)",a0,a1);
}
double fa1(double *x,double *y)
{
double sx,sy,sxy,sx2;
int i;
sx=0;
for(i=0;i<n;i++)
sx+=x[i];
sy=0;
for(i=0;i<n;i++)
sy+=y[i];
sxy=0;
for(i=0;i<n;i++)
sxy+=x[i]*y[i];
sx2=0;
for(i=0;i<n;i++)
sx2+=pow(x[i],2);
return (sxy-1.0/n*sy*sx)/(sx2-1.0/n*sx*sx);
}
double fa0(double *x,double *y,double &a1)
{
double sx,sy;
int i;
sx=0;
for(i=0;i<n;i++)
sx+=*(x+i);
sy=0;
for(i=0;i<n;i++)
sy+=*(y+i);
return 1.0/n*(sy-a1*sx);
}
Отримані результати роботи програми:
3.Отримані результати перевіряємо в математичному пакеті Maple:
> plot([[11.2,0.99],[12.6,0.74],[18.6,0.69],[21.4,0.58],
[25,0.41],[29.6,0.33],[31.1,0.26],[38.2,0.19],[40,0.1]],
x=0..41,color=blue,style=POINT, symbol=DIAMOND);
> with(CurveFitting):
>LeastSquares([1/11.2,1/12.6,1/18.6,1/21.4,1/25,1/29.6,1/31.1,1/38.2,1/40], [0.99,0.74,0.69,0.58,0.41,0.33,0.26,0.19,0.1],x, curve=a+b*x);
> plot(-0.9859681605e-1+12.1460595456100524*x,x=0..41,y=0..1);
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.