Hi Linda,
Basically tacit definitions contain no reference to their arguments.
http://en.wikipedia.org/wiki/Tacit_programming

By that definition the following assignment isn't tacit because the
"y" refers to the right argument.

   trian=: 13 :'-:y*>:y'

However the resulting definition for trian is tacit:

   trian
[: -: ] * >:

As Bill suggests, 13 : '' is a useful tool for understanding how to
convert explicit to tacit, but it won't necessarily generate "optimal"
tacit definitions.

On Thu, Aug 23, 2012 at 3:29 PM, Linda Alvord <[email protected]> wrote:
> If you are able to use  5!:4  and get a tree, is that a way to tell if the
> definition is tacit?
>
> Thanks for letting me know that I was not clear about tacit.
>
> Linda
>
> -----Original Message-----
> From: [email protected]
> [mailto:[email protected]] On Behalf Of Ric Sherlock
> Sent: Wednesday, August 22, 2012 9:36 PM
> To: [email protected]
> Subject: Re: [Jprogramming] Creating random symmetric matrices
>
> Just a pedantic nitpick with regard to terminology here.
> Ewart's verbs were already tacit. I think the key thing that your versions
> show is how that tacit translates to explicit and then how 13
> : retranslates them to another tacit version without hooks.
>
> On Thu, Aug 23, 2012 at 12:45 PM, Linda Alvord <[email protected]>
> wrote:
>> Ewart's function in tacit version:
>>
>>    trian=: 13 :'-:y*>:y'
>>    indsy=: 13 :'(>.|:i.y)+/tri i.y'
>>
>>    indsy 4
>> 0 1 3 6
>> 1 2 4 7
>> 2 3 5 8
>> 3 4 6 9
>>    trian
>> [: -: ] * >:
>>    indsy
>> ([: >. [: |: i.) +/ [: tri i.
>>
>> Linda
>>
>>
>> -----Original Message-----
>> From: [email protected]
>> [mailto:[email protected]] On Behalf Of Henry
>> Rich
>> Sent: Wednesday, August 22, 2012 6:46 PM
>> To: [email protected]
>> Subject: Re: [Jprogramming] Creating random symmetric matrices
>>
>> Why yes, that's much better.  Very clever way of filling the triangle.
>>
>> Henry Rich
>>
>> On 8/22/2012 4:28 PM, Ric Sherlock wrote:
>>> Note that Ewart Shaw has responded to this on the Wiki with a
>>> solution that only generates the required number of random numbers:
>>> http://www.jsoftware.com/jwiki/EwartShaw/RandomSymmetricMatrix
>>>
>>> On Wed, Aug 22, 2012 at 5:30 PM, Ric Sherlock <[email protected]> wrote:
>>>> The other option is not to add them in the first place?
>>>>
>>>>     load 'stats/distribs'
>>>>     (|: + ~: zeroTri ) >: zeroTri rnorm 5 5
>>>>   0.346799 _1.22161    0.57274   0.556122 _0.329658
>>>>   _1.22161 0.149955   _1.77435   _1.76668  0.831557
>>>>    0.57274 _1.77435    0.77674 _0.0690683 _0.967551
>>>>   0.556122 _1.76668 _0.0690683   0.720588 _0.195658
>>>> _0.329658 0.831557  _0.967551  _0.195658  _0.12314
>>>>
>>>> In other words zero the items above the diagonal then transpose and
>>>> add to the non-diagonal items.
>>>>
>>>> Where zeroTri is an adverb defined as below:
>>>>
>>>> NB.*zeroTri a Zeros triangular items of matrix determined by verb to
> left
>>>> NB. EG: < zeroTri mat   NB. zeros lower-tri items of mat
>>>> NB. EG: <: zeroTri mat  NB. zeros lower-tri, off-diag items of mat
>>>> NB. EG: > zeroTri mat   NB. zeros upper tri items of mat
>>>> NB. EG: = zeroTri mat   NB. zeros all off-diag items of mat
>>>> NB. EG: ~: zeroTri mat  NB. zeros diag items of mat
>>>> zeroTri=: 1 :'([: u/~ i.@#) * ]'
>>>>
>>>> This is somewhat wasteful in that you generate a bunch of random
>>>> numbers that you then discard, but if that was an issue you could
>>>> work around it.
>>>>
>>>>
>>>> On Wed, Aug 22, 2012 at 5:07 PM, Owen Marschall
>>>> <[email protected]> wrote:
>>>>> You read my mind. I was thinking about this same problem tonight
>>>>> while
>> at the opera, and I couldn't think of any way to only divide the
>> diagonals by sqrt(2) a second time--without loops, of course. I don't
>> quite yet understand why your solution works, but I'm sure with enough
>> staring and dictionary help I'll get it.
>>>>>
>>>>> Thanks,
>>>>> Owen
>>>>>
>>>>> On Aug 21, 2012, at 8:25 PM, Henry Rich wrote:
>>>>>
>>>>>> If you have a matrix a of standard normal deviates, you can make
>>>>>> it symmetric with
>>>>>>
>>>>>> asymm =: (+ |:) a
>>>>>>
>>>>>> but what is the variance of the items of a?
>>>>>>
>>>>>> The variance of values off the principal diagonal will be the sum
>>>>>> of
>> the variance of two independent standard normal deviates. i.e. 2.
>>>>>>
>>>>>> To return these values to variance 1 you need to divide by sqrt(2).
>>>>>>
>>>>>> But the variance of values ON the principal diagonal will be the
>>>>>> sum of
>> two perfectly correlated random variables, i. e. 4.
>>>>>>
>>>>>> So you need to treat the principal diagonal differently.  You can
>> reduce its variance by scaling it differently after the conversion to
>> symmetric, dividing the diagonal by sqrt(4) and the rest by sqrt(2):
>>>>>>
>>>>>> asymmgood =: asymm % %: +: >: e. i. # asymm
>>>>>>
>>>>>> (The e. i. bit is a standard idiom for making an identity matrix.
>> Another one you see around is   = i.  but I avoid that because I think
> monad
>> = was wrongly defined and should be assigned for other purposes)
>>>>>>
>>>>>> If I've made a statistical blunder I'm sure someone will tell me.
>>>>>>
>>>>>> Henry Rich
>>>>>>
>>>>>> On 8/21/2012 3:10 PM, Owen Marschall wrote:
>>>>>>> Ah, just what I needed. Thanks!
>>>>>>>
>>>>>>> On Aug 21, 2012, at 1:06 PM, Ric Sherlock wrote:
>>>>>>>
>>>>>>>> The primitive ( |: ) is transpose. E.g. :
>>>>>>>>
>>>>>>>>    |: i. 3 4
>>>>>>>> 0 4  8
>>>>>>>> 1 5  9
>>>>>>>> 2 6 10
>>>>>>>> 3 7 11
>>>>>>>> On Aug 22, 2012 6:55 AM, "Owen Marschall"
>>>>>>>> <[email protected]>
>> wrote:
>>>>>>>>
>>>>>>>>> Anyone know of an easy way to create a random symmetric matrix
>>>>>>>>> (more specifically, a matrix whose entires are each picked from
>>>>>>>>> a standard Gaussian distribution)? I can start by doing
>>>>>>>>>
>>>>>>>>> load 'stats'
>>>>>>>>> R=:normalrand N N
>>>>>>>>>
>>>>>>>>> but this is not symmetric, and I don't know of any way to
>>>>>>>>> symmetrize it without thinking in loops, which I'm training
>>>>>>>>> myself not to. If I could somehow take a transpose, that would
>>>>>>>>> solve the problem, but I don't know how to do that either.
>>>>>>>>>
>>>>>>>>> Thanks,
>>>>>>>>> Owen
>>>>>>>>> ---------------------------------------------------------------
>>>>>>>>> -
>>>>>>>>> ------ 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
>>>
>> ----------------------------------------------------------------------
>> 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