library(gtools) library(parallel) #variációk (sorok) és permutációk (oszlopok) mátrixa #az "x" vektorból megnézzük, hogy az "y" melyik helyen van s1=function(x,y){ s1=which(x==y) } #az "x" vektorból megnézzük, hogy az "yvektor" elemei mely helyeken vannak s2=function(x,yvektor){ s2=sapply(c(1:length(yvektor)),function(i){s1(x,yvektor[i])}) } #Megnézzük, hogy a "z" vektorban az elemek növekvő sorrendben vannak-e s3=function(z){ s3=prod(sapply(c(1:(length(z)-1)),function(i){(z[i]0]) #sajátvektormátrix svmatrix=rep(0,dim(b)[1]*kk) dim(svmatrix)=c(dim(b)[1],kk) row.names(svmatrix)=c(1:dim(b)[1]) colnames(svmatrix)=mgysertek[mgysertek>0] #bubi-adik variáció, dama-adik sajátvektor for (dama in 1:kk){ C=C0 d=1 for (i in 1:(n-2)){ for (h in (i+1):(n-1)){ C[i,h]=CC[d,dama] d=d+1 } } for (bubi in 1:dim(b)[1]){ row.names(svmatrix)[bubi]=paste("[",paste(b[bubi,],collapse = ","),"]",sep = "") w=b[bubi,] if ((alpha %in% w)*(1-(beta %in% w))>0){ s=s1(w,alpha) sseged=0 for (h in 2:(n-1)){ sseged=sseged+gfv(1,h,s,n,k)*sum(C[1:(h-1),h]) } svmatrix[bubi,dama]=sseged } if ((beta %in% w)*(1-(alpha %in% w))>0){ s=s1(w,beta) sseged=0 for (h in 2:(n-1)){ sseged=sseged+gfv(1,h,s,n,k)*sum(C[1:(h-1),h]) } svmatrix[bubi,dama]=-sseged } if ((alpha %in% w)*(beta %in% w)>0){ s=s1(w,alpha) r=s1(w,beta) if (sr){ sseged=0 for (i in 1:(n-2)){ for (h in (i+1):(n-1)){ sseged=sseged+ffv(i,h,r,s,n,k)*C[i,h] } } svmatrix[bubi,dama]=-sseged } } } } svmatrix[abs(svmatrix)<10^(-6)]=0 for (dama in 1:kk){ sseged=abs(svmatrix[,dama]) sseged=sseged[sseged>0] sseged=min(sseged) svmatrix[,dama]=svmatrix[,dama]/sseged } svmatrix=round(svmatrix) baloldalisv=svmatrix } ###X oszlopai Y (vagy -Y) mely oszlopaival egyeznek meg #x vektor megegyezik-e y vektorral vagy -y-al u1=function(x,y){ a=min(sum((x-y)^2),sum((x+y)^2)) u1=100000*(a>0)+(1-(a>0)) } #x vektor megegyezik-e Y vagy -Y mátrix valamely oszlopával, különben 100000 u2=function(x,Y){ q2=dim(Y)[2] a=sapply(c(1:q2),function(j){j*u1(x,Y[,j])}) u2=min(100000,min(a)) } oszlopegyez=function(X,Y){ oszlopegyez=list() q1=dim(X)[2] q2=dim(Y)[2] oszlopegyez[[1]]=sapply(c(1:q1), function(i){u2(X[,i],Y)}) a=oszlopegyez[[1]] a=a[a!=100000] oszlopegyez[[2]]=setdiff(c(1:q2),a) oszlopegyez } rovidtabl1=function(k){ q=choose(k,2)+k rovidtabl1=rep("",q) u=1 for (i in 1:(k-1)){ for (j in (i+1):k){ uu=c(1:k) uu[i]=1 uu[j]=2 uu[setdiff(c(1:k),c(i,j))]=c(3:k) rovidtabl1[u]=paste("[",paste(uu,collapse = ","),"]",sep = "") u=u+1 } } for (i in 1:k){ uu=c(1:k) uu[i]=1 uu[setdiff(c(1:k),c(i))]=c(3:(k+1)) rovidtabl1[u]=paste("[",paste(uu,collapse = ","),"]",sep = "") u=u+1 } rovidtabl1 }