static public void TestMethod() { var matrixArray = new Matrix[2]; Complex[,] array0 = { { 1, 0 }, { 0, 0 } }; matrixArray[0] = (Matrix)Matrix.Build.DenseOfArray(array0); Complex[,] array1 = { { 0, 0 }, { 0, 1 } }; matrixArray[1] = (Matrix)Matrix.Build.DenseOfArray(array1); var superOperator = new SuperOperator(matrixArray); Complex[,] array2 = { { 0.5, 0.5 }, { 0.5, 0.5 } }; var pureDensityOperator = new DensityOperator((Matrix)Matrix.Build.DenseOfArray(array2)); SuperMatrixTrans(pureDensityOperator, superOperator); Console.WriteLine($"pureDensityOperator = {pureDensityOperator.Value.ToComplexString()}"); }
static void QuantumChannelProcess(DensityOperator[] densityopEncArray) { // E0,E1 for Kraus Opearator,Bit Flip channel // E0= (|0><0| + |1><1|)/sqrt(2),E1= (|0><1|+|1><0|)/sqrt(2) var matrixArrayE = new Matrix[2]; Complex[,] arrayTemp0 = { { Sqrt(0.9), 0 }, { 0, Sqrt(0.9) } }; matrixArrayE[0] = (Matrix)Matrix.Build.DenseOfArray(arrayTemp0); Complex[,] arrayTemp1 = { { 0, Sqrt(0.1) }, { Sqrt(0.1), 0 } }; matrixArrayE[1] = (Matrix)Matrix.Build.DenseOfArray(arrayTemp1); var superE = new SuperOperator(matrixArrayE); //-----------------------------Bit Flip channel Ends----------------- // E0,E1 for Kraus Opearator,I channel // E0= (|0><0| + |1><1|)/sqrt(2),E1= (|0><0|+|1><1|)/sqrt(2) var matrixArrayE2 = new Matrix[2]; Complex[,] arrayTemp0a = { { 1 / Sqrt(2), 0 }, { 0, 1 / Sqrt(2) } }; matrixArrayE2[0] = (Matrix)Matrix.Build.DenseOfArray(arrayTemp0a); Complex[,] arrayTemp1a = { { 1 / Sqrt(2), 0 }, { 0, 1 / Sqrt(2) } }; matrixArrayE2[1] = (Matrix)Matrix.Build.DenseOfArray(arrayTemp1a); var superE2 = new SuperOperator(matrixArrayE2); //-----------------------------I channel Ends----------------- foreach (var densityopMember in densityopEncArray) { SuperMatrixTrans(densityopMember, superE); //This needs a densityoperator, we only provide ket.In channel, only accept densityoperator // SuperMatrixTrans(densityopMember, superE2); } }
static public void TestMethod(int loopCount) { // E0,E1 for Kraus Opearator // E0= (|0><0| + |1><1|)/sqrt(2),E1= (|0><1|)/sqrt(2) var matrixArrayE = new Matrix[2]; Complex[,] array0 = { { 1, 0 }, { 0, 1 / Sqrt(2) } }; matrixArrayE[0] = (Matrix)Matrix.Build.DenseOfArray(array0); Complex[,] array1 = { { 0, 1 / Sqrt(2) }, { 0, 0 } }; matrixArrayE[1] = (Matrix)Matrix.Build.DenseOfArray(array1); var superE = new SuperOperator(matrixArrayE); //rou for main state, it is a pure state|+><+| Complex[,] array2 = { { 0.5, 0.5 }, { 0.5, 0.5 } }; //var pureDensityOperator = new PureDensityOperator((Matrix)Matrix.Build.DenseOfArray(array2)); int count; var countNumber = new SortedDictionary <int, int>(); for (var i = 0; i < loopCount; i++) { var rou = new DensityOperator((Matrix)Matrix.Build.DenseOfArray(array2)); count = 0; SuperMatrixTrans(rou, superE); qwhile(rou, MeasureMatrixZeroOne, 1, () => { rou.UnitaryTransH(HGate.Value); count++; if (count > 1000) { return(CWHILEFLOW.BREAK); } return(CWHILEFLOW.CONTINUE); } ); if (countNumber.ContainsKey(count)) { countNumber[count]++; } else { countNumber[count] = 1; } } foreach (var pair in countNumber) { Console.WriteLine($"{pair.Key} is {pair.Value}"); } // Console.WriteLine($"pureDensityOperator = {rou.Value}"); }