R Markdown

Quaternion simulation of two level entangled state from “Quantum Correlations are Weaved by the Spinors of the Euclidean Primitives” (https://royalsocietypublishing.org/doi/10.1098/rsos.180526) III B 1 Translated from Mathematica (John Reed) with help from Joy Christian (and edits based on Richards feedback)

randomVector <- function() {
    ## http://mathforum.org/kb/message.jspa?messageID=393612

    N <- 1
    z <- runif(N, -1, 1)
    t <- runif(N, 0, 2*pi)
    r <- sqrt(1 - z^2)
    x <- r * cos(t)
    y <- r * sin(t)

    return(c(x, y, z))

}
b0 <- c(1,0,0,0);
b1 <- c(0,1,0,0);
b2 <- c(0,0,1,0);
b3 <- c(0,0,0,1);

Qcoordinates <- cbind(b1, b2, b3);

Main Loop

m <- 100000
plotArray <- matrix(0, m, 2)
s <- 0; 
t <- 0; 
u <- 0;

ltot <-0
for(nn in 1:m) {
 
  vectorA <- randomVector();
  vectorB <- randomVector();
 
  Da <- t(Qcoordinates %*% vectorA);
  Db <- t(Qcoordinates %*% vectorB);
  
  lambda <-sample(c(-1,1), size = 1); # -1 or 1
  
  # multiplication of quaternions
  # we just need the real part
  tA<- Da[1]*Da[1] -  Da[2]*Da[2] - Da[3]*Da[3] - Da[4]*Da[4]
  A <- -lambda * tA
 
  tB<- Db[1]*Db[1] -  Db[2]*Db[2] - Db[3]*Db[3] - Db[4]*Db[4]
  B <- lambda * tB
 
  # inverse of quaternion is a−bi−cj−dk 
  sa <- Da[1]*Da[1] + Da[2]*Da[2] + Da[3]*Da[3] + Da[4]*Da[4]
  sb <- Db[1]*Db[1] + Db[2]*Db[2] + Db[3]*Db[3] + Db[4]*Db[4]
 
  Na <- A *c(Da[1]/sa, -Da[2]/sa,-Da[3]/sa, -Da[4]/sa)
  Nb <- B *c(Db[1]/sb, -Db[2]/sb,-Db[3]/sb, -Db[4]/sb)
 
  
  #NA ** NB or NB ** NA. Real part however is commutative...
  q <- Na[1]*Nb[1]-Na[2]*Nb[2]-Na[3]*Nb[3]-Na[4]*Nb[4]
  
  theta <- acos( sum(vectorA*vectorB) / ( sqrt(sum(vectorA * vectorA)) *      sqrt(sum(vectorB * vectorB)) ) )
 
  angle<- theta/Degree
  
  C<- crossprod(vectorA,vectorB)
  dir<- sum( vectorA %*% C)
  
  if (dir<0) {
    angle <- -angle;
  }
 
 
  plotArray[nn, 1] <- angle
  plotArray[nn, 2] <- q
 
  t<- t + A
  u<- u + B
 
}
avA <- t/m
avB <- u/m
cat("avA: ", avA, "avB", avB)
## avA:  0.00126 avB -0.00126

Angle versus Re(Q) plot

Angle versus q