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 } baloldalisv2=function(n,k,alpha,beta){ b=permutations(n,k) #CC m?trix meghat?roz?sa (mgy m?trix saj?tvektorai) mgymatrix=mgyfv(n,k) mgysertek=Re(eigen(mgymatrix)$values) mgysertek=round((mgysertek)) CC=Re(eigen(mgymatrix)$vectors) C0=rep(0,(n-1)^2) dim(C0)=c(n-1,n-1) kk=length(mgysertek[mgysertek>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 baloldalisv2=svmatrix } ###X oszlopai Y (vagy -Y) mely oszlopának valahányszorosával egyeznek meg #x vektor megegyezik-e y vektorral vagy -y-al (konstanszorosával) u3=function(x,y){ x[abs(x)<10^(-6)]=0 y[abs(y)<10^(-6)]=0 if ((abs(x)>0)!=(abs(y)>0)){ u3=100000 } if ((abs(x)>0)==(abs(y)>0)){ x=x[abs(x)>0] y=y[abs(y)>0] a=max(x/y)-min(x/y) u3=100000*(a>10^(-4))+(1-(a>10^(-4))) } u3 } #x vektor megegyezik-e Y vagy -Y mátrix valamely oszlopának valahányszorosával, különben 100000 u4=function(x,Y){ q2=dim(Y)[2] a=sapply(c(1:q2),function(j){j*u3(x,Y[,j])}) u4=min(100000,min(a)) } oszlopegyez2=function(X,Y){ oszlopegyez2=list() q1=dim(X)[2] q2=dim(Y)[2] oszlopegyez2[[1]]=sapply(c(1:q1), function(i){u4(X[,i],Y)}) a=oszlopegyez2[[1]] a=a[a!=100000] oszlopegyez2[[2]]=setdiff(c(1:q2),a) oszlopegyez2 }