e02dece.c

/* nag_fit_dim2_spline_evalv (e02dec) Example Program.
 *
 * Copyright 2025 Numerical Algorithms Group.
 *
 * Mark 31.1, 2025.
 */
#include<nag.h>
#include<stdio.h>
intmain(void){
Integerexit_status=0,i,m;
NagErrorfail;
Nag_2dSplinespline;
double*ff=0,*x=0,*y=0;
INIT_FAIL(fail);
/* Initialize spline */
spline.lamda=0;
spline.mu=0;
spline.c=0;
printf("nag_fit_dim2_spline_evalv (e02dec) Example Program Results\n");
scanf("%*[^\n]");/* Skip heading in data file */
/* Read m, the number of spline evaluation points. */
scanf("%"NAG_IFMT"",&m);
if(m>=1){
if(!(x=NAG_ALLOC(m,double))||!(y=NAG_ALLOC(m,double))||
!(ff=NAG_ALLOC(m,double))){
printf("Allocation failure\n");
exit_status=-1;
gotoEND;
}
}else{
printf("Invalid m.\n");
exit_status=1;
returnexit_status;
}
/* Read nx and ny, the number of knots in the x and y directions. */
scanf("%"NAG_IFMT"%"NAG_IFMT"",&(spline.nx),&(spline.ny));
if(spline.nx>=8&&spline.ny>=8){
if(!(spline.c=NAG_ALLOC((spline.nx-4)*(spline.ny-4),double))||
!(spline.lamda=NAG_ALLOC(spline.nx,double))||
!(spline.mu=NAG_ALLOC(spline.ny,double))){
printf("Allocation failure\n");
exit_status=-1;
gotoEND;
}
}else{
printf("Invalid spline.nx or spline.ny.\n");
exit_status=1;
returnexit_status;
}
/* read the knots lamda[0] .. lamda[nx-1] and mu[0] .. mu[ny-1]. */
for(i=0;i<spline.nx;i++)
scanf("%lf",&(spline.lamda[i]));
for(i=0;i<spline.ny;i++)
scanf("%lf",&(spline.mu[i]));
/* Read c, the bicubic spline coefficients. */
for(i=0;i<(spline.nx-4)*(spline.ny-4);
scanf("%lf",&(spline.c[i])),i++)
;
/* Read the x and y co-ordinates of the evaluation points. */
for(i=0;i<m;i++)
scanf("%lf%lf",&x[i],&y[i]);
/* Evaluate the spline at the m points. */
/* nag_fit_dim2_spline_evalv (e02dec).
 * Evaluation of bicubic spline, at a set of points
 */
nag_fit_dim2_spline_evalv(m,x,y,ff,&spline,&fail);
if(fail.code!=NE_NOERROR){
printf("Error from nag_fit_dim2_spline_evalv (e02dec).\n%s\n",
fail.message);
exit_status=1;
gotoEND;
}
/* Print the results. */
printf(" i x[i] y[i] ff[i]\n");
for(i=0;i<m;i++)
printf("%7"NAG_IFMT" %11.3f%11.3f%11.3f\n",i,x[i],y[i],ff[i]);
NAG_FREE(spline.lamda);
NAG_FREE(spline.mu);
NAG_FREE(spline.c);
END:
NAG_FREE(x);
NAG_FREE(y);
NAG_FREE(ff);
returnexit_status;
}

AltStyle によって変換されたページ (->オリジナル) /