63 lines
1.6 KiB
C
63 lines
1.6 KiB
C
|
|
/* Driver for routine fitexy */
|
|
|
|
#include <stdio.h>
|
|
#include <math.h>
|
|
#define NRANSI
|
|
#include "nr.h"
|
|
#include "nrutil.h"
|
|
|
|
#define NPT 30
|
|
|
|
int main(void)
|
|
{
|
|
long idum=(-1);
|
|
int j;
|
|
float a,b,chi2,q,sa,sb,siga,sigb;
|
|
float *x,*y,*dx,*dy,*dz;
|
|
|
|
x=vector(1,NPT);
|
|
y=vector(1,NPT);
|
|
dx=vector(1,NPT);
|
|
dy=vector(1,NPT);
|
|
dz=vector(1,NPT);
|
|
for (j=1;j<=NPT;j++) {
|
|
dx[j]=0.1+ran1(&idum);
|
|
dy[j]=0.1+ran1(&idum);
|
|
dz[j]=0.0;
|
|
x[j]=10.0+10.0*gasdev(&idum);
|
|
y[j]=2.0*x[j]-5.0+dy[j]*gasdev(&idum);
|
|
x[j] += dx[j]*gasdev(&idum);
|
|
}
|
|
printf("Values of a,b,siga,sigb,chi2,q:\n");
|
|
printf("Fit with x and y errors gives:\n");
|
|
fitexy(x,y,NPT,dx,dy,&a,&b,&siga,&sigb,&chi2,&q);
|
|
printf("%11.6f %11.6f %11.6f %11.6f %11.6f %11.6f\n\n",
|
|
a,b,siga,sigb,chi2,q);
|
|
printf("Setting x errors to zero gives:\n");
|
|
fitexy(x,y,NPT,dz,dy,&a,&b,&siga,&sigb,&chi2,&q);
|
|
printf("%11.6f %11.6f %11.6f %11.6f %11.6f %11.6f\n",
|
|
a,b,siga,sigb,chi2,q);
|
|
printf("...to be compared with fit result:\n");
|
|
fit(x,y,NPT,dy,1,&a,&b,&siga,&sigb,&chi2,&q);
|
|
printf("%11.6f %11.6f %11.6f %11.6f %11.6f %11.6f\n\n",
|
|
a,b,siga,sigb,chi2,q);
|
|
printf("Setting y errors to zero gives:\n");
|
|
fitexy(x,y,NPT,dx,dz,&a,&b,&siga,&sigb,&chi2,&q);
|
|
printf("%11.6f %11.6f %11.6f %11.6f %11.6f %11.6f\n",
|
|
a,b,siga,sigb,chi2,q);
|
|
printf("...to be compared with fit result:\n");
|
|
fit(y,x,NPT,dx,1,&a,&b,&siga,&sigb,&chi2,&q);
|
|
sa=sqrt(siga*siga+SQR(sigb*(a/b)))/b;
|
|
sb=sigb/(b*b);
|
|
printf("%11.6f %11.6f %11.6f %11.6f %11.6f %11.6f\n",
|
|
-a/b,1.0/b,sa,sb,chi2,q);
|
|
free_vector(dz,1,NPT);
|
|
free_vector(dy,1,NPT);
|
|
free_vector(dx,1,NPT);
|
|
free_vector(y,1,NPT);
|
|
free_vector(x,1,NPT);
|
|
return 0;
|
|
}
|
|
#undef NRANSI
|