Hello,

I suppose I'm late to the party, but I was reading some notes about
polynomial interpolation and remembered having seen this thread. My
contribution is a version using the new fold operator:

V =: {{ ((}.-}:) y) % ((-x){.m) - x{.m }} NB. iterate divided differences
A =: {{ ({.y) , y {.F::(x V) i.&.<:#y }}  NB. newton coefficients
N =: {{ (({."1 u)A({:"1 u)) +/ . * 1,*/\ y-}:{."1 u }} NB. evaluate
polynomial at y

({:"1 -: (zs N"0)@{."1) zs =: (,. 3&o.) _3r2 _3r4 0 3r4 3r2

pd 'reset; type line'
pd (; zs N"0) 1.51 * (%~ i:) 1000
pd (; 3&o.) 1.51 * (%~ i:) 1000
pd 'show'

Joseph


On 10/19/20, 'Mike Day' via Programming <[email protected]> wrote:
> Funny,  I think I’ve usually done the quicker one.
>
> Thanks for reminding me,
>
> Mike
>
> Sent from my iPad
>
>> On 19 Oct 2020, at 22:03, Raul Miller <[email protected]> wrote:
>>
>> A minor side note:
>>
>>   (+/\@:= -: >:/~) i.2000
>> 1
>>   timespacex '+/\=i.2000'
>> 0.010131 3.78202e7
>>   timespacex '>:/~i.2000'
>> 0.002597 4.21203e6
>>
>> Thanks,
>>
>> --
>> Raul
>>
>> On Thu, Oct 15, 2020 at 2:21 PM 'Michael Day' via Programming
>> <[email protected]> wrote:
>>>
>>> It took me a while to see what was required using the matrix, M and the
>>> derived coefficients, a.
>>>
>>> But this works ok.  I haven't turned the explicit code into a function,
>>> but that should be quite
>>> straightforward.
>>>
>>> NB. fixed point font best past here....
>>>    a =. y %. M =. 1,. }:"1 */\"1 (-/~ * +/\@:=@i.@#) x
>>>    M
>>> 1   0    0     0      0
>>> 1 3r4    0     0      0
>>> 1 3r2  9r8     0      0
>>> 1 9r4 27r8 81r32      0
>>> 1   3 27r4  81r8 243r32
>>>    a
>>> _14.10142 17.559765 _10.878424 4.8348551 0
>>>
>>>    6{."1 [n =: 1,}:*/\ x-~/steps _1.5 1.5 30  NB. n is Newton basis
>>> form of new x
>>> 1        1        1       1       1        1
>>> 0      0.1      0.2     0.3     0.4      0.5
>>> 0   _0.065    _0.11  _0.135   _0.14   _0.125
>>> 0    0.091    0.143   0.162   0.154    0.125
>>> 0 _0.19565 _0.29315 _0.3159 _0.2849 _0.21875
>>>
>>>    plot a +/ . * n
>>>
>>> Earlier,  I'd overlooked the (rather obvious!) fact that you need to
>>> apply a to the Newton
>>> basis form,  n here,  of your required prediction points,  not the
>>> untransformed points.
>>>
>>> Mike
>>>
>>>
>>>> On 15/10/2020 14:50, Stefan Baumann wrote:
>>>> Dear all.
>>>> Recently I stumbled upon the Newton polynomial and took it as a practice
>>>> to
>>>> implement it without using loops, but failed. I first didn't get a grab
>>>> on
>>>> how to create the matrix used in
>>>> https://en.wikipedia.org/wiki/Newton_polynomial#Main_idea, and
>>>> eventually
>>>> came up with code following
>>>> https://en.wikipedia.org/wiki/Newton_polynomial#Application:
>>>>
>>>> NB. Newton polynomial
>>>>
>>>> np=: 4 : 0
>>>>
>>>> a=. {. y
>>>>
>>>> for_i. }.>:i.#x do.
>>>>
>>>> y=. (2 (-~)/\ y) % i ({:-{.)\ x NB. Divided differences
>>>>
>>>> a=. a, {. y NB. Coefficients are the topmost entries
>>>>
>>>> end.
>>>>
>>>> NB. Convert the summands aᵢ(x-x₀)…(x-xᵢ₋₁) of the polynomial
>>>>
>>>> NB. from multiplier-and-roots to coefficients form and add them up
>>>>
>>>> +/@,:/ p."1 (;/a) ,. (<''), }:<\ x
>>>>
>>>> )
>>>>
>>>> x=: _3r2 _3r4 0 3r4 3r2
>>>>
>>>> y=: 3&o. x
>>>>
>>>> load'plot'
>>>>
>>>> load'stats'
>>>>
>>>> plot (];(x np y)&p.) steps _1.5 1.5 30
>>>>
>>>> I also tried replacing the loop with fold F:. but again was not able to
>>>> do
>>>> so. Anyone out there who can enlighten me?
>>>>
>>>> Many thanks. Stefan.
>>>> ----------------------------------------------------------------------
>>>> For information about J forums see http://www.jsoftware.com/forums.htm
>>>
>>>
>>> --
>>> 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
>> ----------------------------------------------------------------------
>> 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