Skip to contents

A technical but useful transformation of the matrix of derivatives form the one-sided to symmetric representations, or a reverse one. It allows for switching between the standard representation of the matrix of the derivatives for Splinets which is symmetric around the central knot(s) to the one-sided that yields the RHS limits at the knots, which is more convenient for computations.

Usage

sym2one(S, supp = NULL, inv = FALSE)

Arguments

S

(m+2) x (k+1) numeric matrix, the derivatives in one of the two representations;

supp

(Nsupp x 2) or NULL matrix, row-wise the endpoint indices of the support intervals; If it is equal to NULL (which is also the default), then the full support is assumed.

inv

logical; If FALSE (default), then the function assumes that the input is in the symmetric format and transforms it to the left-to-right format. If TRUE, then the inverse transformation is applied.

Value

A matrix that is the respective transformation of the input.

Details

The transformation essentially changes only the last column in S, i.e. the highest (discontinuous) derivatives so that the one-sided representation yields the right-hand-side limit. It is expected that the number of rows in S is the same as the total size of the support as indicated by supp, i.e. if supp!=NULL, then sum(supp[,2]-supp[,1]+1)=m+2. If the latter is true, than all derivative submatrices of the components in S will be reversed. However, this condition formally is not checked in the code, which may lead to switch of the representations only for parts of the matrix S.

References

Liu, X., Nassar, H., Podg\(\mbox{\'o}\)rski, K. "Dyadic diagonalization of positive definite band matrices and efficient B-spline orthogonalization." Journal of Computational and Applied Mathematics (2022) <https://doi.org/10.1016/j.cam.2022.114444>.

Podg\(\mbox{\'o}\)rski, K. (2021) "Splinets – splines through the Taylor expansion, their support sets and orthogonal bases." <arXiv:2102.00733>.

Nassar, H., Podg\(\mbox{\'o}\)rski, K. (2023) "Splinets 1.5.0 – Periodic Splinets." <arXiv:2302.07552>

See also

Splinets-class for the description of the Splinets-class; is.splinets for diagnostic of Splinets-objects;

Examples

#-----------------------------------------------------#
#-------Representations of derivatives at knots-------#
#-----------------------------------------------------#
n=10; k=3; xi=seq(0,1,by=1/(n+1)) #the even number of equally spaced knots 
set.seed(5)
S=matrix(rnorm((n+2)*(k+1)),ncol=(k+1))
spl=construct(xi,k,S) #construction of a spline
#> 
#> Using  method RRM to correct the derivative matrix entries.
#> 
#> 
#> DIAGNOSTIC CHECK of a SPLINETS object
#> 
#> THE KNOTS:  
#> 
#> 
#> THE SUPPORT SETS:  
#> 
#> The support sets for the splines are equal to the entire range of knots.
#> 
#> 
#> THE DERIVATIVES AT THE KNOTS:  
#> 
#> The boundary zero conditions are not satisfied for spline 1 in the input 'Splinets' object.
#> Correction of the first and last rows of the derivative matrices are made in the output 'Splinets' object.
#> 
#> Spline 1 's highest derivative is not symmetrically defined at the center (the values at the two central knots should be equal).
#> Spline 1 's highest derivative values at the two central knots have been made equal by averaging the two central values in SLOT 'der'.
#> 
#> The matrix of derivatives at the knots for spline 1 does not satisfy the conditions 
#> 
#>           required for a spline (up to the accuracy SLOT 'epsilon').
#> 
#>           One of the reasons can be that SLOT 'taylor' is not correctly given.
#> The computed standard error per matrix entry is 1.383861 .
#> 
#> 
#> Correction of the LHS part of the matrix
#> Correction of the RHS part of the matrix
#> Correction of the LHS part of the matrix
#> Correction of the RHS part of the matrix
#> The output object Spline 1  has the derivative matrix corrected by the RRM method
#>  given that SLOT 'taylor' is properly given.
#> The matrix derivative is now corrected by method RRM .
a=spl@der[[1]]
b=sym2one(a)
aa=sym2one(b,inv=TRUE) # matrix 'aa' is the same as 'a'

n=11; xi2=seq(0,1,by=1/(n+1)) #the odd number of knots case
S2=matrix(rnorm((n+2)*(k+1)),ncol=(k+1))
spl2=construct(xi2,k,S2) #construction of a spline
#> 
#> Using  method RRM to correct the derivative matrix entries.
#> 
#> 
#> DIAGNOSTIC CHECK of a SPLINETS object
#> 
#> THE KNOTS:  
#> 
#> 
#> THE SUPPORT SETS:  
#> 
#> The support sets for the splines are equal to the entire range of knots.
#> 
#> 
#> THE DERIVATIVES AT THE KNOTS:  
#> 
#> The boundary zero conditions are not satisfied for spline 1 in the input 'Splinets' object.
#> Correction of the first and last rows of the derivative matrices are made in the output 'Splinets' object.
#> 
#> Spline 1 's highest derivative at the central knot is not equal to zero.
#> Spline 1 's highest derivative value at the central knot has been made equal to zero.
#> 
#> The matrix of derivatives at the knots for spline 1 does not satisfy the conditions 
#> 
#>           required for a spline (up to the accuracy SLOT 'epsilon').
#> 
#>           One of the reasons can be that SLOT 'taylor' is not correctly given.
#> The computed standard error per matrix entry is 1.157913 .
#> 
#> 
#> Correction of the LHS part of the matrix
#> Correction of the RHS part of the matrix
#> Correction of the LHS part of the matrix
#> Correction of the RHS part of the matrix
#> The output object Spline 1  has the derivative matrix corrected by the RRM method
#>  given that SLOT 'taylor' is properly given.
#> The matrix derivative is now corrected by method RRM .
a2=spl2@der[[1]]
b2=sym2one(a2)
aa2=sym2one(b2, inv=TRUE) # matrix 'aa2' is the same as 'a2'

#-----------------------------------------------------#
#--------------More complex support sets--------------#
#-----------------------------------------------------#
#Zero order splines, non-equidistant case, support with three components
n=43; xi=seq(0,1,by=1/(n+1)); k=3; xi=sort(runif(n+2)); xi[1]=0; xi[n+2]=1;
support=list(matrix(c(2,14,17,30,32,43),ncol=2,byrow = TRUE))
#Third order splines
ssp=new("Splinets",knots=xi,supp=support,smorder=k) #with partial support

m=sum(ssp@supp[[1]][,2]-ssp@supp[[1]][,1]+1) #the total number of knots in the support
ssp@der=list(matrix(rnorm(m*(k+1)),ncol=(k+1)))  #the derivative matrix at random
IS=is.splinets(ssp) 
#> 
#> 
#> DIAGNOSTIC CHECK of a SPLINETS object
#> 
#> THE KNOTS:  
#> 
#> 
#> THE SUPPORT SETS:  
#> 
#> 
#> 
#> THE DERIVATIVES AT THE KNOTS:  
#> 
#> The boundary zero conditions are not satisfied for spline 1 in the input 'Splinets' object.
#> Correction of the first and last rows of the derivative matrices over the support component 1 of spline 1 in the output 'Splinets' object.
#> The boundary zero conditions are not satisfied for spline 1 in the input 'Splinets' object.
#> Correction of the first and last rows of the derivative matrices over the support component 2 of spline 1 in the output 'Splinets' object.
#> The boundary zero conditions are not satisfied for spline 1 in the input 'Splinets' object.
#> Correction of the first and last rows of the derivative matrices over the support component 3 of spline 1 in the output 'Splinets' object.
#> 
#> Spline 1 support 1 's highest derivative at the central knot is not zero.
#> Now it is set to zero.
#> 
#> The matrix of derivatives at the knots for spline 1 , support 1  does not satisfy the splie conditions (up to the accuracy set in SLOT 'epsilon').
#> The computed standard error per matrix entry is 1.492997 .
#> 
#> 
#> Correction of the LHS part of the matrix
#> There are less than 5 knots, the first 2 entries of the 5 nd row counting from the end in the input will be changed in the output.
#> 
#> 
#> Correction of the RHS part of the matrix
#> There are less than 5 knots, the first 2 entries of the 5 nd row counting from the end in the input will be changed in the output.
#> 
#> 
#> Correction of the LHS part of the matrix
#> Correction of the RHS part of the matrix
#> The output object Spline 1  support 1 has the derivative matrix corrected by the RRM method.
#> Spline 1 , support 2  - highest derivative is not symmetric at the center (equal values at the two central knots).
#> The two values have been made equal by averaging.
#> 
#> The matrix of derivatives at the knots for spline 1 , support 2  does not satisfy the splie conditions (up to the accuracy set in SLOT 'epsilon').
#> The computed standard error per matrix entry is 1.148768 .
#> 
#> 
#> Correction of the LHS part of the matrix
#> There are less than 5 knots, the first 1 entries of the 5 nd row counting from the end in the input will be changed in the output.
#> 
#> 
#> Correction of the RHS part of the matrix
#> There are less than 5 knots, the first 1 entries of the 5 nd row counting from the end in the input will be changed in the output.
#> 
#> 
#> Correction of the LHS part of the matrix
#> Correction of the RHS part of the matrix
#> The output object Spline 1  support 2 has the derivative matrix corrected by the RRM method.
#> Spline 1 , support 3  - highest derivative is not symmetric at the center (equal values at the two central knots).
#> The two values have been made equal by averaging.
#> 
#> The matrix of derivatives at the knots for spline 1 , support 3  does not satisfy the splie conditions (up to the accuracy set in SLOT 'epsilon').
#> The computed standard error per matrix entry is 1.601748 .
#> 
#> 
#> Correction of the LHS part of the matrix
#> There are less than 5 knots, the first 2 entries of the 5 nd row counting from the end in the input will be changed in the output.
#> 
#> 
#> Correction of the RHS part of the matrix
#> There are less than 5 knots, the first 2 entries of the 5 nd row counting from the end in the input will be changed in the output.
#> 
#> 
#> Correction of the LHS part of the matrix
#> Correction of the RHS part of the matrix
#> The output object Spline 1  support 3 has the derivative matrix corrected by the RRM method.
IS$robject@der
#> [[1]]
#>               [,1]         [,2]          [,3]          [,4]
#>  [1,]  0.000000000   0.00000000  0.000000e+00  2.602891e+07
#>  [2,]  0.020169442  36.25368071  4.344293e+04 -1.133425e+07
#>  [3,]  0.452070889 116.91998071 -7.661883e+03  2.487946e+05
#>  [4,]  1.630578457  -1.05775009 -1.857767e-01 -8.839958e-02
#>  [5,]  1.605482003  -1.06217347 -1.878697e-01 -2.694659e+02
#>  [6,]  1.600437999  -1.06609441 -1.465747e+00  9.770884e-02
#>  [7,]  1.594683523  -1.07397554 -1.465221e+00  0.000000e+00
#>  [8,]  1.577314990  -1.09727433 -1.447437e+00  1.111619e+00
#>  [9,]  1.555766871  -1.10351300  8.081351e-01  1.155689e+02
#> [10,]  1.528859115  -1.08310035  8.507972e-01  1.733572e+00
#> [11,]  1.517330148 -17.18082778 -1.800946e+04 -1.007411e+07
#> [12,]  0.348403322 -73.44339875  1.032124e+04  1.935679e+06
#> [13,]  0.000000000   0.00000000  0.000000e+00 -7.252391e+05
#> [14,]  0.000000000   0.00000000  0.000000e+00 -8.107931e+03
#> [15,] -0.023141799  -2.69342936 -2.089887e+02  5.145988e+03
#> [16,] -0.379094229  -5.91164232  1.027351e+02 -1.182501e+03
#> [17,] -0.633041558  -1.44923541  9.547868e-01 -1.245056e+00
#> [18,] -0.648147346  -1.43931725  9.417646e-01  2.184919e+03
#> [19,] -0.676410037  -0.84951596  5.077620e+01 -1.488525e+03
#> [20,] -0.685692768   0.01651311 -1.038042e-01 -1.500139e+00
#> [21,] -0.685466074   0.01485930 -1.254480e-01 -1.500139e+00
#> [22,] -0.673722335   1.39097073  1.109865e+02  4.475646e+03
#> [23,] -0.666343314   1.64910142 -1.544657e+00 -2.385537e+04
#> [24,] -0.610172067   1.59545238 -1.554262e+00 -2.773949e-01
#> [25,] -0.549315902   3.58114751  1.484087e+02  5.545347e+03
#> [26,] -0.019535704   2.26930738 -1.757383e+02 -3.376473e+03
#> [27,]  0.000000000   0.00000000  0.000000e+00  6.804706e+03
#> [28,]  0.000000000   0.00000000  0.000000e+00  4.724698e+03
#> [29,]  0.030551709   2.70740062  1.599478e+02 -3.216931e+04
#> [30,]  0.063906965   2.43697547 -2.073212e+02  1.884581e+04
#> [31,]  0.082396860   1.29662506  6.436154e-01 -4.384008e-01
#> [32,]  0.084463485   1.29764993  6.429170e-01  2.080547e+02
#> [33,]  0.087591557   1.29980214  1.144070e+00  7.453307e-01
#> [34,]  0.113611057   1.32265181  1.158860e+00  7.453307e-01
#> [35,]  0.164496395   1.37723487  1.733344e+00  1.522015e+01
#> [36,]  0.174588409   1.38990312  1.740164e+00  9.349643e-01
#> [37,]  0.176698633  -2.49013668 -3.787662e+02 -1.848703e+04
#> [38,]  0.009774724  -2.37641018  3.851652e+02  2.149187e+04
#> [39,]  0.000000000   0.00000000  0.000000e+00 -3.121351e+04
#> 
IS$robject@supp
#> [[1]]
#>      [,1] [,2]
#> [1,]    2   14
#> [2,]   17   30
#> [3,]   32   43
#> 
b=sym2one(IS$robject@der[[1]],IS$robject@supp[[1]]) #the RHS limits at the knots
a=sym2one(b,IS$robject@supp[[1]],inv=TRUE) #is the same as the SLOT supp in IS@robject