# \[ANN\] NormalHermiteSplines.jl v.0.4.0

**URL:** https://discourse.julialang.org/t/ann-normalhermitesplines-jl-v-0-4-0/57554
**Category:** Package Announcements
**Tags:** splines
**Created:** [March 19, 2021, 4:18pm UTC](https://discourse.julialang.org/t/ann-normalhermitesplines-jl-v-0-4-0/57554 "2021-03-19T16:18:55Z")
**Posts on this page:** 9
**Page:** 1

<div class="post-metadata">

### Author: ![igorkohan](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/igorkohan/32/13759_2.png) [@igorkohan](https://discourse.julialang.org/u/igorkohan)
#### Post date: [March 19, 2021, 4:18pm UTC](https://discourse.julialang.org/t/ann-normalhermitesplines-jl-v-0-4-0/57554/1 "2021-03-19T16:18:55Z")

</div>

_Multivariate Normal Hermite-Birkhoff Interpolating Splines in Julia_

This announces the `v0.4.0` release of [NormalHermiteSplines.jl](https://github.com/IgorKohan/NormalHermiteSplines.jl) package that implements the normal splines method for solving the following interpolation problem:

 ![problem](https://global.discourse-cdn.com/julialang/original/3X/7/3/734857a4273bd3e67e9c3acb10aee74f6854f18e.png)

[Documentation](https://igorkohan.github.io/NormalHermiteSplines.jl/stable/)

[Hermite-Birkhoff Interpolation of Scattered Data](https://igorkohan.github.io/NormalHermiteSplines.jl/stable/Normal-Splines-Method/#Hermite-Birkhoff-Interpolation-of-Scattered-Data)

---

<div class="post-metadata">

### Author: ![stevengj](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/stevengj/32/71_2.png) [@stevengj](https://discourse.julialang.org/u/stevengj)
#### Post date: [March 19, 2021, 5:55pm UTC](https://discourse.julialang.org/t/ann-normalhermitesplines-jl-v-0-4-0/57554/2 "2021-03-19T17:55:44Z")

</div>

Sounds great! What are the complexities of constructing and evaluating the splines, respectively, as a function of n\_1,n\_2,n?

---

<div class="post-metadata">

### Author: ![igorkohan](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/igorkohan/32/13759_2.png) [@igorkohan](https://discourse.julialang.org/u/igorkohan)
#### Post date: [March 19, 2021, 6:44pm UTC](https://discourse.julialang.org/t/ann-normalhermitesplines-jl-v-0-4-0/57554/3 "2021-03-19T18:44:35Z")

</div>

It is necessary to factorize a dense symmetric positive definite matrix of size n\_1 (n\_1 + n\_2) in order to construct an interpolating (Hermite) normal spline. In the package it is done by means of Cholesky decomposition which complexity is about 1/3 n\_1^3 (1/3 (n\_1 + n\_2)^3).

---

<div class="post-metadata">

### Author: ![igorkohan](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/igorkohan/32/13759_2.png) [@igorkohan](https://discourse.julialang.org/u/igorkohan)
#### Post date: [March 19, 2021, 6:54pm UTC](https://discourse.julialang.org/t/ann-normalhermitesplines-jl-v-0-4-0/57554/4 "2021-03-19T18:54:53Z")

</div>

as for evaluating the spline in a node that complexity is O(n(n\_1 + n\_2)).

---

<div class="post-metadata">

### Author: ![stevengj](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/stevengj/32/71_2.png) [@stevengj](https://discourse.julialang.org/u/stevengj)
#### Post date: [March 19, 2021, 9:19pm UTC](https://discourse.julialang.org/t/ann-normalhermitesplines-jl-v-0-4-0/57554/5 "2021-03-19T21:19:07Z")

</div>

Is it possible to use something like a fast Gauss transform to accelerate this?

---

<div class="post-metadata">

### Author: ![cgeoga](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/cgeoga/32/216186_2.png) [@cgeoga](https://discourse.julialang.org/u/cgeoga)
#### Post date: [March 19, 2021, 10:09pm UTC](https://discourse.julialang.org/t/ann-normalhermitesplines-jl-v-0-4-0/57554/6 "2021-03-19T22:09:30Z")

</div>

I’m curious about something similar to @stevengj: do you need a Cholesky factor, or would some more exotic symmetric factorization that also admitted nice solves be feasible? Several H-matrix formats don’t easily admit a triangular symmetric factor, but they have other ways of getting nice fast solves. And for kernels that are smooth away from the origin there probably is some nice structure.

Very cool stuff, by the way! Thanks for writing such nice examples/docs, too.

---

<div class="post-metadata">

### Author: ![igorkohan](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/igorkohan/32/13759_2.png) [@igorkohan](https://discourse.julialang.org/u/igorkohan)
#### Post date: [March 20, 2021, 8:49am UTC](https://discourse.julialang.org/t/ann-normalhermitesplines-jl-v-0-4-0/57554/7 "2021-03-20T08:49:13Z")

</div>

Thank you, @[stevengj](https://discourse.julialang.org/t/ann-normalhermitesplines-jl-v-0-4-0/57554/5) and @ [cgeoga](https://discourse.julialang.org/u/cgeoga) for your ideas, it could work. There are a few approaches of improving performance of the RBF-based interpolation methods, e.g. partition of unity, multilevel and fast multi-poles ones. However, my next goal is implementing code of the [Multivariate Normal Smoothing Splines](https://github.com/IgorKohan/NormalSmoothingSplines.jl) project. Constructing the spline is based on solving a simplest finite-dimensional quadratic programming problem. There are simple and pretty fast quadratic programming algorithms  
[Quadratic Programming in Hilbert space](https://igorkohan.github.io/NormalHermiteSplines.jl/dev/Normal-Splines-Method/#Quadratic-Programming-in-Hilbert-space)  
and  
[Adaptive Quadratic Programming in Hilbert space](https://normalsplines.blogspot.com/2019/07/quadratic-programming-in-hilbert-space.html)  
These algorithms are based on solving multiple systems of linear equations with positive definite matrices and use relatively fast recalculation of a matrix Cholesky factors.  
[Algorithms for updating Cholesky factorization](https://igorkohan.github.io/NormalHermiteSplines.jl/dev/Normal-Splines-Method/#Algorithms-for-updating-Cholesky-factorization)  
That is why I stick to Cholesky decomposition here.  
Regards,  
Igor

---

<div class="post-metadata">

### Author: ![cgeoga](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/cgeoga/32/216186_2.png) [@cgeoga](https://discourse.julialang.org/u/cgeoga)
#### Post date: [March 20, 2021, 3:38pm UTC](https://discourse.julialang.org/t/ann-normalhermitesplines-jl-v-0-4-0/57554/8 "2021-03-20T15:38:38Z")

</div>

That sounds like a very interesting next goal! All cool stuff. Thanks for sharing and again for writing up the nice docs and references.

---

<div class="post-metadata">

### Author: ![igorkohan](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/igorkohan/32/13759_2.png) [@igorkohan](https://discourse.julialang.org/u/igorkohan)
#### Post date: [March 22, 2021, 4:18pm UTC](https://discourse.julialang.org/t/ann-normalhermitesplines-jl-v-0-4-0/57554/9 "2021-03-22T16:18:49Z")

</div>

Yesterday I found a paper that fully described the interpolating normal splines method. Here we are:  
DIX, JULIO G., and ROBERT D. OGDEN. “AN INTERPOLATION SCHEME WITH RADIAL BASIS IN SOBOLEV SPACES H s. The Rocky Mountain Journal of Mathematics, vol. 24, no. 4, 1994, pp. 1319–1337. JSTOR, [AN INTERPOLATION SCHEME WITH RADIAL BASIS IN SOBOLEV SPACES H s (R n ) on JSTOR](http://www.jstor.org/stable/44237842). Accessed 22 Mar. 2021.

Links:  
[https://rmmc.asu.edu/rmj/rmjVOLS2/vol24/vol24-4/DIX.pdf](https://rmmc.asu.edu/rmj/rmjVOLS2/vol24/vol24-4/DIX.pdf)  
or

> **[An Interpolation Scheme with Radial Basis in Sobolev Spaces $H^s(R^n)$](https://projecteuclid.org/journals/rocky-mountain-journal-of-mathematics/volume-24/issue-4/An-Interpolation-Scheme-with-Radial-Basis-in-Sobolev-Spaces-HsRn/10.1216/rmjm/1181072340.full)**
>
> Rocky Mountain Journal of Mathematics
