aUCBLogo Demos and Tests / imm


to imm   ;invertMatrixMovie
   
init
   
tabl
   
setcursor se 3 4
   
type [original]
   
display :a 3 3
   
invert :a
   
display :a 3 12
   
setcursor se 3 13
   
type [inverse]
   
setCursor list 0 23
end

to init
   
make "a {{1 2 3 4 4 1 3 3}{4 5 6 7 2 3 3 1}{2 2 3 4 1 2 1 2}
            
{1 2 5 1 3 1 5 2}{3 0 4 4 6 1 4 1}{4 1 6 5 1 3 .7 3}
            
{3 2 5 1 3 3 9 1}{1 4 3 2 1 3 1 1}}
end

to tabl
   
ct
   
setTextFont [Courier New]
   
insertMode
   
for [i 1 80][type "-]
   
(pr)
   
for [i 1 21][pr "|]
   
for [i 1 21][setcursor se 79 :i type "|]
   
setcursor [1 22]
   
for [i 1 78][type "-]
   
overwriteMode
end

to display :a :b :c
   
make "n count :a
   
for [i 1 :n]
   
[   for [j 1 :n]
      
[   make "aa mditem se :i :j :a
         
setcursor se :b+ :j*8 :i+ :c
         
type form :aa 7 2
         
setcursor se 3 5
      
]
   
]
end

to invert :a
   
make "det 1
   
for [l 1 :n]
   
[   make "x mditem (se :l :l) :a
      
make "det :det* :x
      
ifelse :x==0
      
[   pr [singular matrix] stop
      
]
      
[   mdsetitem (se :l :l) :a 1
         
for [j 1 :n 1]
         
[   make "k mditem (se :l :j) :a
            
make "k :k/ :x
            
mdsetitem (se :l :j) :a :k
         
]
         
for [i 1 :n]
         
[   ifelse :i==:l
            
[   type "
            
]
            
[   make "x mditem (se :i :l) :a
               
mdsetitem (se :i :l) :a 0
               
for [j 1 :n]
               
[   make "aa mditem (se :i :j) :a
                  
make "bb mditem (se :l :j) :a
                  
make "bb :bb* :x
                  
make "bb :aa- :bb
                  
mdsetitem (se :i :j) :a :bb
                  
setcursor se 3+ :j*8 12+ :i
                  
type form :bb 7 2 setcursor se 2 5
                  
wait 2
               
]
            
]
         
]
      
]
   
]
end