And ] .] also has rank 2...
But looking at http://www.jsoftware.com/help/dictionary/d300.htm when
I try to replace . with DET, I get a length error. DET works fine for
numbers.
Looking closer, the problem seems to be with how soon DET terminates.
-/ .* performs only one multiply.
-/ DET* performs a lot of extra multiplies (I think 4 multiplies, but
they are hard to count directly because DET does not work if * is
replaced with a verb with rank greater than 0).
But, also, DET uses $: which can make its use in tacit expressions problematic.
So... I replaced DET with this definition, and it seemed to work:
DET=: 2 : '(f=:{.@,`({."1 u . v f@minors)@.(1<{:@$) @ ,. "2) f.'
Of course, this is not very general -- I can only have one functioning
DET definition active -- but it's good enough for a model.
So, then I modified minors and DET to be like this:
DET=: 2 : 'f=: {.@{.`({."_1 u . v f@minors)@.(1<1{$) "(2+ {. v b. 0)'
minors=: }."_2 @ (1&([\.))
And, I defined my eigenvalue function in terms of DET:
ev=: 1 {:: [: p. [: -/ DET(+//.@(*/)"1) ] ,"0 -@=@i.@#
and this worked!
But this loses the ,. functionality of the original, which would turn
a vector into a column.
In other words -/ .* i. 5 is -/ .* i. 5 1 and not -/ .* i.1 5
So, if we redefined . to be this DET it would be completely compatible
for matrix arguments but not so compatible for vector arguments. So..
what would an equivalent to ,. look like for a sequence of
polynomials? And, can anyone think of a useful example of this
mechanism where the product part consumes rank 2 items?
Thanks,
--
Raul
On Sun, Jun 10, 2012 at 11:26 PM, Marshall Lochbaum
<[email protected]> wrote:
> It looks like the determinant conjunction . gives functions that are
> explicitly rank 2:
> -/ .* b. 0
> 2 _ _
> This means we can't use a matrix of rank-1 polynomials as input without
> redefining the conjunction ourselves.
>
> Marshall
>
> On Sun, Jun 10, 2012 at 10:05 PM, Raul Miller <[email protected]> wrote:
>
>> I am looking for a concise expression to find eigenvalues in J (for
>> small matrices)
>>
>> lapack is not universally available, so I am ignoring it.
>>
>> Here's the best I have been able to find (loosely based on an "At Play
>> With J" article)
>>
>> ev=: 1 {:: [: p.@> [: -&.>/ .(+//.@(*/)&.>) ] <@,"0 -@=@i.@#
>>
>> Is there some way to eliminate the boxing and unboxing here?
>>
>> Thanks,
>>
>> --
>> Raul
>> ----------------------------------------------------------------------
>> 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