Sorry for previous post a few minutes ago  - I pressed send before typing!

Yes,  true - about wasting the last element.  Also,  I realise I'd defined ∆S wrongly

in my attempt at analysing the process,  misinterpreting (}. % {. as (}. % }:) ) .

Apologies for both...

Mike

On 27/08/2020 08:02, 'Bo Jacoby' via Programming wrote:
  Mike wrote: "I don't like losing the last element of s - we're just wastingthat 
calculation."
The last element of vector s does not enter into the matrix m, but (%.m)s needs 
the last element of s.
Thanks!
Bo

     Den tirsdag den 25. august 2020 04.07.55 CEST skrev 'Bo Jacoby' via Programming 
<[email protected]>:
Thanks to Mike and Raul!
Mike asked: "Can you provide a reference for your generalised statistics?" No sir, I gave 
myself the task: "find 3 numbers having the same mean powers as those of a given 
dataset", and I also solved it myself. I appreciate the help from the programming forum for 
cleaning up my smelly code.





    U=.summary@tomb NB. for brevity



    power=.(^/>:@i.)~


    mean=.+/%#
    3 mean@power #~i.5
3 10 35.4
    3 mean@power 3 U #~i.5
3 10 35.4


    3 U #~i.5 NB. these 3 numbers solve the problem




1.61014 3.4686 3.92126



Raul's example:
   3 mean@power a=.0 1 2 3 4 5 6 7 8 9 10 20 20 20 20 20

9.6875 149.063 2689.06
    3 U a NB. this answers the question
1.92566 7.43347 19.7034
    3 mean@power 3 U a NB. the same mean powers as  a  .

9.6875 149.063 2689.06
    3 mean@power 4.77812 13.4155 10.8689 NB. not right
9.68751 106.98 1269.18


    1 U a NB. mean value
9.6875
    4 U a
1.90665 3.98091 12.1419 20.7206
    3 mean@power 4 U a NB. the same mean powers as  a  .
9.6875 149.062 2689.06


Thanks.
Bo.


     Den mandag den 24. august 2020 20.37.04 CEST skrev 'Michael Day' via Programming 
<[email protected]>:
More particularly - re - Bo Jacoby's original statement on 21/8/20.
Probably not
relevant if you haven't followed this branch of the thread.

On the code-smelliness topic - no anosmia here! - I've been nurdling
away at
your (Bo's) functions for generalisation of summary stats, even though
not yet
understanding what mathematical problem you're solving.

So far I've got:   (using fixed font...)

NB.   stomb to replace s @ tomb
stomb =: (% #) * (+/@:(^/) >:@i.)~

NB.   Ma to replace m

NB. managing to treat i. as a common element,

NB. albeit needing to modify it for some steps

Ma    =: |:@(((_1 ^ [) * (0 - [) |.!.0"0 1 (,"0 1~ >:)~) }:)~ i.@#

cf

     m f.  NB. original
|:@(|: |.!.0"0 1~ -@i.@#)@((* (_1 ^ i.@#))"1@(>:@i.@# , }:)@|:@($~ (2 # #)))

     [data =. #~ i.5
1 2 2 3 3 3 4 4 4 4
     3 stomb data
9 30 106.2
     3 s @ tomb data
9 30 106.2

     3 Ma @ stomb data
   1  0 0
   9 _2 0
30 _9 3

     3 m @ s @ tomb data
   1  0 0
   9 _2 0
30 _9 3
But - I don't like losing the last element of s - we're just wasting
that calculation.


As for the maths - you've got numbers ni associated with indices i e. i.N
Let Sk = sum over i of ni.i^k for k e. i. m + 1
Then ∆Sk = m Sk % S[k-1] for k e. 1 + i.m   ( ∆ is Delta if the
formatting fails!)


matrix M   is [ 1   0   0    0  ...]

                [∆S1 -2   0    0  ...]

                [∆S2 -∆S1 3    0  ...]

                [∆S3 -∆S2 ∆S1 -4  ...]

                   ............

                [.....      ..... ...]


You then solve for vector b in

      ∆S = M matprod b

so we have

∆S1 = b1
∆S2 = b1 ∆S1 - 2 b2
∆S3 = b1 ∆S2 - b2 ∆S1 + 3 b3
....


You then append 1 to b,  presumably defining a coefficient, b0 = 1 ,

and then find - and negate - the roots of the polynomial

     b0 x^m + b1 x^(m-1) + ... + bm = 0   (I think)


Why?  I don't see a direct relation to Newton interpolation (say),
though there

are some similarities.  Can you provide a reference for your generalised
statistics?


Thanks,

Mike



On 23/08/2020 15:58, 'Bo Jacoby' via Programming wrote:
   Raul wrote: "Generalized how?"
The special case n=1 of n&(summary@tomb) is the mean value (+/%#).So the general 
case n&(summary@tomb) is a generalized mean value.
Correctness:

      1 summary@tomb a=. (i.11) ,5#20


9.6875

      (+/%#) a
9.6875

      1 summary@tomb 3 summary@tomb a9.6875


      ((+/%#) 3 summary@tomb a) = (+/%#) a

1



      3 summary@tomb a1.92566 7.43347 19.7034

      (+/%#)1.92566 7.43347 19.70349.68751

      1 summary@tomb 1.92566 7.43347 19.7034
9.68751

Thanks!
Bo




       Den søndag den 23. august 2020 10.01.24 CEST skrev Raul Miller 
<[email protected]>:
  For example, consider this crude mechanism:

partmean=:4 :0
     m=. (+/%#) y
     b=. <.(x%n)*i.#y
     w=. b (+/%#)/. /:~ y
     x * m * w%+/w
)

     3 partmean 0 1 2 3 4 5 6 7 8 9 10 20 20 20 20 20
2.38217 7.62295 19.0574

Correct? Incorrect? How would I know?

Note that the calculation for b could be replaced, for example:

arbmean=:4 :0
     m=. (+/%#) y
     b=. ?. (#y) # x
     w=. b (+/%#)/.  y
     x * m * w%+/w
)

     3 arbmean 0 1 2 3 4 5 6 7 8 9 10 20 20 20 20 20
4.77812 13.4155 10.8689
     (+/%#)3 arbmean 0 1 2 3 4 5 6 7 8 9 10 20 20 20 20 20
9.6875

Thanks,


--
This email has been checked for viruses by Avast antivirus software.
https://www.avast.com/antivirus

----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm

Reply via email to