37 double *result, *scratch, *xdata, *ydata;
38 int sign, lastone, i,
l;
40 if ((olen < 2) || (nlen < 2)) {
41 fprintf(
cp_err,
"Error: lengths too small to interpolate.\n");
44 if ((degree < 1) || (degree > olen)) {
45 fprintf(
cp_err,
"Error: degree is %d, can't interpolate.\n",
50 if (oscale[1] < oscale[0])
55 scratch = (
double *)
tmalloc((degree + 1) * (degree + 2) *
57 result = (
double *)
tmalloc((degree + 1) *
sizeof (double));
58 xdata = (
double *)
tmalloc((degree + 1) *
sizeof (double));
59 ydata = (
double *)
tmalloc((degree + 1) *
sizeof (double));
62 DCOPY(data, ydata, degree + 1);
63 DCOPY(oscale, xdata, degree + 1);
65 while (!
ft_polyfit(xdata, ydata, result, degree, scratch)) {
71 fprintf(
cp_err,
"ft_interpolate: Internal Error.\n");
83 for (i = 0; i < degree; i++) {
84 lastone =
putinterval(result, degree, ndata, lastone,
85 nscale, nlen, xdata[i], sign);
91 for (l = degree + 1; l < olen; l++) {
94 for (i = 0; i < degree; i++) {
95 xdata[i] = xdata[i + 1];
96 ydata[i] = ydata[i + 1];
101 while (!
ft_polyfit(xdata, ydata, result, degree, scratch)) {
104 "interpolate: Internal Error.\n");
108 lastone =
putinterval(result, degree, ndata, lastone,
109 nscale, nlen, xdata[i], sign);
bool ft_polyfit(double *xdata, double *ydata, double *result, int degree, double *scratch)