matrix inverse (monad %.) is seldom used in practice. 
Try use dyad %. which uses gaussian elimination instead
of matrix inverse.

Пт, 28 июл 2017, Brian Babiak написал(а):
> Very helpful! At least I can use +/ .* for an iterative solution to Lp=I, 
> solving for p. But why can’t I always get an inverse? (Even with non 
> -infinite resistances, I get domain errors.)
> 
> a=.L 2 2;3 1;1 4
>    a
>  4 _2  0  0     0 _2  0     0     0     0  0     0     0     0     0  0    0  
>    0  0  0  0  0  0  0  0
> _2  8 _2  0     0 _2 _2     0     0     0  0     0     0     0     0  0    0  
>    0  0  0  0  0  0  0  0
>  0 _2  8 _2     0  0 _2    _2     0     0  0     0     0     0     0  0    0  
>    0  0  0  0  0  0  0  0
>  0  0 _2  8    _2  0  0    _2    _2     0  0     0     0     0     0  0    0  
>    0  0  0  0  0  0  0  0
>  0  0  0 _2  1004  0  0     0    _2 _1000  0     0     0     0     0  0    0  
>    0  0  0  0  0  0  0  0
> _2 _2  0  0     0  8 _2     0     0     0 _2     0     0     0     0  0    0  
>    0  0  0  0  0  0  0  0
>  0 _2 _2  0     0 _2 12    _2     0     0 _2    _2     0     0     0  0    0  
>    0  0  0  0  0  0  0  0
>  0  0 _2 _2     0  0 _2  1010    _2     0  0    _2 _1000     0     0  0    0  
>    0  0  0  0  0  0  0  0
>  0  0  0 _2    _2  0  0    _2  2008 _1000  0     0 _1000    _2     0  0    0  
>    0  0  0  0  0  0  0  0
>  0  0  0  0 _1000  0  0     0 _1000  4000  0     0     0 _1000 _1000  0    0  
>    0  0  0  0  0  0  0  0
>  0  0  0  0     0 _2 _2     0     0     0  8    _2     0     0     0 _2    0  
>    0  0  0  0  0  0  0  0
>  0  0  0  0     0  0 _2    _2     0     0 _2  1009 _1000     0     0 _2   _1  
>    0  0  0  0  0  0  0  0
>  0  0  0  0     0  0  0 _1000 _1000     0  0 _1000  5999 _1000     0  0 _999 
> _1000  0  0  0  0  0  0  0
>  0  0  0  0     0  0  0     0    _2 _1000  0     0 _1000  2008    _2  0    0  
>   _2 _2  0  0  0  0  0  0
>  0  0  0  0     0  0  0     0     0 _1000  0     0     0    _2  1006  0    0  
>    0 _2 _2  0  0  0  0  0
>  0  0  0  0     0  0  0     0     0     0 _2    _2     0     0     0  7   _1  
>    0  0  0 _2  0  0  0  0
>  0  0  0  0     0  0  0     0     0     0  0    _1  _999     0     0 _1 1004  
>   _1  0  0 _1 _1  0  0  0
>  0  0  0  0     0  0  0     0     0     0  0     0 _1000    _2     0  0   _1  
> 1009 _2  0  0 _2 _2  0  0
>  0  0  0  0     0  0  0     0     0     0  0     0     0    _2    _2  0    0  
>   _2 12 _2  0  0 _2 _2  0
>  0  0  0  0     0  0  0     0     0     0  0     0     0     0    _2  0    0  
>    0 _2  8  0  0  0 _2 _2
>  0  0  0  0     0  0  0     0     0     0  0     0     0     0     0 _2   _1  
>    0  0  0  5 _2  0  0  0
>  0  0  0  0     0  0  0     0     0     0  0     0     0     0     0  0   _1  
>   _2  0  0 _2  7 _2  0  0
>  0  0  0  0     0  0  0     0     0     0  0     0     0     0     0  0    0  
>   _2 _2  0  0 _2  8 _2  0
>  0  0  0  0     0  0  0     0     0     0  0     0     0     0     0  0    0  
>    0 _2 _2  0  0 _2  8 _2
>  0  0  0  0     0  0  0     0     0     0  0     0     0     0     0  0    0  
>    0  0 _2  0  0  0 _2  4
>    -/ . * a
> _8.08478e26
>    %. a
> |domain error
> |       %.a
> 
> 
> Brian Babiak MD
> https://drbabiak.com
>  
> 167 Ridgecrest Rd.
> Ithaca NY 14850 – 9449
> (607) 379 – 1335
> fax (866) 813 – 4158
>  
> Payment links: 
>  
> http://PayPal.Me/BrianBabiakMD http://mkt.com/brian-babiak-md 
>  
> 
> On 7/28/17, 1:03 AM, "Programming on behalf of 'Jon Hough' via Programming" 
> <programming-boun...@forums.jsoftware.com on behalf of 
> programm...@jsoftware.com> wrote:
> 
>     Matrix product is +/ .* (dyadic)
>     determinant is -/ .* (monadic)
>     
>     see: http://code.jsoftware.com/wiki/Vocabulary/dot
>     
>     The matrix g is singular (since the rows are identical) and has no 
> inverse. Hence %. gives an error.
>     
>     i.e.
>     
>     (-/ .*) g
>     
>     is zero.
>     
>     Hope that helps.
>     
>     Jon
>     
>     --------------------------------------------
>     On Fri, 7/28/17, Brian Babiak <bdbab...@gmail.com> wrote:
>     
>      Subject: [Jprogramming] Matrix operations questions
>      To: programm...@jsoftware.com
>      Date: Friday, July 28, 2017, 1:56 PM
>      
>      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
>     ----------------------------------------------------------------------
>     For information about J forums see http://www.jsoftware.com/forums.htm
> 
> 
> ----------------------------------------------------------------------
> For information about J forums see http://www.jsoftware.com/forums.htm

-- 
regards,
====================================================
GPG key 1024D/4434BAB3 2008-08-24
gpg --keyserver subkeys.pgp.net --recv-keys 4434BAB3
gpg --keyserver subkeys.pgp.net --armor --export 4434BAB3
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm

Reply via email to