ddemidov / mba

Scattered data interpolation with multilevel B-Splines
MIT License
73 stars 23 forks source link

Refinement level h #19

Open lizrmn opened 3 years ago

lizrmn commented 3 years ago

Hi @ddemidov, I would love to know if there is a possibility to set the refinement parameter h in this code (regarding the python implementation)?
I get slightly different results comparing the MBA package in R (provided from SINTEF) and yours.

ddemidov commented 3 years ago

There is the tol parameter that specifies the target relative approximation error (||mba(x_i) - z_i|| / ||z||):

https://github.com/ddemidov/mba/blob/420bc7f4d0717a1f66eee05f61122ff2dd28d65a/mba/mba.hpp#L721

The parameter is also exposed to the python wrapper:

https://github.com/ddemidov/mba/blob/420bc7f4d0717a1f66eee05f61122ff2dd28d65a/python/pymba.cpp#L30

so you can do something like

interp = mba2(..., tol=1e-12)

Re differences with the SINTEF version, I am not familiar with the implementation, so can not comment on the possible reason. If I had to guess, I would say there are probably some minor details, like initial grid size, and what is exactly meant by the grid size in each implementation (for example, number of cells vs number of points).

lizrmn commented 3 years ago

Thank you for your fast reply. This is what I was looking for. But I won't help with the differences regarding the algorithm in R. But thanks for your input on that as well.

ddemidov commented 3 years ago

I have just tested the rygg1.dat example from SINTEF MBA, see results in the following notebook: https://nbviewer.jupyter.org/gist/ddemidov/6fcd134909d674669f6dffc2066bf739

The test point (5,5) has a minor discrepancy, but the data points are interpolated within the required tolerance (1e-8 by default).

ddemidov commented 3 years ago

Note that python interface assumes that all input arrays have C-layout, hence the .copy() in cell [2] in the above notebook.