Or using Igor's math/mt addon: load 'math/mt' coinsert 'mt' calcMatrixRank_qrmt=: #@(] -. 0 #~ #)@([: clean tru@}:@geqrf)
calcMatrixRank_qrmt _3 ]\ 1 2 3 5 4 6 9 7 8 3 calcMatrixRank_qrmt _3 ]\ 1 2 3 2 4 6 9 7 8 2 On Sat, Jan 15, 2022 at 3:30 PM Ric Sherlock <[email protected]> wrote: > Putting John's suggestion of using LAPACK into practice. > LAPACK is available in the J9.03 Package Manager via the math/lapack2 > addon. > Once installed (you also need to follow the simple steps to install the > binary library for your OS) > Then I think the following should calculate the matrix rank using SVD: > > > require 'numeric' require 'math/lapack2/example/dgesvd' > > NB. this will run an example and display results. For our purposes the key > is that it has also defined the verb do_dgesvd which we can use to define a > verb to calculate rank as follows: > > calcMatrixRank_svd =: +/@(0 ~: [: clean 0 {:: do_dgesvd) > > calcMatrixRank_svd _3 ]\ 1 2 3 5 4 6 9 7 8 > > 3 > > calcMatrixRank_svd _3 ]\ 1 2 3 2 4 6 9 7 8 > > 2 > > > Or using the "less expensive" QR factorisation: > > require 'math/lapack2/example/dgeqrf' > > calcMatrixRank_qr=: #@(] -. 0 #~ #)@clean@(_1 {:: do_dgeqrf) > > calcMatrixRank_qr _3 ]\ 1 2 3 5 4 6 9 7 8 > > 3 > > calcMatrixRank_qr _3 ]\ 1 2 3 2 4 6 9 7 8 > > 2 > > > > > > > > On Fri, Jan 14, 2022 at 10:06 AM John Randall <[email protected]> > wrote: > >> The rank of a matrix (in the linear algebra, not J sense) is tricky to >> determine numerically because of stability issues: an arbitrarily small >> perturbation may increase the rank. A good practical start is the singular >> value decomposition, available through the LAPACK extension. This reduces >> the problem to finding the rank of a diagonal matrix. >> >> Best wishes, >> >> John >> >> > On Jan 13, 2022, at 2:53 PM, Pawel Jakubas <[email protected]> >> wrote: >> > >> > Dear J enthusiasts, >> > >> > I am wondering what is the preferable way to determine the rank of a >> matrix >> > in J. >> > I would expect here below >> > >> > ]m=: 3 3 $ 1 2 3 5 4 6 9 7 8 >> > 1 2 3 >> > 5 4 6 >> > 9 7 8 >> > rank m >> > 3 >> > >> > ]m=: 3 3 $ 1 2 3 2 4 6 9 7 8 >> > 1 2 3 >> > 2 4 6 >> > 9 7 8 >> > rank m >> > 2 >> > >> > Thanks and cheers >> > Pawel Jakubas >> > ---------------------------------------------------------------------- >> > For information about J forums see >> https://nam02.safelinks.protection.outlook.com/?url=http%3A%2F%2Fwww.jsoftware.com%2Fforums.htm&data=04%7C01%7Crandall%40newark.rutgers.edu%7C880d6cd5d64e4e90976208d9d6ce1893%7Cb92d2b234d35447093ff69aca6632ffe%7C1%7C0%7C637777003825756175%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C2000&sdata=pwibQz9Jk2T4mmkbJ%2FTVp6YgUGhZRVCZx8KUTVEppIc%3D&reserved=0 >> ---------------------------------------------------------------------- >> For information about J forums see http://www.jsoftware.com/forums.htm >> > ---------------------------------------------------------------------- For information about J forums see http://www.jsoftware.com/forums.htm
