1. Compositional spline

This code implements the compositional smoothing splines grounded on the theory of Bayes spaces. The below code is based on the function compositionalSpline() in the robCompositions package.

The code is based on the method in Machalova, J., Talska, R., Hron, K. Gaba, A. Compositional splines for representation of density functions. Comput Stat (2020). https://doi.org/10.1007/s00180-020-01042-7

The target is to estimate the fomular (19) in their formular

\[ \begin{aligned} J_{l}(\mathbf{z})=&(1-\alpha) \mathbf{z}^{\top} \mathbf{K}^{\top} \mathbf{D S}_{l}^{\top} \mathbf{M}_{k l} \mathbf{S}_{l} \mathbf{D} \mathbf{K} \mathbf{z}+\\ &+\alpha\left[\mathbf{y}-\mathbf{B}_{k+1}(\mathbf{x}) \mathbf{D} \mathbf{K}\right]^{\top} \mathbf{W}\left[\mathbf{y}-\mathbf{B}_{k+1}(\mathbf{x}) \mathbf{D K} \mathbf{z}\right] \end{aligned} \]

2. Simulation data

100 values based on normal density

#--their function
require(robCompositions)
require(splines)
# Example (normal density)
t = seq(-4.7,4.7, length = 100)
t_step = diff(t[1:2])
mean = 0; sd = 1.5
f = dnorm(t, mean, sd)
f1 = f/trapzc(t_step,f)

Using fcenLR() function with above values

f.fcenLR = fcenLR(t, t_step,  f) 
f.fcenLR
##   [1] -3.272258689 -3.075923167 -2.883594493 -2.695272667 -2.510957688
##   [6] -2.330649556 -2.154348271 -1.982053834 -1.813766245 -1.649485502
##  [11] -1.489211607 -1.332944560 -1.180684359 -1.032431007 -0.888184501
##  [16] -0.747944843 -0.611712032 -0.479486069 -0.351266953 -0.227054685
##  [21] -0.106849263  0.009349311  0.121541037  0.229725916  0.333903948
##  [26]  0.434075132  0.530239469  0.622396959  0.710547601  0.794691396
##  [31]  0.874828343  0.950958443  1.023081696  1.091198101  1.155307659
##  [36]  1.215410370  1.271506233  1.323595249  1.371677418  1.415752739
##  [41]  1.455821212  1.491882839  1.523937618  1.551985549  1.576026634
##  [46]  1.596060871  1.612088260  1.624108802  1.632122497  1.636129344
##  [51]  1.636129344  1.632122497  1.624108802  1.612088260  1.596060871
##  [56]  1.576026634  1.551985549  1.523937618  1.491882839  1.455821212
##  [61]  1.415752739  1.371677418  1.323595249  1.271506233  1.215410370
##  [66]  1.155307659  1.091198101  1.023081696  0.950958443  0.874828343
##  [71]  0.794691396  0.710547601  0.622396959  0.530239469  0.434075132
##  [76]  0.333903948  0.229725916  0.121541037  0.009349311 -0.106849263
##  [81] -0.227054685 -0.351266953 -0.479486069 -0.611712032 -0.747944843
##  [86] -0.888184501 -1.032431007 -1.180684359 -1.332944560 -1.489211607
##  [91] -1.649485502 -1.813766245 -1.982053834 -2.154348271 -2.330649556
##  [96] -2.510957688 -2.695272667 -2.883594493 -3.075923167 -3.272258689
knots <- seq(-4.7,4.7, length = 10)
knots 
##  [1] -4.7000000 -3.6555556 -2.6111111 -1.5666667 -0.5222222  0.5222222
##  [7]  1.5666667  2.6111111  3.6555556  4.7000000

3. Test each step in compositionalSpline()

# der : for the penlized

order = 4
der = 2
k = order
r = length(knots)
r
## [1] 10
w = rep( 1/length(t), length(t))
# see w
w
##   [1] 0.01 0.01 0.01 0.01 0.01 0.01 0.01 0.01 0.01 0.01 0.01 0.01 0.01 0.01 0.01
##  [16] 0.01 0.01 0.01 0.01 0.01 0.01 0.01 0.01 0.01 0.01 0.01 0.01 0.01 0.01 0.01
##  [31] 0.01 0.01 0.01 0.01 0.01 0.01 0.01 0.01 0.01 0.01 0.01 0.01 0.01 0.01 0.01
##  [46] 0.01 0.01 0.01 0.01 0.01 0.01 0.01 0.01 0.01 0.01 0.01 0.01 0.01 0.01 0.01
##  [61] 0.01 0.01 0.01 0.01 0.01 0.01 0.01 0.01 0.01 0.01 0.01 0.01 0.01 0.01 0.01
##  [76] 0.01 0.01 0.01 0.01 0.01 0.01 0.01 0.01 0.01 0.01 0.01 0.01 0.01 0.01 0.01
##  [91] 0.01 0.01 0.01 0.01 0.01 0.01 0.01 0.01 0.01 0.01
clrf = f.fcenLR
length(clrf)
## [1] 100

3.1 Create knots

The below code create knots, as below. Then, the knots \(\lambda_{1}\), .., \(\lambda_{r}\) are knots inside the intervals and there are \(2*k\) extra knots. \[ \begin{aligned} &\Delta \lambda:=\lambda_{0}=u<\lambda_{1}<\cdots<\lambda_{10}<v=\dot{\lambda}_{r+1} \\ &\lambda_{-k}=\cdots=\lambda_{-1}=\lambda_{0}, \quad \lambda_{r+1}=\lambda_{r+2}=\cdots=\lambda_{r+k+1} \end{aligned} \]

Count both inside knots, 2 borders and extra knots

Celkova_Delka = 2 * (k - 1) + r  # 
Celkova_Delka
## [1] 16
lambda = c()
for (i in 1:(Celkova_Delka)) {
  if (i <= k - 1) {
    lambda[i] = knots[1]
  }
  if ((i > k - 1) && (i <= r + k - 1)) {
    lambda[i] = knots[i - (k - 1)]
  }
  if (i > r + k - 1) {
    lambda[i] = knots[r]
  }
}
lambda #### 16 knots = 8 insides + 2 borders + 6 extra knots #  6 = 2*(order -1)
##  [1] -4.7000000 -4.7000000 -4.7000000 -4.7000000 -3.6555556 -2.6111111
##  [7] -1.5666667 -0.5222222  0.5222222  1.5666667  2.6111111  3.6555556
## [13]  4.7000000  4.7000000  4.7000000  4.7000000

Then it means

\[ \begin{aligned} &\Delta \lambda:=\lambda_{0}=-4.7=u<\lambda_{1}=-3.66<\cdots<\lambda_{8}=3.66<v=4.7=\dot{\lambda}_{9} \\ &\lambda_{-3}=\lambda_{-2}=\lambda_{-1}=\lambda_{0}=-4.7, \quad \lambda_{9}=\lambda_{10}=\lambda_{11}=\lambda_{12} \end{aligned} \]

3.2. Create a B-splines basic at order \(4\), based on knots \(\lambad\)

splineDesign () is a function to Design Matrix for B-splines basic, given order \(4\), a total of 16 knots (inside, border and extra) and the value t

ord =  k
B = splineDesign(lambda, t, ord, outer.ok = TRUE)
dim(B) 
## [1] 100  12
length(t)
## [1] 100
length(lambda)- ord
## [1] 12

See matrix B

head(B, 12)
##               [,1]      [,2]       [,3]         [,4] [,5] [,6] [,7] [,8] [,9]
##  [1,] 1.0000000000 0.0000000 0.00000000 0.0000000000    0    0    0    0    0
##  [2,] 0.7513148009 0.2368520 0.01170799 0.0001252191    0    0    0    0    0
##  [3,] 0.5477084899 0.4072126 0.04407713 0.0010017531    0    0    0    0    0
##  [4,] 0.3846731781 0.5189707 0.09297521 0.0033809166    0    0    0    0    0
##  [5,] 0.2577009767 0.5800150 0.15426997 0.0080140245    0    0    0    0    0
##  [6,] 0.1622839970 0.5982344 0.22382920 0.0156523917    0    0    0    0    0
##  [7,] 0.0939143501 0.5815177 0.29752066 0.0270473328    0    0    0    0    0
##  [8,] 0.0480841473 0.5377536 0.37121212 0.0429501628    0    0    0    0    0
##  [9,] 0.0202854996 0.4748310 0.44077135 0.0641121963    0    0    0    0    0
## [10,] 0.0060105184 0.4006386 0.50206612 0.0912847483    0    0    0    0    0
## [11,] 0.0007513148 0.3230654 0.55096419 0.1252191335    0    0    0    0    0
## [12,] 0.0000000000 0.2500000 0.58333333 0.1666666667    0    0    0    0    0
##       [,10] [,11] [,12]
##  [1,]     0     0     0
##  [2,]     0     0     0
##  [3,]     0     0     0
##  [4,]     0     0     0
##  [5,]     0     0     0
##  [6,]     0     0     0
##  [7,]     0     0     0
##  [8,]     0     0     0
##  [9,]     0     0     0
## [10,]     0     0     0
## [11,]     0     0     0
## [12,]     0     0     0
tail(B, 12)
##        [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8]         [,9]      [,10]
##  [89,]    0    0    0    0    0    0    0    0 0.1666666667 0.58333333
##  [90,]    0    0    0    0    0    0    0    0 0.1252191335 0.55096419
##  [91,]    0    0    0    0    0    0    0    0 0.0912847483 0.50206612
##  [92,]    0    0    0    0    0    0    0    0 0.0641121963 0.44077135
##  [93,]    0    0    0    0    0    0    0    0 0.0429501628 0.37121212
##  [94,]    0    0    0    0    0    0    0    0 0.0270473328 0.29752066
##  [95,]    0    0    0    0    0    0    0    0 0.0156523917 0.22382920
##  [96,]    0    0    0    0    0    0    0    0 0.0080140245 0.15426997
##  [97,]    0    0    0    0    0    0    0    0 0.0033809166 0.09297521
##  [98,]    0    0    0    0    0    0    0    0 0.0010017531 0.04407713
##  [99,]    0    0    0    0    0    0    0    0 0.0001252191 0.01170799
## [100,]    0    0    0    0    0    0    0    0 0.0000000000 0.00000000
##            [,11]        [,12]
##  [89,] 0.2500000 0.0000000000
##  [90,] 0.3230654 0.0007513148
##  [91,] 0.4006386 0.0060105184
##  [92,] 0.4748310 0.0202854996
##  [93,] 0.5377536 0.0480841473
##  [94,] 0.5815177 0.0939143501
##  [95,] 0.5982344 0.1622839970
##  [96,] 0.5800150 0.2577009767
##  [97,] 0.5189707 0.3846731781
##  [98,] 0.4072126 0.5477084899
##  [99,] 0.2368520 0.7513148009
## [100,] 0.0000000 1.0000000000

Plot the matrix B, then For the first 4 column, i.e the first 4 knots, it has values at 11 rows. It corresponds the back curve (up to 1). Then, the matrix 4x11 is moved until at the end of matrix B. Each block corresponds to each colorful curves. The last bock correspond to purple curve. (up to 1)

plot(range(t), c(0,1), type = "n", xlab = "x", ylab = "",
     main =  "B-splines at order = 4 - sum to 1 inside inner knots")
#mtext(expression(B[j](x) *"  and "* sum(B[j](x), j == 1, 6)), adj = 0)
abline(v = lambda, lty = 3, col = "light gray")
abline(v = lambda[c(4,length(lambda)-3)], lty = 3, col = "gray10")
#lines(x, rowSums(bb), col = "gray", lwd = 2)
matlines(t, B, ylim = c(0,1), lty = 1)

3.3 Matrix W

  W = diag(w)
dim(W)
## [1] 100 100

3.4. Create all B-splines up to order \(k+1 = 4\)

BB is a matrix to store all B-splines at knots l, evaluated at vector partition, order k.i.e \[ \boldsymbol{B}_{k+1} \]

  parnition = seq(min(lambda), max(lambda), length = 100)
head(  parnition, 20 )
##  [1] -4.700000 -4.605051 -4.510101 -4.415152 -4.320202 -4.225253 -4.130303
##  [8] -4.035354 -3.940404 -3.845455 -3.750505 -3.655556 -3.560606 -3.465657
## [15] -3.370707 -3.275758 -3.180808 -3.085859 -2.990909 -2.895960
  lambda_index = c(0:(r - 1))
  lambda_index
##  [1] 0 1 2 3 4 5 6 7 8 9

The lambda_index indicates the below knots

\[ \lambda_{0}=-4.7=u<\lambda_{1}=-3.66<\cdots<\lambda_{8}=3.66<v=4.7=\dot{\lambda}_{9} \]

g = lambda_index[length(lambda_index) - 1]
g
## [1] 8
k
## [1] 4
  N = g + (k - 1) + 1
  N
## [1] 12

Then \(g\) indicates the last inside knot, here, \(\lambda_8\).

Similar as above, \(N\) indicates the number of B-splines basic at order \(k=4\) given 8 insides knots. We then have a total of 16 knots (inside knots, border knots and extra knots). We have

\[Celkova_Delka = 2 * (k - 1) + r = length(lambda) \] The number of B-spline basis from splineDesign() is \[length(lambda)- ord = length(lambda)- k = 2 * (k - 1) + r - k = k+r -2 \] On the other sides, given \(r\) knots, there are \(r-2\) inside knots, i.e \(g = r-2\). Then, \[ N = g + (k - 1) + 1 = r - 2 +(k - 1) + 1 =r+k-2 \] Below, they create a B-splines, at order \(k\) and given values \(t = parnition = seq(min(lambda), max(lambda), length = 100)\). Check value \(l\) for the next chunk

  l = c()
  for (i in (1:N)) {
    for (j in 1:(k + 1)) {
      l[j] = lambda[i + j - 1]
      print(c(i , j, round(l, 1)))
    }
  }
## [1]  1.0  1.0 -4.7
## [1]  1.0  2.0 -4.7 -4.7
## [1]  1.0  3.0 -4.7 -4.7 -4.7
## [1]  1.0  4.0 -4.7 -4.7 -4.7 -4.7
## [1]  1.0  5.0 -4.7 -4.7 -4.7 -4.7 -3.7
## [1]  2.0  1.0 -4.7 -4.7 -4.7 -4.7 -3.7
## [1]  2.0  2.0 -4.7 -4.7 -4.7 -4.7 -3.7
## [1]  2.0  3.0 -4.7 -4.7 -4.7 -4.7 -3.7
## [1]  2.0  4.0 -4.7 -4.7 -4.7 -3.7 -3.7
## [1]  2.0  5.0 -4.7 -4.7 -4.7 -3.7 -2.6
## [1]  3.0  1.0 -4.7 -4.7 -4.7 -3.7 -2.6
## [1]  3.0  2.0 -4.7 -4.7 -4.7 -3.7 -2.6
## [1]  3.0  3.0 -4.7 -4.7 -3.7 -3.7 -2.6
## [1]  3.0  4.0 -4.7 -4.7 -3.7 -2.6 -2.6
## [1]  3.0  5.0 -4.7 -4.7 -3.7 -2.6 -1.6
## [1]  4.0  1.0 -4.7 -4.7 -3.7 -2.6 -1.6
## [1]  4.0  2.0 -4.7 -3.7 -3.7 -2.6 -1.6
## [1]  4.0  3.0 -4.7 -3.7 -2.6 -2.6 -1.6
## [1]  4.0  4.0 -4.7 -3.7 -2.6 -1.6 -1.6
## [1]  4.0  5.0 -4.7 -3.7 -2.6 -1.6 -0.5
## [1]  5.0  1.0 -3.7 -3.7 -2.6 -1.6 -0.5
## [1]  5.0  2.0 -3.7 -2.6 -2.6 -1.6 -0.5
## [1]  5.0  3.0 -3.7 -2.6 -1.6 -1.6 -0.5
## [1]  5.0  4.0 -3.7 -2.6 -1.6 -0.5 -0.5
## [1]  5.0  5.0 -3.7 -2.6 -1.6 -0.5  0.5
## [1]  6.0  1.0 -2.6 -2.6 -1.6 -0.5  0.5
## [1]  6.0  2.0 -2.6 -1.6 -1.6 -0.5  0.5
## [1]  6.0  3.0 -2.6 -1.6 -0.5 -0.5  0.5
## [1]  6.0  4.0 -2.6 -1.6 -0.5  0.5  0.5
## [1]  6.0  5.0 -2.6 -1.6 -0.5  0.5  1.6
## [1]  7.0  1.0 -1.6 -1.6 -0.5  0.5  1.6
## [1]  7.0  2.0 -1.6 -0.5 -0.5  0.5  1.6
## [1]  7.0  3.0 -1.6 -0.5  0.5  0.5  1.6
## [1]  7.0  4.0 -1.6 -0.5  0.5  1.6  1.6
## [1]  7.0  5.0 -1.6 -0.5  0.5  1.6  2.6
## [1]  8.0  1.0 -0.5 -0.5  0.5  1.6  2.6
## [1]  8.0  2.0 -0.5  0.5  0.5  1.6  2.6
## [1]  8.0  3.0 -0.5  0.5  1.6  1.6  2.6
## [1]  8.0  4.0 -0.5  0.5  1.6  2.6  2.6
## [1]  8.0  5.0 -0.5  0.5  1.6  2.6  3.7
## [1] 9.0 1.0 0.5 0.5 1.6 2.6 3.7
## [1] 9.0 2.0 0.5 1.6 1.6 2.6 3.7
## [1] 9.0 3.0 0.5 1.6 2.6 2.6 3.7
## [1] 9.0 4.0 0.5 1.6 2.6 3.7 3.7
## [1] 9.0 5.0 0.5 1.6 2.6 3.7 4.7
## [1] 10.0  1.0  1.6  1.6  2.6  3.7  4.7
## [1] 10.0  2.0  1.6  2.6  2.6  3.7  4.7
## [1] 10.0  3.0  1.6  2.6  3.7  3.7  4.7
## [1] 10.0  4.0  1.6  2.6  3.7  4.7  4.7
## [1] 10.0  5.0  1.6  2.6  3.7  4.7  4.7
## [1] 11.0  1.0  2.6  2.6  3.7  4.7  4.7
## [1] 11.0  2.0  2.6  3.7  3.7  4.7  4.7
## [1] 11.0  3.0  2.6  3.7  4.7  4.7  4.7
## [1] 11.0  4.0  2.6  3.7  4.7  4.7  4.7
## [1] 11.0  5.0  2.6  3.7  4.7  4.7  4.7
## [1] 12.0  1.0  3.7  3.7  4.7  4.7  4.7
## [1] 12.0  2.0  3.7  4.7  4.7  4.7  4.7
## [1] 12.0  3.0  3.7  4.7  4.7  4.7  4.7
## [1] 12.0  4.0  3.7  4.7  4.7  4.7  4.7
## [1] 12.0  5.0  3.7  4.7  4.7  4.7  4.7

From the above results, given i and j, the vector \(l\) has 1, 2, 3 or 4 knots (the most common). Then, they use the vector \(l\) knots to create B-splines basis, at order 4 and value parnition. Each B-spline is stored in matrix BB.

Question: Where do we apply matrix BB????? Answer: BB is use to plot the ZB-spline basis system, see again at the end of this file.

N 
## [1] 12
BB = array(0, c(length(parnition), N))
  l = c()
  for (i in (1:N)) {
    for (j in 1:(k + 1)) {
      l[j] = lambda[i + j - 1]
    }
    BB[, i] = splineDesign(l, parnition, k, outer.ok = TRUE)
  }
dim(BB)
## [1] 100  12

see again BB, seems to be simlar to B!!!, plot below

head(BB, 12)
##               [,1]      [,2]       [,3]         [,4] [,5] [,6] [,7] [,8] [,9]
##  [1,] 1.0000000000 0.0000000 0.00000000 0.0000000000    0    0    0    0    0
##  [2,] 0.7513148009 0.2368520 0.01170799 0.0001252191    0    0    0    0    0
##  [3,] 0.5477084899 0.4072126 0.04407713 0.0010017531    0    0    0    0    0
##  [4,] 0.3846731781 0.5189707 0.09297521 0.0033809166    0    0    0    0    0
##  [5,] 0.2577009767 0.5800150 0.15426997 0.0080140245    0    0    0    0    0
##  [6,] 0.1622839970 0.5982344 0.22382920 0.0156523917    0    0    0    0    0
##  [7,] 0.0939143501 0.5815177 0.29752066 0.0270473328    0    0    0    0    0
##  [8,] 0.0480841473 0.5377536 0.37121212 0.0429501628    0    0    0    0    0
##  [9,] 0.0202854996 0.4748310 0.44077135 0.0641121963    0    0    0    0    0
## [10,] 0.0060105184 0.4006386 0.50206612 0.0912847483    0    0    0    0    0
## [11,] 0.0007513148 0.3230654 0.55096419 0.1252191335    0    0    0    0    0
## [12,] 0.0000000000 0.2500000 0.58333333 0.1666666667    0    0    0    0    0
##       [,10] [,11] [,12]
##  [1,]     0     0     0
##  [2,]     0     0     0
##  [3,]     0     0     0
##  [4,]     0     0     0
##  [5,]     0     0     0
##  [6,]     0     0     0
##  [7,]     0     0     0
##  [8,]     0     0     0
##  [9,]     0     0     0
## [10,]     0     0     0
## [11,]     0     0     0
## [12,]     0     0     0

3.5. Check the order of derivative, Collocaton matrix.

Recall collocaton matrix \[ \begin{aligned} &\mathbf{B}_{k+1}(\mathbf{x})=\left(B_{i}^{k+1}\left(x_{j}\right)\right)_{j=1, i=-k}^{n, g} \\ &\mathbf{C}_{k+1}(\mathbf{x})=\left(\begin{array}{ccc} B_{-k}^{k+1}\left(x_{1}\right) & \cdots & B_{g}^{k+1}\left(x_{1}\right) \\ \vdots & \ddots & \vdots \\ B_{-k}^{k+1}\left(x_{n}\right) & \cdots & B_{g}^{k+1}\left(x_{n}\right) \end{array}\right) \in \mathbb{R}^{n, g+k+1} \end{aligned} \]

length(t) <= N
## [1] FALSE
qr(B)$rank != N
## [1] FALSE
  if (length(t) <= N) 
    stop("length(t) must be higher then Dimension(space of splines)")
  if (qr(B)$rank != N) 
    stop("Collocaton matrix does not have full column rank.")

3.6. Create matrix the Upper triangular matrix \(S\)

Matrix \(S_l\), with \(l\) is the \(l\)th derivative in the below equation

\[J_{l}\left(s_{k}\right)=(1-\alpha) \int_{a}^{b}\left[s_{k}^{(l)}(x)\right]^{2} \mathrm{~d} x+\alpha \sum_{i=1}^{n} w_{i}\left[y_{i}-s_{k}\left(x_{i}\right)\right]^{2}\]

3.6.1 The general form of \(S_l\)

\[ \mathbf{S}_{l}=\mathbf{D}_{l} \mathbf{L}_{l} \ldots \mathbf{D}_{1} \mathbf{L}_{1} \in \mathbb{R}^{g+k+1-l, g+k+1} \]

where \[ \mathbf{D}_{j}=(k+1-j) \operatorname{diag}\left(d_{-k+j}, \ldots, d_{g}\right) \] with \[ d_{i}=\frac{1}{\lambda_{i+k+1-j}-\lambda_{i}}, \quad i=-k+j, \ldots, g \] and \[ \mathbf{L}_{j}:=\left(\begin{array}{rrrr} -1 & 1 & & \\ & \ddots & \ddots & \\ & & -1 & 1 \end{array}\right) \in \mathbb{R}^{g+k+1-j, g+k+2-j} \]

3.6.2 The form of \(S_l\) when \(l=2\).

\[ \mathbf{S}_{2}=\mathbf{D}_{2} \mathbf{L}_{2} \mathbf{D}_{1} \mathbf{L}_{1} \in \mathbb{R}^{g+k+1-2, g+k+1} = \mathbb{R}^{g+k-1, g+k+1} \]

where

\[ \begin{align} &\mathbf{D}_{1}=(k+1-1) \operatorname{diag}\left(d_{-k+1}, \ldots, d_{g}\right) = k \operatorname{diag}\left(d_{-k+1}, \ldots, d_{g}\right),\quad d_{i}=\frac{1}{\lambda_{i+k+1-1}-\lambda_{i}}= \frac{1}{\lambda_{i+k}-\lambda_{i}}, \quad i=-k+1, \ldots, g\\ & \mathbf{D}_{2}=(k+1-2) \operatorname{diag}\left(d_{-k+2}, \ldots, d_{g}\right) = (k-1) \operatorname{diag}\left(d_{-k+2}, \ldots, d_{g}\right), \quad d_{i}=\frac{1}{\lambda_{i+k+1-2}-\lambda_{i}}= \frac{1}{\lambda_{i+k-1}-\lambda_{i}}, \quad i=-k+2, \ldots, g \end{align} \]

3.6.3 Check the code with \(l = der = 2\)

#S = array(0)
S_pom = diag(1, N, N)
    
for (j in 1:der) {
      D_mat = array(0)
      rozdil = lambda[(1 + k):(N + k - j)] - lambda[(1 +   j):(N)]
      D_mat = (k - j) * diag(1/rozdil)
      L_mat = array(0, c(N - j, N - j + 1))
          for (J in (1:(N - j))) {
              L_mat[J, J] = (-1)
              L_mat[J, J + 1] = 1
            }
      S_pom = D_mat %*% L_mat %*% S_pom
    }
    S = S_pom
    dim(S)
## [1] 10 12

The following code, we see the matrix D and matrix L, at value \(j = 1\)

S_pom = diag(1, N, N)
j = 1
D_mat = array(0)
rozdil = lambda[(1 + k):(N + k - j)] - lambda[(1 +   j):(N)]
D_mat = (k - j) * diag(1/rozdil)
L_mat = array(0, c(N - j, N - j + 1))
          for (J in (1:(N - j))) {
              L_mat[J, J] = (-1)
              L_mat[J, J + 1] = 1
          }
#print matrix
D_mat
##          [,1]    [,2]      [,3]      [,4]      [,5]      [,6]      [,7]
##  [1,] 2.87234 0.00000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000
##  [2,] 0.00000 1.43617 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000
##  [3,] 0.00000 0.00000 0.9574468 0.0000000 0.0000000 0.0000000 0.0000000
##  [4,] 0.00000 0.00000 0.0000000 0.9574468 0.0000000 0.0000000 0.0000000
##  [5,] 0.00000 0.00000 0.0000000 0.0000000 0.9574468 0.0000000 0.0000000
##  [6,] 0.00000 0.00000 0.0000000 0.0000000 0.0000000 0.9574468 0.0000000
##  [7,] 0.00000 0.00000 0.0000000 0.0000000 0.0000000 0.0000000 0.9574468
##  [8,] 0.00000 0.00000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000
##  [9,] 0.00000 0.00000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000
## [10,] 0.00000 0.00000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000
## [11,] 0.00000 0.00000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000
##            [,8]      [,9]   [,10]   [,11]
##  [1,] 0.0000000 0.0000000 0.00000 0.00000
##  [2,] 0.0000000 0.0000000 0.00000 0.00000
##  [3,] 0.0000000 0.0000000 0.00000 0.00000
##  [4,] 0.0000000 0.0000000 0.00000 0.00000
##  [5,] 0.0000000 0.0000000 0.00000 0.00000
##  [6,] 0.0000000 0.0000000 0.00000 0.00000
##  [7,] 0.0000000 0.0000000 0.00000 0.00000
##  [8,] 0.9574468 0.0000000 0.00000 0.00000
##  [9,] 0.0000000 0.9574468 0.00000 0.00000
## [10,] 0.0000000 0.0000000 1.43617 0.00000
## [11,] 0.0000000 0.0000000 0.00000 2.87234
L_mat
##       [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11] [,12]
##  [1,]   -1    1    0    0    0    0    0    0    0     0     0     0
##  [2,]    0   -1    1    0    0    0    0    0    0     0     0     0
##  [3,]    0    0   -1    1    0    0    0    0    0     0     0     0
##  [4,]    0    0    0   -1    1    0    0    0    0     0     0     0
##  [5,]    0    0    0    0   -1    1    0    0    0     0     0     0
##  [6,]    0    0    0    0    0   -1    1    0    0     0     0     0
##  [7,]    0    0    0    0    0    0   -1    1    0     0     0     0
##  [8,]    0    0    0    0    0    0    0   -1    1     0     0     0
##  [9,]    0    0    0    0    0    0    0    0   -1     1     0     0
## [10,]    0    0    0    0    0    0    0    0    0    -1     1     0
## [11,]    0    0    0    0    0    0    0    0    0     0    -1     1

The following code, we see the matrix D and matrix L, at value \(j = 2\)

S_pom = diag(1, N, N)
j = 2
D_mat = array(0)
rozdil = lambda[(1 + k):(N + k - j)] - lambda[(1 +   j):(N)]
D_mat = (k - j) * diag(1/rozdil)
L_mat = array(0, c(N - j, N - j + 1))
          for (J in (1:(N - j))) {
              L_mat[J, J] = (-1)
              L_mat[J, J + 1] = 1
          }
#print matrix
D_mat
##           [,1]      [,2]      [,3]      [,4]      [,5]      [,6]      [,7]
##  [1,] 1.914894 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000
##  [2,] 0.000000 0.9574468 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000
##  [3,] 0.000000 0.0000000 0.9574468 0.0000000 0.0000000 0.0000000 0.0000000
##  [4,] 0.000000 0.0000000 0.0000000 0.9574468 0.0000000 0.0000000 0.0000000
##  [5,] 0.000000 0.0000000 0.0000000 0.0000000 0.9574468 0.0000000 0.0000000
##  [6,] 0.000000 0.0000000 0.0000000 0.0000000 0.0000000 0.9574468 0.0000000
##  [7,] 0.000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.9574468
##  [8,] 0.000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000
##  [9,] 0.000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000
## [10,] 0.000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000
##            [,8]      [,9]    [,10]
##  [1,] 0.0000000 0.0000000 0.000000
##  [2,] 0.0000000 0.0000000 0.000000
##  [3,] 0.0000000 0.0000000 0.000000
##  [4,] 0.0000000 0.0000000 0.000000
##  [5,] 0.0000000 0.0000000 0.000000
##  [6,] 0.0000000 0.0000000 0.000000
##  [7,] 0.0000000 0.0000000 0.000000
##  [8,] 0.9574468 0.0000000 0.000000
##  [9,] 0.0000000 0.9574468 0.000000
## [10,] 0.0000000 0.0000000 1.914894
L_mat
##       [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11]
##  [1,]   -1    1    0    0    0    0    0    0    0     0     0
##  [2,]    0   -1    1    0    0    0    0    0    0     0     0
##  [3,]    0    0   -1    1    0    0    0    0    0     0     0
##  [4,]    0    0    0   -1    1    0    0    0    0     0     0
##  [5,]    0    0    0    0   -1    1    0    0    0     0     0
##  [6,]    0    0    0    0    0   -1    1    0    0     0     0
##  [7,]    0    0    0    0    0    0   -1    1    0     0     0
##  [8,]    0    0    0    0    0    0    0   -1    1     0     0
##  [9,]    0    0    0    0    0    0    0    0   -1     1     0
## [10,]    0    0    0    0    0    0    0    0    0    -1     1

3.7 Prepare matrix $M_{kl} = M_{3,2} $

Recall matrix \(M_{kl}\) is \[ \mathbf{M}_{k l}=\left(m_{i j}^{k l}\right)_{i, j=-k+l}^{g}, \quad \text { with } \quad m_{i j}^{k l}=\int_{a}^{b} B_{i}^{k+1-l}(x) B_{j}^{k+1-l}(x) \mathrm{d} x \] In the below code, kk means \(kk = k+1 - l\). However, as Christine reminding, we usually work with \(l = 2.\)

Then, given order kk, we need a total of celkova_delka knots (inside knots, border knots and extra knots )

kk = k - der
kk
## [1] 2
  celkova_delka = 2 * (kk - 1) + r
   celkova_delka 
## [1] 12

The below code create a total knots for B-spline order \(kk\)!!! They create extra knots based on the given Lambda knots (including inside knots and border knots).

  Lambda = c()
  for (i in 1:celkova_delka) {
    if (i <= (kk - 1)) {
      Lambda[i] = knots[1]
    }
    if ((i > kk - 1) && (i <= r + kk - 1)) {
      Lambda[i] = knots[i - (kk - 1)]
    }
    if (i > (r + (kk - 1))) {
      Lambda[i] = knots[r]
    }
  }
Lambda
##  [1] -4.7000000 -4.7000000 -3.6555556 -2.6111111 -1.5666667 -0.5222222
##  [7]  0.5222222  1.5666667  2.6111111  3.6555556  4.7000000  4.7000000

correspond to

\[ \begin{aligned} &\Delta \lambda:=\lambda_{0}=-4.7=u<\lambda_{1}=-3.66<\cdots<\lambda_{8}=3.66<v=4.7=\dot{\lambda}_{9} \\ &\lambda_{-1}=\lambda_{0}=-4.7, \quad \lambda_{9} = \lambda_{10}=4.7 \end{aligned} \] The following code create a B-spline at order kk based on Lambda knots.

 Parnition = seq(min(Lambda), max(Lambda), length = 100)
 BBB = splineDesign(Lambda, Parnition, kk, outer.ok = TRUE)

 dim(BBB)
## [1] 100  10

plot the BBB basic, it is correct since they are at order \(kk=1.\)

plot(range(Parnition), c(0,1), type = "n", xlab = "x", ylab = "",
     main =  "B-splines at order kk = 1, using knots Lambda")
#mtext(expression(B[j](x) *"  and "* sum(B[j](x), j == 1, 6)), adj = 0)
abline(v =  Lambda, lty = 3, col = "light gray")
abline(v =  Lambda[c(4,length(Lambda)-3)], lty = 3, col = "gray10")
#lines(x, rowSums(bb), col = "gray", lwd = 2)
matlines(Parnition, BBB, ylim = c(0,1), lty = 1)

The following code finishes the calculation of M

\[ m_{i j}^{k l}=\int_{a}^{b} B_{i}^{k+1-l}(x) B_{j}^{k+1-l}(x) \mathrm{d} x \]

     Lambda_index = c(0:(r - 1)) 
  G = Lambda_index[length(Lambda_index) - 1]
  NN = G + (kk - 1) + 1
  step = diff(Parnition[1:2])
  M = array(0, c(NN, NN))
  for (i in 1:NN) {
    for (j in 1:NN) {
      nenulove = c()
      soucin = BBB[, i] * BBB[, j]
      for (m in 1:length(Parnition)) {
        if (soucin[m] != 0) {
          nenulove[m] = soucin[m]
        }
      }
      M[i, j] = trapzc(step, soucin)
    }
  }
  M
##            [,1]      [,2]      [,3]      [,4]      [,5]      [,6]      [,7]
##  [1,] 0.3495868 0.1726354 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000
##  [2,] 0.1726354 0.6991736 0.1726354 0.0000000 0.0000000 0.0000000 0.0000000
##  [3,] 0.0000000 0.1726354 0.6991736 0.1726354 0.0000000 0.0000000 0.0000000
##  [4,] 0.0000000 0.0000000 0.1726354 0.6991736 0.1726354 0.0000000 0.0000000
##  [5,] 0.0000000 0.0000000 0.0000000 0.1726354 0.6991736 0.1726354 0.0000000
##  [6,] 0.0000000 0.0000000 0.0000000 0.0000000 0.1726354 0.6991736 0.1726354
##  [7,] 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.1726354 0.6991736
##  [8,] 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.1726354
##  [9,] 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000
## [10,] 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000
##            [,8]      [,9]     [,10]
##  [1,] 0.0000000 0.0000000 0.0000000
##  [2,] 0.0000000 0.0000000 0.0000000
##  [3,] 0.0000000 0.0000000 0.0000000
##  [4,] 0.0000000 0.0000000 0.0000000
##  [5,] 0.0000000 0.0000000 0.0000000
##  [6,] 0.0000000 0.0000000 0.0000000
##  [7,] 0.1726354 0.0000000 0.0000000
##  [8,] 0.6991736 0.1726354 0.0000000
##  [9,] 0.1726354 0.6991736 0.1726354
## [10,] 0.0000000 0.1726354 0.3495868

4. Find the optimal function

4.1 Create matrix D, K, U and G

\[ \mathbf{D}_{j}=(k+1-j) \operatorname{diag}\left(d_{-k+j}, \ldots, d_{g}\right) \] with \[ d_{i}=\frac{1}{\lambda_{i+k+1-j}-\lambda_{i}}, \quad i=-k+j, \ldots, g \]

difference = lambda[(1 + k):(r + 2 * (k - 1))] - lambda[(1:(r +  k - 2))]
D = (k) * diag(1/difference)
K = array(0, c(N, N - 1))
K[1, 1] = 1
K[N, N - 1] = -1
for (j in (2:(N - 1))) {
  K[j, j - 1] = (-1)
  K[j, j] = 1
}
# See matrix D and matrix K
D
##           [,1]     [,2]     [,3]      [,4]      [,5]      [,6]      [,7]
##  [1,] 3.829787 0.000000 0.000000 0.0000000 0.0000000 0.0000000 0.0000000
##  [2,] 0.000000 1.914894 0.000000 0.0000000 0.0000000 0.0000000 0.0000000
##  [3,] 0.000000 0.000000 1.276596 0.0000000 0.0000000 0.0000000 0.0000000
##  [4,] 0.000000 0.000000 0.000000 0.9574468 0.0000000 0.0000000 0.0000000
##  [5,] 0.000000 0.000000 0.000000 0.0000000 0.9574468 0.0000000 0.0000000
##  [6,] 0.000000 0.000000 0.000000 0.0000000 0.0000000 0.9574468 0.0000000
##  [7,] 0.000000 0.000000 0.000000 0.0000000 0.0000000 0.0000000 0.9574468
##  [8,] 0.000000 0.000000 0.000000 0.0000000 0.0000000 0.0000000 0.0000000
##  [9,] 0.000000 0.000000 0.000000 0.0000000 0.0000000 0.0000000 0.0000000
## [10,] 0.000000 0.000000 0.000000 0.0000000 0.0000000 0.0000000 0.0000000
## [11,] 0.000000 0.000000 0.000000 0.0000000 0.0000000 0.0000000 0.0000000
## [12,] 0.000000 0.000000 0.000000 0.0000000 0.0000000 0.0000000 0.0000000
##            [,8]      [,9]    [,10]    [,11]    [,12]
##  [1,] 0.0000000 0.0000000 0.000000 0.000000 0.000000
##  [2,] 0.0000000 0.0000000 0.000000 0.000000 0.000000
##  [3,] 0.0000000 0.0000000 0.000000 0.000000 0.000000
##  [4,] 0.0000000 0.0000000 0.000000 0.000000 0.000000
##  [5,] 0.0000000 0.0000000 0.000000 0.000000 0.000000
##  [6,] 0.0000000 0.0000000 0.000000 0.000000 0.000000
##  [7,] 0.0000000 0.0000000 0.000000 0.000000 0.000000
##  [8,] 0.9574468 0.0000000 0.000000 0.000000 0.000000
##  [9,] 0.0000000 0.9574468 0.000000 0.000000 0.000000
## [10,] 0.0000000 0.0000000 1.276596 0.000000 0.000000
## [11,] 0.0000000 0.0000000 0.000000 1.914894 0.000000
## [12,] 0.0000000 0.0000000 0.000000 0.000000 3.829787
K
##       [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11]
##  [1,]    1    0    0    0    0    0    0    0    0     0     0
##  [2,]   -1    1    0    0    0    0    0    0    0     0     0
##  [3,]    0   -1    1    0    0    0    0    0    0     0     0
##  [4,]    0    0   -1    1    0    0    0    0    0     0     0
##  [5,]    0    0    0   -1    1    0    0    0    0     0     0
##  [6,]    0    0    0    0   -1    1    0    0    0     0     0
##  [7,]    0    0    0    0    0   -1    1    0    0     0     0
##  [8,]    0    0    0    0    0    0   -1    1    0     0     0
##  [9,]    0    0    0    0    0    0    0   -1    1     0     0
## [10,]    0    0    0    0    0    0    0    0   -1     1     0
## [11,]    0    0    0    0    0    0    0    0    0    -1     1
## [12,]    0    0    0    0    0    0    0    0    0     0    -1

Then, Using the notation \[\mathbf{U}:=\mathbf{D K}\]

U = D %*% K
U
##            [,1]      [,2]       [,3]       [,4]       [,5]       [,6]
##  [1,]  3.829787  0.000000  0.0000000  0.0000000  0.0000000  0.0000000
##  [2,] -1.914894  1.914894  0.0000000  0.0000000  0.0000000  0.0000000
##  [3,]  0.000000 -1.276596  1.2765957  0.0000000  0.0000000  0.0000000
##  [4,]  0.000000  0.000000 -0.9574468  0.9574468  0.0000000  0.0000000
##  [5,]  0.000000  0.000000  0.0000000 -0.9574468  0.9574468  0.0000000
##  [6,]  0.000000  0.000000  0.0000000  0.0000000 -0.9574468  0.9574468
##  [7,]  0.000000  0.000000  0.0000000  0.0000000  0.0000000 -0.9574468
##  [8,]  0.000000  0.000000  0.0000000  0.0000000  0.0000000  0.0000000
##  [9,]  0.000000  0.000000  0.0000000  0.0000000  0.0000000  0.0000000
## [10,]  0.000000  0.000000  0.0000000  0.0000000  0.0000000  0.0000000
## [11,]  0.000000  0.000000  0.0000000  0.0000000  0.0000000  0.0000000
## [12,]  0.000000  0.000000  0.0000000  0.0000000  0.0000000  0.0000000
##             [,7]       [,8]       [,9]     [,10]     [,11]
##  [1,]  0.0000000  0.0000000  0.0000000  0.000000  0.000000
##  [2,]  0.0000000  0.0000000  0.0000000  0.000000  0.000000
##  [3,]  0.0000000  0.0000000  0.0000000  0.000000  0.000000
##  [4,]  0.0000000  0.0000000  0.0000000  0.000000  0.000000
##  [5,]  0.0000000  0.0000000  0.0000000  0.000000  0.000000
##  [6,]  0.0000000  0.0000000  0.0000000  0.000000  0.000000
##  [7,]  0.9574468  0.0000000  0.0000000  0.000000  0.000000
##  [8,] -0.9574468  0.9574468  0.0000000  0.000000  0.000000
##  [9,]  0.0000000 -0.9574468  0.9574468  0.000000  0.000000
## [10,]  0.0000000  0.0000000 -1.2765957  1.276596  0.000000
## [11,]  0.0000000  0.0000000  0.0000000 -1.914894  1.914894
## [12,]  0.0000000  0.0000000  0.0000000  0.000000 -3.829787

Then, calculate matrix G \[ \mathbf{G}:=\mathbf{U}^{\top}\left[(1-\alpha) \mathbf{S}_{l}^{\top} \mathbf{M}_{k l} \mathbf{S}_{l}+\alpha \mathbf{B}_{k+1}^{\top}(\mathbf{x}) \mathbf{W B}_{k+1}(\mathbf{x})\right] \mathbf{U} \]

alpha = 0.1
GG = t(U) %*% ((1 - alpha) * t(S) %*% M %*% S + alpha * t(B) %*%  W %*% B) %*% U
GG
##               [,1]         [,2]        [,3]       [,4]       [,5]       [,6]
##  [1,]  401.7740172 -192.9462243  22.6010279  4.6493415 -0.3590781  0.0000000
##  [2,] -192.9462243  102.2455183 -18.9656547 -0.5386241  0.5901640 -0.1595903
##  [3,]   22.6010279  -18.9656547  10.4509909 -4.2926564  0.8739103  0.2730583
##  [4,]    4.6493415   -0.5386241  -4.2926564  6.1091276 -4.1595600  0.9915281
##  [5,]   -0.3590781    0.5901640   0.8739103 -4.1595600  6.1091276 -4.1595600
##  [6,]    0.0000000   -0.1595903   0.2730583  0.9915281 -4.1595600  6.1091276
##  [7,]    0.0000000    0.0000000  -0.1196927  0.2331608  0.9915281 -4.1595600
##  [8,]    0.0000000    0.0000000   0.0000000 -0.1196927  0.2331608  0.9915281
##  [9,]    0.0000000    0.0000000   0.0000000  0.0000000 -0.1196927  0.2730583
## [10,]    0.0000000    0.0000000   0.0000000  0.0000000  0.0000000 -0.1595903
## [11,]    0.0000000    0.0000000   0.0000000  0.0000000  0.0000000  0.0000000
##             [,7]       [,8]        [,9]        [,10]        [,11]
##  [1,]  0.0000000  0.0000000   0.0000000    0.0000000    0.0000000
##  [2,]  0.0000000  0.0000000   0.0000000    0.0000000    0.0000000
##  [3,] -0.1196927  0.0000000   0.0000000    0.0000000    0.0000000
##  [4,]  0.2331608 -0.1196927   0.0000000    0.0000000    0.0000000
##  [5,]  0.9915281  0.2331608  -0.1196927    0.0000000    0.0000000
##  [6,] -4.1595600  0.9915281   0.2730583   -0.1595903    0.0000000
##  [7,]  6.1091276 -4.1595600   0.8739103    0.5901640   -0.3590781
##  [8,] -4.1595600  6.1091276  -4.2926564   -0.5386241    4.6493415
##  [9,]  0.8739103 -4.2926564  10.4509909  -18.9656547   22.6010279
## [10,]  0.5901640 -0.5386241 -18.9656547  102.2455183 -192.9462243
## [11,] -0.3590781  4.6493415  22.6010279 -192.9462243  401.7740172

Then, calculate matrix \(g\) as below

\[ \mathbf{g}:=\alpha \mathbf{K}^{\top} \mathbf{D} \mathbf{B}_{k+1}^{\top}(\mathbf{x}) \mathbf{W} \mathbf{y} \]

gg = alpha * t(K) %*% t(D) %*% t(B) %*% W %*% clrf

Error!! Check again each matrix

alpha * t(K) %*% t(D) %*% t(B) %*% W # work!!
##              [,1]         [,2]         [,3]         [,4]          [,5]
##  [1,] 0.003829787 2.423829e-03 1.317838e-03 4.794427e-04 -1.237272e-04
##  [2,] 0.000000000 4.386000e-04 7.235002e-04 8.750819e-04  9.137267e-04
##  [3,] 0.000000000 1.482648e-05 5.530956e-05 1.154547e-04  1.892674e-04
##  [4,] 0.000000000 1.198907e-07 9.591253e-07 3.237048e-06  7.673002e-06
##  [5,] 0.000000000 0.000000e+00 0.000000e+00 0.000000e+00  0.000000e+00
##  [6,] 0.000000000 0.000000e+00 0.000000e+00 0.000000e+00  0.000000e+00
##  [7,] 0.000000000 0.000000e+00 0.000000e+00 0.000000e+00  0.000000e+00
##  [8,] 0.000000000 0.000000e+00 0.000000e+00 0.000000e+00  0.000000e+00
##  [9,] 0.000000000 0.000000e+00 0.000000e+00 0.000000e+00  0.000000e+00
## [10,] 0.000000000 0.000000e+00 0.000000e+00 0.000000e+00  0.000000e+00
## [11,] 0.000000000 0.000000e+00 0.000000e+00 0.000000e+00  0.000000e+00
##                [,6]          [,7]          [,8]          [,9]         [,10]
##  [1,] -5.240421e-04 -7.538725e-04 -0.0008455888 -8.315616e-04 -7.441613e-04
##  [2,]  8.598158e-04  7.337308e-04  0.0005558531  3.465639e-04  1.262449e-04
##  [3,]  2.707531e-04  3.539172e-04  0.0004327653  5.013028e-04  5.535352e-04
##  [4,]  1.498633e-05  2.589638e-05  0.0000411225  6.138402e-05  8.740029e-05
##  [5,]  0.000000e+00  0.000000e+00  0.0000000000  0.000000e+00  0.000000e+00
##  [6,]  0.000000e+00  0.000000e+00  0.0000000000  0.000000e+00  0.000000e+00
##  [7,]  0.000000e+00  0.000000e+00  0.0000000000  0.000000e+00  0.000000e+00
##  [8,]  0.000000e+00  0.000000e+00  0.0000000000  0.000000e+00  0.000000e+00
##  [9,]  0.000000e+00  0.000000e+00  0.0000000000  0.000000e+00  0.000000e+00
## [10,]  0.000000e+00  0.000000e+00  0.0000000000  0.000000e+00  0.000000e+00
## [11,]  0.000000e+00  0.000000e+00  0.0000000000  0.000000e+00  0.000000e+00
##               [,11]         [,12]         [,13]         [,14]         [,15]
##  [1,] -6.157584e-04 -0.0004787234 -3.596720e-04 -2.622009e-04 -1.841521e-04
##  [2,] -8.472273e-05 -0.0002659574 -4.013939e-04 -4.922311e-04 -5.439839e-04
##  [3,]  5.834679e-04  0.0005851064  5.543744e-04  4.948687e-04  4.121042e-04
##  [4,]  1.198907e-04  0.0001595745  2.065716e-04  2.586042e-04  3.127947e-04
##  [5,]  0.000000e+00  0.0000000000  1.198907e-07  9.591253e-07  3.237048e-06
##  [6,]  0.000000e+00  0.0000000000  0.000000e+00  0.000000e+00  0.000000e+00
##  [7,]  0.000000e+00  0.0000000000  0.000000e+00  0.000000e+00  0.000000e+00
##  [8,]  0.000000e+00  0.0000000000  0.000000e+00  0.000000e+00  0.000000e+00
##  [9,]  0.000000e+00  0.0000000000  0.000000e+00  0.000000e+00  0.000000e+00
## [10,]  0.000000e+00  0.0000000000  0.000000e+00  0.000000e+00  0.000000e+00
## [11,]  0.000000e+00  0.0000000000  0.000000e+00  0.000000e+00  0.000000e+00
##               [,16]         [,17]         [,18]         [,19]         [,20]
##  [1,] -1.233675e-04 -7.768915e-05 -4.495900e-05 -2.301901e-05 -9.711143e-06
##  [2,] -5.621673e-04 -5.522963e-04 -5.198859e-04 -4.704509e-04 -4.095065e-04
##  [3,]  3.115958e-04  1.988586e-04  7.940758e-05 -4.124239e-05 -1.575763e-04
##  [4,]  3.662660e-04  4.161405e-04  4.595409e-04  4.935898e-04  5.154099e-04
##  [5,]  7.673002e-06  1.498633e-05  2.589638e-05  4.112250e-05  6.138402e-05
##  [6,]  0.000000e+00  0.000000e+00  0.000000e+00  0.000000e+00  0.000000e+00
##  [7,]  0.000000e+00  0.000000e+00  0.000000e+00  0.000000e+00  0.000000e+00
##  [8,]  0.000000e+00  0.000000e+00  0.000000e+00  0.000000e+00  0.000000e+00
##  [9,]  0.000000e+00  0.000000e+00  0.000000e+00  0.000000e+00  0.000000e+00
## [10,]  0.000000e+00  0.000000e+00  0.000000e+00  0.000000e+00  0.000000e+00
## [11,]  0.000000e+00  0.000000e+00  0.000000e+00  0.000000e+00  0.000000e+00
##               [,21]         [,22]         [,23]         [,24]         [,25]
##  [1,] -2.877376e-06 -3.596720e-07  0.0000000000  0.000000e+00  0.000000e+00
##  [2,] -3.425676e-04 -2.751491e-04 -0.0002127660 -1.598542e-04 -1.165337e-04
##  [3,] -2.640792e-04 -3.552360e-04 -0.0004255319 -4.708905e-04 -4.929904e-04
##  [4,]  5.221238e-04  5.108541e-04  0.0004787234  4.240533e-04  3.499608e-04
##  [5,]  8.740029e-05  1.198907e-04  0.0001595745  2.065716e-04  2.586042e-04
##  [6,]  0.000000e+00  0.000000e+00  0.0000000000  1.198907e-07  9.591253e-07
##  [7,]  0.000000e+00  0.000000e+00  0.0000000000  0.000000e+00  0.000000e+00
##  [8,]  0.000000e+00  0.000000e+00  0.0000000000  0.000000e+00  0.000000e+00
##  [9,]  0.000000e+00  0.000000e+00  0.0000000000  0.000000e+00  0.000000e+00
## [10,]  0.000000e+00  0.000000e+00  0.0000000000  0.000000e+00  0.000000e+00
## [11,]  0.000000e+00  0.000000e+00  0.0000000000  0.000000e+00  0.000000e+00
##               [,26]         [,27]         [,28]         [,29]         [,30]
##  [1,]  0.000000e+00  0.000000e+00  0.000000e+00  0.000000e+00  0.000000e+00
##  [2,] -8.184536e-05 -5.483000e-05 -3.452851e-05 -1.998178e-05 -1.023067e-05
##  [3,] -4.949486e-04 -4.798823e-04 -4.509088e-04 -4.111450e-04 -3.637083e-04
##  [4,]  2.607622e-04  1.607734e-04  5.431047e-05 -5.431047e-05 -1.607734e-04
##  [5,]  3.127947e-04  3.662660e-04  4.161405e-04  4.595409e-04  4.935898e-04
##  [6,]  3.237048e-06  7.673002e-06  1.498633e-05  2.589638e-05  4.112250e-05
##  [7,]  0.000000e+00  0.000000e+00  0.000000e+00  0.000000e+00  0.000000e+00
##  [8,]  0.000000e+00  0.000000e+00  0.000000e+00  0.000000e+00  0.000000e+00
##  [9,]  0.000000e+00  0.000000e+00  0.000000e+00  0.000000e+00  0.000000e+00
## [10,]  0.000000e+00  0.000000e+00  0.000000e+00  0.000000e+00  0.000000e+00
## [11,]  0.000000e+00  0.000000e+00  0.000000e+00  0.000000e+00  0.000000e+00
##               [,31]         [,32]         [,33]         [,34]         [,35]
##  [1,]  0.000000e+00  0.000000e+00  0.000000e+00  0.000000e+00  0.000000e+00
##  [2,] -4.316064e-06 -1.278834e-06 -1.598542e-07 -1.635523e-50  0.000000e+00
##  [3,] -3.117157e-04 -2.582844e-04 -2.065316e-04 -1.595745e-04 -1.198907e-04
##  [4,] -2.607622e-04 -3.499608e-04 -4.240533e-04 -4.787234e-04 -5.108541e-04
##  [5,]  5.154099e-04  5.221238e-04  5.108541e-04  4.787234e-04  4.240533e-04
##  [6,]  6.138402e-05  8.740029e-05  1.198907e-04  1.595745e-04  2.065716e-04
##  [7,]  0.000000e+00  0.000000e+00  0.000000e+00  0.000000e+00  1.198907e-07
##  [8,]  0.000000e+00  0.000000e+00  0.000000e+00  0.000000e+00  0.000000e+00
##  [9,]  0.000000e+00  0.000000e+00  0.000000e+00  0.000000e+00  0.000000e+00
## [10,]  0.000000e+00  0.000000e+00  0.000000e+00  0.000000e+00  0.000000e+00
## [11,]  0.000000e+00  0.000000e+00  0.000000e+00  0.000000e+00  0.000000e+00
##               [,36]         [,37]         [,38]         [,39]         [,40]
##  [1,]  0.000000e+00  0.000000e+00  0.000000e+00  0.000000e+00  0.000000e+00
##  [2,]  0.000000e+00  0.000000e+00  0.000000e+00  0.000000e+00  0.000000e+00
##  [3,] -8.740029e-05 -6.138402e-05 -4.112250e-05 -2.589638e-05 -1.498633e-05
##  [4,] -5.221238e-04 -5.154099e-04 -4.935898e-04 -4.595409e-04 -4.161405e-04
##  [5,]  3.499608e-04  2.607622e-04  1.607734e-04  5.431047e-05 -5.431047e-05
##  [6,]  2.586042e-04  3.127947e-04  3.662660e-04  4.161405e-04  4.595409e-04
##  [7,]  9.591253e-07  3.237048e-06  7.673002e-06  1.498633e-05  2.589638e-05
##  [8,]  0.000000e+00  0.000000e+00  0.000000e+00  0.000000e+00  0.000000e+00
##  [9,]  0.000000e+00  0.000000e+00  0.000000e+00  0.000000e+00  0.000000e+00
## [10,]  0.000000e+00  0.000000e+00  0.000000e+00  0.000000e+00  0.000000e+00
## [11,]  0.000000e+00  0.000000e+00  0.000000e+00  0.000000e+00  0.000000e+00
##               [,41]         [,42]         [,43]         [,44]         [,45]
##  [1,]  0.000000e+00  0.000000e+00  0.000000e+00  0.000000e+00  0.0000000000
##  [2,]  0.000000e+00  0.000000e+00  0.000000e+00  0.000000e+00  0.0000000000
##  [3,] -7.673002e-06 -3.237048e-06 -9.591253e-07 -1.198907e-07  0.0000000000
##  [4,] -3.662660e-04 -3.127947e-04 -2.586042e-04 -2.065716e-04 -0.0001595745
##  [5,] -1.607734e-04 -2.607622e-04 -3.499608e-04 -4.240533e-04 -0.0004787234
##  [6,]  4.935898e-04  5.154099e-04  5.221238e-04  5.108541e-04  0.0004787234
##  [7,]  4.112250e-05  6.138402e-05  8.740029e-05  1.198907e-04  0.0001595745
##  [8,]  0.000000e+00  0.000000e+00  0.000000e+00  0.000000e+00  0.0000000000
##  [9,]  0.000000e+00  0.000000e+00  0.000000e+00  0.000000e+00  0.0000000000
## [10,]  0.000000e+00  0.000000e+00  0.000000e+00  0.000000e+00  0.0000000000
## [11,]  0.000000e+00  0.000000e+00  0.000000e+00  0.000000e+00  0.0000000000
##               [,46]         [,47]         [,48]         [,49]         [,50]
##  [1,]  0.000000e+00  0.000000e+00  0.000000e+00  0.000000e+00  0.000000e+00
##  [2,]  0.000000e+00  0.000000e+00  0.000000e+00  0.000000e+00  0.000000e+00
##  [3,]  0.000000e+00  0.000000e+00  0.000000e+00  0.000000e+00  0.000000e+00
##  [4,] -1.198907e-04 -8.740029e-05 -6.138402e-05 -4.112250e-05 -2.589638e-05
##  [5,] -5.108541e-04 -5.221238e-04 -5.154099e-04 -4.935898e-04 -4.595409e-04
##  [6,]  4.240533e-04  3.499608e-04  2.607622e-04  1.607734e-04  5.431047e-05
##  [7,]  2.065716e-04  2.586042e-04  3.127947e-04  3.662660e-04  4.161405e-04
##  [8,]  1.198907e-07  9.591253e-07  3.237048e-06  7.673002e-06  1.498633e-05
##  [9,]  0.000000e+00  0.000000e+00  0.000000e+00  0.000000e+00  0.000000e+00
## [10,]  0.000000e+00  0.000000e+00  0.000000e+00  0.000000e+00  0.000000e+00
## [11,]  0.000000e+00  0.000000e+00  0.000000e+00  0.000000e+00  0.000000e+00
##               [,51]         [,52]         [,53]         [,54]         [,55]
##  [1,]  0.000000e+00  0.000000e+00  0.000000e+00  0.000000e+00  0.000000e+00
##  [2,]  0.000000e+00  0.000000e+00  0.000000e+00  0.000000e+00  0.000000e+00
##  [3,]  0.000000e+00  0.000000e+00  0.000000e+00  0.000000e+00  0.000000e+00
##  [4,] -1.498633e-05 -7.673002e-06 -3.237048e-06 -9.591253e-07 -1.198907e-07
##  [5,] -4.161405e-04 -3.662660e-04 -3.127947e-04 -2.586042e-04 -2.065716e-04
##  [6,] -5.431047e-05 -1.607734e-04 -2.607622e-04 -3.499608e-04 -4.240533e-04
##  [7,]  4.595409e-04  4.935898e-04  5.154099e-04  5.221238e-04  5.108541e-04
##  [8,]  2.589638e-05  4.112250e-05  6.138402e-05  8.740029e-05  1.198907e-04
##  [9,]  0.000000e+00  0.000000e+00  0.000000e+00  0.000000e+00  0.000000e+00
## [10,]  0.000000e+00  0.000000e+00  0.000000e+00  0.000000e+00  0.000000e+00
## [11,]  0.000000e+00  0.000000e+00  0.000000e+00  0.000000e+00  0.000000e+00
##               [,56]         [,57]         [,58]         [,59]         [,60]
##  [1,]  0.0000000000  0.000000e+00  0.000000e+00  0.000000e+00  0.000000e+00
##  [2,]  0.0000000000  0.000000e+00  0.000000e+00  0.000000e+00  0.000000e+00
##  [3,]  0.0000000000  0.000000e+00  0.000000e+00  0.000000e+00  0.000000e+00
##  [4,]  0.0000000000  0.000000e+00  0.000000e+00  0.000000e+00  0.000000e+00
##  [5,] -0.0001595745 -1.198907e-04 -8.740029e-05 -6.138402e-05 -4.112250e-05
##  [6,] -0.0004787234 -5.108541e-04 -5.221238e-04 -5.154099e-04 -4.935898e-04
##  [7,]  0.0004787234  4.240533e-04  3.499608e-04  2.607622e-04  1.607734e-04
##  [8,]  0.0001595745  2.065716e-04  2.586042e-04  3.127947e-04  3.662660e-04
##  [9,]  0.0000000000  1.198907e-07  9.591253e-07  3.237048e-06  7.673002e-06
## [10,]  0.0000000000  0.000000e+00  0.000000e+00  0.000000e+00  0.000000e+00
## [11,]  0.0000000000  0.000000e+00  0.000000e+00  0.000000e+00  0.000000e+00
##               [,61]         [,62]         [,63]         [,64]         [,65]
##  [1,]  0.000000e+00  0.000000e+00  0.000000e+00  0.000000e+00  0.000000e+00
##  [2,]  0.000000e+00  0.000000e+00  0.000000e+00  0.000000e+00  0.000000e+00
##  [3,]  0.000000e+00  0.000000e+00  0.000000e+00  0.000000e+00  0.000000e+00
##  [4,]  0.000000e+00  0.000000e+00  0.000000e+00  0.000000e+00  0.000000e+00
##  [5,] -2.589638e-05 -1.498633e-05 -7.673002e-06 -3.237048e-06 -9.591253e-07
##  [6,] -4.595409e-04 -4.161405e-04 -3.662660e-04 -3.127947e-04 -2.586042e-04
##  [7,]  5.431047e-05 -5.431047e-05 -1.607734e-04 -2.607622e-04 -3.499608e-04
##  [8,]  4.161405e-04  4.595409e-04  4.935898e-04  5.154099e-04  5.221238e-04
##  [9,]  1.498633e-05  2.589638e-05  4.112250e-05  6.138402e-05  8.740029e-05
## [10,]  0.000000e+00  0.000000e+00  0.000000e+00  0.000000e+00  0.000000e+00
## [11,]  0.000000e+00  0.000000e+00  0.000000e+00  0.000000e+00  0.000000e+00
##               [,66]         [,67]         [,68]         [,69]         [,70]
##  [1,]  0.000000e+00  0.000000e+00  0.000000e+00  0.000000e+00  0.000000e+00
##  [2,]  0.000000e+00  0.000000e+00  0.000000e+00  0.000000e+00  0.000000e+00
##  [3,]  0.000000e+00  0.000000e+00  0.000000e+00  0.000000e+00  0.000000e+00
##  [4,]  0.000000e+00  0.000000e+00  0.000000e+00  0.000000e+00  0.000000e+00
##  [5,] -1.198907e-07 -9.813141e-50  0.000000e+00  0.000000e+00  0.000000e+00
##  [6,] -2.065716e-04 -1.595745e-04 -1.198907e-04 -8.740029e-05 -6.138402e-05
##  [7,] -4.240533e-04 -4.787234e-04 -5.108541e-04 -5.221238e-04 -5.154099e-04
##  [8,]  5.108541e-04  4.787234e-04  4.240533e-04  3.499608e-04  2.607622e-04
##  [9,]  1.198907e-04  1.595745e-04  2.065316e-04  2.582844e-04  3.117157e-04
## [10,]  0.000000e+00  0.000000e+00  1.598542e-07  1.278834e-06  4.316064e-06
## [11,]  0.000000e+00  0.000000e+00  0.000000e+00  0.000000e+00  0.000000e+00
##               [,71]         [,72]         [,73]         [,74]         [,75]
##  [1,]  0.000000e+00  0.000000e+00  0.000000e+00  0.000000e+00  0.000000e+00
##  [2,]  0.000000e+00  0.000000e+00  0.000000e+00  0.000000e+00  0.000000e+00
##  [3,]  0.000000e+00  0.000000e+00  0.000000e+00  0.000000e+00  0.000000e+00
##  [4,]  0.000000e+00  0.000000e+00  0.000000e+00  0.000000e+00  0.000000e+00
##  [5,]  0.000000e+00  0.000000e+00  0.000000e+00  0.000000e+00  0.000000e+00
##  [6,] -4.112250e-05 -2.589638e-05 -1.498633e-05 -7.673002e-06 -3.237048e-06
##  [7,] -4.935898e-04 -4.595409e-04 -4.161405e-04 -3.662660e-04 -3.127947e-04
##  [8,]  1.607734e-04  5.431047e-05 -5.431047e-05 -1.607734e-04 -2.607622e-04
##  [9,]  3.637083e-04  4.111450e-04  4.509088e-04  4.798823e-04  4.949486e-04
## [10,]  1.023067e-05  1.998178e-05  3.452851e-05  5.483000e-05  8.184536e-05
## [11,]  0.000000e+00  0.000000e+00  0.000000e+00  0.000000e+00  0.000000e+00
##               [,76]         [,77]         [,78]         [,79]         [,80]
##  [1,]  0.000000e+00  0.000000e+00  0.000000e+00  0.000000e+00  0.000000e+00
##  [2,]  0.000000e+00  0.000000e+00  0.000000e+00  0.000000e+00  0.000000e+00
##  [3,]  0.000000e+00  0.000000e+00  0.000000e+00  0.000000e+00  0.000000e+00
##  [4,]  0.000000e+00  0.000000e+00  0.000000e+00  0.000000e+00  0.000000e+00
##  [5,]  0.000000e+00  0.000000e+00  0.000000e+00  0.000000e+00  0.000000e+00
##  [6,] -9.591253e-07 -1.198907e-07 -9.813141e-50  0.000000e+00  0.000000e+00
##  [7,] -2.586042e-04 -2.065716e-04 -1.595745e-04 -1.198907e-04 -8.740029e-05
##  [8,] -3.499608e-04 -4.240533e-04 -4.787234e-04 -5.108541e-04 -5.221238e-04
##  [9,]  4.929904e-04  4.708905e-04  4.255319e-04  3.552360e-04  2.640792e-04
## [10,]  1.165337e-04  1.598542e-04  2.127660e-04  2.751491e-04  3.425676e-04
## [11,]  0.000000e+00  0.000000e+00  0.000000e+00  3.596720e-07  2.877376e-06
##               [,81]         [,82]         [,83]         [,84]         [,85]
##  [1,]  0.000000e+00  0.000000e+00  0.000000e+00  0.000000e+00  0.000000e+00
##  [2,]  0.000000e+00  0.000000e+00  0.000000e+00  0.000000e+00  0.000000e+00
##  [3,]  0.000000e+00  0.000000e+00  0.000000e+00  0.000000e+00  0.000000e+00
##  [4,]  0.000000e+00  0.000000e+00  0.000000e+00  0.000000e+00  0.000000e+00
##  [5,]  0.000000e+00  0.000000e+00  0.000000e+00  0.000000e+00  0.000000e+00
##  [6,]  0.000000e+00  0.000000e+00  0.000000e+00  0.000000e+00  0.000000e+00
##  [7,] -6.138402e-05 -4.112250e-05 -2.589638e-05 -1.498633e-05 -7.673002e-06
##  [8,] -5.154099e-04 -4.935898e-04 -4.595409e-04 -4.161405e-04 -3.662660e-04
##  [9,]  1.575763e-04  4.124239e-05 -7.940758e-05 -1.988586e-04 -3.115958e-04
## [10,]  4.095065e-04  4.704509e-04  5.198859e-04  5.522963e-04  5.621673e-04
## [11,]  9.711143e-06  2.301901e-05  4.495900e-05  7.768915e-05  1.233675e-04
##               [,86]         [,87]         [,88]         [,89]         [,90]
##  [1,]  0.000000e+00  0.000000e+00  0.000000e+00  0.0000000000  0.000000e+00
##  [2,]  0.000000e+00  0.000000e+00  0.000000e+00  0.0000000000  0.000000e+00
##  [3,]  0.000000e+00  0.000000e+00  0.000000e+00  0.0000000000  0.000000e+00
##  [4,]  0.000000e+00  0.000000e+00  0.000000e+00  0.0000000000  0.000000e+00
##  [5,]  0.000000e+00  0.000000e+00  0.000000e+00  0.0000000000  0.000000e+00
##  [6,]  0.000000e+00  0.000000e+00  0.000000e+00  0.0000000000  0.000000e+00
##  [7,] -3.237048e-06 -9.591253e-07 -1.198907e-07  0.0000000000  0.000000e+00
##  [8,] -3.127947e-04 -2.586042e-04 -2.065716e-04 -0.0001595745 -1.198907e-04
##  [9,] -4.121042e-04 -4.948687e-04 -5.543744e-04 -0.0005851064 -5.834679e-04
## [10,]  5.439839e-04  4.922311e-04  4.013939e-04  0.0002659574  8.472273e-05
## [11,]  1.841521e-04  2.622009e-04  3.596720e-04  0.0004787234  6.157584e-04
##               [,91]         [,92]         [,93]         [,94]         [,95]
##  [1,]  0.000000e+00  0.000000e+00  0.0000000000  0.000000e+00  0.000000e+00
##  [2,]  0.000000e+00  0.000000e+00  0.0000000000  0.000000e+00  0.000000e+00
##  [3,]  0.000000e+00  0.000000e+00  0.0000000000  0.000000e+00  0.000000e+00
##  [4,]  0.000000e+00  0.000000e+00  0.0000000000  0.000000e+00  0.000000e+00
##  [5,]  0.000000e+00  0.000000e+00  0.0000000000  0.000000e+00  0.000000e+00
##  [6,]  0.000000e+00  0.000000e+00  0.0000000000  0.000000e+00  0.000000e+00
##  [7,]  0.000000e+00  0.000000e+00  0.0000000000  0.000000e+00  0.000000e+00
##  [8,] -8.740029e-05 -6.138402e-05 -0.0000411225 -2.589638e-05 -1.498633e-05
##  [9,] -5.535352e-04 -5.013028e-04 -0.0004327653 -3.539172e-04 -2.707531e-04
## [10,] -1.262449e-04 -3.465639e-04 -0.0005558531 -7.337308e-04 -8.598158e-04
## [11,]  7.441613e-04  8.315616e-04  0.0008455888  7.538725e-04  5.240421e-04
##               [,96]         [,97]         [,98]         [,99]       [,100]
##  [1,]  0.000000e+00  0.000000e+00  0.000000e+00  0.000000e+00  0.000000000
##  [2,]  0.000000e+00  0.000000e+00  0.000000e+00  0.000000e+00  0.000000000
##  [3,]  0.000000e+00  0.000000e+00  0.000000e+00  0.000000e+00  0.000000000
##  [4,]  0.000000e+00  0.000000e+00  0.000000e+00  0.000000e+00  0.000000000
##  [5,]  0.000000e+00  0.000000e+00  0.000000e+00  0.000000e+00  0.000000000
##  [6,]  0.000000e+00  0.000000e+00  0.000000e+00  0.000000e+00  0.000000000
##  [7,]  0.000000e+00  0.000000e+00  0.000000e+00  0.000000e+00  0.000000000
##  [8,] -7.673002e-06 -3.237048e-06 -9.591253e-07 -1.198907e-07  0.000000000
##  [9,] -1.892674e-04 -1.154547e-04 -5.530956e-05 -1.482648e-05  0.000000000
## [10,] -9.137267e-04 -8.750819e-04 -7.235002e-04 -4.386000e-04  0.000000000
## [11,]  1.237272e-04 -4.794427e-04 -1.317838e-03 -2.423829e-03 -0.003829787

See clrf, i,e y

clrf
##   [1] -3.272258689 -3.075923167 -2.883594493 -2.695272667 -2.510957688
##   [6] -2.330649556 -2.154348271 -1.982053834 -1.813766245 -1.649485502
##  [11] -1.489211607 -1.332944560 -1.180684359 -1.032431007 -0.888184501
##  [16] -0.747944843 -0.611712032 -0.479486069 -0.351266953 -0.227054685
##  [21] -0.106849263  0.009349311  0.121541037  0.229725916  0.333903948
##  [26]  0.434075132  0.530239469  0.622396959  0.710547601  0.794691396
##  [31]  0.874828343  0.950958443  1.023081696  1.091198101  1.155307659
##  [36]  1.215410370  1.271506233  1.323595249  1.371677418  1.415752739
##  [41]  1.455821212  1.491882839  1.523937618  1.551985549  1.576026634
##  [46]  1.596060871  1.612088260  1.624108802  1.632122497  1.636129344
##  [51]  1.636129344  1.632122497  1.624108802  1.612088260  1.596060871
##  [56]  1.576026634  1.551985549  1.523937618  1.491882839  1.455821212
##  [61]  1.415752739  1.371677418  1.323595249  1.271506233  1.215410370
##  [66]  1.155307659  1.091198101  1.023081696  0.950958443  0.874828343
##  [71]  0.794691396  0.710547601  0.622396959  0.530239469  0.434075132
##  [76]  0.333903948  0.229725916  0.121541037  0.009349311 -0.106849263
##  [81] -0.227054685 -0.351266953 -0.479486069 -0.611712032 -0.747944843
##  [86] -0.888184501 -1.032431007 -1.180684359 -1.332944560 -1.489211607
##  [91] -1.649485502 -1.813766245 -1.982053834 -2.154348271 -2.330649556
##  [96] -2.510957688 -2.695272667 -2.883594493 -3.075923167 -3.272258689
dim(alpha * t(K) %*% t(D) %*% t(B) %*% W)
## [1]  11 100
length(clrf)
## [1] 100
clrf
##   [1] -3.272258689 -3.075923167 -2.883594493 -2.695272667 -2.510957688
##   [6] -2.330649556 -2.154348271 -1.982053834 -1.813766245 -1.649485502
##  [11] -1.489211607 -1.332944560 -1.180684359 -1.032431007 -0.888184501
##  [16] -0.747944843 -0.611712032 -0.479486069 -0.351266953 -0.227054685
##  [21] -0.106849263  0.009349311  0.121541037  0.229725916  0.333903948
##  [26]  0.434075132  0.530239469  0.622396959  0.710547601  0.794691396
##  [31]  0.874828343  0.950958443  1.023081696  1.091198101  1.155307659
##  [36]  1.215410370  1.271506233  1.323595249  1.371677418  1.415752739
##  [41]  1.455821212  1.491882839  1.523937618  1.551985549  1.576026634
##  [46]  1.596060871  1.612088260  1.624108802  1.632122497  1.636129344
##  [51]  1.636129344  1.632122497  1.624108802  1.612088260  1.596060871
##  [56]  1.576026634  1.551985549  1.523937618  1.491882839  1.455821212
##  [61]  1.415752739  1.371677418  1.323595249  1.271506233  1.215410370
##  [66]  1.155307659  1.091198101  1.023081696  0.950958443  0.874828343
##  [71]  0.794691396  0.710547601  0.622396959  0.530239469  0.434075132
##  [76]  0.333903948  0.229725916  0.121541037  0.009349311 -0.106849263
##  [81] -0.227054685 -0.351266953 -0.479486069 -0.611712032 -0.747944843
##  [86] -0.888184501 -1.032431007 -1.180684359 -1.332944560 -1.489211607
##  [91] -1.649485502 -1.813766245 -1.982053834 -2.154348271 -2.330649556
##  [96] -2.510957688 -2.695272667 -2.883594493 -3.075923167 -3.272258689
LS0tDQp0aXRsZTogIlVuZGVyc3RhbmQgc21vb3RoaW5nIHNwbGluZXMiDQphdXRob3I6ICJIdW9uZyINCmRhdGU6ICIxMC8yNS8yMDIxIg0Kb3V0cHV0Og0KICBodG1sX2RvY3VtZW50Og0KICAgIGNvZGVfZG93bmxvYWQ6IHllcw0KICAgIGNvZGVfZm9sZGluZzogaGlkZQ0KICAgIGhpZ2hsaWdodDogcHlnbWVudHMNCiAgICB0aGVtZTogZmxhdGx5DQogICAgdG9jOiB5ZXMNCiAgICB0b2NfZmxvYXQ6IHllcw0KICB3b3JkX2RvY3VtZW50Og0KICAgIHRvYzogeWVzDQotLS0NCg0KYGBge3Igc2V0dXAsaW5jbHVkZT1GQUxTRX0NCmtuaXRyOjpvcHRzX2NodW5rJHNldChlY2hvID0gVFJVRSwgd2FybmluZyA9IEZBTFNFLCBtZXNzYWdlID0gRkFMU0UpDQpgYGANCg0KIyMgMS4gQ29tcG9zaXRpb25hbCBzcGxpbmUNCg0KVGhpcyBjb2RlIGltcGxlbWVudHMgdGhlIGNvbXBvc2l0aW9uYWwgc21vb3RoaW5nIHNwbGluZXMgZ3JvdW5kZWQgb24gdGhlIHRoZW9yeSBvZiBCYXllcyBzcGFjZXMuIFRoZSBiZWxvdyBjb2RlIGlzIGJhc2VkIG9uIHRoZSBmdW5jdGlvbiBjb21wb3NpdGlvbmFsU3BsaW5lKCkgaW4gdGhlIHJvYkNvbXBvc2l0aW9ucyBwYWNrYWdlLg0KDQpUaGUgY29kZSBpcyBiYXNlZCBvbiB0aGUgbWV0aG9kIGluIE1hY2hhbG92YSwgSi4sIFRhbHNrYSwgUi4sIEhyb24sIEsuIEdhYmEsIEEuIENvbXBvc2l0aW9uYWwgc3BsaW5lcyBmb3IgcmVwcmVzZW50YXRpb24gb2YgZGVuc2l0eSBmdW5jdGlvbnMuIENvbXB1dCBTdGF0ICgyMDIwKS4gPGh0dHBzOi8vZG9pLm9yZy8xMC4xMDA3L3MwMDE4MC0wMjAtMDEwNDItNz4NCg0KVGhlIHRhcmdldCBpcyB0byBlc3RpbWF0ZSB0aGUgZm9tdWxhciAoMTkpIGluIHRoZWlyIGZvcm11bGFyDQoNCg0KJCQNClxiZWdpbnthbGlnbmVkfQ0KSl97bH0oXG1hdGhiZnt6fSk9JigxLVxhbHBoYSkgXG1hdGhiZnt6fV57XHRvcH0gXG1hdGhiZntLfV57XHRvcH0gXG1hdGhiZntEIFN9X3tsfV57XHRvcH0gXG1hdGhiZntNfV97ayBsfSBcbWF0aGJme1N9X3tsfSBcbWF0aGJme0R9IFxtYXRoYmZ7S30gXG1hdGhiZnt6fStcXA0KJitcYWxwaGFcbGVmdFtcbWF0aGJme3l9LVxtYXRoYmZ7Qn1fe2srMX0oXG1hdGhiZnt4fSkgXG1hdGhiZntEfSBcbWF0aGJme0t9XHJpZ2h0XV57XHRvcH0gXG1hdGhiZntXfVxsZWZ0W1xtYXRoYmZ7eX0tXG1hdGhiZntCfV97aysxfShcbWF0aGJme3h9KSBcbWF0aGJme0QgS30gXG1hdGhiZnt6fVxyaWdodF0NClxlbmR7YWxpZ25lZH0NCiQkDQoNCiMjIDIuIFNpbXVsYXRpb24gZGF0YQ0KDQoxMDAgdmFsdWVzIGJhc2VkIG9uIG5vcm1hbCBkZW5zaXR5IA0KYGBge3J9DQojLS10aGVpciBmdW5jdGlvbg0KcmVxdWlyZShyb2JDb21wb3NpdGlvbnMpDQpyZXF1aXJlKHNwbGluZXMpDQojIEV4YW1wbGUgKG5vcm1hbCBkZW5zaXR5KQ0KdCA9IHNlcSgtNC43LDQuNywgbGVuZ3RoID0gMTAwKQ0KdF9zdGVwID0gZGlmZih0WzE6Ml0pDQptZWFuID0gMDsgc2QgPSAxLjUNCmYgPSBkbm9ybSh0LCBtZWFuLCBzZCkNCmYxID0gZi90cmFwemModF9zdGVwLGYpDQpgYGANCg0KVXNpbmcgZmNlbkxSKCkgZnVuY3Rpb24gd2l0aCBhYm92ZSB2YWx1ZXMNCg0KYGBge3J9DQpmLmZjZW5MUiA9IGZjZW5MUih0LCB0X3N0ZXAsICBmKSANCmYuZmNlbkxSDQpgYGANCg0KYGBge3J9DQprbm90cyA8LSBzZXEoLTQuNyw0LjcsIGxlbmd0aCA9IDEwKQ0Ka25vdHMgDQpgYGANCg0KDQoNCiMjIDMuIFRlc3QgZWFjaCBzdGVwIGluIGNvbXBvc2l0aW9uYWxTcGxpbmUoKQ0KDQpgYGB7cn0NCiMgZGVyIDogZm9yIHRoZSBwZW5saXplZA0KDQpvcmRlciA9IDQNCmRlciA9IDINCmsgPSBvcmRlcg0KciA9IGxlbmd0aChrbm90cykNCnINCncgPSByZXAoIDEvbGVuZ3RoKHQpLCBsZW5ndGgodCkpDQojIHNlZSB3DQp3DQpjbHJmID0gZi5mY2VuTFINCmxlbmd0aChjbHJmKQ0KYGBgDQoNCiMjIyAzLjEgQ3JlYXRlIGtub3RzDQpUaGUgYmVsb3cgY29kZSBjcmVhdGUga25vdHMsIGFzIGJlbG93LiBUaGVuLCB0aGUga25vdHMgJFxsYW1iZGFfezF9JCwgLi4sICRcbGFtYmRhX3tyfSQgYXJlIGtub3RzIGluc2lkZSB0aGUgaW50ZXJ2YWxzIGFuZCB0aGVyZSBhcmUgJDIqayQgZXh0cmEga25vdHMuIA0KJCQNClxiZWdpbnthbGlnbmVkfQ0KJlxEZWx0YSBcbGFtYmRhOj1cbGFtYmRhX3swfT11PFxsYW1iZGFfezF9PFxjZG90czxcbGFtYmRhX3sxMH08dj1cZG90e1xsYW1iZGF9X3tyKzF9IFxcDQomXGxhbWJkYV97LWt9PVxjZG90cz1cbGFtYmRhX3stMX09XGxhbWJkYV97MH0sIFxxdWFkIFxsYW1iZGFfe3IrMX09XGxhbWJkYV97cisyfT1cY2RvdHM9XGxhbWJkYV97citrKzF9DQpcZW5ke2FsaWduZWR9DQokJA0KDQpDb3VudCBib3RoIGluc2lkZSBrbm90cywgMiBib3JkZXJzIGFuZCBleHRyYSBrbm90cw0KDQpgYGB7cn0NCkNlbGtvdmFfRGVsa2EgPSAyICogKGsgLSAxKSArIHIgICMgDQpDZWxrb3ZhX0RlbGthDQpgYGANCg0KYGBge3J9DQpsYW1iZGEgPSBjKCkNCmZvciAoaSBpbiAxOihDZWxrb3ZhX0RlbGthKSkgew0KICBpZiAoaSA8PSBrIC0gMSkgew0KICAgIGxhbWJkYVtpXSA9IGtub3RzWzFdDQogIH0NCiAgaWYgKChpID4gayAtIDEpICYmIChpIDw9IHIgKyBrIC0gMSkpIHsNCiAgICBsYW1iZGFbaV0gPSBrbm90c1tpIC0gKGsgLSAxKV0NCiAgfQ0KICBpZiAoaSA+IHIgKyBrIC0gMSkgew0KICAgIGxhbWJkYVtpXSA9IGtub3RzW3JdDQogIH0NCn0NCmxhbWJkYSAjIyMjIDE2IGtub3RzID0gOCBpbnNpZGVzICsgMiBib3JkZXJzICsgNiBleHRyYSBrbm90cyAjICA2ID0gMioob3JkZXIgLTEpDQpgYGANClRoZW4gaXQgbWVhbnMNCg0KJCQNClxiZWdpbnthbGlnbmVkfQ0KJlxEZWx0YSBcbGFtYmRhOj1cbGFtYmRhX3swfT0tNC43PXU8XGxhbWJkYV97MX09LTMuNjY8XGNkb3RzPFxsYW1iZGFfezh9PTMuNjY8dj00Ljc9XGRvdHtcbGFtYmRhfV97OX0gXFwNCiZcbGFtYmRhX3stM309XGxhbWJkYV97LTJ9PVxsYW1iZGFfey0xfT1cbGFtYmRhX3swfT0tNC43LCBccXVhZCAgXGxhbWJkYV97OX09XGxhbWJkYV97MTB9PVxsYW1iZGFfezExfT1cbGFtYmRhX3sxMn0NClxlbmR7YWxpZ25lZH0NCiQkDQoNCiMjIyAzLjIuIENyZWF0ZSBhIEItc3BsaW5lcyBiYXNpYyBhdCBvcmRlciAkNCQsIGJhc2VkIG9uIGtub3RzICRcbGFtYmFkJA0KDQpzcGxpbmVEZXNpZ24gKCkgaXMgYSBmdW5jdGlvbiB0byBEZXNpZ24gTWF0cml4IGZvciBCLXNwbGluZXMgYmFzaWMsIGdpdmVuIG9yZGVyICQ0JCwgYSB0b3RhbCBvZiAxNiBrbm90cyAoaW5zaWRlLCBib3JkZXIgYW5kIGV4dHJhKSBhbmQgdGhlIHZhbHVlIHQgDQoNCmBgYHtyfQ0Kb3JkID0gIGsNCkIgPSBzcGxpbmVEZXNpZ24obGFtYmRhLCB0LCBvcmQsIG91dGVyLm9rID0gVFJVRSkNCmRpbShCKSANCmxlbmd0aCh0KQ0KbGVuZ3RoKGxhbWJkYSktIG9yZA0KDQpgYGANCg0KU2VlIG1hdHJpeCBCDQoNCmBgYHtyfQ0KaGVhZChCLCAxMikNCmBgYA0KDQoNCmBgYHtyfQ0KdGFpbChCLCAxMikNCmBgYA0KUGxvdCB0aGUgbWF0cml4IEIsIHRoZW4NCkZvciB0aGUgZmlyc3QgNCBjb2x1bW4sIGkuZSB0aGUgZmlyc3QgNCBrbm90cywgaXQgaGFzIHZhbHVlcyBhdCAxMSByb3dzLiBJdCBjb3JyZXNwb25kcyB0aGUgYmFjayBjdXJ2ZSAodXAgdG8gMSkuDQpUaGVuLCB0aGUgbWF0cml4IDR4MTEgaXMgbW92ZWQgdW50aWwgYXQgdGhlIGVuZCBvZiBtYXRyaXggQi4gRWFjaCBibG9jayBjb3JyZXNwb25kcyB0byBlYWNoIGNvbG9yZnVsIGN1cnZlcy4NClRoZSBsYXN0IGJvY2sgY29ycmVzcG9uZCB0byBwdXJwbGUgY3VydmUuICh1cCB0byAxKQ0KDQpgYGB7cn0NCnBsb3QocmFuZ2UodCksIGMoMCwxKSwgdHlwZSA9ICJuIiwgeGxhYiA9ICJ4IiwgeWxhYiA9ICIiLA0KICAgICBtYWluID0gICJCLXNwbGluZXMgYXQgb3JkZXIgPSA0IC0gc3VtIHRvIDEgaW5zaWRlIGlubmVyIGtub3RzIikNCiNtdGV4dChleHByZXNzaW9uKEJbal0oeCkgKiIgIGFuZCAiKiBzdW0oQltqXSh4KSwgaiA9PSAxLCA2KSksIGFkaiA9IDApDQphYmxpbmUodiA9IGxhbWJkYSwgbHR5ID0gMywgY29sID0gImxpZ2h0IGdyYXkiKQ0KYWJsaW5lKHYgPSBsYW1iZGFbYyg0LGxlbmd0aChsYW1iZGEpLTMpXSwgbHR5ID0gMywgY29sID0gImdyYXkxMCIpDQojbGluZXMoeCwgcm93U3VtcyhiYiksIGNvbCA9ICJncmF5IiwgbHdkID0gMikNCm1hdGxpbmVzKHQsIEIsIHlsaW0gPSBjKDAsMSksIGx0eSA9IDEpDQpgYGANCg0KDQojIyMgMy4zIE1hdHJpeCBXDQoNCmBgYHtyfQ0KICBXID0gZGlhZyh3KQ0KZGltKFcpDQpgYGANCg0KDQojIyMgMy40LiBDcmVhdGUgYWxsIEItc3BsaW5lcyB1cCB0byBvcmRlciAkaysxID0gNCQNCg0KDQpCQiBpcyBhIG1hdHJpeCB0byBzdG9yZSBhbGwgQi1zcGxpbmVzIGF0IGtub3RzIGwsIGV2YWx1YXRlZCBhdCB2ZWN0b3IgcGFydGl0aW9uLCBvcmRlciBrLmkuZQ0KJCQNClxib2xkc3ltYm9se0J9X3trKzF9DQokJA0KDQoNCmBgYHtyfQ0KICBwYXJuaXRpb24gPSBzZXEobWluKGxhbWJkYSksIG1heChsYW1iZGEpLCBsZW5ndGggPSAxMDApDQpoZWFkKCAgcGFybml0aW9uLCAyMCApDQogIGxhbWJkYV9pbmRleCA9IGMoMDoociAtIDEpKQ0KICBsYW1iZGFfaW5kZXgNCmBgYA0KVGhlIGxhbWJkYV9pbmRleCBpbmRpY2F0ZXMgdGhlIGJlbG93IGtub3RzDQoNCiQkDQpcbGFtYmRhX3swfT0tNC43PXU8XGxhbWJkYV97MX09LTMuNjY8XGNkb3RzPFxsYW1iZGFfezh9PTMuNjY8dj00Ljc9XGRvdHtcbGFtYmRhfV97OX0gDQokJA0KDQoNCmBgYHtyfQ0KDQpnID0gbGFtYmRhX2luZGV4W2xlbmd0aChsYW1iZGFfaW5kZXgpIC0gMV0NCmcNCmsNCiAgTiA9IGcgKyAoayAtIDEpICsgMQ0KICBODQpgYGANCg0KVGhlbiAkZyQgaW5kaWNhdGVzIHRoZSBsYXN0IGluc2lkZSBrbm90LCBoZXJlLCAkXGxhbWJkYV84JC4NCg0KU2ltaWxhciBhcyBhYm92ZSwgJE4kIGluZGljYXRlcyB0aGUgbnVtYmVyIG9mIEItc3BsaW5lcyBiYXNpYyBhdCBvcmRlciAkaz00JCBnaXZlbiA4IGluc2lkZXMga25vdHMuIFdlIHRoZW4gaGF2ZSBhIHRvdGFsIG9mIDE2IGtub3RzIChpbnNpZGUga25vdHMsIGJvcmRlciBrbm90cyBhbmQgZXh0cmEga25vdHMpLiBXZSBoYXZlDQoNCiQkQ2Vsa292YV9EZWxrYSA9IDIgKiAoayAtIDEpICsgciA9IGxlbmd0aChsYW1iZGEpICQkDQpUaGUgbnVtYmVyIG9mIEItc3BsaW5lIGJhc2lzIGZyb20gIHNwbGluZURlc2lnbigpIGlzDQokJGxlbmd0aChsYW1iZGEpLSBvcmQgPSBsZW5ndGgobGFtYmRhKS0gayA9ICAyICogKGsgLSAxKSArIHIgLSBrID0gaytyIC0yICQkDQpPbiB0aGUgb3RoZXIgc2lkZXMsIGdpdmVuICRyJCBrbm90cywgdGhlcmUgYXJlICRyLTIkIGluc2lkZSBrbm90cywgaS5lICRnID0gci0yJC4gVGhlbiwNCiQkIE4gPSBnICsgKGsgLSAxKSArIDEgPSByIC0gMiArKGsgLSAxKSArIDEgPXIray0yICQkDQpCZWxvdywgdGhleSBjcmVhdGUgYSBCLXNwbGluZXMsIGF0IG9yZGVyICRrJCBhbmQgZ2l2ZW4gdmFsdWVzICR0ID0gcGFybml0aW9uID0gc2VxKG1pbihsYW1iZGEpLCBtYXgobGFtYmRhKSwgbGVuZ3RoID0gMTAwKSQuIENoZWNrIHZhbHVlICRsJCBmb3IgdGhlIG5leHQgY2h1bmsNCg0KYGBge3J9DQogIGwgPSBjKCkNCiAgZm9yIChpIGluICgxOk4pKSB7DQogICAgZm9yIChqIGluIDE6KGsgKyAxKSkgew0KICAgICAgbFtqXSA9IGxhbWJkYVtpICsgaiAtIDFdDQogICAgICBwcmludChjKGkgLCBqLCByb3VuZChsLCAxKSkpDQogICAgfQ0KICB9DQpgYGANCg0KRnJvbSB0aGUgYWJvdmUgcmVzdWx0cywgZ2l2ZW4gaSBhbmQgaiwgdGhlIHZlY3RvciAkbCQgaGFzIDEsIDIsIDMgb3IgNCBrbm90cyAodGhlIG1vc3QgY29tbW9uKS4gVGhlbiwgdGhleSB1c2UgdGhlIHZlY3RvciAkbCQga25vdHMgdG8gY3JlYXRlIEItc3BsaW5lcyBiYXNpcywgYXQgb3JkZXIgNCBhbmQgdmFsdWUgIHBhcm5pdGlvbi4gRWFjaCBCLXNwbGluZSBpcyBzdG9yZWQgaW4gbWF0cml4IEJCLiANCg0KUXVlc3Rpb246IFdoZXJlIGRvIHdlIGFwcGx5IG1hdHJpeCBCQj8/Pz8/DQpBbnN3ZXI6IEJCIGlzIHVzZSB0byBwbG90IHRoZSBaQi1zcGxpbmUgYmFzaXMgc3lzdGVtLCBzZWUgYWdhaW4gYXQgdGhlIGVuZCBvZiB0aGlzIGZpbGUuDQoNCmBgYHtyfQ0KTiANCkJCID0gYXJyYXkoMCwgYyhsZW5ndGgocGFybml0aW9uKSwgTikpDQogIGwgPSBjKCkNCiAgZm9yIChpIGluICgxOk4pKSB7DQogICAgZm9yIChqIGluIDE6KGsgKyAxKSkgew0KICAgICAgbFtqXSA9IGxhbWJkYVtpICsgaiAtIDFdDQogICAgfQ0KICAgIEJCWywgaV0gPSBzcGxpbmVEZXNpZ24obCwgcGFybml0aW9uLCBrLCBvdXRlci5vayA9IFRSVUUpDQogIH0NCmRpbShCQikNCmBgYA0KDQpzZWUgYWdhaW4gQkIsIHNlZW1zIHRvIGJlIHNpbWxhciB0byBCISEhLCBwbG90IGJlbG93DQoNCmBgYHtyfQ0KaGVhZChCQiwgMTIpDQpgYGANCg0KYGBge3J9DQpgYGANCg0KDQojIyMgMy41LiBDaGVjayB0aGUgb3JkZXIgb2YgZGVyaXZhdGl2ZSwgQ29sbG9jYXRvbiBtYXRyaXguDQoNClJlY2FsbCBjb2xsb2NhdG9uIG1hdHJpeCANCiQkDQpcYmVnaW57YWxpZ25lZH0NCiZcbWF0aGJme0J9X3trKzF9KFxtYXRoYmZ7eH0pPVxsZWZ0KEJfe2l9XntrKzF9XGxlZnQoeF97an1ccmlnaHQpXHJpZ2h0KV97aj0xLCBpPS1rfV57biwgZ30gXFwNCiZcbWF0aGJme0N9X3trKzF9KFxtYXRoYmZ7eH0pPVxsZWZ0KFxiZWdpbnthcnJheX17Y2NjfQ0KQl97LWt9XntrKzF9XGxlZnQoeF97MX1ccmlnaHQpICYgXGNkb3RzICYgQl97Z31ee2srMX1cbGVmdCh4X3sxfVxyaWdodCkgXFwNClx2ZG90cyAmIFxkZG90cyAmIFx2ZG90cyBcXA0KQl97LWt9XntrKzF9XGxlZnQoeF97bn1ccmlnaHQpICYgXGNkb3RzICYgQl97Z31ee2srMX1cbGVmdCh4X3tufVxyaWdodCkNClxlbmR7YXJyYXl9XHJpZ2h0KSBcaW4gXG1hdGhiYntSfV57biwgZytrKzF9DQpcZW5ke2FsaWduZWR9DQokJA0KDQoNCmBgYHtyfQ0KbGVuZ3RoKHQpIDw9IE4NCg0KcXIoQikkcmFuayAhPSBODQoNCiAgaWYgKGxlbmd0aCh0KSA8PSBOKSANCiAgICBzdG9wKCJsZW5ndGgodCkgbXVzdCBiZSBoaWdoZXIgdGhlbiBEaW1lbnNpb24oc3BhY2Ugb2Ygc3BsaW5lcykiKQ0KICBpZiAocXIoQikkcmFuayAhPSBOKSANCiAgICBzdG9wKCJDb2xsb2NhdG9uIG1hdHJpeCBkb2VzIG5vdCBoYXZlIGZ1bGwgY29sdW1uIHJhbmsuIikNCg0KYGBgDQoNCiMjIyAzLjYuIENyZWF0ZSBtYXRyaXggdGhlIFVwcGVyIHRyaWFuZ3VsYXIgbWF0cml4ICRTJA0KDQpNYXRyaXggJFNfbCQsIHdpdGggJGwkIGlzIHRoZSAkbCR0aCBkZXJpdmF0aXZlIGluIHRoZSBiZWxvdyBlcXVhdGlvbg0KDQokJEpfe2x9XGxlZnQoc197a31ccmlnaHQpPSgxLVxhbHBoYSkgXGludF97YX1ee2J9XGxlZnRbc197a31eeyhsKX0oeClccmlnaHRdXnsyfSBcbWF0aHJte35kfSB4K1xhbHBoYSBcc3VtX3tpPTF9XntufSB3X3tpfVxsZWZ0W3lfe2l9LXNfe2t9XGxlZnQoeF97aX1ccmlnaHQpXHJpZ2h0XV57Mn0kJA0KDQojIyMjIDMuNi4xIFRoZSBnZW5lcmFsIGZvcm0gb2YgJFNfbCQNCg0KJCQNClxtYXRoYmZ7U31fe2x9PVxtYXRoYmZ7RH1fe2x9IFxtYXRoYmZ7TH1fe2x9IFxsZG90cyBcbWF0aGJme0R9X3sxfSBcbWF0aGJme0x9X3sxfSBcaW4gXG1hdGhiYntSfV57ZytrKzEtbCwgZytrKzF9DQokJA0KDQp3aGVyZSANCiQkDQpcbWF0aGJme0R9X3tqfT0oaysxLWopIFxvcGVyYXRvcm5hbWV7ZGlhZ31cbGVmdChkX3staytqfSwgXGxkb3RzLCBkX3tnfVxyaWdodCkNCiQkDQp3aXRoDQokJA0KZF97aX09XGZyYWN7MX17XGxhbWJkYV97aStrKzEtan0tXGxhbWJkYV97aX19LCBccXVhZCBpPS1rK2osIFxsZG90cywgZw0KJCQNCmFuZA0KJCQNClxtYXRoYmZ7TH1fe2p9Oj1cbGVmdChcYmVnaW57YXJyYXl9e3JycnJ9DQotMSAmIDEgJiAmIFxcDQomIFxkZG90cyAmIFxkZG90cyAmIFxcDQomICYgLTEgJiAxDQpcZW5ke2FycmF5fVxyaWdodCkgXGluIFxtYXRoYmJ7Un1ee2craysxLWosIGcraysyLWp9DQokJA0KDQojIyMjIDMuNi4yIFRoZSBmb3JtIG9mICRTX2wkIHdoZW4gJGw9MiQuDQoNCiQkDQpcbWF0aGJme1N9X3syfT1cbWF0aGJme0R9X3syfSBcbWF0aGJme0x9X3syfSBcbWF0aGJme0R9X3sxfSBcbWF0aGJme0x9X3sxfSBcaW4gXG1hdGhiYntSfV57ZytrKzEtMiwgZytrKzF9ID0gXG1hdGhiYntSfV57ZytrLTEsIGcraysxfQ0KJCQNCg0Kd2hlcmUNCg0KJCQNClxiZWdpbnthbGlnbn0NCiZcbWF0aGJme0R9X3sxfT0oaysxLTEpIFxvcGVyYXRvcm5hbWV7ZGlhZ31cbGVmdChkX3staysxfSwgXGxkb3RzLCBkX3tnfVxyaWdodCkgPSBrIFxvcGVyYXRvcm5hbWV7ZGlhZ31cbGVmdChkX3staysxfSwgXGxkb3RzLCBkX3tnfVxyaWdodCksXHF1YWQgZF97aX09XGZyYWN7MX17XGxhbWJkYV97aStrKzEtMX0tXGxhbWJkYV97aX19PSBcZnJhY3sxfXtcbGFtYmRhX3tpK2t9LVxsYW1iZGFfe2l9fSwgXHF1YWQgaT0taysxLCBcbGRvdHMsIGdcXA0KJiBcbWF0aGJme0R9X3syfT0oaysxLTIpIFxvcGVyYXRvcm5hbWV7ZGlhZ31cbGVmdChkX3staysyfSwgXGxkb3RzLCBkX3tnfVxyaWdodCkgPSAoay0xKSBcb3BlcmF0b3JuYW1le2RpYWd9XGxlZnQoZF97LWsrMn0sIFxsZG90cywgZF97Z31ccmlnaHQpLCBccXVhZCBkX3tpfT1cZnJhY3sxfXtcbGFtYmRhX3tpK2srMS0yfS1cbGFtYmRhX3tpfX09IFxmcmFjezF9e1xsYW1iZGFfe2kray0xfS1cbGFtYmRhX3tpfX0sIFxxdWFkIGk9LWsrMiwgXGxkb3RzLCBnDQpcZW5ke2FsaWdufQ0KJCQNCg0KIyMjIyAzLjYuMyBDaGVjayB0aGUgY29kZSB3aXRoICRsID0gZGVyID0gMiQNCg0KYGBge3J9DQojUyA9IGFycmF5KDApDQpTX3BvbSA9IGRpYWcoMSwgTiwgTikNCiAgICANCmZvciAoaiBpbiAxOmRlcikgew0KICAgICAgRF9tYXQgPSBhcnJheSgwKQ0KICAgICAgcm96ZGlsID0gbGFtYmRhWygxICsgayk6KE4gKyBrIC0gaildIC0gbGFtYmRhWygxICsgICBqKTooTildDQogICAgICBEX21hdCA9IChrIC0gaikgKiBkaWFnKDEvcm96ZGlsKQ0KICAgICAgTF9tYXQgPSBhcnJheSgwLCBjKE4gLSBqLCBOIC0gaiArIDEpKQ0KICAgICAgICAgIGZvciAoSiBpbiAoMTooTiAtIGopKSkgew0KICAgICAgICAgICAgICBMX21hdFtKLCBKXSA9ICgtMSkNCiAgICAgICAgICAgICAgTF9tYXRbSiwgSiArIDFdID0gMQ0KICAgICAgICAgICAgfQ0KICAgICAgU19wb20gPSBEX21hdCAlKiUgTF9tYXQgJSolIFNfcG9tDQogICAgfQ0KICAgIFMgPSBTX3BvbQ0KICAgIGRpbShTKQ0KDQpgYGANCg0KVGhlIGZvbGxvd2luZyBjb2RlLCB3ZSBzZWUgdGhlIG1hdHJpeCBEIGFuZCBtYXRyaXggTCwgYXQgdmFsdWUgJGogPSAxJA0KDQpgYGB7cn0NClNfcG9tID0gZGlhZygxLCBOLCBOKQ0KaiA9IDENCkRfbWF0ID0gYXJyYXkoMCkNCnJvemRpbCA9IGxhbWJkYVsoMSArIGspOihOICsgayAtIGopXSAtIGxhbWJkYVsoMSArICAgaik6KE4pXQ0KRF9tYXQgPSAoayAtIGopICogZGlhZygxL3JvemRpbCkNCkxfbWF0ID0gYXJyYXkoMCwgYyhOIC0gaiwgTiAtIGogKyAxKSkNCiAgICAgICAgICBmb3IgKEogaW4gKDE6KE4gLSBqKSkpIHsNCiAgICAgICAgICAgICAgTF9tYXRbSiwgSl0gPSAoLTEpDQogICAgICAgICAgICAgIExfbWF0W0osIEogKyAxXSA9IDENCiAgICAgICAgICB9DQojcHJpbnQgbWF0cml4DQpEX21hdA0KTF9tYXQNCmBgYA0KDQoNClRoZSBmb2xsb3dpbmcgY29kZSwgd2Ugc2VlIHRoZSBtYXRyaXggRCBhbmQgbWF0cml4IEwsIGF0IHZhbHVlICRqID0gMiQNCg0KYGBge3J9DQpTX3BvbSA9IGRpYWcoMSwgTiwgTikNCmogPSAyDQpEX21hdCA9IGFycmF5KDApDQpyb3pkaWwgPSBsYW1iZGFbKDEgKyBrKTooTiArIGsgLSBqKV0gLSBsYW1iZGFbKDEgKyAgIGopOihOKV0NCkRfbWF0ID0gKGsgLSBqKSAqIGRpYWcoMS9yb3pkaWwpDQpMX21hdCA9IGFycmF5KDAsIGMoTiAtIGosIE4gLSBqICsgMSkpDQogICAgICAgICAgZm9yIChKIGluICgxOihOIC0gaikpKSB7DQogICAgICAgICAgICAgIExfbWF0W0osIEpdID0gKC0xKQ0KICAgICAgICAgICAgICBMX21hdFtKLCBKICsgMV0gPSAxDQogICAgICAgICAgfQ0KI3ByaW50IG1hdHJpeA0KRF9tYXQNCkxfbWF0DQpgYGANCg0KIyMjIyAzLjcgUHJlcGFyZSBtYXRyaXggJE1fe2tsfSA9IE1fezMsMn0gJA0KDQpSZWNhbGwgbWF0cml4ICRNX3trbH0kIGlzIA0KJCQNClxtYXRoYmZ7TX1fe2sgbH09XGxlZnQobV97aSBqfV57ayBsfVxyaWdodClfe2ksIGo9LWsrbH1ee2d9LCBccXVhZCBcdGV4dCB7IHdpdGggfSBccXVhZCBtX3tpIGp9XntrIGx9PVxpbnRfe2F9XntifSBCX3tpfV57aysxLWx9KHgpIEJfe2p9XntrKzEtbH0oeCkgXG1hdGhybXtkfSB4DQokJA0KSW4gdGhlIGJlbG93IGNvZGUsIGtrIG1lYW5zICRrayA9IGsrMSAtIGwkLiBIb3dldmVyLCBhcyBDaHJpc3RpbmUgcmVtaW5kaW5nLCB3ZSAgdXN1YWxseSB3b3JrIHdpdGggJGwgPSAyLiQgDQoNClRoZW4sIGdpdmVuIG9yZGVyIGtrLCB3ZSBuZWVkIGEgdG90YWwgb2YgY2Vsa292YV9kZWxrYSBrbm90cyAoaW5zaWRlIGtub3RzLCBib3JkZXIga25vdHMgYW5kIGV4dHJhIGtub3RzICkNCg0KYGBge3J9DQprayA9IGsgLSBkZXINCmtrDQogIGNlbGtvdmFfZGVsa2EgPSAyICogKGtrIC0gMSkgKyByDQogICBjZWxrb3ZhX2RlbGthIA0KYGBgDQoNClRoZSBiZWxvdyBjb2RlIGNyZWF0ZSBhIHRvdGFsIGtub3RzIGZvciBCLXNwbGluZSBvcmRlciAka2skISEhIFRoZXkgY3JlYXRlIGV4dHJhIGtub3RzIGJhc2VkIG9uIHRoZSBnaXZlbiBMYW1iZGEga25vdHMgKGluY2x1ZGluZyBpbnNpZGUga25vdHMgYW5kIGJvcmRlciBrbm90cykuDQoNCmBgYHtyfQ0KICBMYW1iZGEgPSBjKCkNCiAgZm9yIChpIGluIDE6Y2Vsa292YV9kZWxrYSkgew0KICAgIGlmIChpIDw9IChrayAtIDEpKSB7DQogICAgICBMYW1iZGFbaV0gPSBrbm90c1sxXQ0KICAgIH0NCiAgICBpZiAoKGkgPiBrayAtIDEpICYmIChpIDw9IHIgKyBrayAtIDEpKSB7DQogICAgICBMYW1iZGFbaV0gPSBrbm90c1tpIC0gKGtrIC0gMSldDQogICAgfQ0KICAgIGlmIChpID4gKHIgKyAoa2sgLSAxKSkpIHsNCiAgICAgIExhbWJkYVtpXSA9IGtub3RzW3JdDQogICAgfQ0KICB9DQpMYW1iZGENCmBgYA0KDQoNCmNvcnJlc3BvbmQgdG8NCg0KJCQNClxiZWdpbnthbGlnbmVkfQ0KJlxEZWx0YSBcbGFtYmRhOj1cbGFtYmRhX3swfT0tNC43PXU8XGxhbWJkYV97MX09LTMuNjY8XGNkb3RzPFxsYW1iZGFfezh9PTMuNjY8dj00Ljc9XGRvdHtcbGFtYmRhfV97OX0gXFwNCiZcbGFtYmRhX3stMX09XGxhbWJkYV97MH09LTQuNywgXHF1YWQgIFxsYW1iZGFfezl9ID0gXGxhbWJkYV97MTB9PTQuNyANClxlbmR7YWxpZ25lZH0NCiQkDQpUaGUgZm9sbG93aW5nIGNvZGUgY3JlYXRlIGEgQi1zcGxpbmUgYXQgb3JkZXIga2sgYmFzZWQgb24gTGFtYmRhIGtub3RzLg0KDQpgYGB7cn0NCiBQYXJuaXRpb24gPSBzZXEobWluKExhbWJkYSksIG1heChMYW1iZGEpLCBsZW5ndGggPSAxMDApDQogQkJCID0gc3BsaW5lRGVzaWduKExhbWJkYSwgUGFybml0aW9uLCBraywgb3V0ZXIub2sgPSBUUlVFKQ0KDQogZGltKEJCQikNCmBgYA0KDQoNCnBsb3QgdGhlIEJCQiBiYXNpYywgaXQgaXMgY29ycmVjdCBzaW5jZSB0aGV5IGFyZSBhdCBvcmRlciAka2s9MS4kDQoNCmBgYHtyfQ0KcGxvdChyYW5nZShQYXJuaXRpb24pLCBjKDAsMSksIHR5cGUgPSAibiIsIHhsYWIgPSAieCIsIHlsYWIgPSAiIiwNCiAgICAgbWFpbiA9ICAiQi1zcGxpbmVzIGF0IG9yZGVyIGtrID0gMSwgdXNpbmcga25vdHMgTGFtYmRhIikNCiNtdGV4dChleHByZXNzaW9uKEJbal0oeCkgKiIgIGFuZCAiKiBzdW0oQltqXSh4KSwgaiA9PSAxLCA2KSksIGFkaiA9IDApDQphYmxpbmUodiA9ICBMYW1iZGEsIGx0eSA9IDMsIGNvbCA9ICJsaWdodCBncmF5IikNCmFibGluZSh2ID0gIExhbWJkYVtjKDQsbGVuZ3RoKExhbWJkYSktMyldLCBsdHkgPSAzLCBjb2wgPSAiZ3JheTEwIikNCiNsaW5lcyh4LCByb3dTdW1zKGJiKSwgY29sID0gImdyYXkiLCBsd2QgPSAyKQ0KbWF0bGluZXMoUGFybml0aW9uLCBCQkIsIHlsaW0gPSBjKDAsMSksIGx0eSA9IDEpDQpgYGANCg0KVGhlIGZvbGxvd2luZyBjb2RlIGZpbmlzaGVzIHRoZSBjYWxjdWxhdGlvbiBvZiBNDQoNCiQkDQptX3tpIGp9XntrIGx9PVxpbnRfe2F9XntifSBCX3tpfV57aysxLWx9KHgpIEJfe2p9XntrKzEtbH0oeCkgXG1hdGhybXtkfSB4DQokJA0KDQpgYGB7cn0NCiAgICANCiAgICAgTGFtYmRhX2luZGV4ID0gYygwOihyIC0gMSkpIA0KICBHID0gTGFtYmRhX2luZGV4W2xlbmd0aChMYW1iZGFfaW5kZXgpIC0gMV0NCiAgTk4gPSBHICsgKGtrIC0gMSkgKyAxDQogIHN0ZXAgPSBkaWZmKFBhcm5pdGlvblsxOjJdKQ0KICBNID0gYXJyYXkoMCwgYyhOTiwgTk4pKQ0KICBmb3IgKGkgaW4gMTpOTikgew0KICAgIGZvciAoaiBpbiAxOk5OKSB7DQogICAgICBuZW51bG92ZSA9IGMoKQ0KICAgICAgc291Y2luID0gQkJCWywgaV0gKiBCQkJbLCBqXQ0KICAgICAgZm9yIChtIGluIDE6bGVuZ3RoKFBhcm5pdGlvbikpIHsNCiAgICAgICAgaWYgKHNvdWNpblttXSAhPSAwKSB7DQogICAgICAgICAgbmVudWxvdmVbbV0gPSBzb3VjaW5bbV0NCiAgICAgICAgfQ0KICAgICAgfQ0KICAgICAgTVtpLCBqXSA9IHRyYXB6YyhzdGVwLCBzb3VjaW4pDQogICAgfQ0KICB9DQogIE0NCmBgYA0KDQojIyA0LiBGaW5kIHRoZSBvcHRpbWFsIGZ1bmN0aW9uDQoNCiMjIyA0LjEgQ3JlYXRlIG1hdHJpeCBELCBLLCBVIGFuZCBHDQoNCiQkDQpcbWF0aGJme0R9X3tqfT0oaysxLWopIFxvcGVyYXRvcm5hbWV7ZGlhZ31cbGVmdChkX3staytqfSwgXGxkb3RzLCBkX3tnfVxyaWdodCkNCiQkDQp3aXRoDQokJA0KZF97aX09XGZyYWN7MX17XGxhbWJkYV97aStrKzEtan0tXGxhbWJkYV97aX19LCBccXVhZCBpPS1rK2osIFxsZG90cywgZw0KJCQNCg0KDQpgYGB7cn0NCmRpZmZlcmVuY2UgPSBsYW1iZGFbKDEgKyBrKToociArIDIgKiAoayAtIDEpKV0gLSBsYW1iZGFbKDE6KHIgKyAgayAtIDIpKV0NCkQgPSAoaykgKiBkaWFnKDEvZGlmZmVyZW5jZSkNCksgPSBhcnJheSgwLCBjKE4sIE4gLSAxKSkNCktbMSwgMV0gPSAxDQpLW04sIE4gLSAxXSA9IC0xDQpmb3IgKGogaW4gKDI6KE4gLSAxKSkpIHsNCiAgS1tqLCBqIC0gMV0gPSAoLTEpDQogIEtbaiwgal0gPSAxDQp9DQojIFNlZSBtYXRyaXggRCBhbmQgbWF0cml4IEsNCkQNCksNCmBgYA0KDQoNClRoZW4sIFVzaW5nIHRoZSBub3RhdGlvbiANCiQkXG1hdGhiZntVfTo9XG1hdGhiZntEIEt9JCQNCg0KYGBge3J9DQpVID0gRCAlKiUgSw0KVQ0KYGBgDQoNClRoZW4sIGNhbGN1bGF0ZSBtYXRyaXggRw0KJCQNClxtYXRoYmZ7R306PVxtYXRoYmZ7VX1ee1x0b3B9XGxlZnRbKDEtXGFscGhhKSBcbWF0aGJme1N9X3tsfV57XHRvcH0gXG1hdGhiZntNfV97ayBsfSBcbWF0aGJme1N9X3tsfStcYWxwaGEgXG1hdGhiZntCfV97aysxfV57XHRvcH0oXG1hdGhiZnt4fSkgXG1hdGhiZntXIEJ9X3trKzF9KFxtYXRoYmZ7eH0pXHJpZ2h0XSBcbWF0aGJme1V9DQokJA0KDQpgYGB7cn0NCmFscGhhID0gMC4xDQpHRyA9IHQoVSkgJSolICgoMSAtIGFscGhhKSAqIHQoUykgJSolIE0gJSolIFMgKyBhbHBoYSAqIHQoQikgJSolICBXICUqJSBCKSAlKiUgVQ0KR0cNCmBgYA0KDQpUaGVuLCBjYWxjdWxhdGUgbWF0cml4ICRnJCBhcyBiZWxvdw0KDQokJA0KXG1hdGhiZntnfTo9XGFscGhhIFxtYXRoYmZ7S31ee1x0b3B9IFxtYXRoYmZ7RH0gXG1hdGhiZntCfV97aysxfV57XHRvcH0oXG1hdGhiZnt4fSkgXG1hdGhiZntXfSBcbWF0aGJme3l9DQokJA0KDQoNCmBgYHtyfQ0KZ2cgPSBhbHBoYSAqIHQoSykgJSolIHQoRCkgJSolIHQoQikgJSolIFcgJSolIGNscmYNCg0KYGBgDQpFcnJvciEhIA0KQ2hlY2sgYWdhaW4gZWFjaCBtYXRyaXgNCmBgYHtyfQ0KYWxwaGEgKiB0KEspICUqJSB0KEQpICUqJSB0KEIpICUqJSBXICMgd29yayEhDQoNCmBgYA0KU2VlIGNscmYsIGksZSB5DQoNCmBgYHtyfQ0KY2xyZg0KDQpgYGANCg0KYGBge3J9DQpkaW0oYWxwaGEgKiB0KEspICUqJSB0KEQpICUqJSB0KEIpICUqJSBXKQ0KbGVuZ3RoKGNscmYpDQpjbHJmDQpgYGANCg0K