4.1 Kernel Ridge regression
alpha=function(k,x,y){
n=length(x); K=matrix(0,n,n)
for(i in 1:n)for(j in 1:n)K[i,j]=k(x[i],x[j])
return(solve(K+10^(-5)*diag(n))%*%y) ## add 10^(-5) I to K to make it regular
}
Example 63
k.p=function(x,y) (sum(x*y)+1)^3 ## Definition of Kernel
k.g=function(x,y) exp(-(x-y)^2/2) ## Definition of Kernel
lambda=0.1
n=50; x=rnorm(n); y=1+x+x^2+rnorm(n) ## Data Generation
alpha.p=alpha(k.p,x,y); alpha.g=alpha(k.g,x,y)
z=sort(x); u=array(n); v=array(n)
for(j in 1:n){
S=0;for(i in 1:n)S=S+alpha.p[i]*k.p(x[i],z[j]); u[j]=S
S=0;for(i in 1:n)S=S+alpha.g[i]*k.g(x[i],z[j]); v[j]=S
}
plot(z,u,type="l",xlim=c(-1,1),xlab="x", ylab="y", ylim=c(-1,5),
col="red",main="Kernel Regression")
lines(z,v,col="blue"); points(x,y)
legend("topleft", legend = c("Polynomial Kernel","Gauss Kernel"),
col = c("red","blue"), lty = 1)
![](data:image/png;base64,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SEABggQUIEhAAYIEFCBIQAGCBBQgSEABggQUIEhAAYIEFCBIQAGCBBQgSEABggQUIEhAAYIEFCBIQAGCBBQgSEABggQUIEhAAYIEFCBIQAGCBBQgSEABggQUIEhAAYIEFCBIQEnZzWRy55fsh9sXk8nDrseG0RFQUrbu5rqk0CIBJWnvLycX30+nn55MJs+7HhfGR0BJ29Vk8uDt8r/QMgElbfNlz9kKfLYcCi0TUBI3i+e9y8nkcdfjwRgJKInL9iNZgacbAkrq3l9agacjAkrqskVQhzDRCQElddfZKrxNoHRBQEncpyeTi0vr8HRCQEnc1Wzx89p5nHRCQEnbTbYH3olIdENASVq2B+m5U+HpiICStOvFIaBZR+1HonUCSsrer3YfOZmTLggoKbta7z26sh+J9gkoQJCAAgQJKECQgAIECShAkIACBAkoQJCAAgQJKECQgAIECShAkIACBAkoQJCAAgQJKECQgAIECShAkIACBAkoQJCAAgQJKECQgAIECShAkIACBAkoQJCAAgQJKECQgAIECShAkIACBAkoQJCAAgQJKECQgAIECShAkIACBAkoQJCAAgQJKECQgAIECShAkIACBAkoQJCAAgQJKECQgAIECShAkIACBAkoQND/B+LD5/qzbDC6AAAAAElFTkSuQmCC)
alpha=function(k,x,y){
n=length(x); K=matrix(0,n,n)
for(i in 1:n)for(j in 1:n)K[i,j]=k(x[i],x[j])
return(solve(K+lambda*diag(n))%*%y)
}
Example 64
k.p=function(x,y) (sum(x*y)+1)^3 ## Definition of Kernel
k.g=function(x,y) exp(-(x-y)^2/2) ## Definition of Kernel
lambda=0.1
n=50; x=rnorm(n); y=1+x+x^2+rnorm(n) ## Data Generation
alpha.p=alpha(k.p,x,y); alpha.g=alpha(k.g,x,y)
z=sort(x); u=array(n); v=array(n)
for(j in 1:n){
S=0;for(i in 1:n)S=S+alpha.p[i]*k.p(x[i],z[j]); u[j]=S
S=0;for(i in 1:n)S=S+alpha.g[i]*k.g(x[i],z[j]); v[j]=S
}
plot(z,u,type="l",xlim=c(-1,1),xlab="x", ylab="y", ylim=c(-1,5),col="red",main="Kernel Ridge")
lines(z,v,col="blue"); points(x,y)
![](data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABUAAAAPACAMAAADDuCPrAAAA0lBMVEUAAAAAADoAAGYAAP8AOjoAOmYAOpAAZrY6AAA6OgA6Ojo6OmY6OpA6ZmY6ZpA6ZrY6kNtmAABmOgBmOjpmZgBmZjpmZmZmZpBmkJBmkLZmkNtmtttmtv+QOgCQOjqQZgCQZjqQZmaQkLaQtpCQtraQttuQtv+Q29uQ2/+2ZgC2Zjq2kDq2kGa2kLa2tpC2tra2ttu227a229u22/+2///bkDrbkGbbtmbbtpDbtrbb27bb29vb2//b////AAD/tmb/25D/27b/29v//7b//9v///+DzHRCAAAACXBIWXMAAB2HAAAdhwGP5fFlAAAgAElEQVR4nO3de4Pb1L6YYU9CyGw4QBK6c8ohaWl7OCWUU3aBgexAmISMv/9Xqm9jyx7ZY/10WWtJz/MHTCYjS7LsN7oseWZzAEJmqRcAoFQCChAkoABBAgoQJKAAQQIKECSgAEECChAkoABBAgoQJKAAQQIKECSgAEECChAkoABBAgoQJKAAQQIKECSgAEECChAkoABBAgoQJKAAQQIKECSgAEECChAkoABBAgoQJKAAQQIKECSgAEECChAkoABBAgoQJKAAQQIKECSgAEECChAkoABBAgoQJKAAQQIKECSgAEECChAkoABBAgoQJKAAQQIKECSgAEECChAkoABBAgoQJKAAQQIKECSgAEECChAkoABBAgoQJKAAQQIKECSgAEECChAkoABBAgoQJKAAQQJK195dzmazi++2f76arTz6pftZfXi6P6vKAux89OlXf5yeYD5/tfzBx90vICMnoHTtIKC/9dfP8wK69MXbUxMIKEECStf2A3q9LtiDPvp5fkBnH789MYGAEiSgdG0voJuYPfi5l1mdH9DZkxMTCChBAkrXqgHtt5+nArr97l/fnLELLKCECChdq/RrFbjaXb5unBPQTR1nL049kIASIqB0bdevD8/67eeZAb2uHMMfIaCECChd2/br5mVdP998s/z7T3ZDi67Wefv1b7PZR1+9XefuyebnLj7/+dSk5wV0fR7hSc0Er79cDnP6+u1BQF9/ebleltWU22/fmT2TJ6B07bZftf18//LO0KJ1QL+fbQ601wF9/2z/6k/9pO0Cup3Ho5+rAb25nc/Fd9WA1syeyRNQunbbr/Wpx4sX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)
4.2 Kernel Principal Component Analysis
kernel.pca.train=function(x,k){
n=nrow(x); K=matrix(0,n,n); S=rep(0,n); T=rep(0,n)
for(i in 1:n)for(j in 1:n)K[i,j]=k(x[i,],x[j,])
for(i in 1:n)S[i]=sum(K[i,])
for(j in 1:n)T[j]=sum(K[,j])
U=sum(K)
for(i in 1:n)for(j in 1:n)K[i,j]=K[i,j]-S[i]/n-T[j]/n+U/n^2
res=eigen(K)
alpha=matrix(0,n,n)
for (i in 1:n)alpha[,i]=res$vector[,i]/res$value[i]^0.5
return(alpha)
}
kernel.pca.test=function(x,k,alpha,m,z){
n=nrow(x)
pca=array(0,dim=m)
for(i in 1:n)pca=pca+alpha[i,1:m]*k(x[i,],z)
return(pca)
}
Example 65
#k=function(x,y) sum(x*y)
sigma.2=0.01; k=function(x,y) exp(-norm(x-y,"2")^2/2/sigma.2)
x=as.matrix(USArrests); n=nrow(x); p=ncol(x)
alpha=kernel.pca.train(x,k)
z=array(dim=c(n,2)); for(i in 1:n)z[i,]=kernel.pca.test(x,k,alpha,2,x[i,])
min.1=min(z[,1]); min.2=min(z[,2]); max.1=max(z[,1]); max.2=max(z[,2])
plot(0, xlim=c(min.1,max.1),ylim=c(min.2,max.2),xlab="First",ylab="Second",cex.lab=0.75,cex.axis = 0.75, main="Kernel PCA (Gauss 0.01)")
for(i in 1:n)if(i!=5)text(z[i,1],z[i,2],labels=i,cex = 0.5)
text(z[5,1],z[5,2],5,col="red")
![](data:image/png;base64,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Prhg/nPabj7Q2fuMA02KgPbFYkDrUFS/rYNpcUa/mE+deauArv7UbQM6m5H+1ewOySpS10c4ze6gv/bpjRsDTusv93Wxx/g0y5YCWqzl9mY2zdR4luzJkf1XT+YP11fainOx1Yp3xbatfPDaVi7POH9tMuvVM9a7lTM9AtoXSwecl401NVbepHS7gK781K0DumZNpOuXl+qkLjVluTP56fKXy+r5p4bLj56t/varJhNZ/+CChW/RXEKlecfr0vub23EtoCYEbTMB7YvlM3aDRgAWi3N9jrfx2oCu/NStA3ptVc7qG62YG3nlMfy1W8avrcq56qr+o/lnNa5VVdOtNHZMl7Zt5YMLmpvSvEF/uukr3t/8GTcD2pznlFYS0L5YDmjdkur3dT5R8myx8lsGdNWnbh/Q1evCrxiR1FgJZK7cg1yI6mhxuOd8YfhZWk8+aF7inn34/Wq+v+rrNxbamK/hvvLBBbMpm2fvXvzZX39/bTmg17eLthHQvrh2zbg+lqz33L76sBjbeDIfwn7bgK741EhAJ1/mh+X0zfOVMlYcwU93FpcGBw2vf9z49e9WNxw9emdhyqTRF8V3KRYpWdiKN598p96ERkCLL1I+p7fm27buwaZqnOijWbWXf/bX3t/ctuUZ6Z0CbTUBJX1loLp3rjDf/BeHFhBQ0rewKmd3WJWz/QSUDshXHMMnr/yz4Ai+3QSUDihb07Vj+E7+VegaAaUL8g4eww/sgLafgNIFxS5ox663FNfg7YC2nYDSCXnndteGHTwr0T0CSjcMOra/VuyAdu2kRAcJKECQgAIECShAkIACBAkoQJCAAgQJKECQgAIECShAkIACBAkoQJCAAgQJKECQgAIECShAkIACBAkoQJCAAgQJKECQgAIECShAkIACBAkoQJCAAgQJKECQgAIECShAkIACBAkoQJCAAgQJKECQgAIECShAkIACBAkoQJCAAgQJKECQgAIECShAkIACBAkoQJCAAgQJKECQgAIECShAkIACBAkoQJCAAgQJKECQgAIECShAkIACBAkoQJCAAgQJKEBQuwOaAezM7hO186+4Q8f+aQPdsvNG7foL7tIe/mAAvSWgAEECChAkoABBAgoQJKAAQQIKECSgAEECChAkoABBAgoQJKAAQQIKECSgAEECChAkoABBSQf0zdfbfoaAAruTckCvzu+92PJT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)
## For a normal PCA, the score can be obtained with the following one line.
z=prcomp(x)$x[,1:2]
4.3 Kernel SVM
### Example 66
library(quadprog)
## Warning: package 'quadprog' was built under R version 4.0.3
K.linear <-function(x,y) {return(t(x)%*%y)}
K.poly <-function(x,y) {return((1+t(x)%*%y)^2)}
svm.2=function(X,y,C, K){ ## Function name is set to svm.2
eps=0.0001; n=nrow(X); Dmat=matrix(nrow=n,ncol=n);Kmat = matrix(nrow=n,ncol = n)
for(i in 1:n)for(j in 1:n) {Dmat[i,j]=K(X[i,],X[j,])*y[i]*y[j];Kmat = K(X[i,],X[j,])}
Dmat=Dmat+eps*diag(n); dvec=rep(1,n)
Amat=matrix(nrow=(2*n+1),ncol=n); Amat[1,]=y; Amat[2:(n+1),1:n]=-diag(n);
Amat[(n+2):(2*n+1),1:n]=diag(n) ; Amat=t(Amat)
bvec=c(0,-C*rep(1,n),rep(0,n)); meq=1
alpha=solve.QP(Dmat,dvec,Amat,bvec=bvec,meq=1)$solution
index=(1:n)[0<alpha&alpha<C]
beta=drop(Kmat%*%(alpha*y)); beta.0=mean(y[index]-beta[index])
return(list(alpha=alpha,beta.0=beta.0))
}
# Definition of Function
plot.kernel=function(K, lty){ ## Specify the line type with the parameter lty.
qq=svm.2(X,y,0.1,K); alpha=qq$alpha; beta.0=qq$beta.0
f=function(u,v){x=c(u,v); S=beta.0; for(i in 1:n)S=S+alpha[i]*y[i]*K(X[i,], x); return(S)}
## is the height at f(x,y). From this we can find the contour.
u=seq(-2,2,.1);v=seq(-2,2,.1);w=array(dim=c(41,41))
for(i in 1:41)for(j in 1:41)w[i,j]=f(u[i],v[j])
contour(u,v,w,level=0,add=TRUE,lty=lty)
}
# Execution
a=rnorm(1); b=rnorm(1)
n=100; X=matrix(rnorm(n*2),ncol=2,nrow=n); y=sign(a*X[,1]+b*X[,2]+0.3*rnorm(n))
plot(-3:3,-3:3,xlab="X[,1]",ylab="X[,2]", type="n")
for(i in 1:n){
if(y[i]==1)points(X[i,1],X[i,2],col="red") else points(X[i,1],X[i,2],col= "blue")
}
plot.kernel(K.linear,1); plot.kernel(K.poly,2)
![](data:image/png;base64,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Zfl3aKOeB+n4T/0pBHS13qJZRvvhj6XveZS4SuCk0p/v22tXVnI90PLv0GVVD9Lxn/pTCOjyw3byo/graF8t2ip4mBb/fK/sivTl36F1PUhHf+pPIqDrKy2ulD1z2H4BguIfmyvlP9//6jWR0qrrQTr2U38aAd2+NF/pryL48UVNj81G+c/3yl6Vs/w7tLYH6bhP/akEFGBwAgoQJKAAQQIKECSgAEECChAkoABBAgoQJKAAQQIKECSgAEECChAkoABBAgoQJKAAQQIKECSgAEECChAkoABBAgoQJKAAQQIKECSgAEECChAkoABBAgoQJKAAQQIKECSgAEECChAkoABBAgoQJKAAQQIKECSgAEECChAkoABBAgoQJKAAQQIKECSgAEECChAkoABBAgoQJKAAQQIKECSgAEECChAkoABBAgoQJKAAQQIKECSgAEECChAkoFTgarF49Or+3deLxdPl8uOLxWL341sfXzz+cfXG+2fNp2zegeQElArcfLtYfPp2+971+p2jAb39bAFlEAJKDZoSfnH/9qqaxwJ683ohoAxDQKnC/U58szW6aultQA+lsfn31j8c+SxIQUCpwv1O/NX2jcNp/Glvo1NAyUhAqUOzw95seF7f1fFQGj+8vK3n5y8FlGEIKJW4Xu3ENx39Zv2BQ2ls9vS/vp9EOvJZkIiAUovXt/vu/+/b1QqmlYMBffTbt0sBZSgCSi2ajc/nreVMh9L4j+YfBZShCCjVuN5dtnQ0jQLKUASUetzuxN+tBhVQCiCg1KMJ6NO79wSU0Qko1bhqduG3c/ACSgEElFo052U+b62RF1BGJ6BUojkX6WkzE/908wEBZXQCSiVer1YwXS9OLqRfEVCGIqDU4Xqzgun+qiICyugElCrcXc/u/qoiAsroBJQa3NyfwnmXUgFldAJKDa5as+/bnXgBZXQCSgWu2+s/tzvx92m8fat9YXoBZSgCSvnai5eWdzvxAsroBJTi7b6k3HK7Ey+gjE5AqVU7jVeHXt34wWdBYgJKrdppfH00kgJKRgJKrVppvPl2Zxf/yGdBagJKrVqvC391P0e/w+vCk5eAUqv7gN784evDnyKg5CWg1Kq1BXqMgJKXgAIECShAkIACBAkoQJCAAgQJKECQgAIECShAkIACBAkoQJCAAgQJKECQgAIECShAkIACBAkoQJCAAgQJKECQgAIECShAkIACBAkoQJCAAgQJKECQgAIECShAkIACBAkoQJCAAgQJKECQgAIECShAkIACBAkoQJCAAgQJKECQgAIECShAkIACBAkoQJCAAgQJKECQgAIE/X+OCB/o3XHuugAAAABJRU5ErkJggg==)
4.4 Spline
## Construct function d and h to find the basis
d=function(j,x,knots){
K=length(knots);
(max((x-knots[j])^3,0)-max((x-knots[K])^3,0))/(knots[K]-knots[j])
}
h=function(j,x,knots){
K=length(knots);
if(j==1) return(1) else if(j==2)return(x) else return(d(j-2,x,knots)-d(K-1,x,knots))
}
## G is the value obtained by integrating a function differentiated twice.
G=function(x){ ## Assuming that each value of x is in ascending order
n=length(x); g=matrix(0, nrow=n,ncol=n)
for(i in 3:(n-1))for(j in i:n){
g[i,j]=12*(x[n]-x[n-1])*(x[n-1]-x[j-2])*(x[n-1]-x[i-2])/(x[n]-x[i-2])/(x[n]-x[j-2])+
(12*x[n-1]+6*x[j-2]-18*x[i-2])*(x[n-1]-x[j-2])^2/(x[n]-x[i-2])/(x[n]-x[j-2])
g[j,i]=g[i,j]
}
return(g)
}
## Main Process
n=100; x=runif(n,-5,5); y=x+sin(x)*2+rnorm(n) ## Data Generation
index=order(x); x=x[index];y=y[index]
X=matrix(nrow=n,ncol=n); X[,1]=1
for(j in 2:n)for(i in 1:n)X[i,j]=h(j,x[i],x) ## Generate matrix X
GG=G(x); ## Generate matrix G
lambda.set=c(1,30,80); col.set=c("red","blue","green")
for(i in 1:3){
lambda=lambda.set[i]
gamma=solve(t(X)%*%X+lambda*GG)%*%t(X)%*%y
g=function(u){S=gamma[1]; for(j in 2:n)S=S+gamma[j]*h(j,u,x); return(S)}
u.seq=seq(-8,8,0.02); v.seq=NULL; for(u in u.seq)v.seq=c(v.seq,g(u))
plot(u.seq,v.seq,type="l",yaxt="n", xlab="x",ylab="g(x)",ylim=c(-8,8), col=col.set[i])
par(new=TRUE)
}
points(x,y); legend("topleft", paste0("lambda=",lambda.set), col=col.set, lty=1)
title("Smooth Spline (n=100)")
![](data:image/png;base64,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5xaGawQUm0dAPaXfTmUTBwx7Ad3AOgMtBNTDNuKZb+WUdTegm6g+YCKgbjbTTmUjkyY7Ad1G9QETAZ10tql4Khs5uNhezY1UHzAR0FGba2dhMwE1k7mRlQZMBHTINttZ2EqLWjvtW1lpwEBAB2w1nspmWmSeNtrMSgMaAR2w0XYWttMi47T7dlYaaBDQHdpkiza50jg6ArpDmzyhTUCxQQR0j7Y4pXKT1cfREdBd2uJFPVusPo6OgO7T9vq5zerj4AgokkE/sTUEFACECCgACBFQABAioAAgREABQIiAAoAQAQUAIQIKAEIEFACECCgACBFQABAioAAgREABQIiAAoAQAQUAIQIKAEIEFACECCgACBFQABAioAAgREABQIiAAoAQAQUAIQIKAEIEFACECCgACBFQABAioAAgREABQIiAAoAQAQUAIQIKAEIEFACECCgACBFQABAioAAgREABQIiAAoAQAQUAIQIKAEIEFACECCgACBFQABAioAAgREABQIiAAoAQAQUAIQIKAEIEFACECCgACBFQABAioAAgREABQIiAAoAQAQUAIQIKAEIEFACECCgACBFQABAioAAgREABQIiAAoAQAQUAIQIKAEIEFACECCgACBFQABAioAAgREABQIiAAoAQAQUAIQIKAEIEFACECCgACBFQABAioAAgREABQIiAAoAQAQUAIQIKAEIEFACECCgACBFQABAioAAgREABQIiAAoAQAQUAIQIKAEIEFACECCgACBFQABAioAAgREABQIiAAoAQAQUAIQIKAEIEFACECCgACBFQABAioAAgREABQIiAAoAQAQUAIQIKAEIEFACECCgACBFQABAioAAgREABQIiAAoAQAQUAIQIKAEIEFACECCgACBFQABAioAAgREABQOhwAQWAcII3KvQCQ1p7YwPYl+CNCr1ACHCsYh623zxsPzG2XAp4A8/D9puH7SfGlksBb+B52H7zsP3E2HIp4A08D9tvHrafGFsuBbyB52H7zcP2E2PLpYA38Dxsv3nYfmJsuRTwBp6H7TcP20+MLZcC3sDzsP3mYfuJseVSwBt4HrbfPGw/MbZcCngDz8P2m4ftJ8aWSwFv4HnYfvOw/cTYcingDTwP228etp8YWy4FvIHnYfvNw/YTY8ulgDfwPGy/edh+Ymy5FPAGnoftNw/bT4wtlwLewPOw/eZh+4mx5VLAG3gett88bD8xtlwKeAPPw/abh+0nxpZLAW/gedh+87D9xNhyACBEQAFAiIACgBABBQAhAgoAQgQUAIQIKAAIEVAAECKgACBEQAFAiIACgBABBQAhAgoAQgQUAIQIKAAIEVAAECKgACBEQAFAiIACgBABBQAhAgoAQgQUAIQIKAAIEVAAECKgACBEQAFAiIACgBABTcFn38waj669Mlvz0WO3suzaQ3+/9npsE2+9eQhoCv74MO9iqV/eKrfbtb9ee002ibfePAQ0BR9kvIuFPmDLzcJbbx4CmoLXePMKqQHUF0577796JMs+98O112aDeOvNQ0BT8Cy//EKn3/8vvqEeqGN5X117bTaIt948BDQBp1/+sgLwdNpy175TPvzwFhvRH2+9mQhoAk77oV9aex226bTl6t9/o6VwxltvJgKagA+y7NGPvpZl2Vf+du1V2ZjTlmt+/5/laJ4/3nozEdAEvJZd+7fVidCH2J/y8YFx4JPTIQK89WYioAl41phKwhEpH2Y0P+Askj/eejMR0PWpE8jXvv6GuqYmIwJeCOg8vPXmIqDr++PDzemP15jN6IWAzsNbby4CmhQ1IuBAnjsCGgxvPRECuo7mEuTO1JvXqIAPAhoObz0JArqOoYBSAS+chQ+Ht54EAV0HAQ2CeaDh8NaTIKBpYRjlhSuRwuGtJ0FA12ccfDLOisIB18LPw1tvLgK6vtOvfjWB5LNnMy5N9sLdmGbhrTcXAV1fMZv5G2+UN7VkFOCluB/oD7gfqBBvvbkIaAI+vKWvp2MU5Yc70s/CW28mApqCDx+pz8nzwT6+/oHPRJqDt948BDQJn72ubin2+a//09orskF8KucsvPVmIaAAIERAAUCIgAKAEAEFACECCgBCBBQAhAgoAAgRUAAQIqAAIERAAUCIgAKAEAEFACECCgBCBBQAhAgoAAgRUAAQIqAAIERAAUCIgAKAEAEFACECCgBCBBQAhAgoAAgRUAAQIqAAIERAAUCIgAKAEAEFACECCgBCBBQAhAgoAAgRUAAQIqAAIERAAUCIgAKAEAEFACECCgBCBBQAhAgoAAgRUAAQIqAAIERAAUCIgAKAEAEFACECCgBCBBQAhAgoAAgRUAAQIqAAIERAAUCIgAKAEAEFACECCgBCBBQAhAgoAAgRUAAQIqAAIERAAUCIgAKAEAEFACECii37IMs+90P14LNvZtmX1l4bHA4BxZY13WxKCiyIgGLTPryVXftOnv/x4Sx7dO11wfEQUGzbs1n2xTeqfwILI6DYtmLsedqBV+NQYGEEFBt3iufnb2XZV9deDxwRAcXGqfNI7MBjHQQUW/fhLXbgsRICiq1TQ1CmMGEVBBRb95rahecQKNZAQLFxf3w4u3aLfXisgoBi4549DT9f4zpOrIKAYts+UGfguRAJ6yCg2DR1BulRLoXHSggoNu21cgqo6ijnkbA4Aoot+7A+fcTFnFgDAcWWPducPXqW80hYHgEFACECCgBCBBQAhAgoAAgRUAAQIqAAIERAAUCIgAKAEAEFACECCgBCBBQAhAgoAAgRUAAQIqAAIERAAUCIgAKAEAEFACECCgBCBBQAhAgoAAgRUAAQIqAAIERAAUCIgAKAEAEFACECCgBCBBQAhAgoAAgRUAAQIqAAIERAAUCIgAKAEAEFACECCgBCBBQAhAgoAAgRUAAQIqAAIERAAUCIgAKAEAEFACECCgBCBBQAhAgoAAgRUAAQIqAAIERAAUCIgAKAEAEFAKH/D6np3pzzr1QvAAAAAElFTkSuQmCC)
4.5 Random Fourier Features
Example 68
sigma=10; sigma2=sigma^2
k=function(x,y) exp(-(x-y)^2/2/sigma2)
z=function(x) sqrt(2/m)*cos(w*x+b)
zz=function(x,y) sum(z(x)*z(y))
u=matrix(0,1000,3)
m_seq=c(20,100,400)
for(i in 1:1000){
x=rnorm(1); y=rnorm(1)
for(j in 1:3){
m=m_seq[j]; w=rnorm(m)/sigma; b=runif(m)*2*pi
u[i,j]=zz(x,y)-k(x,y)
}
}
boxplot(u[,1],u[,2],u[,3], ylab="Difference from k(x,y)",names=paste0("m=",m_seq),
col=c("red","blue","green"), main="Kernel approximation with RFF")
![](data:image/png;base64,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)
Example 69
sigma=10; sigma2=sigma^2
## Funtion z
m=20; w=rnorm(m)/sigma; b=runif(m)*2*pi
z=function(u,m) sqrt(2/m)*cos(w*u+b)
## Gauss kernel
k.g=function(x,y)exp(-(x-y)^2/2/sigma2)
## Data Generation
n=200; x=rnorm(n)/2; y=1+5*sin(x/10)+5*x^2+rnorm(n)
x.min=min(x); x.max=max(x); y.min=min(y); y.max=max(y)
lambda=0.001 ## lambda=0.9 also
# Function of low-rank approximation
alpha.rff=function(x,y,m){
n=length(x)
Z=array(dim=c(n,m))
for(i in 1:n)Z[i,]=z(x[i],m)
beta=solve(t(Z)%*%Z+lambda*diag(m))%*%t(Z)%*%y
return(as.vector(beta))
}
# Normal Function
alpha=function(k,x,y){
n=length(x); K=matrix(0,n,n); for(i in 1:n)for(j in 1:n)K[i,j]=k(x[i],x[j])
alpha=solve(K+lambda*diag(n))%*%y
return(as.vector(alpha))
}
# Numerical Comparison
alpha.hat=alpha(k.g,x,y)
beta.hat=alpha.rff(x,y,m)
r=sort(x); u=array(n); v=array(n)
for(j in 1:n){
S=0;for(i in 1:n)S=S+alpha.hat[i]*k.g(x[i],r[j]); u[j]=S
v[j]=sum(beta.hat*z(r[j],m))
}
plot(r,u,type="l",xlim=c(x.min,x.max),ylim=c(y.min,y.max),xlab="x", ylab="y",col="red",
main="lambda=10^{-4},m=20,n=200")
lines(r,v,col="blue"); points(x,y)
legend("topleft",lwd=1,c("no approximation","approximation"), col=c("red","blue"))
![](data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABUAAAAPACAMAAADDuCPrAAAA3lBMVEUAAAAAADoAAGYAAP8AOjoAOmYAOpAAZpAAZrY6AAA6OgA6Ojo6OmY6ZmY6ZpA6ZrY6kJA6kNtmAABmADpmOgBmOjpmZjpmZmZmZpBmkJBmkLZmkNtmtttmtv+QOgCQOjqQZgCQZjqQZmaQkDqQkGaQtraQttuQtv+Q29uQ2/+2ZgC2Zjq2kDq2kGa2kLa2tpC2tra2ttu225C229u22/+2///bkDrbkGbbtmbbtpDbtrbb25Db27bb29vb2//b/7bb/9vb////AAD/tmb/25D/27b/29v//7b//9v////fRAlUAAAACXBIWXMAAB2HAAAdhwGP5fFlAAAgAElEQVR4nO3dDZvbRmLYcaxXUrRnn12pcpU6lhqnPTdeV40vtnXW1XeJdiV7+f2/UAnibd4xM5gBZoD/73mSo7kkMATJv/BGsjkBAKI0Ww8AAGpFQAEgEgEFgEgEFAAiEVAAiERAASASAQWASAQUACIRUACIREABIBIBBYBIBBQAIhFQAIhEQAEgEgEFgEgEFAAiEVAAiERAASASAQWASAQUACIRUACIREABIBIBBYBIBBQAIhFQAIhEQAEgEgEFgEgEFAAiEVAAiERAASASAQWASAQUACIRUACIREABIBIBBYBIBBQAIhFQAIhEQAEgEgEFgEgEFAAiEVAAiERAASASAQWASAQUACIRUACIREABIBIBBYBIBBQAIhFQAIhEQAEgEgEFgEgEFAAiEVAAiERAASASAQWASAQUACIRUACIREABIBIBBYBIBBQAIhFQAIhEQAEgEgEFgEgEFAAiEVCU5m3TNFffbT0KwAMB3Yffny+uTtut5qn7Nrcet3HO4JOfhSt+e/OH81WffvVeutnDa+NM3n150zRP3qtXDz6c/9r9ub306LNvIwfp8O6bdriP/ihN2vwYss8h6WwRj4DuQwUBvQxRDOhlhq2rr8Xb3V+uk0o7VNUe0O7vY0BdN4307sUw3Obxd3OPIfccUs4WSxDQfaggoLdKF79vJkIG+lQ2z/Q7O6r4dvpzH9DoFWXXDIZsvXI/htxzSDlbLEJA96H8gL5VVizvpV58d1Kvl1ZBhyjaAiqudQ63TbobdZioPF7bY8g8h5SzxTIEdB9KD+jD90oW+z2d708fX8jTvB3K8Eq4+7B2ZgnosNYqBVRZh12km8HVP70/PfyfZhyv9THknUPK2WIhAroPhQf047B7bwzo/Rg8eeiX/P2X50osL2N78pNz6MJdPpqPQ8XrovxqmtnlcdgeQ+Y5pJwtFiKg+1B0QD9+M25wjgG9ndYRhYvdf1x991ZZBb11PrpxnXNs7uWahAG9F8Z+mfZlMLbHkHkOKWeLhQjoPsgB/e3Np5cNws/G01z6Aj1c/tCf4/Puy0Y8E2YI6OVq+TSgy1WPvn4vB1Sfi2NsSkAvm6Hifr5+on351AA6AzpswHsE1GMxGL17+eWnN/3Uu4fzyv4YRvd93n795jycq8+tK9Bhc5idLVZEQPdBCuhfpuMRV//UXdWV4y/Cqtq4VT3cqwvoePV0Js101U9iQPW5SMeRO6/GsX31ixjQS+HEFa6+HcOqp1JMZ0Av55f+z4CAuhaD5TGYFrXtMYy6gI5z6FcVl85hdrZYEQHdBzGg8jt02ta7+nS69sn/m/LXvxkvd3s8rS0OwRIOD1+1Z2/3YTLMxRHQ8+qXuJGqV6C7PJ4rqqxauQJ6ufurbi+pV0Cdi2E+b+PjsDwG5ZZ/FI6uu5aS9xxmZ4sVEdB9EAKqnA/Tvb1u1fesyLJm1N1z2kAePLXNxRbQ/3rZPpYCOh0Ikcb+dhiOsk/XEdDL+J6eDAE1rJnNL4bZvE0flLI8hsm9OiXXUvKew+xssSICug/CO+kSicc/DZvewpVN88Xfh7Nkzjf58XT65WZ6N/Zv7Paev75Qi/L42+HYdh9Q01zcaZACKvZuGrsppS1xt5+q/4CoHNDf1cP4vfnFMJu32/E682MQ9AFtl927G/luC+YwO1usiIDugzFCwqkxt1MR+8tCNcWN1+7qbiWovX66NN7zqXUuTu6ATsHotryljVNHQO/7+4YE1LkYZrwdF4HlMahj629xbyhl3BxmZ4sVEdB9EIL28Nd/+fTpdKUQUHFnZ/+uE6p2uVr6sMt4HGN4i3b/8dQ6F6f5gHax7qbUXX4mzNfYt8t9n57UgNqK67EY3MTPU3kG9JVwA48zjmbnQEBLQkD3wbgtpwZUPNKtnXIoJ2i8q5QW4xclpQuolf3009tG3LM4rXNa7uGxGJy6ul0J57vPBrSfqvQPwqI5ENCSENB90AP68Ov/+sO0BiQGxXzOtnwi/fh+l8OkdUmay+J9oGa/fa9OSp7mK3WCw+Nq93XK5heD8zF8L9bNcx9oP4cpoEvnwD7QkhDQfZDfSR/ffHkjvzu1cvTvQFtAx8+4yGGSbqPNJSCg/oeSh7MAvhAfaefpuAGvBXQYi7IfdH4xOB7DQ7fXdByp31H44RGPHxpaOgeOwpeEgO6D+E765UZ/d6YPqGEukQF1n8w4fMuG9Eg7T7XzhISa/EU4wWC0JKB93R6PHyiafQziDXwC6jcH/0WH/AjoPggB7b/36NN//PN/KPtAPQI6vN3HLU4pAsJkTHMJCKj/x2n6gI4ftdwsoOJRe7/HEBpQvznwSaSSENB9mALaHbn4drwyLKBD4OYOIpnn4nSvTd/rA90P4tmnJ++Amr+B2WMx2HTd+0K4ZvYxmAO6dA7+iw75EdB9mN5Vwhs1IqDSCUvt9VIep9OYzHNxkk8VCvhKIftBJHtAu7/MH0TyDmg3QcPX5DseQ1hAvefAtzEVhIDuwxhQ8XQZIYneARU/v9neRjyRvl8ZfGqdi5Mc0KAvtVSPEEmTNAXU8sN08QEVzoBVZu94DEEB9Z8D3wdaEAK6D0pA298a61fcAgPafWhT+CjnvXrtFFBtLk5yQLv1Vs+vVfc4VmL4JJL0bSjCJ1pjAqp9iH78min1MQiTCgqo/xyCFh3yIqD7MBVDO0YxbfZ5BXQifqpT9NQ6Fyfl0z7yb6h957yr67Pw4uTMXyaSIKDKV6c04smnymOIDGjAHIIWHfIioPugfBa+9+n4rW6+AX053Xk83jP92m733WxPrXNxUj8uKf605Mz66+YB1Y+cv7I9hsiABswhaNEhLwK6D+KXe4xfEfz19FPsvgF9NZ7eOZ2N+DD+Isez6Xs2jXNx0j5vPn6v8fyPm7t/0mMcvfn7QJcHVF8LH7qlP4a4gIbMwXYlNkBA90Hc6ffwS/uVwY/aMyfHd613QOWfu+j9evlJj6/+LobJNBcn/Qs7fnvTfgx05tc0LjYOqLi+LedNfwxxAQ2Zg/VKrI+AogLzAZWp30j/dtWP66w7N2yJgKICCwN63kBe8eM6684NmyKgqED3NXTOn7UUqb8Lf7/qyT7rzg2bIqCowHCM2mfNbjwhaPxBkDc3K25Trzs3bIyAogL3MQEdjsLcr3qy5Lpzw8YIKCownOUTEtDp9z3+xxcr7pJcd27YGAFFDfqz+QMC+th7jykQjYCiCg/v2q+/9w3ooz9+O39DYDECCgCRCCgARCKgABCJgAJAJAIKAJEIKABEIqAAEImAAkAkAgoAkQgoAEQioAAQiYACQCQCCgCRCCgARCKgABCJgAJAJAIKAJEIKABEIqAAEImAAkAkAgoAkQgoAEQioAAQiYACQCQCCgCRCCgARCKgABCJgAJAJAIKAJEIKABEIqAAEImAAkAkAgoAkQgoAEQioAAQiYACQCQCCgCRCCgARCKgABCJgAJAJAIKAJEIKABEIqAAEImAAkAkAgoAkQgoAEQioAAQiYACQCQCCgCRCCgARCKgABCJgAJAJAIKAJEIKABEIqAAEKnsgDYAkEz6RCWfYkJbL20A+5K8UaknmFKGfzDgwgLHrhFQ5MQCx64RUOTEAseuEVDkxALHrhFQ5MQCx64RUOTEAseuEVDkxALHrhFQ5MQCx64RUOTEAseuEVDkxALHrhFQ5MQCx64RUOTEAseuEVDkxALHrhFQ5MQCx64RUOTEAkd1Qr6ojoAiJxY4ahP0VZ8EFDmxwFGZMZxeBSWgyIkFjroI2SSgGt7PK2OBoy7iK9bj1UtAkRMLHHUhoC68n1fGAkddCKgL7+eVscBRFwLqwvt5ZSxw1IWAuvB+XhkLHHUhoC68n1fGAkddOI3JhffzyljgqAwn0jvwfl4ZCxy14aOcdsd+Pz+8bj75OfheH7+Nv+/BFziqxJeJWB37/RwTwYfvm2ex9z0dfYFj9wjogcRE8L4hoIANAYXTENBILHDsGgGFEwEF7AgonAgoYEdA87vsPnx484emufr8p/HKd182TfPZt++1m//25tPzX64+uxz8Pn24aZ6ePp5ve/XF381XnG6bJ+/fnaf+2U/qdM/163Zcnodwvle/H/P35+c7PPxyvsfjdh4Pb26a5tHXxtnf98cjXwn7QOWRGx/chIBi1whofm1j/v1mTNHFxxf9fz9Wq/N2PAvtSZuotpcfujtffXcyXdEG9JfhP+Xpdt08DSUVAvqfr7ubPRvv8dQ0e0NAlZGbHpyAgGLXCGh+D6+nU3P76J0bNlCObb8VbttuO59b+Q+vxftqV5wD+uimT6A63fON29u0V786iQH952EK/zoO7pVh9npA1TkYHpyIgGLXCKjoLpZzqpfGXH39vj2nst+jeHu+4qv33dbzU/G2bZ8um+a/vujWAS8rm+3K3i/9TbUr2ok1T7oVWW26t5epdP9fCOh5Cj+eVyafD2uS7/rba7PXTmNS52B4cAELHKgbARVE93M+oP165tsxgv3K2nSpcz8G9fyX9k5tLy8lG26qXTHk0Tjdy7rnfb9uKAT0ybCPdLrUb7LLs1cDqs1Bf3ABCxyoHAHNr21Mv2p2rk7bKSE1t7aj3OfMycXqb6pdIUzCMN1zANsNfDGC/QZ9N49+Wv3ctNmrAdXmoD84CQHFrhHQ/M6NGZLXN+Z2Ot5yOaiu+e2v/3LTDAEdqtStHmpXCFMzTLfbR9ndYwpoH0vTJXn2akC1OegPTkJAsWsEND+tMcIVenUe3n15IxylEQLbXdSuOEetn5pxuu0m//T32YAqs1cCqs+BgOLICGh+poCOq3uXkzKFG3+4mQ5q6wE931S7QgqoPl1hJ6VHQNXZ6wFV5kBAcWQENL+QNdDuLKFHn/3jn/7jeZo10LfDCVE+AdVmzxoo4EBA83PuA72XD12/HU+tnw4ize8DFY4qqdNtjxMNh53mA6rN3rEPtJsDAcWREdD89MZYj8ILN70fN+GHjeYuXtoVQkAN023/d7h6NqD67H2OwhNQHBYBzU9vjPU80Omm7Unuw3mgT4ebGq8QAqpP93J+53DeUkBAh9n7nAdKQHFYBDQ/Q2PEz/NI0bnttqEvfxjPm28+/+n0IH0SSbxCCKg23fYI0qtxdXJ+E16b/XCGvfGTSP0cCCgOi4DmZ2iM9bPw942gD+gj6bwi7QoxoOp0304dfeYTUG32/WF552fhCSgOi4DmZ2qM9duYvh/q9dXrYZfn0z5rj3/uJyFfIQZUme64wd19mNPjNCZ19v2J+M9c38ZEQHFYBDQ/Y2OGb9XUbn25/tF5K3k86P709OHF9I2d2hVSQOXp3o6HfG7l7wO1n0ivzP48wW/OV3xh+D5Qx4ObEFDsGgEtnPZRT/NnP0tV3wIHAhDQwhFQoFwEtHAEFCgXAS0cAQXKRUALR0CBchHQwhFQoFwEFDmxwLFrBBQ5scCxawQUObHAsWsEFDmxwLFrBBQ5scCxawQUObHAsWsEFDmxwLFrBBQ5scCxawQUObHAsWsEFDmxwLFrBLRy0xcdh/j4bfx9g+xvgQMCAlq5mAg+fC/90mZO+1vgqM3wG16ZJp58iqknmNL+3s8xEVR+qjin/S1wVGb6lcQ8U08+xdQTTIn3c2sI6ApY4NjWGM48BSWgB0RAcRRCNgnocryfWwQURyG+AHO8GAnoKn5782n7Y+v9bwFfvhP545fnK774u/mK023z5P27PzTNZ+2Prw8/JHz5zeBz/bodl+0vtos/Vfzk/cMv53s8bufx8OZG+N1jefb9j8o3rww/Vdz/5HJ7/cOb88SuPld+tj4UAcWmCGhSG72f3477sS8/nN728vx/re431bUr2oD+Mvznxxf9nR9favq6/8H2rqRCQP/zdXezZ+M9nppmbwioPIfL9f9+M95sCQKKTRHQpLZ5P08B67adz638hz52XTC1K84BfXTTJ/DcxsEld+cbt7dpr351EgP6z8MU/nWYVlc/ZfZ6QNU5PLwW7tEXPRIBxaYIaFIzD/c6lnOqbZ8um+a/vujWAS8rm+3K3i833VqidsU5oOebdpvP54tXX73vtsqHv52n0v1/IaDnKfx4Xpl8PqxJvutvr81eO41JncMloFdfv29PGF24u5SAYlMENCn3w43upzug9+O29DmUbbHaXl5KNqxNalcMeRSumS5d1j3v+3VDIaBPhn2k06V+k12evRpQbQ5tQPudo2+bZT9hR0CxKQKa1Mbv53Pm5GK1oXxmuGL4n5OUsOHKcwDbDXwxgv0GfTePflr93LTZqwHV5tAGtJ/7eWR9yOMQUGyq4TSmlLZ8P//213+5aYaADlXqVg+1K9qS9UdvpkvjLxp3+yi7e0wB7WNpuiTPXg2oNofz9UPPCSjqNha0IaDLbfR+fnj35Y1wlEb4affuonbFOWp9woSYTTVrN/mnv88GVJm9ElB9DgQU+zEdD80z9eRTTD3BlLZ5P3+4mZ5EPaDnQGlXSAEdVyMvJ3v2V45ncM4HVJ29HlBlDgQUO5KznwR0Bd1ZQo8++8c//cfzNGugb4cTonwCqs2eNVAgEQKa39vhBHXhINL8PlDhqNKwh3I4nt4eJxoOO80HVJu9Yx9oNwcCCvghoNkJObofN+GHjeYuXtoVQkANR+Hb/x2ung2oPnufo/AEFPBAQLObctSe5D6cB9olSzgxVLpCCKh+Hujl/M7hvKWAgA6z9zkPlICifln3fg6zSD7F1BNMaZP38223DX35oM943nzz+U+nB+mTSOIVQkClzwn1nz1q09mvTs5vwmuzH86wN34SqZ8DAUX1hOPv2VJKQPO7bwR9QB9J5xVpV4gBVT+p/nbq6DOfgGqz7w/LOz8LT0BRO/EM0GynMhHQFXw/1Our18Muz6d91h5fWqddIQZU+a6kcYO7+zCnx2lM6uz7E/Gfub6NiYCickItxZQmn0viCRJQg8u3bT46byWPB92fnj68mL6xU7tCCuj4bZ39X4ZDPrfy94HaT6RXZn+e4DfnK74wfB9oPz8CiupJ/Wy0K5PPJdkUU08wpTLez8Jpn5YrdqOMBY4DMgY0+QuSgG6AgAK5EdAMyng/E1AgNwKaQRnvZwIK5EZAMyjj/UxAgdwIaAZlvJ8JKJCbeOi9Ea5NPZe00yOgELHAsRXT2Z+cxrQM7+eVscCxGf0TSJxIvxDv55WxwLGdsZ58lDMR3s8rY4GjBLn6SUCRFQscu0ZAkRMLHLtGQJETCxy7RkCREwscu0ZAkRMLHLtGQJETCxy7RkCREwscu0ZAkRMLHLtGQJETCxy7RkCREwscu0ZAkRMLHLtGQJETCxy7RkCREwscu0ZAkRMLHLt2uIBiZVs/5UBGBBR5bf2UAxkdLqBbjwDAfhBQAIhEQAEgEgEFgEgEFAAiEVAAiERAASASAQWASAQUACIRUACIREABIBIBBYBIBBQAIhFQAIhEQI234pvYAMwjoKYbUVAAHgio4TaNcgHAFspfk6kwoA9/++sPP/zw57+9j7ivx8MVnq6Snzhg9yrYFqwtoL9+I/xaxOc/ht7dK6BBNweQRw3bgnUF9OML5Qd3Hn8XNgECClSiim3BqgJ6f9NG89OXnT+0/3H1KmgKBBSoRBXvxJoC+vvzczC/Fa54dw7qJz+HTIKAApWo4p1YU0Dfarlsk/osZBIEFKhEFe/EigL68Lpp1A32+6Z5EnI0noAClajinVhRQM+rm9r2uuk6F05jAipBQNNaKaBVnDwB7B4BTeu8CX/1nXJdhk34Kk7fBXavim3BigJ6utVq2e4WfRoyCb5MBKhFDduCNQX0w825oD8JV3w891NbKXUq94kAoNhuW/D62vOGNQW0PY/pXMyXf/qh9W/dmfRBZzERUKAi2/VzlwE9/XKjfJTz6uuwCRBQADP8+1lZQE8Pb8SEXn0V+o1MBBSAW0A/awvo2cOvP7x5+fLlVz/8GPF9dgQUgFNIPysMaIDGYOsxAShZUD8JKACMwvq574DqCCgAu8B+ElAAGAT2k4ACQC+0nwQUADqhG/AEFAA6Uz/v7jzvUlFA26+fN0j+dXYAjkjsJwE1D46AAjCJ6WdNAdV/1JiAAkgjqp9VBfTy9Z9h376kIqAADOL6WVdAjb8rF4SAAtBF9rOygAb/BpKKgALQxPaztoC2P4K0ZCOegAJQRfezuoCeN+KXrIISUACK+H5WF9DTh5cv/3f8vQkoANmCftYX0GUIKADJkn4SUABHtqifBBTAgS3rJwEFcGDL+klAARzXwn4SUACHNW7AR/aTgAI4qsX9JKAADmp5PwkogGNK0E8CCuCQUvSTgAI4oiT9JKAADihNPwkogONJ1E8CCuBwIn7A2IyAAjiYZP0koAAOZuEXiIgIKIBDSdhPAgrgUFL2k4ACOJKk/SSgAI4kaT8JKIADSdtPAgrgOFKdQD8goACOInU/CSiAo0jeTwIK4CDS95OAAjiGDP0koAAOIUc/CSiAI8jSTwIK4ADy9JOAAti/TP0koAB2L1c/CSiAvcvWTwIKYOfy9ZOAAti3jP0koAD2LWM/CSiAXcvZTwIKYM+GDfgs/SSgAHYsbz8JKID9ytxPAgpgt3L3k4CmnXon5zwA+MreTwKadOIUFChH/n4S0JTTbpQLALazQj8JaMJJN9PFbHMB4GeNfhLQLJOmoMDGVuknAc0yaQIKbGudfhLQLJMmoMCmVuonAc0yaQIKbOh6rX4S0CyTJqDAdtbrJwHNMmkCCmwm5/d/qghouklzGhOwvTX7SUBTTpsT6YGtCZvv+ftJQJNOnI9yAttat58ENO3U6SewpfUOH3UIKIC9WLufBBTAXqzeTwIKYCfW7ycBBbAPG/STgALYhS36SUAB7MEm/SSgAHZgm34SUAD126ifBBRA9bbqJwEFULu+nyt9fFNEQAHUbbt+ElD/e/I5d6BEUz/XnzcB9b0jBQVKtGU/Cajv/fiuT6BA15v2k4B63o1vmwcKtHE/CWjw3SgoUIrNTl8aENDQuxFQoBCb95OABt+NgAJl2L6fBDT4bgQUKEIB/SSgwXcjoEAJSugnAQ2+GwEFCrDhx48EBNTvbpzGBJSkjH4SUN/7cSI9UI6NT/8cEVDfO/JRTqAUpfSTgPrfk34CZSimnwQUQGXK6ScBBVCXgvpJQAFUpaR+ElAANSmqnwQUQEXK6icBBVCPwvpJQAFUo7R+EtDVZsxppMBCXT+3/vimiICuNF8KCixzXV4/CehKs+Wj9MAyUz+3HomAgK4yV77MCVimuN2fFwR05blSUCBCmf0koGvPlYAC4QrtJwFde64EFAhWaj8J6NpzJaBAqGL7SUDXnisBBQKV208CuvZcZ0fACaOApOB+EtB15up/GhOn3AOSkvtJQFeare+J9JxyD0iK7icBXWu+fuuVnHIPSAr8+KaIgK41Y6/tcg43AYISP/4uIaBFIaDApMiPv0sIaFEIKDAqe/fnBQEtCgEFBhX0k4CWhYACnesa+klAy0JAgYs6+klAy8JpTEBrymfR/SSgheFEekBc/Sy7nwQ06cQTfAaTj3Li8CrZfG8R0ITTTlrQRKMCalPN6ueJgKacNBvfwHI19ZOAppsyh3+AxSrafG8R0AxTpqBAnOI//K4goBmmTECBKFVtvrcIaIYpXy5zMAgIU9nme4uAZphye5nTkYAwtW2+twhohimfL3NMHghT3eZ7i4BmmLK04klAAQ/1bb63CGiyKYvJ5JASEKLGzfcWAU03aWGjnYACAWrtJwFNOe3psBEBBfzVufneIqApJz4edieggLdaVz9PBHSF+RBQwKHazfcWAc0+HwIK2JX/y5suBDTTfDiNCfBQ8+rniYDmmxEn0gNzqt58bxHQbHPio5yAW92b7y0Cmm9W9BNwqX3180RAAWxkB/0koAC2UP/me4uAAlhf18+6Vz9P6wT04c+p5xHN/+F2ny0DkMMeNt9bawT09+fNZz+mnk2ckIBSUCCPfWy+t1YK6NnnJTQ04OFek1Agi51svrdW2Qf67sXlhJ6rz39KPbNQIQ+XggKnDCfk7WXzvbXSQaSHN3/oGvrV31PPL0jYw6WgQPKPhOxm87213lH4oaGPvnqfepb+Ah8uBcXRpf5Q8o4231urnsb025ubS0Mff7tVQ0MfLpvxOLbUX4uzs36ufh5o39CrjVZD/R9u/wRTUBya7XcWIu1q8721ckDffTM8HVffpZ6xj5CATgnNNhygcI1Q0MWx2Nvq52ndgL77st+A//WbrQoa8HApKCDtAl0aix32c72A9uue/bb7w+umeZp6zh6CHu4dm/E4OGkX6MJY7G7zvbVOQH/tt9ynE0E/3DSf/Jx61vPCHu7wbyUFxUGJ0VwY0B2ufp7W/CTSedNdvq78gLIZj4NLFtA9br631gqoetj9fN2TDQ7EBz9cCooja5o0pzGN/UwxqJKsE1DDZzj/lnq+XsIf7rqb8XyNPYoivBqXvCx3uvp54vtA561ZUH5ICWW5nLy09FW51833FgGdt9pmvNc/9iQW6+nOn1/2mtvt5nuLgHpYaSXUa3cTK6lYUYJdoDte/TwRUD/rFFQcnG2gqb/aAXBa/ILbdz8JqKc1NuM9Apr6qx2AGcs2eS6rHPvNJwH1JqyEphuOzCugszcBotg6ST9dCKiv/JvxBBTbybFzfc9Hj3oE1F/ughJQbCbHzvXdr36eCGiQzJvxBBRbybBzff+b7y0CGiLvZrzHi5iAIov0L6yhnymmVTACGmadglo3owgoskj+wjrE6ueJgAbLuhk/uyOf05iQReKAHmPzvUVAQ2XdjJ89EMqJ9MghbUAPsvneIqDhNv2aZT7KiQySBvQwq58nAhplhZPq7egn0ksZ0CP1k4BG2bSgQHLpdq4faPO9RUDj8GtJ2JVUO9fbd8RhVj9PBDRa/yKhoNiHNDvXD7X53iKgsdiMx64k6OfBNt9bBDQem/GA4Gib7y0CugCb8aALuzsAACAASURBVMDocJvvLQK6BJvxQO94m++tWgP68Ncf/vz38Lslf7ishAKnY26+t2oK6G9/G5L57sVld/fVF+8DJ5H+4VJQ4LD9rCmgvz9vPvm5vfDw/XjGxdWrsGnk+AAPm/E4umNuvrdqDOhtW84/vnz5ZZvQsIJm+QTktBKaYeJA6Q67+nmqMqD352x22+4fXzd9U33l+Qg5m/E4sCP3s8aAnldAn/ZXPZwL+ixkGrm+g2MqKAnFsRx3871VX0DbaI7b7ee10SchB5KyfYkRK6E4piOvfp5qDOi4K1S4zjYUg1yjy/+rxzi2Ir/H8NCb7y0CmgwFRUZFfpN238+th7Gh+gJ6um2uvhuu+3ATdhQp66uPlVBkU+RvuRx99fNUXUC/O132e44HjorZB3pBQZFJpl8TXLRSe/jN91ZdAT179N9//OdxFbS9qoij8IPh5bRCQgvcoEM2eX7PetFuATbfW9UFtHPZbn/4y00Z54EKUq6EOl/cRe4SQy5ZArpotwCrnxcVBfRczF/ffHkzBbQt6rQ71Ev+3NwlWwl1JrLIXWLIJkdAF+0WoJ+dqgJ6canoENDHP4XdeY3aJFoJdSYy0y4xlCp9QOV/nQOnyeb7oL6ATh7+b2A+V6qNuBIaPRF3IvPsEkOxkj/hyvZN2DTp56jmgEZYKTYJVkLd7xgCejCpn/A2nJfp9AUNmiab7xMCmsXd4o92zgV0WnsgoAeQeJ/NZXLiyydkoqx+CghoJktXQp0Blba/COgRpD1qKL5wAl9EbL5LCGg2y1ZCXQEV9lw1BHRX7CdeJD1vLT6g9FNGQPNZ9JNzjoAqB08J6H64KpnyvF9192dIP8mniIDmtGAl1BlQaYOu6AWOEKud3Tuks1/59J0dq58aAppVfEEdRw26VYZxI77oBY4A653dK7x6AlZr6aeOgGYWnVD72siw/cVHOXdmvZPTxA0Y7xcR+TQgoLktKaj51T1uf9HPfVkzoOGroPTThIDmF3tCk+21zVn0O7XiE9sImzEnw1aOhs13MwK6gsQ/mCQ8CFZD92TNfxmVdc+52XX9zDukKhHQNaT9puUpmOwI3ZVVNy2UV457fqx+2hDQdSRdCdUOwVPQXVh734zv/Nh8tyOgK0m6EqqteRLQPVjvNCZ9Jo4ZsvnuQEBXI6yEpv+yegq6B6udSD/MxXxZwuqnEwFdT+rfnONo/O7k3KmtT9njBXRNP90I6JpSH0wyX0a98vfTstliniX5nENAV3WXdjvefBnHZoywae/A3D5Xfrd4HgFdWcKV0MMGlHO3XIy7AcytdOxzHaZBPt0I6OqSJfSoAeXsVxc9iurSMnwQw9pPlvEMArq+5b/30Vn7rJdCrHyoujL6i8J5zpu9n93mO8t4BgHdQqKEHjIlB/1nw5e2WdL0/198tcxPpBkOHrGM3QjoNtIcTDrihtZRd1x4UhdP/9roLuo3sU1kOnWeZexEQLeSZCX0eP0koG56QKerPb845HTdHjsaDh6xjJ0I6GZS7Qo9mMMFNOwfyeUBPb8czwE1ThAaArqhlCeFHsbRAhq4m8Ya0PHyfD+vj7aMFyCgm2IlNNjB3tyhBwotAb3cXTioZNF/cvNgy3gJArottuNDHevNHXzOgXoH4eSl2TXZ676fB1vGixDQrZVe0NKOUx3rNKbwlCmrrOLScj+RwveGHGsZL0JAt1d0Qss7U+pQZ79GrAsKz5j81LnvL31vyKGW8SIEtAD9dnwxB5OE912J76Tymp5PzMa01s/h4NHMzk/xe0OOtIwXIaBFEBK69VDUVZjp2i3HJDnQe3vJ3sgpnLPLS//augMt40UIaCGWbsene8GLK50cTdjYgidAfh7nDh7xrXVxCGgxFq2EptvkklY6CejGFgXU767DoXfEIKDlWLAdn3BXpfy+I6DbWrAPxfO5I5+LENCSxB5MSrmrkoAWJf6fRr/njq33ZQhoWeJWQlN2joCWxXPnjH4jj+eOI0WLEdDCRB1MIqA7FtRP4Wbzzx3nKi1HQIsTsR0f1LmZN40S0BJPY4LKtKE/+6I43/Za/eARAhHQ8oQfTAoJ6NxqhxrQ8k6kPybXs2bM5sw/fteXftr/Di8EtEShCQ0I6GwRlfcdm3llcD4P5uff9VR3X/p5p98JYQhombqE+m7H+wfUY5tced/RzxK4/92zPP/W6F5bvvST5zoYAS1VSEL9d1WKbxFHQXkjlWXmCbYffLf20/Slnzzx4QhouaaEzt7Ud1el9BZxHEfibVSWmU2MoIOIw5nz2p3Y3x2BgJbMP6F+Kw/j35tu92aiYSK3dAHtPrhpupP/ZgwmBLRsl4T6bMf79nNcyahwYRyXYcem5c/uZ1X83LseUM+JQEBASxd0NMmtaaYFIF5G6aRD63pBPVce5a8NaQwT9ZkKRAS0fMkSSkBrJTxt4xFAU0Fd2yHaty6J+zyVO/LS8EVAKxB2TpNd08hvmgRDwyrEwztjK+UbyPRJGL51Sb69/OpI/hB2ioBWwXI0KfBwuXiogIDWZHrWTpa1RKme+nNr/tI6qbfiflBeG74IaCVMCfU79C7ePuJOKMG04W7fzJYKKv1lOvRunvb0P8bVW9gR0GpoB+TFzXGvKcinS+cYI3LR/91Tn0Hp5SD+ce4r5/VT23hxeCOgFZF3hYYfNHXfg7COSlwU2piU4cnrptMf53+xQwtvYY+8aAS0KmJCI87bc62zsmk/KndROJ5zeeV0uOzeeFcmVO7jLhcBrYuwKzTmxGf7WyR4f8B+FbwoAgPq+00K4v3oZxACWpsxoTEBtb5FwvcH7FbJi8K9C1QNaPLv8oKGgNanP5rUNNPbY/Hj4k00KnpR2NeO1YD6nzZc8r8YxSOgFdBWGy8J7d4jwy0Wz8J8eV1FbEKWsShsrDthxOuC+ln0PoviEdDymd4zl4CKR+QXz8N8eVVlHMQoYlHY2XfCSCGcPXRkmmaBD7d0BLR4tvWD838OZ9Yvf1glVKOQFaESFkWEpitoLySfp0JW/atEQEtn30PVFvRyan2CV34B1ShlV1wBiyKKWFDneZ9IiICWbubMlX6FI+Nc1lLAEHKNQ1jBy7iux4b4Bgho6Vzv57Gfi7/qroDVv3ICmnpRCGXLGjn6uT4CWrrZrvh+Z/3cbLbeAVlKQJMvCnF6SyftbGSar91GCAJaOo+uJEno5huAxQQ08aKQ1mgXrty6RkY+t0BAS+fVlRQJ3XoDMCigeQebdOrCZBrpcsykbCuwCbZBEIOAlk7vivHtPSa02ndRSEDn1xG3/udAHIlwcVFArSuw5HMzBLR02rvGFo/aExqwfTu/K3HzHRLiUISLCwNqupxiDzhiEdDiKbVwxMP9G8jbFcVzzt5HWOZTu/0hsUmGgAoLtOp/M3eAgJZPWptyx8OR0O3Wybzn7HtDeXmYbzBdDB5vYukDOi0nSz6LWfvePwJaAfH94H9Wk/b7c8qFtQTMOSK0loCaL28ieUCHx33XXM4ANt2Ogq6FgFYm5Kwm+ffnZu6VS/o5S0WuIaCpTmNS9oFfvtHQNUMKmh8BrYz3WU3ylvx2SUk+Z2HNqoqASkFb1Db1IKL8pdra7Ep47LtHQCvj2QY1ofsMqHQ55zyXETapF21d99vu54339stgbevfhT34nSOglfF/e0hb8gRUn8h6Owmlg14LZiyseTbXtvVvAromAlqZkLeHkNCdBVQ4nydqnrUeZpHHbR4/AV0TAa1M2B6ucUs+9l21bINTvW+igM4eJplbSNUeZrmTlikB3R4BrU3gm3/6BTphCiEzmyuo7Qamu6YK6Oy43Asp7B+hgnRfnj2zA4OAromAVid487P7BbrxlMGwfioXvEdjumuapS/tSvQZlnbTVROTbl/B9XUfUPcODAK6JgJan/C35FjQ66CtVo/22RIrrycZbxJBfeReK8Z64tdMTPA/dxbD4cD5HRjCHHfxci8bAT2Gu7uId7LXwWzzDeS7JloLUyfkNUXDrVMH1PHwEv3rMX0uwmMHRtPM3ADpENCjGAtq+eYJw1vOJ6CWWxgDGjFqZYTKBEP6KYzJM6A+M2kkXnMPJn0kojHulLANKXaW8EVAD2Q6rcnvu0aSBTR2wOoIhYu+fTANxG9wPhmSbmO4ZYLFoH43zNw6bdMIp+tHzREBCOih3NkaanxblhbQmElGB3QuVMOfhlVC47QWLgbjV2vNhJ1jSKsioAdzd+f/XSPrB9SVhpQBnd+w9r5N91fx/8/M3Zf1+7Hdq5cEdFUE9HgMDTW/61YPqHPlKl1AfdYufeYmrnaaV0Gja+bY2TKDgK6KgB6SmlBhv5kU0Lm1MEdAI46euLuWMKAe+zc3DWhsPdUHxcs9OwJ6VFJDG8l4m9k1Nfub1WcXovfEtOuCAmr4p2FmM9hzbpkCGv3TVtozyMs9OwJ6YFNCG7F30pt+pjT2Ts6v5OnTUi7LE1i6VyBgJJ5z8wlo6Nrggt+nboYxGBcZsiCgx9Y3VHqjK5vic2tqtpsEV0ttljLpyE1TW+Jn/2UwX9Zu4wxo4Ir4ot9V7ecgrGrzas+PgB7dJaHij+sELqOItTvrlKTLWnsi9grY10DnVksDAtoMl807HnwXUPxxI3mUY0GTPClwI6A4jZ+U7756eatlpO07UP8Qsy1u3weqXNDuN7++20yd6teYzTcyD1n+w8J6isOMWUyIREBx6t5zwzcvFxNQ/S9BYdBvbNxPYV+9nF/fHQvqGpflj+K9Fm26TxOcmSMyIKA4KRu65QY0bGrawzFX01HQ2eXhsdwsfxb7nKCep9iDbFiGgOIkbeheW79uJP8gxMAt7MEwsaYxZdM+caF2Pv+ezN7GsiLb/1f3Va0p8klAt0FAcZqWy3hAaZOGSrFZ1gNxUiEBTb0abttXIG64m3/dPWJW5svIiYDipLzPU+yQix7GmK/FAR0nJRxdMU1Q2XOgXFjIPqPxqJHxx92jZjV/2AupEVC05HJYDmrk30cqbUCLV8dOSBxwf6RcfQymY/PJXimWGQ3b7dfqbRbMaHpcWZ8iSAhofbJ0TN921RKaevN2dkDTxZg7qwGVrxNva7qY6KVimOLMibfCinPAwpb/wdjDq7wSBLQ6md4mpokOG5n9ilLizduZuS+YX2NmnKR9IztwppaRiMORjtSZ52Qats9shlVP+rkuAlqbrB3TTAG1NCcNYy3i/6UQ72Xqp20pKrtDw+eu3UXabWDJonsnrM8Asj43cCGgldngvXKnHepIPWdLLaJXqMR7SRf1aWvHxvUb+M9fv8uY7e6HUadfRrWtAgvZN/zdOl/zZWRHQCuzyXulP9lm3OqUj7ss3mpM+4+CMqK5gMp3NQzK/8EZ7tLN4nJQruuneLU+eXGoAQUloJshoJXZ7L1iPm4ctaGrT9p8OXJi8oisAXUPJCLqxrs0wwlL6pqpexWYgFaCgFZmw4COx5TE93aKHbIpH1Nj2uvoOx/rhrXXfE2zurszjuTUmI+yE9DaENDKbBnQlrQ/1L4nL2ilNOFj6uZ6mXlEQOV/EMZ7+x3G0aM9brkPk5ldqyWgtSGgldk6oKe2odPBENPfjRunfpNOENBhBP1lW4msBTOan20/P+E+d+rBNwK6QwS0MhsGVHj3jx9CNJzNKK3FeU7afDlqlNOs+6AZRuaYjZ5NQ0D1DfK+1d0uT+GIu7C7I2tAg3fYIg0CWpnt3itqGK+HNVH5wFLEANMHVFwLFqYY0HYtj/Lf5IIO673dX4ZDRqYDbso4zSWWb+uzRML/0UIaBLQ2271X9C3acVX0JKZLvIfvhAPv4ZiUNljT3tlFW8X6MzAE9K7/NsDLPy3iyrBySe2nuaDavZzD9X1gSIqAVme794o233FVVDqwdFL+7jVh8cKCx6evgcqT8Z60fQ3UkPtuu71b/RS25pXbN8rDNEay0c0/6pAHhqQIaH3Wfa+45jZcey1szksJ9B2jVAuvdFhuIqz2Lft3Zrqz3mDlcpvO8VTP62HPq3llWByTocSmW0cNHyshoHByvpGlBEwHlq7D3/1yP7Wpew9rbJN5n4I3R8TkgPanKg2PXXoc+oOTpmdeV/d6+CgFAYXLzNtZ/3O39+8clLu7uAaY18u8hzXGq1kS0EvkxtoZA3on/BzH+BlNeQVzdiaGy14PH8UgoHCYfTvrK2mX/xjXRmMCar7sOyxtRHERF/OrBvTSzutpv4VpN2d8QM03QJkIKBzm387aRm7/H+Oh6Lt2VTTpLGduoxc9aP79XYxN7L9USf81jmmr3LLd7/0oCGhdCCgcYt7OYnq6VbTLGlvKWc7eZmGGxgNBJzGgd3fiZrt8kmdj4DMX7TIBrQsBhUPU21lIyHh4pa+oR0hLCajcxHGj/brbw6tNOqKgBHQHCCgcIjbhhZb0d7qW3I0fdTQ3JlFAFx2KGY4CCYRHIK5iG2Y8PDKPgBoGSUDrQkDh4FMqLYXGy3JFlbuJ/5EkoNJ+BPM0XPrjRHfjTohG/BE444P2HtnMIAloXQgoHObezsZOOe80bQX3F+7Er8w8WWMSNKyTM3IuQzgvG+xNd06r/JUg4sSjRuYe5MJ1Z6yMgMJh5u1s/vNsA4Qt4u6s0YtLSE+WKAcNa7iNfz/vRGPgu37OzEedq/my/yCXrTtjZQQULu63syUXcw2YrhU35pvrO+Ez5e74JanM3Z3STWkXQ/d1p02ygHoHXX34UWvSWAkBhZOzZvY9n9Kd1CmoN+2/Gm/YXhbWSa1H7T0ia3JndK0wTX9pQAMG3Fh4P0qsh4DCzfX2nc2F9B+mGElrWtfX0tFu+fSngW9VzK00F3M6sdP6sMVLjjk7/klRLszQHiIFLRIBRTyvPX56AswB7baYhz+YGydt8jeuRvoU05zOmYfnbrcxuRGHhsR/fILuiHURUMTzCaihHT4BHUNl6Kd0IUr8w5tbIzT/PfDYkjSVmKPybPWvhYAijn0bV72ddtknoOYVvf6KoaBpi6nN0Nj+uQdsHHh4QKcLEaugHns4kAYBRRR9F531htrly53Gu1tiYViRazTJHs7JWB1pRVCb5UxB5etm76ZMY7oQHtC5tWSkQ0ARo39rjqWwv1Ut28GGDkoro46jN3kC6pnswBIabpo9oMaFhzwIKCIYVs3sNzVcNlZJCqh+p6YRvuNYvnkClurojTc8Gp+ph91tYUDDZoYFCCgi6KuFHje1BdRQ4dnt/lP6gJovj7Oev1nk1J23J6CFI6CIcFmOfhvSloBOVykrlrY7TbPMcpDEHVDhonmQs1MP26qW/6UJnB0BXREBRYSAihnbYdzNqExfuSwEVN32T0FbOTaPJjKgocd1xJ0ZwQeECOiKCCgiNI3/O9t0Q9NuRmX66mV1pTdTQE1tNgc0bOaBzW/08XjPjoCuiIAigviGnn1rGxKgvceVW9gCOt0u1RqoMri+zfZVzYg1QnlGweMKXtkmoCsioIggvqHn39xCAizrd2omDCt6U+Gm2y4vqBKoYZAn6aViWl9OEW+vkUXdc7qYckjQEVBEkFcWQ7YujQHVw2m6oE8ioC/mHomzUdPp3uFQ8ispei0ZwQgoYkjv0ZDtUuWC3E/DsRxtT4G4tugfMnP3pBmrG+/S37TxFa2Gyu8EAUUUeUXQ+z7aRTXAWkG1e48riwGRsKyT2bfN5Wm7VumKTFWRg9olAooocm1872O4f6NePz/L6a6e+0Ftq5DWbXO1zvZas7J3bAQUUWIO9Rp7FTAtrZ8nz/Vf2wy0y8qRKnkfqaWfygUcCgFFFNtKnfs+YZfNsxVSJu8Mtd/VY2byZMVV3JnheA4c+0RAESdi3csvoK4YSqufJ613toHMzlhZre1XRucLGrMejj0hoIg03y39Hj6XHRPV1xCFax0pn9ls1/XTIqCYQUARy1xQZ/9sl81H5w0zNMzZYzPaNWNlUvJjmvvXgYAeHQFFLGPsXGuQ1tSZpmQMqGk28twtIzVcNq93yv8AEFC4EVBEMsbOvTlt/aspu6ZD3uLthTs67mMdqt5PYXteG5dxsgQUBBSRTPGY25y2rp+GBVS45dx9lHGpF6S1z8Ye0MB9AzgKAopI5oCa/y5cuWCNTgioZWXWMWF5ztMa7FRjcS/odC99JvJkZ2eNPSOgiBQV0IhpGq6Rjv0o95lZxTUMWAuotnrqWgV17bLA7hFQGDQK8230y2kCapurT0DnimcYsGkN1MA2Ia/5YacIKHRe9ZgJaFRXxAM5+n3F1T39eNJwT+W2jhmdxLVOLcvyIGYL6v0YsScEFJohB41wwXQr/bL/4RfzzRpl+3luYCc1mr77JLWAigeQTP90kEiYEFCoxEwZNs3Vm4l/FnszdtA9K62g0/1MOday7Nof6prx9CD0CRumN/dPgdc/F9gdAgqVvHYmXyffTtu89WyvMAV1dVNKl7RqaQ6otNHvtQ9WD7ZtugEBtfYd+0ZAofINqLaZPv2XGBH7Mlfuqk5kvKteakO7tXlZ5qsM2ta9sIAa848DIKBQeQdU2W51rMvZZmQIlN5A07QspXIFVA+nOiVHQBvn14pI01KGjF0joFD5B1S5m7T/UJuc8R5KQJU7S+uh8sTMa3qmmzYq69XavcUbuwM6LQF9zNgxAgpVXECtm7sBAdUjp05gZhyGm8rTNBRUuoeyNmrLq3m24n5bXmnHQEChig2oeNlrpVEN6NipRqpQUEDVrX0lnOKapDYtfUXVr58E9LgIKFRTvhr/fs4HVF29NAV0uK9UTmXKjT4hw5ynAg7TGPNmfVCNem/TBcdjJ6DHQ0ChEQsqXeG+kzQBdU3QlCItoNPf9fXQ6VZzBRX/pq5N61vpyn1NY7TNS33sBPR4CCh0aqd8Fpu2njhelP5XvKV8M+WyafW36eMqrqzaxi7fV4iy/VEZ/+izBAjoYRFQGIT3U91Taa+gqaDOZkllNW3je4xKDug0MfXG46yDXinNNJyAnR7YAQKKNNRCahU03VSKtPkmJ3WXgtjO2efTENCTMDW5otYBuOcgrhFPQ/W8O+pGQJFGI2bR9GfjZXFF1d4v+VZC+GICKq/0NtJgbANwzcC0su630o76EVAkIm5pm/5qvqzdRF8xlK6USxUQ0MayD9QSfs9Xivig9Y5i9wgoUnHWwyugWiC1aSjd8wiotP9U7Jx+uCc8oFp96efBEFAk46qHT5zGe1smI3bPM6CmVURpVuJELCujzqmbL+MoCChW4RUnMXKWgIqrel7Pp7ptLR5BUscj1tbzUZkv4ygIKNbhFSd5JdH013FL/9R4nmukrHgOV54MAXXvhTBO23wZR0FAsRKfOM0ESdrAj9nXKKyBilvu+iC9p+ccL3avwoA+/O2vP/zww5//9j7ivrzIN+QRp7kgGTfHQ4cgXbDMyHt65svuAUQMHIWqLaC/fiO8fT7/MfTuvHLLFhjQmOnrd08W0PlBLRg6ilRXQD++UN5Bj78LmwAv3LLNB9T9d5/pqxFb8poQSui3hyLwIBVKV1VA72/a1+enLzt/aP/j6lXQFHjdlsPUG481UNefPeYpzl2dZNQE1SQ6prd09ChPTQH9/fk5mN8KV7w7B/WTn0Mmweu2GMY1ttnEBK3D6TMIXGP0oE/GFVDzZdSrpoC+1XLZJvVZyCR42ZbCUsLZQAZ0z3RTcfpp9kaa5mG9qceNUJWKAvrwumnUDfb7pnkScjSel20hrGtss2EL6ac2r2yHcQjoQVUU0PPqpra9brpOGIpBrtEhiL0lqZ4oW6LzvBAI6EERUGwhf0vWrRUBPaiKAnrehL/6TrmOTfhKEVBeibtQUUBPt1ot292iT0Mmwcu2EAcNKKcx7U1NAf1wcy7oT8IVH8/91FZKnXjdFmJ/AfVp4+w5BqhNTQFtz2M6F/Pln35o/Vt3Jn3QWUwEtBQp8mberW0+eSluDmGDUS5YbsW++F2pKqCnX26UQ0JXX4dNgBduIRJszZpjZDxemPBptwbQr430c2fqCujp4Y2Y0KuvQr+RiVduKRZvzZonIF5rT3R8xhyZpI1HVFlAzx5+/eHNy5cvv/rhx4jvs+PlXYyFW7PmPkrXWhMdP+vF2cfO1BfQRXjZl2PZGpt5C938mSO9n5HzT7DjAftCQFGlkICq92xcfw6fKQ6MgKJKPgF13bMLZ9MEbYwTUCgIKKq0MKDjamjQa4KAQkFAUaXFAdUuR88UB0ZAUSVnQJ17Nwko0iGgWE0jWTyt6aJx+rZ5EFCkQ0CxFp+6BU1NvzBNurEeH1oUUE5jgoSAYiXDce9mvLB4elKJxemP87CNYzqGFHgUiRPpISKgWIeQzeBuWaeo9VO51lpQ9VB86Dx5IeGCgGId+jpf2idD2BMqXTbeVKxg2DDoJ0QEFOsoKKAnuZ+8JhCNgGIdJQW0+xMrk1iMgGIdpQWUjXEkQECxjuICCixHQLGOFQMqHJlPOQdAQ0CxjvSnMZmmL11i+xy5EVCsJPWJ9Obpj7Ng/yZWQECxlkaRe/o82ciOgGI1uetGN7E2AgoAkQgoqsUaJ7ZGQFEr9nVicwQUleJsJWyPgKJOQjZ5VrEVAoo6iU8lTys2QkBRJwKKAhBQ1ImAogAEFHUioCgAAUWdCCgKQEBRJwKKAhBQ1InTmFAAAopKcSI9tkdAUSs+yonNEVBUi35iawQUACIRUACIREABIBIBBYBIBBQAIhFQrIoj59gTAoo1ce4mdoWAYkV8egj7QkCxHj6/jp0hoFgP36CEnSGgWA8Bxc4QUKyHgGJnCCjWQ0CxMwQU6yGg2BkCivUQUOwMAcV6OI0JO0NAsSJOpMe+EFCsiY9yYlcIKFZFP7EnBBQAIhFQAIhEQAEgEgEFgEgEFAAiEVAAiERAASASAQWASAQUACIRUACIREABIBIBBYBIBBQAIhFQAIhEQAEg0uECCgDpJG9U6gmmtPXCBrAvyRuVeoJ7V+VuhSoHXeeoGfRayhh0EYOoSRlPW6Aq81L6fgAAB/NJREFUB13nqBn0WsoYdBGDqEkZT1ugKgdd56gZ9FrKGHQRg6hJGU9boCoHXeeoGfRayhh0EYOoSRlPW6AqB13nqBn0WsoYdBGDqEkZT1ugKgdd56gZ9FrKGHQRg6hJGU9boCoHXeeoGfRayhh0EYOoSRlPW6AqB13nqBn0WsoYdBGDqEkZT1ugKgdd56gZ9FrKGHQRg6hJGU9boCoHXeeoGfRayhh0EYOoSRlPW6AqB13nqBn0WsoYdBGDqEkZT1ugKgdd56gZ9FrKGHQRg6hJGU9boCoHXeeoGfRayhh0EYOoSRlPW6AqB13nqBn0WsoYdBGDqEkZT1ugKgdd56gZ9FrKGHQRg6hJGU9boCoHXeeoGfRayhh0EYOoSRlPW6AqB13nqBn0WsoYdBGDqEkZT1ugKgdd56gZ9FrKGHQRg6hJGU9boCoHXeeoGfRayhh0EYMAgBoRUACIREABIBIBBYBIBBQAIhFQAIhEQAEgEgEFgEgEFAAiEVAAiERAASASAQWASAQUACIRUACIREABIBIBBYBIBBQAIhFQAIhEQAEgEgEFgEgEFAAiEVAAiERAASASAQWASAQUACIRUACIREABIBIB9fX7809+Nlz98Zubprn6/KfVxzPLOrKH183o1QYDs3AsSRZyctW9nFvGQW+7pAmop/PTZHrF/XLTPXNX/7T+kNzsI/v9eYnvbceSZCEnV93LuWUe9LZLmoD6ebhtTE/efbHvEsfIhD+VM2q/8RYz3E5tC3lU3cu5NT9oAlqqy2aC/uS1//g9Pm/u/PrC+NRuyDWytwW+PRzjZSEnV93LuWUZ9MZLmoD6eHfZstGfvPNz9+R9e6F9cp+tPy4718huC3x3OMbLQk6tvpfzyT7ojZc0AZ338fwPcvP5C/15Or/Orr7rLn646V97ZXCN7Py3koZ64RgvCzmxCl/OjkFvvaQJ6LzzP8xXX5t2YJ83eYbnTnjxlcA1svPfnm4wJCfHeFnIiVX4cnYMeuslTUDnvb364r3xCOB9Mz13t0Xt83KN7Py3Vx+/PP+D/tm36w/MwjFeFnJiFb6cHYPeekkT0Hm/tf8sW15x456isg4auEb2trn6b/1By89L2UxzjJeFnFiFL2fHoLde0gTUk+nJE19l90XtdneN7FY47aOUHV2O8bKQc6jr5dwzBnTjJU1APdX1inOMrD3CevXV+/ZDJ00xY95bQItcyKK6Xs4906C3XtIE1FNdrzjHyH5/Ph4feFvM6X57C2iRC1lU18u5ZznytemSJqCe6nrF+Y2s/de7jD1dewuooJyFLKrr5dyzfP5U+PP6S5qAmowfr53O5Sj/FScO2nNkbzcfdG/HAS1nIYvKfzkbzAR0kyVNQE08A1rWYUtx0J4jK+Ztsruj8JabFaP8l7PBXEC3WNIE1MQ/oAWdOKcE1Gdkxby3d3ceqHyzMhayqPyXswEBrVhdH93wHFkx6xm7+ySSoJiFLKrr5dzz2IRnH2ipLKdQFPrhYcfIhB1FwhHMje3ts/BFLmRRXS/nnmXH7aZLmoB6snwKotSvr7GP7Pze6B9I+/2KpXxge2ffxlTmQhZU9nLumAa99ZImoJ5sX2TQPP6xxC9QtI/scubx1++7PxWzbuRYkizkDCp7OXesJ9JvuKQJqCfxyZu2Fcr9Cm9tZOOgP9xMfypnNcM+XhZyBrW9nC+Mg954SRNQT+ZX3Okvxf6IjDqyadAfXjQFDto+XhZyetW9nFvmQW+7pAmoJ8srruCfMVRGJgz64V379V+Pvvr7VkMzso+XhZxcfS/nk3XQmy5pAgoAkQgoAEQioAAQiYACQCQCCgCRCCgARCKgABCJgAJAJAIKAJEIKABEIqAAEImAAkAkAgoAkQgoAEQioAAQiYACQCQCCgCRCCgARCKgABCJgAJAJAIKAJEIKABEIqAAEImAAkAkAgoAkQgoAEQioAAQiYACQCQCCgCRCCgARCKgABCJgAJAJAIKAJEIKABEIqAAEImAAkAkAgoAkQgoAEQioAAQiYACQCQCCgCRCCgARCKgABCJgAJAJAIKAJEIKABEIqAAEImAAkAkAgoAkQgoAEQioAAQiYACQCQCCgCRCCgARCKgABCJgAJAJAIKAJEIKABEIqAAEImAAkAkAoqa3TfNJz+3Fx5eN83TrUeDwyGgqNnYzbGkwIoIKKr24aa5+u50+v1507zaeiw4HgKKut02zZP3/f8HVkZAUbfLuud5A75dDwVWRkBRuXM8H900zbOtx4EjIqCoXHsciQ14bIOAonYfbtiAx0YIKGrXroJyChM2QUBRu7ftJjy7QLEFAorK/f68ubphGx6bIKCo3O159fMtn+PEJggo6nbfHoHng0jYBgFF1dojSK/4KDw2QkBRtbfdKaBtRzmOhNURUNTsw3D4iA9zYgsEFDW7HY8e3XIcCesjoAAQiYACQCQCCgCRCCgARCKgABCJgAJAJAIKAJEIKABEIqAAEImAAkAkAgoAkQgoAEQioAAQiYACQCQCCgCRCCgARCKgABCJgAJAJAIKAJEIKABEIqAAEImAAkAkAgoAkQgoAEQioAAQiYACQCQCCgCRCCgARCKgABCJgAJAJAIKAJEIKABEIqAAEImAAkAkAgoAkQgoAEQioAAQiYACQCQCCgCRCCgARCKgABCJgAJAJAIKAJEIKABEIqAAEImAAkAkAgoAkQgoAEQioAAQ6f8DjCTBakOEyPkAAAAASUVORK5CYII=)
4.7 Incomplete Cholesky decomposition
im.ch=function(A,m=ncol(A)){
n=ncol(A); R=matrix(0,n,n); P=diag(n)
for(i in 1:n)R[i,i]=sqrt(A[i,i])
max.R=0;for(i in 1:n)if(R[i,i]>max.R){k=i; max.R=R[i,i]}
R[1,1]=max.R
if(k != 1){
w=A[,k]; A[,k]=A[,1]; A[,1]=w
w=A[k,]; A[k,]=A[1,]; A[1,]=w
P[1,1]=0; P[k,k]=0; P[1,k]=1; P[k,1]=1
}
for(i in 2:n)R[i,1]=A[i,1]/R[1,1]
if(m>1)for(i in 2:m){
for(j in i:n)R[j,j]=sqrt(A[j,j]-sum(R[j,1:(i-1)]^2))
max.R=0;for(j in i:n)if(R[j,j]>max.R){k=j; max.R=R[j,j]}
R[i,i]=max.R
if(k!=i){
w=R[i,1:(i-1)]; R[i,1:(i-1)]=R[k,1:(i-1)]; R[k,1:(i-1)]=w
w=A[,k]; A[,k]=A[,i]; A[,i]=w
w=A[k,]; A[k,]=A[i,]; A[i,]=w
Q=diag(n); Q[i,i]=0; Q[k,k]=0; Q[i,k]=1; Q[k,i]=1; P=P%*%Q
}
if(i<n)for(j in (i+1):n)R[j,i]=(A[j,i]-sum(R[i,1:(i-1)]*R[j,1:(i-1)]))/R[i,i]
}
if(m<n)for(i in (m+1):n)R[,i]=0
return(list(P=P,R=R))
}
# Data Generation
n=4; range=-5:5
D=matrix(sample(range,n*n,replace=TRUE),n,n)
A=t(D)%*%D
# Execution example
im.ch(A)
## $P
## [,1] [,2] [,3] [,4]
## [1,] 0 0 1 0
## [2,] 0 0 0 1
## [3,] 0 1 0 0
## [4,] 1 0 0 0
##
## $R
## [,1] [,2] [,3] [,4]
## [1,] 7.6811457 0.000000 0.000000 0.00000
## [2,] -0.6509446 6.525050 0.000000 0.00000
## [3,] -0.2603778 -1.558531 4.950069 0.00000
## [4,] -4.8169897 1.205264 2.146274 2.17657
L=im.ch(A)$R; L%*%t(L)
## [,1] [,2] [,3] [,4]
## [1,] 59 -5 -2 -37
## [2,] -5 43 -10 11
## [3,] -2 -10 27 10
## [4,] -37 11 10 34
P=im.ch(A)$P; t(P)%*%A%*%P
## [,1] [,2] [,3] [,4]
## [1,] 59 -5 -2 -37
## [2,] -5 43 -10 11
## [3,] -2 -10 27 10
## [4,] -37 11 10 34
P%*%(L%*%t(L))%*%t(P) ## Match A
## [,1] [,2] [,3] [,4]
## [1,] 27 10 -10 -2
## [2,] 10 34 11 -37
## [3,] -10 11 43 -5
## [4,] -2 -37 -5 59
im.ch(A,2)
## $P
## [,1] [,2] [,3] [,4]
## [1,] 0 0 0 1
## [2,] 0 0 1 0
## [3,] 0 1 0 0
## [4,] 1 0 0 0
##
## $R
## [,1] [,2] [,3] [,4]
## [1,] 7.6811457 0.000000 0 0
## [2,] -0.6509446 6.525050 0 0
## [3,] -4.8169897 1.205264 0 0
## [4,] -0.2603778 -1.558531 0 0
L=im.ch(A,2)$R; L%*%t(L)
## [,1] [,2] [,3] [,4]
## [1,] 59 -5 -37.0000000 -2.0000000
## [2,] -5 43 11.0000000 -10.0000000
## [3,] -37 11 24.6560510 -0.6242038
## [4,] -2 -10 -0.6242038 2.4968153
P=im.ch(A,2)$P; t(P)%*%A%*%P
## [,1] [,2] [,3] [,4]
## [1,] 59 -5 -37 -2
## [2,] -5 43 11 -10
## [3,] -37 11 34 10
## [4,] -2 -10 10 27
P%*%(L%*%t(L))%*%t(P) ## Low rank approximation of A
## [,1] [,2] [,3] [,4]
## [1,] 2.4968153 -0.6242038 -10 -2
## [2,] -0.6242038 24.6560510 11 -37
## [3,] -10.0000000 11.0000000 43 -5
## [4,] -2.0000000 -37.0000000 -5 59