Thanks for the tip! I knew this should be possible (even with a bit of work). Looking through the github issues and PRs, it looks like this functionality is slated for 0.3. I've been using 0.2. Suppose it's time to upgrade to the nightlies... :)
-Jim On Tuesday, March 25, 2014 6:47:02 PM UTC-5, andrew cooke wrote: > > > references > > https://groups.google.com/forum/#!msg/julia-users/Ui977brdzAU/u4rWiDeJv-MJ > https://github.com/andrewcooke/IntModN.jl > > > On Tuesday, 25 March 2014 20:19:32 UTC-3, andrew cooke wrote: >> >> >> something like this does work: >> >> julia> using IntModN >> >> julia> a = [GF2(1) GF2(1); GF2(0) GF2(1)] >> 2x2 Array{ZField{2,Int64},2}: >> 1 1 >> 0 1 >> >> ulia> b = inv(a) >> 2x2 Array{ZField{2,Int64},2}: >> 1 1 >> 0 1 >> >> julia> b * a >> 2x2 Array{ZField{2,Int64},2}: >> 1 0 >> 0 1 >> >> >> that's all GF(2), not integers. >> >> i do subclass Number (i can't remember why, but it's necessary). i also >> have promotion *from* Int, so that you can add and compare against constant >> integers in the code (typically 0 and 1). >> >> andrew >> >> >> On Tuesday, 25 March 2014 13:18:06 UTC-3, Andreas Noack Jensen wrote: >>> >>> Okay. Now I understand what is going on. I would like something like >>> this to work. I'll have to go now, but will think about what to do. >>> >>> >>> 2014-03-25 16:40 GMT+01:00 James Crist <cris...@umn.edu>: >>> >>>> I just realized that my test case is obviously singular, so not >>>> invertible. But I don't think it even gets to the actual inversion code >>>> before erroring, so I doubt that's the problem. >>>> >>>> -Jim >>>> >>>> >>>> On Tuesday, March 25, 2014 10:38:45 AM UTC-5, James Crist wrote: >>>>> >>>>> Here's the gist: https://gist.github.com/jcrist/ad663d6bdc4d82896176 >>>>> >>>>> I tried to simplify everything down to just the bare essentials, but >>>>> there may be something I missed. Gives the same error as it did in the >>>>> full >>>>> code though, so I think I got it all. >>>>> >>>>> I'm running version 0.2.0. >>>>> >>>>> Thanks, >>>>> >>>>> -Jim >>>>> >>>>> On Tuesday, March 25, 2014 10:21:10 AM UTC-5, Andreas Noack Jensen >>>>> wrote: >>>>>> >>>>>> A gist would be helpful. By the way, which version of Julia are you >>>>>> running? >>>>>> >>>>>> >>>>>> 2014-03-25 16:19 GMT+01:00 James Crist <cris...@umn.edu>: >>>>>> >>>>>>> I'm probably not. New to this language, still figuring things out. >>>>>>> The matrix type seems to be inferred correctly though. I'll put a gist >>>>>>> up >>>>>>> in a bit to try and get some more relevant feedback. >>>>>>> >>>>>>> >>>>>>> On Tuesday, March 25, 2014 9:54:53 AM UTC-5, Andreas Noack Jensen >>>>>>> wrote: >>>>>>> >>>>>>>> I don't think you are right about LAPACK. The code tries to promote >>>>>>>> to a type which is stable under lu factorizing which is the >>>>>>>> intermediate >>>>>>>> step in the calculation. The problem could be that your matrix type is >>>>>>>> not >>>>>>>> inferred correctly. Please try to let your type by subtype of Number >>>>>>>> and >>>>>>>> then define your matrix by >>>>>>>> >>>>>>>> a = Mytype[mytype(1) mytype(2); mytype(3) mytype(4)] >>>>>>>> >>>>>>>> and see if it works. >>>>>>>> >>>>>>>> >>>>>>>> 2014-03-25 15:29 GMT+01:00 James Crist <cris...@umn.edu>: >>>>>>>> >>>>>>>> Yeah, I get a "ERROR: no method Triangular{..." error, because my >>>>>>>>> type doesn't subtype Number. If I do subtype number, then it wants a >>>>>>>>> conversion function to convert it to a float, so it can use the >>>>>>>>> LAPACK >>>>>>>>> routines. >>>>>>>>> >>>>>>>>> -Jim >>>>>>>>> >>>>>>>>> >>>>>>>>> On Tuesday, March 25, 2014 9:22:29 AM UTC-5, Andreas Noack Jensen >>>>>>>>> wrote: >>>>>>>>> >>>>>>>>>> Have you tried to invert it? Maybe it works already. There is a >>>>>>>>>> generic inv in base/linalg/generic.jl. You'll have to define a one >>>>>>>>>> method >>>>>>>>>> for you type and maybe also a zero method. >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> 2014-03-25 15:14 GMT+01:00 James Crist <cris...@umn.edu>: >>>>>>>>>> >>>>>>>>>> I have a type I've defined. It's not a number, but it has all >>>>>>>>>>> arithmetic operations defined for it. Is there a way to calculate >>>>>>>>>>> the >>>>>>>>>>> inverse of a matrix of a user defined type? For example, if I was >>>>>>>>>>> to define: >>>>>>>>>>> >>>>>>>>>>> a = [mytype(1) mytype(2); mytype(3) mytype(4)] >>>>>>>>>>> b = inv(a) >>>>>>>>>>> >>>>>>>>>>> Looking through base, there doesn't seem to be a way to find >>>>>>>>>>> inverses of non-numeric matrices (although I may be missing it). >>>>>>>>>>> For my >>>>>>>>>>> case, even a simple algorithm that only works well for small >>>>>>>>>>> matrices >>>>>>>>>>> (<10x10) would be more than sufficient. If a way for doing this >>>>>>>>>>> doesn't >>>>>>>>>>> currently exist, I'll probably try to roll my own. >>>>>>>>>>> >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> -- >>>>>>>>>> Med venlig hilsen >>>>>>>>>> >>>>>>>>>> Andreas Noack Jensen >>>>>>>>>> >>>>>>>>> >>>>>>>> >>>>>>>> >>>>>>>> -- >>>>>>>> Med venlig hilsen >>>>>>>> >>>>>>>> Andreas Noack Jensen >>>>>>>> >>>>>>> >>>>>> >>>>>> >>>>>> -- >>>>>> Med venlig hilsen >>>>>> >>>>>> Andreas Noack Jensen >>>>>> >>>>> >>> >>> >>> -- >>> Med venlig hilsen >>> >>> Andreas Noack Jensen >>> >>