-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathlqrw.m
executable file
·88 lines (66 loc) · 2.75 KB
/
lqrw.m
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
(* ::Package:: *)
(* ::Input:: *)
(**)
BeginPackage["lqrw`"];
SingleLazyItteration::useage = "SingleLazyItteration[State, Coin] returns the\
state after it has been randomised by one itteration of a given three state coin."
CumulativeMean::usage = "CumulativeMean[List] returns a list where each \
value is the cumilative mean of all previous list values.";
QuantumStatesToPositionalProbabilites::useage = "QuantumStatesToPositionalProbabilites[State]\
returns the position probabilites from a matrix of quantum states.";
ClassicStatesToPositionalProbabilites::useage = "ClassicStatesToPositionalProbabilites[State]\
returns the position probabilites from a matrix of classic states.";
MultipleLazySteps::useage = "MultipleLazySteps[State, Coin, Steps] returns the state\
after a number of itterations using the Coin has been performed."
MultipleLazyStepsHistory::useage = "MultipleLazyStepsHistory is identical \
to MultipleLazySteps but returns all steps instead of just the final result"
MultipleLazyStepsRecursive::useage = "MultipleLazyStepsRecursive is functionally\
identical to MultipleLazySteps, but uses a recursive function."
Begin["`Private`"];
SingleLazyItteration[State0_,Coin0_] := Module[{State = State0, Coin = Coin0},
oState = Normal[SparseArray[{Dimensions[State]->0}]];
Steps = Dimensions[State][[1]];
For[i=1,i<=Steps,i++,
oState[[i]]={
State[[i]].Coin[[1]],
State[[Mod[i-1,Steps,1]]].Coin[[2]],
State[[Mod[i+1,Steps,1]]].Coin[[3]]
};
];
Return[oState];
]
QuantumStatesToPositionalProbabilites[State0_] := Module[{State=State0},
Return[Simplify[Total[State*Conjugate[State],{2}]]]];
ClassicStatesToPositionalProbabilites[State0_] := Module[{State=State0},
Return[Simplify[Total[State,{2}]]]];
CumulativeMean[List0_] := Module[{List = List0},
Return[Accumulate[List]/Range[Length[List]]
]];
MultipleLazyStepsRecursive[State0_,Coin0_,Steps0_] := Module[
{State = State0, Coin = Coin0, Steps = Steps0},
Return[Simplify[
Nest[
(SingleLazyItteration[#,Coin])&,
State,Steps]]]]
MultipleLazySteps[State0_,Coin0_,Steps0_] := Module[
{State = State0, Coin = Coin0, Steps = Steps0},
inState = State;
For[Step=1,Step<=Steps,Step++,
outState = Simplify[
SingleLazyItteration[inState, Coin]];
inState = outState;];
Return[outState];
]
MultipleLazyStepsHistory[State0_,Coin0_,Steps0_] := Module[
{State = State0, Coin = Coin0, Steps = Steps0},
returnHistory = List[];
inState = State;
For[Step=1,Step<=Steps,Step++,
outState = Simplify[
SingleLazyItteration[inState, Coin]];
AppendTo[returnHistory, outState];
inState = outState;];
Return[returnHistory];
]
End[];
EndPackage[];