#include <Origin.h> #include <OC_nag.h> int xyz_gridding_in_renka_cline(const vector& vx, const vector& vy, const vector& vz, const vector& vxGrid, const vector& vyGrid, matrix& mat) { Nag_Scat_Struct comm; NagError fail; //INIT_FAIL fail.code = NE_NOERROR; fail.print = 0; int nSize = vx.GetSize(); vector<int> triang(7*nSize); vector<double> grads(2*nSize); int nRows = mat.GetNumRows(); int nCols = mat.GetNumCols(); //nag_2d_scat_interpolan //nag_2d_scat_interpolant (e01sac) has been replaced by nag_2d_triang_interp (e01sjc) at Mark 25 e01sjc(nSize, vx, vy, vz, triang, grads, &fail); if (fail.code != NE_NOERROR) { printf("Error from e01sjc: %s\n", fail.message); return fail.code; } //nag_2d_scat_eval //nag_2d_scat_eval (e01sbc) has been replaced by nag_2d_triang_eval (e01skc) at Mark 25 for(int ii=0; ii < nRows; ii++) { for(int jj=0; jj < nCols; jj++) { e01skc(nSize,vx, vy, vz, triang, grads, vxGrid[jj], vyGrid[ii], &mat[jj][ii], &fail); } } if (fail.code != NE_NOERROR && fail.code != NW_VALUE_EXTRAPOLATED) { printf("Error from e01skc: %s\n", fail.message); return fail.code; } return OE_NOERROR; }
#include <Origin.h> #include <OC_nag.h> // must include this to see nag related macros and prototypes // to run this example, you need to have 4 columns in the active // worksheet and fill col(A) with a few rows by row number and col(B) by same // number of rows of random values. // This function will generate results in col(C) and col(D) void test_e01bac(int nX = 0, int nY = 1, int nXFit = 2, int nYFit = 3) { Worksheet wks = Project.ActiveLayer(); // the knots in nX and nY Dataset aa(wks, nX); Dataset bb(wks, nY); vector vx, vy; vx = aa; vy = bb; Nag_Spline spline; int m = vx.GetSize(); NagError fail = {0}; e01bac(m, vx, vy, &spline, &fail); printf("Number of distinct knots = %d\n", m-2); printf("Distinct knots located at\n"); for(int j = 3; j <m+1; j++) printf("%8.4f%s", spline.lamda[j], (j-3)%5==4 || j==m? "\n":" "); printf("\n\n J B-spline coeff c\n\n"); for(j=0; j <m; j++) printf("\n %d %13.4f\n", j+1, spline.c[j]); // put fit into col(nYFit) from x=col(nXFit) Dataset fitx(wks, nXFit); Dataset fity(wks, nYFit); // generate the X from original X by using each mid point, so total m-1 new points fitx.SetSize(m-1); for(int ii = 0; ii < m - 1; ii++) fitx[ii] = (aa[ii] + aa[ii+1]) * 0.5; //now we can get the spline fit fity.SetSize(fitx.GetSize()); for(j=0; j<fity.GetSize(); j++) { double yy = NANUM; NagError fail = {0}; e02bbc(fitx[j], &yy, &spline, &fail); fity[j] = yy; } //Free memory allocated by e01bac NAG_FREE(spline.lamda); NAG_FREE(spline.c); }