Here is the BKO, and we have just decided to propagate the network using the "O" operator. You can choose anything really.
O |a1> => |a2> O |a2> => |a3> O |a3> => |a4> O |a4> => |a5> O |a5> => |a6> O |a6> => |a7> O |a7> => |a8> O |a8> => |a9> O |a9> => |a10> O |a10> => |a1> + |b1> O |b1> => |b2> O |b2> => |b3> O |b3> => |b4> O |b4> => |b5> O |b5> => |b6> O |b6> => |b7> O |b7> => |b1>And being a network, we have a corresponding matrix representation:
sa: matrix[O]
[ a1 ] = [ 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 ] [ a1 ]
[ a2 ] [ 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ] [ a2 ]
[ a3 ] [ 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ] [ a3 ]
[ a4 ] [ 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ] [ a4 ]
[ a5 ] [ 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 ] [ a5 ]
[ a6 ] [ 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 ] [ a6 ]
[ a7 ] [ 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 ] [ a7 ]
[ a8 ] [ 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 ] [ a8 ]
[ a9 ] [ 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 ] [ a9 ]
[ a10 ] [ 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 ] [ a10 ]
[ b1 ] [ 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 1 ] [ b1 ]
[ b2 ] [ 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 ] [ b2 ]
[ b3 ] [ 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 ] [ b3 ]
[ b4 ] [ 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 ] [ b4 ]
[ b5 ] [ 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 ] [ b5 ]
[ b6 ] [ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 ] [ b6 ]
[ b7 ] [ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 ] [ b7 ]
Now we have a network, we can propagate around it by applying the O operator repeatedly, which corresponds directly to the idea of applying the O matrix to a vector, where superpositions can be considered to be "sparse representations" of vectors -- we drop/ignore all elements that have coeff = 0. Let's start with 1 seed node, and step around. OK. I picked |a5> as the starting node:
sa: O |a5> |a6> sa: O O |a5> |a7> -- yeah. I got lazy, and dropped to the exponential notation (as you should!): sa: O^3 |a5> |a8> sa: O^4 |a5> |a9> sa: O^5 |a5> |a10> sa: O^6 |a5> |a1> + |b1> sa: O^7 |a5> |a2> + |b2> sa: O^8 |a5> |a3> + |b3>And so on.
Now, let's pick more than one seed node, and add in some non {0,1} coeffs:
sa: O (|a2> + 7|a5> + 30 |a10> + 3.14|b5>) |a3> + 7.000|a6> + 30.000|a1> + 30.000|b1> + 3.140|b6> sa: O^2 (|a2> + 7|a5> + 30 |a10> + 3.14|b5>) |a4> + 7.000|a7> + 30.000|a2> + 30.000|b2> + 3.140|b7> sa: O^3 (|a2> + 7|a5> + 30 |a10> + 3.14|b5>) |a5> + 7.000|a8> + 30.000|a3> + 30.000|b3> + 3.140|b1> sa: O^4 (|a2> + 7|a5> + 30 |a10> + 3.14|b5>) |a6> + 7.000|a9> + 30.000|a4> + 30.000|b4> + 3.140|b2> sa: O^5 (|a2> + 7|a5> + 30 |a10> + 3.14|b5>) |a7> + 7.000|a10> + 30.000|a5> + 30.000|b5> + 3.140|b3> sa: O^6 (|a2> + 7|a5> + 30 |a10> + 3.14|b5>) |a8> + 7.000|a1> + 7.000|b1> + 30.000|a6> + 30.000|b6> + 3.140|b4> sa: O^7 (|a2> + 7|a5> + 30 |a10> + 3.14|b5>) |a9> + 7.000|a2> + 7.000|b2> + 30.000|a7> + 30.000|b7> + 3.140|b5>One advantage of the BKO notation is that it is trivial to define and redefine our network (much easier than manually entering elements into a matrix). How about we change a couple of rules:
sa: O |a4> => |a5> + 300 |b5> sa: O |b2> => |b3> + 0.5 |a2>Now, check out the new matrix:
sa: matrix[O]
[ a1 ] = [ 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 ] [ a1 ]
[ a2 ] [ 1 0 0 0 0 0 0 0 0 0 0 0.5 0 0 0 0 0 ] [ a2 ]
[ a3 ] [ 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ] [ a3 ]
[ a4 ] [ 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ] [ a4 ]
[ a5 ] [ 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 ] [ a5 ]
[ a6 ] [ 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 ] [ a6 ]
[ a7 ] [ 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 ] [ a7 ]
[ a8 ] [ 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 ] [ a8 ]
[ a9 ] [ 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 ] [ a9 ]
[ a10 ] [ 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 ] [ a10 ]
[ b1 ] [ 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 1 ] [ b1 ]
[ b2 ] [ 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 ] [ b2 ]
[ b3 ] [ 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 ] [ b3 ]
[ b4 ] [ 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 ] [ b4 ]
[ b5 ] [ 0 0 0 300 0 0 0 0 0 0 0 0 0 1 0 0 0 ] [ b5 ]
[ b6 ] [ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 ] [ b6 ]
[ b7 ] [ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 ] [ b7 ]
And our code can also spit out a matrix that has been applied a few times, eg 10 times:
sa: merged-matrix[O,O,O,O,O,O,O,O,O,O]
[ a1 ] = [ 1 0 0 0 0 0 0 0 0 0 0 0.5 0 0 0 0 0 ] [ a1 ]
[ a2 ] [ 0 1 0.5 0 0 0 0 0 0 150.5 75 0 0 0 0 0 0.5 ] [ a2 ]
[ a3 ] [ 150 0 1 0.5 0 0 0 0 0 0 0.5 75 0 0 0 0 0 ] [ a3 ]
[ a4 ] [ 0 150 0 1 0.5 0 0 0 0 0 0 0.5 0 0 0 0 0 ] [ a4 ]
[ a5 ] [ 0 0 150 0 1 0.5 0 0 0 0 0 0 0.5 0 0 0 0 ] [ a5 ]
[ a6 ] [ 0 0 0 150 0 1 0.5 0 0 0 0 0 0 0.5 0 0 0 ] [ a6 ]
[ a7 ] [ 0 0 0 0 0 0 1 0.5 0 0 0 0 0 0 0.5 0 0 ] [ a7 ]
[ a8 ] [ 0 0 0 0 0 0 0 1 0.5 0 0 0 0 0 0 0.5 0 ] [ a8 ]
[ a9 ] [ 0 0 0 0 0 0 0 0 1 0.5 0 0 0 0 0 0 0.5 ] [ a9 ]
[ a10 ] [ 0 0 0 0 0 0 0 0 0 1 0.5 0 0 0 0 0 0 ] [ a10 ]
[ b1 ] [ 1 0 0 0 0 0 0 301 150 0 0 0.5 0 0 1 150 0 ] [ b1 ]
[ b2 ] [ 0 1 0 0 0 0 0 0 301 150 0 0 0 0 0 1 150 ] [ b2 ]
[ b3 ] [ 0 0 1 0 0 0 0 0 0 301 150 0 0 0 0 0 1 ] [ b3 ]
[ b4 ] [ 300 0 0 1 0 0 0 0 0 0 1 150 0 0 0 0 0 ] [ b4 ]
[ b5 ] [ 0 300 45000 0 301 150 0 0 0 0 0 1 150 0 0 0 0 ] [ b5 ]
[ b6 ] [ 0 0 300 45000 0 301 150 0 0 0 0 0 1 150 0 0 0 ] [ b6 ]
[ b7 ] [ 0 0 0 300 0 0 301 150 0 0 0 0 0 1 150 0 0 ] [ b7 ]
Now, it would be nice if we could just do: merged-matrix[O^10] or something, but my code can't currently do that. Shouldn't be too hard to add if I get the inclination.That's it for this post. I think some more matrices in the next post or two.
No comments:
Post a Comment