def framePotentialSeparated(elementArray): ## get frame potential from a FLATTENED ELEMENT ARRAY ## d = len(elementArray) / 2 elements = [] for i in range(0, len(elementArray) - 1, 2): elements.append(elementArray[i] + elementArray[i + 1] * 1j) vec = mathBackBone.vector(elements) framePotentialSum = 0 for k in range(d): for l in range(d): # middleOperator = mathBackBone.matrix(mathBackBone.X(d=d, power=k).dot(mathBackBone.Z(d=d, power=l)), size=d) # middleOperatorDotVector = mathBackBone.vector(middleOperator.dot(vec)) # framePotentialSum += numpy.abs(mathBackBone.vector(vec.conjugate).dot(middleOperatorDotVector))**4 XpowerK = mathBackBone.X(d=d, power=k) ZpowerL = mathBackBone.Z(d=d, power=l) # print "X", XpowerK.matrix # print "Z", ZpowerL.matrix conjugateVector = mathBackBone.vector(vec.conjugate) lastTwo = mathBackBone.vector(ZpowerL.dot(vec)) # print "Last two: ", lastTwo.elements lastThree = mathBackBone.vector(XpowerK.dot(lastTwo)) # print "Last three:", lastThree.elements # print conjugateVector.dot(lastThree) framePotentialSum += abs(conjugateVector.dot(lastThree))**4 return framePotentialSum
def framePotentialReal(elementArray): ## (MINIMIZE) get frame potential from a FLATTENED ELEMENT ARRAY ## d = len(elementArray) / 2 vec = elementArray elements = [] for i in range(0, len(elementArray) - 1, 2): # print "REAL", elementArray[i] # print "COMPLEX", elementArray[i+1] elements.append( complex(elementArray[i], elementArray[i + 1]) / numpy.linalg.norm(elementArray)) vec = mathBackBone.vector(elements) framePotentialSum = 0 for k in range(d): for l in range(d): # middleOperator = mathBackBone.matrix(mathBackBone.X(d=d, power=k).dot(mathBackBone.Z(d=d, power=l)), size=d) # middleOperatorDotVector = mathBackBone.vector(middleOperator.dot(vec)) # framePotentialSum += numpy.abs(mathBackBone.vector(vec.conjugate).dot(middleOperatorDotVector))**4 XpowerK = mathBackBone.X(d=d, power=k) ZpowerL = mathBackBone.Z(d=d, power=l) # print "X", XpowerK.matrix # print "Z", ZpowerL.matrix conjugateVector = mathBackBone.vector(vec.conjugate) lastTwo = mathBackBone.vector(ZpowerL.dot(vec)) # print "Last two: ", lastTwo.elements lastThree = mathBackBone.vector(XpowerK.dot(lastTwo)) # print "Last three:", lastThree.elements # print conjugateVector.dot(lastThree) framePotentialSum += abs(conjugateVector.dot(lastThree))**4 return ((framePotentialSum) - (2. * d / (d + 1.)))**2. + (1. - numpy.linalg.norm(vec.elements))**2
def framePotential(vec): ## get frame potential from a VECTOR OBJECT ## d = vec.length framePotentialSum = 0 for k in range(d): for l in range(d): # middleOperator = mathBackBone.matrix(mathBackBone.X(d=d, power=k).dot(mathBackBone.Z(d=d, power=l)), size=d) # middleOperatorDotVector = mathBackBone.vector(middleOperator.dot(vec)) # framePotentialSum += numpy.abs(mathBackBone.vector(vec.conjugate).dot(middleOperatorDotVector))**4 XpowerK = mathBackBone.X(d=d, power=k) ZpowerL = mathBackBone.Z(d=d, power=l) # print "X", XpowerK.matrix # print "Z", ZpowerL.matrix conjugateVector = mathBackBone.vector(vec.conjugate) lastTwo = mathBackBone.vector(ZpowerL.dot(vec)) # print "Last two: ", lastTwo.elements lastThree = mathBackBone.vector(XpowerK.dot(lastTwo)) # print "Last three:", lastThree.elements # print conjugateVector.dot(lastThree) framePotentialSum += abs(conjugateVector.dot(lastThree))**4 return framePotentialSum
def sicTest(): sic = (1./numpy.sqrt(2.))*numpy.array([1, 0, -1, 0, 0, 0]) print mathBackBone.vector(sic).elements print FramePotential.framePotentialReal(sic)
def framePotentialTest2(): testVec = mathBackBone.vector([0.0723391 - 0.19082j, 0.0792411 + 0.2153j, 0.536444 + 0.199117j, 0.137276 + 0.0599187j, -0.312771 - 0.439084j, 0.447471 + 0.254983j]) ## frame potential should be 2.27671 return FramePotential.framePotential(testVec)
def generateRandomVector(d): elems = [complex(random.random(), random.random()) for i in range(d)] vec = mathBackBone.vector(elems) print list(vec.elements) return vec