Turn on suggestions

Auto-suggest helps you quickly narrow down your search results by suggesting possible matches as you type.

Showing results for

- Intel Community
- Software
- Software Development SDKs and Libraries
- Intel® oneAPI Math Kernel Library
- MKL data fitting/interpolation on 12 data points

- Subscribe to RSS Feed
- Mark Topic as New
- Mark Topic as Read
- Float this Topic for Current User
- Bookmark
- Subscribe
- Mute
- Printer Friendly Page

BrianNguyen1210

Beginner

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Email to a Friend
- Report Inappropriate Content

09-23-2020
06:09 PM

376 Views

MKL data fitting/interpolation on 12 data points

Hi all,

I'm working on a project related to data fitting, and this is the first time I've ever used MKL, so I'm not super familiar with all the parameters being used for data fitting. So I hope you all could help me with this problem.

So, I current have 12 point values of x and y, and they are paired, e.g (1, 19.313); (24, 16.5697), etc

const double x[] = { 1, 24, 48, 71, 95, 118, 148,

222, 296, 371, 445, 519 };

const double y[] = { 19.31384948, 16.56976694, 9.565388654, 1.697567158,

-4.36924024, -6.412502868, -3.530705482, 10.88522928, 22.44699452,

24.79560359, 24.88258818, 25.38450349 };

So I want to use akima interpolation to have a curve that goes through all the points. That curve should have 519 points. In Matlab, I can simply use the function interp1 like:

curve = interp1(x, y, 1:x(end), 'makima');

I wonder if I can do the same thing for MKL.

For my code, I currently have:

#include <mkl.h>

int main()

{

const double x[] = { 1, 24, 48, 71, 95, 118, 148,

222, 296, 371, 445, 519 };

const double y[] = { 19.31384948, 16.56976694, 9.565388654, 1.697567158,

-4.36924024, -6.412502868, -3.530705482, 10.88522928, 22.44699452,

24.79560359, 24.88258818, 25.38450349 };

const int N = sizeof(x)/sizeof(x[0]);

//

const int NSITE = 1;

int status; /* Status of a Data Fitting operation */

DFTaskPtr task; /* Data Fitting operations are task based */

MKL_INT nx = N; /* The size of partition x */

MKL_INT xhint = DF_NON_UNIFORM_PARTITION; /* Additional information about the structure of breakpoints */

MKL_INT ny = 1; /* Function dimension */

MKL_INT yhint = DF_NO_HINT; /* Additional information about the function */

/* Parameters describing the spline */

status = dfdNewTask1D(&task, nx, x, xhint, ny, y, yhint);

/* Parameters describing interpolation computations */

MKL_INT nsite = NSITE; /* Number of interpolation sites */

double site[NSITE]; /* Array of interpolation sites */

MKL_INT sitehint = DF_SORTED_DATA;

MKL_INT ndorder = 1;

MKL_INT dorder = 1; /* Parameters defining the type of interpolation */

double* datahint = 0;// DF_NO_APRIORI_INFO; /* Additional information on partition and interpolation sites */

double r[NSITE*519]; /* Array of interpolation results */

MKL_INT rhint = DF_MATRIX_STORAGE_ROWS; /* Additional information on the structure of the results */

MKL_INT* cell = 0; //NULL; /* Array of cell indices */

MKL_INT s_order = DF_PP_CUBIC; /* Spline order */

MKL_INT s_type = DF_PP_AKIMA; /* Spline type */

MKL_INT ic_type = DF_NO_IC; ; /* Type of internal conditions */

double* ic = 0; // NULL; /* Array of internal conditions */

MKL_INT bc_type = DF_NO_BC; // DF_BC_NOT_A_KNOT; /* Type of boundary conditions */

double* bc = 0; // NULL; /* Array of boundary conditions */

double scoeff[(N - 1)* DF_PP_CUBIC]; /* Array of spline coefficients */

MKL_INT scoeffhint = DF_NO_HINT; /* Additional information about the coefficients */

/* Set spline parameters in the Data Fitting task */

status = dfdEditPPSpline1D(task, s_order, s_type, bc_type, bc, ic_type,

ic, scoeff, scoeffhint);

status = dfdConstruct1D(task, DF_PP_SPLINE, DF_METHOD_STD);

cout << "status: " << status << "\n";

status = dfdInterpolate1D(task, DF_INTERP, DF_METHOD_PP, nsite, site,

sitehint, ndorder, &dorder, datahint, r, rhint, cell);

cout << "status: " << status << "\n";

status = dfDeleteTask(&task);

I'm super confused about the nsite, site, ny, nx, etc even though I read through the instructions/documentations of these. I'd really appreciate if someone could help guide me through this. Thanks so much!

Link Copied

7 Replies

Gennady_F_Intel

Moderator

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Email to a Friend
- Report Inappropriate Content

09-23-2020
08:06 PM

368 Views

BrianNguyen1210

Beginner

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Email to a Friend
- Report Inappropriate Content

09-23-2020
08:42 PM

357 Views

I did, and that file is not for interpolation but for calculation of the integral..

Gennady_F_Intel

Moderator

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Email to a Friend
- Report Inappropriate Content

09-24-2020
06:27 AM

353 Views

BrianNguyen1210

Beginner

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Email to a Friend
- Report Inappropriate Content

09-24-2020
10:08 AM

344 Views

I'm confused about the site, nsite, sitehint. It says that site is an array of interpolation sites. What is an interpolation site? I'm not sure if nsite should be 519. The example you recommended doesn't use the function dfdInterpolate1D, which is what I need for interpolation.

For boundary conditions, what should I choose? what is boundary condition anyway?

It'd be great if you could help me initialize all the necessary parameters for my specific example of 12-point arrays x and y I provided above. Thanks so much

Pavel_D_Intel1

Employee

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Email to a Friend
- Report Inappropriate Content

09-25-2020
02:28 AM

332 Views

Hello Brian,

glad to see your interest to Intel MKL Data Fitting functionality.

Let me try to answer your questions.

Interpolation site is the point’s coordinate where you would like to get interpolated value.

nsite – is a number of interpolation sites where interpolated values are needed. So NSITE should be set as 519 in your code.

sitehint – is an additional information about interpolation sites that is used during computation, e.g.: if you have sorted array of interpolation sites you should set sitehint as DF_SORTED_DATA - this information can increase performance of dfdInterpolate1D routine. If you have no such information about interpolation sites you can set sitehint as DF_NO_HINT.

More information about hints (and about all other parameters of dfdInterpolate1D) can be found here: https://software.intel.com/content/www/us/en/develop/documentation/mkl-developer-reference-c/top/dat...

Regarding examples with dfdInterpolate1D you can refer to dfdquadraticspline.c example (example shows usage of quadratic splines and dfdInterpolate1D routine).

Boundary conditions are used for spline construction and depends on the available information, e.g.: in dfdakimacubicspline.c example we provide 2^{nd} left and 1^{st} right derivatives during spline construction.

Akima splines support next boundary conditions: DF_BC_NOT_A_KNOT, DF_BC_FREE_END, DF_BC_1ST_LEFT_DER, DF_BC_1ST_RIGHT_DER, DF_BC_2ST_LEFT_DER, DF_BC_2ND_RIGHT_DER.

Please note that in case of DF_BC_NOT_A_KNOT and DF_BC_FREE_END conditions no additional information is needed to be set. Math aspects about that can be found here: *https://software.intel.com/content/www/us/en/develop/documentation/mkl-developer-reference-c/top/dat...*

* *Regarding your program:

- I suggest to set NSITE = 519 and fill the site array with the appropriate values
- r[NSITE*519] can be changed by r[NSITE]

Please fill free to ask more questions.

Best regards,

Pavel

JohnNichols

Valued Contributor II

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Email to a Friend
- Report Inappropriate Content

09-30-2020
11:05 AM

312 Views

You are unlikely to generate a curve that exactly fits 12 points unless they are fitted by a lower order curve and in that case you are oversupplied with points.

This is not as simple as it looks.

Gennady_F_Intel

Moderator

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Email to a Friend
- Report Inappropriate Content

10-27-2020
09:08 PM

256 Views

Topic Options

- Subscribe to RSS Feed
- Mark Topic as New
- Mark Topic as Read
- Float this Topic for Current User
- Bookmark
- Subscribe
- Printer Friendly Page

For more complete information about compiler optimizations, see our Optimization Notice.