I'm using the thing for mesh resistance as someone noted above, The
gesv seems to work very well, and a 121 x 121 resistor array was timed a
0.0008s (0.8 ms!) That's pretty amazing. %. doesn't seem to be anywhere
close to that fast, and throws domain errors on many physical electrical
network, whereas the gesv seems to be solid given the poking around I did a
little with it today. Over the weekend, I'll have more time to test it out
and solve. The code snippet I showed was for a Shannon Switching game, to
just try out the Laplacian etc. I'll let you know how it works.

Brian Babiak MD
https://drbabiak.com/ <http://drbabiak.com>

paypal: *http://www.paypal.me/BrianBabiakMD
<https://www.paypal.me/BrianBabiakMD>*

cash, check, debit/credit cards, paypal, apple pay, android pay, discover
and amex accepted for all payments

square: *https://squareup.com/store/brian-babiak-md
<https://squareup.com/store/brian-babiak-md>*


On Fri, Jul 28, 2017 at 4:30 PM, Raul Miller <rauldmil...@gmail.com> wrote:

> I can't test this because I do not know what you are using for m, and
> because I get a value error on z2d when I try gesv_jlapack_ on
> arbitrary values.
>
> Still, I am curious - if gesv_jlapack_ is better than (x %. y) what
> are the conditions where it's better?
>
> Thanks,
>
> --
> Raul
>
> On Fri, Jul 28, 2017 at 1:00 PM, Brian Babiak <bdbab...@gmail.com> wrote:
> > Actually I just noticed there is a fast solver in Lapack for solving
> Ax=b.
> > This is all I need - thanks!
> >
> > load 'math/lapack/gesv'
> >    m1=: ?.4 3$30
> >    gesv_jlapack_ m;m1         NB. solves m * x = m1
> >
> >
> > Brian Babiak MD
> > https://drbabiak.com/ <http://drbabiak.com>
> >
> > paypal: *http://www.paypal.me/BrianBabiakMD
> > <https://www.paypal.me/BrianBabiakMD>*
> >
> > cash, check, debit/credit cards, paypal, apple pay, android pay, discover
> > and amex accepted for all payments
> >
> > square: *https://squareup.com/store/brian-babiak-md
> > <https://squareup.com/store/brian-babiak-md>*
> >
> >
> > On Fri, Jul 28, 2017 at 10:03 AM, Brian Babiak <bdbab...@gmail.com>
> wrote:
> >
> >> Thanks for the help everyone. LAPACK is very useful. I also appreciate
> the
> >> Rosetta code mesh. It's interesting how many choices were made the
> same. I
> >> appreciate the help on this!
> >>
> >> Brian Babiak MD
> >> https://drbabiak.com/ <http://drbabiak.com>
> >>
> >> paypal: *http://www.paypal.me/BrianBabiakMD
> >> <https://www.paypal.me/BrianBabiakMD>*
> >>
> >> cash, check, debit/credit cards, paypal, apple pay, android pay,
> discover
> >> and amex accepted for all payments
> >>
> >> square: *https://squareup.com/store/brian-babiak-md
> >> <https://squareup.com/store/brian-babiak-md>*
> >>
> >>
> >> On Fri, Jul 28, 2017 at 2:51 AM, Lippu Esa <esa.li...@varma.fi> wrote:
> >>
> >>> I think too. Here is the smallest eigenvalue of a:
> >>>
> >>>    require 'math/lapack/geev'
> >>>    ev=.geev_jlapack_ a
> >>>    {.sort|>1{ev
> >>> 6.83897e_14
> >>>
> >>> Esa
> >>> -----Original Message-----
> >>> From: Programming [mailto:programming-boun...@forums.jsoftware.com] On
> >>> Behalf Of 'Jon Hough' via Programming
> >>> Sent: Friday, July 28, 2017 9:17 AM
> >>> To: programm...@jsoftware.com
> >>> Subject: Re: [Jprogramming] Matrix operations questions
> >>>
> >>> I think a is singular. You should use LAPACK to decompose it perhaps.
> >>> see: http://code.jsoftware.com/wiki/Studio/LAPACK
> >>>
> >>> --------------------------------------------
> >>> On Fri, 7/28/17, Brian Babiak <bdbab...@gmail.com> wrote:
> >>>
> >>>  Subject: Re: [Jprogramming] Matrix operations questions
> >>>  To: programm...@jsoftware.com
> >>>  Date: Friday, July 28, 2017, 2:33 PM
> >>>
> >>>  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/forum
> >>> s.htm
> >>>
> >>>  ------------------------------------------------------------
> ----------
> >>>      For information about J forums see http://www.jsoftware.com/forum
> >>> s.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
> >>> ----------------------------------------------------------------------
> >>> 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
>
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm

Reply via email to