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