------------------------------------------
------------------------------------------
----- A System Matrix Implementation -----
----- using Sparse Matrix Methods, -----
----- and Energy Flow Processing -----
----- -----
----- By John Ringland -----
----- 2004/11/21 -----
------------------------------------------
------------------------------------------
-- this file uses sparse matrix energy flow methods
-- to implement an ergodic pure metric sysWrapped SMN framework
-- using System Transforms.
-- And uses the above methods to implement a simple NAND system.
include ergodicSysMSMN.e
---------------------------------
---------------------------------
----- Test Model of a -----
----- Single NAND system -----
---------------------------------
---------------------------------
sequence st, sm, sv, model, cUpdate
object is
function NAND(sequence in)
-- in is a pair of cData bools; either zero or one
return not (in[1]*in[2])
end function
integer NAND_id
NAND_id = routine_id("NAND")
-- input selector
is = 1
st = {NAND_id}
-- constructing the Metric System Matrix element by element
sm = sparse_SM(3,3)
sm = set_SM(sm, {1,2}, is)
sm = set_SM(sm, {1,3}, is)
-- constructing the State Vector
sv = {0,1,1}
-- flagging the initial inputs for processing
cUpdate = {2,3}
-- combining all of the above into a single system model
model = {st,sm,sv,cUpdate}
puts(1,"\n\nSingle NAND System\n\n")
puts(1,"initial model a = NOT (b AND c)\n")
? model
sequence result
puts(1,"first iteration\n")
result = step_Model(model, 1)
puts(1,"State Vector: ")
? result[model_][SV_]
puts(1,"cUpdate: ")
? result[model_][CU_]
puts(1,"cUpdate is empty so no more iterations needed\n\n")
puts(1,"all iterations at once\n")
result = step_Model(model, 100)
puts(1,"State Vector: ")
? result[model_][SV_]
puts(1,"cUpdate: ")
? result[model_][CU_]
puts(1,"\nthen change c=0\n\n")
result[model_][SV_][3] = 0
result[model_][CU_] = {3}
puts(1,"State Vector: ")
? result[model_][SV_]
puts(1,"cUpdate: ")
? result[model_][CU_]
puts(1,"\nfirst iteration\n")
result = step_Model(result[model_], 1)
puts(1,"State Vector: ")
? result[model_][SV_]
puts(1,"cUpdate: ")
? result[model_][CU_]
puts(1,"\nsecond iteration\n")
result = step_Model(result[model_], 1)
puts(1,"State Vector: ")
? result[model_][SV_]
puts(1,"cUpdate: ")
? result[model_][CU_]
puts(1,"this second iteration doesn't change the state vector, it only clears the cUpdate list\n\n")
www.Anandavala.info