#Sheet 9 Michael Klauser library(gplots) library(fields) Filepath="ProjectedDensity.dat" data=scan(Filepath, what=list(x=0., D=0., sigma=0.)) data=data.frame(x=data$x, D=data$D, sigma=data$sigma) plotCI(data$x, data$D, uiw=data$sigma, xlab="Angular Position", ylab="Projected Density") M=10 N=length(data$x) theta=rep(0,M) delta.x=(max(data$x)-min(data$x))/M for (j in 1:M){ theta[j]=min(data$x)+delta.x*(j-0.5) } kron = function(a,b) { if (a==b) {return(1.)} else {return(0.)} } T=array(0.,c(N,M)) a=array(0.,c(10,11)) F=array(0.,c(11,11,N)) breaks=seq(min(data$x)-1e-9,max(data$x)+1e-9,length.out=11) bin = findInterval(data$x,breaks) data = cbind(data,bin) for (k in 1:N) { for (j in 1:M) { T[k,j]=max(0,1-abs(data$x[k]-theta[j])/delta.x)+(2*kron(k,1)-kron(k,2))*max(0,1-abs(data$x[k]-theta[j]+delta.x)/delta.x)+(2*kron(k,M)-kron(k,M-1))*max(0,1-abs(data$x[k]-theta[j]-delta.x)/delta.x) } } dum=stats.bin(data$x,data$D,breaks=breaks) for (j in 1:M) { if (j!=9) { for (i in -5:5) { a[j,i+6]=dum$stats["Q1",j]+i*max(data$sigma[which(data$bin==j)])/10 a[9,i+6]=0 } } } for (l in 1:M) { for (i in -5:5) { for (k in 1:N) { for (j in 1:M) { if (j==l) {F[l,i+6,k]=F[l,i+6,k]+T[k,j]*a[j,i+6]} else {F[l,i+6,k]=F[l,i+6,k]+T[k,j]*a[j,0+6]} } } } } Chisq=array(0.,c(M,11)) for (j in 1:M) { for (i in -5:5) { for (k in 1:N) { Chisq[j,i+6] = Chisq[j,i+6] + (F[j,i+6,k]-data$D[k])^2/(data$sigma[k])^2 } } } af = rep(NA,M) for (i in (1:M)){af[i] = a[which(Chisq==min(Chisq[,i]),arr.ind=TRUE)]} #2 T = t(T)%*%T dirty = function(i,j){ tmp = 0 for(k in (1:M)){ tmp = tmp + (T[k,i] * T[k,j])/(data$sigma[k]**2) } return(tmp) } H=array(0.,c(M,M)) for (i in 1:M){ for (j in 1:M){ H[i,j] = 2 * dirty(i,j)}} lambda=eigen(H)$val e=eigen(H)$vec l=seq(1,10,1) x11() plot(l,lambda, main="Eigenvalues", xlab="l", ylab="lambda") x11() plot(theta,e[1,], main = "Eigenvectors") for (l in 2:M) { lines(theta+0.0001*l,e[l,],type="p",pch=l) } x11() plot(theta,e[1,]/lambda[1], main = "Eigenvectors --- weighted") for (l in 2:M) { lines(theta+0.0001*l,e[l,]/lambda[l],type="p",pch=l) } T_e = solve(e) %*% T %*%e ######### Ff = function(T,a){ tmp = 0 for (j in (1:length(T))){ tmp = tmp + T[j]*a[j] return(tmp) }} afm = array(NA,c(M,M)) for (Mn in (1:M)){ print('we are at') print(Mn) N=length(data$x) theta=rep(0,Mn) delta.x=(max(data$x)-min(data$x))/Mn for (j in 1:Mn){ theta[j]=min(data$x)+delta.x*(j-0.5) } kron = function(a,b) { if (a==b) {return(1.)} else {return(0.)} } T=array(0.,c(N,Mn)) a=array(0.,c(10,11)) F=array(0.,c(11,11,N)) breaks=seq(min(data$x)-1e-9,max(data$x)+1e-9,length.out=11) bin = findInterval(data$x,breaks) data = cbind(data,bin) dum=stats.bin(data$x,data$D,breaks=breaks) for (j in 1:Mn) { if (j!=9) { for (i in -5:5) { a[j,i+6]=dum$stats["Q1",j]+i*max(data$sigma[which(data$bin==j)])/Mn a[9,i+6]=0 } } } for (k in 1:N) { for (j in 1:Mn) { T[k,j]=max(0,1-abs(data$x[k]-theta[j])/delta.x)+(2*kron(k,1)-kron(k,2))*max(0,1-abs(data$x[k]-theta[j]+delta.x)/delta.x)+(2*kron(k,M)-kron(k,M-1))*max(0,1-abs(data$x[k]-theta[j]-delta.x)/delta.x) } } T = t(T)%*%T dirty = function(i,j){ tmp = 0 for(k in (1:Mn)){ tmp = tmp + (T[k,i] * T[k,j])/(data$sigma[k]**2) } return(tmp) } H=array(0.,c(Mn,Mn)) for (i in 1:Mn){ for (j in 1:Mn){ H[i,j] = 2 * dirty(i,j)}} lambda=eigen(H)$val e=eigen(H)$vec l=seq(1,10,1) Chisq=array(0.,c(Mn,11)) for (j in 1:Mn) { for (i in -5:5) { for (k in 1:Mn) { Chisq[j,i+6] = Chisq[j,i+6] + (Ff(T[k,],a)-data$D[k])^2/(data$sigma[k])^2 } } } for (i in (1:Mn)){afm[Mn,i] = a[which(Chisq==min(Chisq[,i]),arr.ind=TRUE)[Mn]]} } print('The best fit c') print(afm)