I’m working on a project to compute the distance resistance between two 
vertices in an electronic grid. I will share that later. But I am having domain 
error issues with matrix inverse and matrix product operations. See the 
following:

 

f=.2 2$3 4 1 4

   g=.2 2$i.2

   h=.2 2$_3 4 2 _3

 

   2 3$'f';'g';'h';f;g;h

┌───┬───┬─────┐

│f  │g  │h    │

├───┼───┼─────┤

│3 4│0 1│_3  4│

│1 4│0 1│ 2 _3│

└───┴───┴─────�

   

   2 3$'$f';'$g';'$h';($f);($g);($h)

┌───┬───┬───┐

│$f │$g │$h │

├───┼───┼───┤

│2 2│2 2│2 2│

└───┴───┴───�

   

   f . g

|domain error

|   f     .g

   f . h

|domain error

|   f     .h

   %. f

   0.5  _0.5

_0.125 0.375

   %. g

|domain error

|       %.g

   f . f

|domain error

|   f     .f

   g . g

|domain error

|   g     .g

   h . h

|domain error

|   h     .h

   h * g

0  4

0 _3

 

The answers to all these operations are simple. Why are there these domain 
errors?

 

Here is the project this issue is coming up in, although I believe it is more 
basic than that.

 

vw=: (,@(((_ 0)$~#@:])`]`(1$~,~@:}.@[)}))`(,@(((0 
_)$~#@:])`]`(1$~,~@:}.@[)}))@.(<:@:({.@:[))

NB. (moveno boardsz) nw (x1 y1;x2 y2; etc)

NB. Gives vertex weights for a move list of a game as vector

 

 

rows=: <"1

cols=: <"1@|:

diags=: (-.((0;_1)&{))@:(</.)

a=: 3 3$i.9

conndiag=: 3 : 0

r=. r,.|.r [ r=. >0{z [ i=. 1 [ n=. #z [ z=. diags y

while. i<n do.

  col=. >i{z

  i=. >:i

  adds=. >2<\col

  r=. r,adds

  r=. r,(|."1 adds)

end.

)

 

connsq=: 3 : 0

r=. 0 2$0 [ i=. 0 [ n=. #z [ z=. y

while. i<n do.

  col=. >i{z

  i=. >:i

  adds=. >2<\col

  r=. r,adds

  r=. r,(|."1 adds)

end.

)

connrws=: connsq@:rows

conncls=: connsq@:cols

 

edges=: 3 : 0 NB. takes board size as argument

a=. (2$bs)$i.*:bs [ bs=. y

r=. (connrws a),(conncls a)

r=. r,conndiag a

)

 

BOARDSZ=: 5

EDGES=: edges BOARDSZ

VPLYR=: 1 NB. whether the vertical player is first or second

 

A=: 3 : 0

mat=. (2$netsz)$0 [ netsz=. *:BOARDSZ [ j=. 0 [ i=. 0 [ arg=. VPLYR,BOARDSZ

if. y=0 do. pcweights=. netsz$1 else. pcweights=. arg vw y end.

while. i<netsz do.

  while. j<netsz do.

    mat=. (0{(((1 2$i,j) e. EDGES)*((i{pcweights)+j{pcweights))) (<(i,j))}mat

    j=. >:j

  end.

  j=. 0

  i=. >:i

end.

mat

)

 

D=: 3 : 0

diag=. (2$netsz)$ 1,netsz#0 [ netsz=. *:BOARDSZ [ colsum=. +/y [ y=. A y

r=. colsum*diag

)

 

L=: D-A NB. the Laplacian 

 

NB. %. Laplacian or . (dot) for Laplacian times current gives domain errors

 

Any help would be appreciated! 

 

Brian Babiak MD

https://drbabiak.com

 

 

----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm

Reply via email to