Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Free(OnGrid()) boundary conditions produce surprising results #570

Open
cchapmanbird opened this issue Nov 30, 2023 · 4 comments
Open

Free(OnGrid()) boundary conditions produce surprising results #570

cchapmanbird opened this issue Nov 30, 2023 · 4 comments

Comments

@cchapmanbird
Copy link

I'm interpolating a 3-dimensional regular surface with scale(interpolate(Espldata, BSpline(Cubic(<bc>))) where is either Line(OnGrid()) or Free(OnGrid()). I am confused by the below result, which is a 1D slice through the grid with the other two parameters being grid points. Why do the Free boundary conditions behave so poorly? My impression is that Free BCs are the same as not-a-knot (continuity in third derivative for second-last spline knot) but this is clearly not what is happening here.

image

@mkitti
Copy link
Collaborator

mkitti commented Dec 1, 2023

You've encountered https://en.wikipedia.org/wiki/Runge%27s_phenomenon

@cchapmanbird
Copy link
Author

I have never seen such a bad case of it for not-a-knot cubic splines - especially for such a simple function. The true curve appears almost linear at the boundary but the cubic polynomial is totally different...

I suppose more nodes is the only answer?

@mkitti
Copy link
Collaborator

mkitti commented Dec 1, 2023

Perhaps. The reality is that you probably only need more nodes near the boundaries.

true curve appears almost linear at the boundary

Have you tried Natural?

Also consider
https://github.com/jipolanco/BSplineKit.jl
https://github.com/JuliaApproximation/ApproxFun.jl

@cchapmanbird
Copy link
Author

Thanks for the recommendations - I did not know about BSplineKit.jl.

I thought that Line is an alias for Natural? In the docs....

"The following boundary conditions are implemented: Flat, Line (alternatively, Natural), Free, Periodic and Reflect."

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants