Here are three one line versions of the quadratic roots. They include most of 
the ideas which have been included so far.

 

    f=: 13 :'(((a %~ ]), (c % ])) _0.5 * b +`-@.(0>[) %: (*:b) - 4*a*c)[''a b 
c''=:y'

   f

3 : '(((a %~ ]), (c % ])) _0.5 * b +`-@.(0>[) %: (*:b) - 4*a*c)[''a b c''=:y'

   f 1 3 2

_2 _1

   f 1 0 1

0j_1 0j1

   

 

   g=: 13 : '((2*a)%~(-b)(+,-)%:(*:b)-4*a*c)[''a b c ''=:y'

   g

3 : '((2*a)%~(-b)(+,-)%:(*:b)-4*a*c)[''a b c ''=:y'

   g 1 3 2 

_1 _2

   g 1 0 1

0j1 0j_1

   

 

 

   h=: 13 : '(2*0{y)%~(-1{y)(+,-)%:(*:1{y)-4*(0{y)*2{y'

   h

(2 * 0 { ]) %~ ([: - 1 { ]) (+ , -) [: %: ([: *: 1 { ]) - 4 * (0 { ]) * 2 { ]

   h 1 3 2 

_1 _2

   h 1 0 1

0j1 0j_1

 

Only the third one has a tacit version which can be studied further:   

 

  5!:4 <'h'

        ┌─ 2                      
        ├─ *                      
  ┌─────┤   ┌─ 0                  
  │     └───┼─ {                  
  │         └─ ]                  
  ├─ ~ ─── %                      
  │         ┌─ [:                 
  │         ├─ -                  
──┤     ┌───┤    ┌─ 1             
  │     │   └────┼─ {             
  │     │        └─ ]             
  │     │   ┌─ +                  
  │     ├───┼─ ,                  
  │     │   └─ -                  
  └─────┤                         
        │   ┌─ [:                 
        │   ├─ %:                 
        │   │        ┌─ [:        
        │   │        ├─ *:        
        └───┤    ┌───┤    ┌─ 1    
            │    │   └────┼─ {    
            │    │        └─ ]    
            │    ├─ -             
            └────┤   ┌─ 4         
                 │   ├─ *         
                 │   │        ┌─ 0
                 └───┤    ┌───┼─ {
                     │    │   └─ ]
                     └────┼─ *    
                          │   ┌─ 2
                          └───┼─ {
                              └─ ]

 Any ideas to improve these?  

 

Linda

 

-----Original Message-----
From: programming-boun...@forums.jsoftware.com 
[mailto:programming-boun...@forums.jsoftware.com] On Behalf Of km
Sent: Thursday, December 13, 2012 10:57 AM
To: programm...@jsoftware.com
Subject: Re: [Jprogramming] Cool roots

 

Try

 

    rootsHR =: 3 : 0

'a b c' =. y

((a %~ ]) , (c % ])) _0.5 * b +`-@.(0>[) %: (*:b) - 4*a*c

)

    rootsHR 1 3 2

_2 _1

 

Inside this rootsHR, a b c are "locals" which do not interfere with the global 
a b c .

 

Kip Murray

 

Sent from my iPad

 

 

On Dec 13, 2012, at 1:13 AM, "Linda Alvord" < <mailto:lindaalv...@verizon.net> 
lindaalv...@verizon.net> wrote:

 

> It there some way to have these three work the same way in a script.  Here's 
> my jijs:

> 

>   a=:0 { ]

>   b=:1 { ]

>   c=:2 { ]

>   roots2=:(2*a)%~([:-b)(+,-)[:%:([:*:b)-4*a*c

>   roots2 1 3 2

> _1 _2

>   roots2 1 1 1

> _0.5j0.866025 _0.5j_0.866025

>   roots2 1 0 _1

> 1 _1

>   'a b c'=:1 1 1

>   rootsHR=:((a %~ ]) , (c % ])) _0.5 * b +`-@.(0>[) %: (*:b) - 4*a*c

>   rootsHR

> _0.5j_0.866025 _0.5j0.866025

>   erase names 'a b c'

> 1 1 1

>   a=:0 { ]

>   b=:1 { ]

>   c=:2 { ]

>   roots2=:(2*a)%~([:-b)(+,-)[:%:([:*:b)-4*a*c

>   roots2 1 3 2

> _1 _2

> 

> Linda

> 

> 

> -----Original Message-----

> From:  <mailto:programming-boun...@forums.jsoftware.com> 
> programming-boun...@forums.jsoftware.com 

> [ <mailto:programming-boun...@forums.jsoftware.com> 
> mailto:programming-boun...@forums.jsoftware.com] On Behalf Of km

> Sent: Wednesday, December 12, 2012 11:09 PM

> To:  <mailto:programm...@jsoftware.com> programm...@jsoftware.com

> Subject: Re: [Jprogramming] Cool roots

> 

> Cool!

> 

> Sent from my iPad

> 

> 

> On Dec 12, 2012, at 6:00 PM, Henry Rich < <mailto:henryhr...@nc.rr.com> 
> henryhr...@nc.rr.com> wrote:

> 

>> Oh, I see.  the signum function mustn't return 0.  Should be

>> 

>> ((a %~ ]) , (c % ])) _0.5 * b +`-@.(0>[) %: (*:b) - 4*a*c

>> 

>> 

>> Henry Rich

>> 

>> On 12/12/2012 10:30 AM, km wrote:

>>> Henry, the combined form below fails when b is 0.  Kip

>>> 

>>>    r

>>> 3 : 0

>>> 'a b c' =. y

>>> ((a %~ ]) , (c % ])) _0.5 * (%: (*:b) - 4*a*c) ((* *) + ]) b

>>> )

>>>    r 1 3 2

>>> _2 _1

>>>    r 1 2 1

>>> _1 _1

>>>    r 1 0 1

>>> 0 _

>>>    r 1 0 _1

>>> 0 __

>>>    roots 1 0 1

>>> 0j1 0j_1

>>>    roots 1 0 _1

>>> 1 _1

>>> 

>>> Sent from my iPad

>>> 

>>> 

>>> On Dec 12, 2012, at 6:25 AM, Henry Rich < <mailto:henryhr...@nc.rr.com> 
>>> henryhr...@nc.rr.com> wrote:

>>> 

>>>> I have to disagree.  That's way cool.

>>>> 

>>>> I assumed you used Newton's method to shine up the final values of the 
>>>> roots, but I never knew you tried rational results too.

>>>> 

>>>> It is possible to produce accurate results for quadratics without such 
>>>> heroic measures.  You just can't use the quadratic formula like you 
>>>> learned it in highschool.

>>>> 

>>>> There's the usual quadratic formula:

>>>> 

>>>> (2*a) %~ (-b) (+,-) %: (b^2) - 4*a*c

>>>> 

>>>> and there's a less-well-known alternative form:

>>>> 

>>>> (2*c) % (-b) (-,+) %: (b^2) - 4*a*c

>>>> 

>>>> Each version produces two roots.  The roots created are more accurate when 
>>>> +-(-b) is positive, so you can get one accurate root from each formula.

>>>> 

>>>> To calculate, use the combined form

>>>> 

>>>> ((a %~ ]) , (c % ])) _0.5 * (%: (*:b) - 4*a*c) ((* *) + ]) b

>>>> 

>>>> Accuracy has a coolness all its own.

>>>> 

>>>> Henry Rich

>>>> 

>>>> On 12/12/2012 3:13 AM, Roger Hui wrote:

>>>>>> ... produce more accurate results in some difficult cases.

>>>>> 

>>>>>   c=: p. <20$1.5

>>>>>   c

>>>>> 3325.26 _44336.8 280799 _1.1232e6 3.18239e6 _6.78911e6 1.13152e7

>>>>> _1.50869e7

>>>>> 1.63441e7 _1.45281e7 1.0654e7 _6.45695e6 3.22847e6 _1.3245e6 

>>>>> 441501

>>>>> _117734

>>>>> 24527.8 _3847.5 427.5 _30 1

>>>>>   p. c

>>>>> ┌─┬───────────────────────────────────────────────────────────────

>>>>> ─

>>>>> ───────────────┐

>>>>> │1│3r2 3r2 3r2 3r2 3r2 3r2 3r2 3r2 3r2 3r2 3r2 3r2 3r2 3r2 3r2 3r2

>>>>> 3r2 3r2

>>>>> 3r2 3r2│

>>>>> └─┴───────────────────────────────────────────────────────────────

>>>>> ─

>>>>> ───────────────┘

>>>>> 

>>>>> 

>>>>> 

>>>>> On Tue, Dec 11, 2012 at 11:29 PM, Roger Hui < 
>>>>> <mailto:rogerhui.can...@gmail.com> rogerhui.can...@gmail.com>wrote:

>>>>> 

>>>>>> You may or may not know that p. employs some extraordinary measures which

>>>>>> produce more accurate results in some difficult cases.   But those

>>>>>> extraordinary measures are not "cool".  For example:

>>>>>> 

>>>>>>   w=: p. <1+i.20   NB. Wilkinson's polynomial< 
>>>>>> <http://en.wikipedia.org/wiki/Wilkinson_polynomial> 
>>>>>> http://en.wikipedia.org/wiki/Wilkinson_polynomial>

>>>>>>   w

>>>>>> 2432902008176640000 _8752948036761600000 13803759753640704000

>>>>>> _12870931245150988800 8037811822645051776 _3599979517947607200

>>>>>> 1206647803780373360 _311333643161390640 63030812099294896

>>>>>> _10142299865511450 1307535010540395 _135585182899530 11310276995381 
>>>>>> _7561...

>>>>>> 

>>>>>>   p. w

>>>>>> ┌─┬──────────────────────────────────────────────────┐

>>>>>> │1│20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1│ 

>>>>>> └─┴──────────────────────────────────────────────────┘

>>>>>> 

>>>>>> 

>>>>>> 

>>>>>> 

>>>>>> 

>>>>>> On Tue, Dec 11, 2012 at 3:40 PM, Henry Rich < 
>>>>>> <mailto:henryhr...@nc.rr.com> henryhr...@nc.rr.com> wrote:

>>>>>> 

>>>>>>> None of these cute ways is very accurate in tough cases:

>>>>>>> 

>>>>>>> 0j15 ": (2*a) %~ (-b) (+,-) %: (b^2) - 4*a*c [ 'a b c' =. 1e_6

>>>>>>> 1e6 1e_6

>>>>>>> 0.000000000000000 _1000000000000.000000000000000

>>>>>>> 

>>>>>>> But p. does better:

>>>>>>> 

>>>>>>>   0j15 ": 1 {:: p. c,b,a

>>>>>>> _1000000000000.000000000000000 _0.000000000001000

>>>>>>> 

>>>>>>> Henry Rich

>>>>>>> 

>>>>>>> 

>>>>>>> 

>>>>>>> On 12/11/2012 6:29 PM, Roger Hui wrote:

>>>>>>> 

>>>>>>>> There are some cheeky (or is it cheesy?) versions:

>>>>>>>> 

>>>>>>>> (2*a) %~ (-b) (+,-) %: (b^2) - 4*a*c  NB. Kip Murray

>>>>>>>> (2*a) %~ - b (+,-) %: (b^2) - 4*a*c

>>>>>>>> (+:a) %~ - b (+,-) %: (*:b) - 4*a*c

>>>>>>>> -: a %~ - b (+,-) %: (*:b) - 4*a*c

>>>>>>>> 

>>>>>>>> 

>>>>>>>> 

>>>>>>>> On Tue, Dec 11, 2012 at 11:37 AM, km < <mailto:k...@math.uh.edu> 
>>>>>>>> k...@math.uh.edu> wrote:

>>>>>>>> 

>>>>>>>> It appears this could be translated into J as the rather cool

>>>>>>>>> 

>>>>>>>>> (2*a) %~ (-b) (+,-) %: (b^2) - 4*a*c

>>>>>>>>> 

>>>>>>>>> Sent from my iPad

>>>>>>>>> 

>>>>>>>>> 

>>>>>>>>> On Dec 11, 2012, at 12:59 PM, Roger Hui 

>>>>>>>>> < <mailto:rogerhui.can...@gmail.com> rogerhui.can...@gmail.com>

>>>>>>>>> wrote:

>>>>>>>>> 

>>>>>>>>> Example from the Iverson and McDonnell *Phrasal

>>>>>>>>>> Forms*<http://www.jsoftware.**com/papers/fork.htm<http://www.

>>>>>>>>>> j software.com/papers/fork.htm>>paper

>>>>>>>>>> (which

>>>>>>>>>> introduced fork):

>>>>>>>>>> 

>>>>>>>>>> (-b)(+,-)√((b*2)-4×a×c)÷2×a

>>>>>>>>>> 

>>>>>>>>>> √ is a postulated APL primitive, spelled %: in J.

>>>>>>>>>> 

>>>>>>>>>> 

>>>>>>>>>> 

>>>>>>>>>> 

>>>>>>>>>> On Tue, Dec 11, 2012 at 10:49 AM, km < <mailto:k...@math.uh.edu> 
>>>>>>>>>> k...@math.uh.edu> wrote:

>>>>>>>>>> 

>>>>>>>>>> What is the coolest way of programming the quadratic formula 

>>>>>>>>>> in J?  We are

>>>>>>>>> 

>>>>>>>>>> finding the roots of polynomial c + x*(b + x*a) without using 

>>>>>>>>>> p. .  I offer

>>>>>>>>> 

>>>>>>>>>> 

>>>>>>>>>>>    roots

>>>>>>>>>>> 3 : 0

>>>>>>>>>>> 'a b c' =. y

>>>>>>>>>>> q =. %: (b^2) - 4*a*c

>>>>>>>>>>> (2*a) %~ (-b) + q,-q

>>>>>>>>>>> )

>>>>>>>>>>>    roots 1 3 2

>>>>>>>>>>> _1 _2

>>>>>>>>>>>    roots 1 0 1

>>>>>>>>>>> 0j1 0j_1

>>>>>>>>>>>    roots 1 _2 1

>>>>>>>>>>> 1 1

>>>>>>>>>>> 

>>>>>>>>>>> partly as problem definition.  I am looking for cool roots verbs!

>>>>>>>>>>> 

>>>>>>>>>>> Kip Murray

>>>>>>>>>>> 

>>>>>>>>>>> Sent from my iPad

>>>>>>>>>>> 

>>>>>>>>>>> ------------------------------**----------------------------

>>>>>>>>>>> -

>>>>>>>>>>> -**

>>>>>>>>>>> ----------

>>>>>>>>>>> For information about J forums see

>>>>>>>>>>>  <http://www.jsoftware.com/**> http://www.jsoftware.com/** 
>>>>>>>>>>> forums.htm 

>>>>>>>>>>> < <http://www.jsoftware.com/forums.htm> 
>>>>>>>>>>> http://www.jsoftware.com/forums.htm>

>>>>>>>>>> ------------------------------**-----------------------------

>>>>>>>>>> -

>>>>>>>>>> **

>>>>>>>>>> ----------

>>>>>>>>>> For information about J forums see 

>>>>>>>>>>  <http://www.jsoftware.com/**> http://www.jsoftware.com/** 
>>>>>>>>>> forums.htm 

>>>>>>>>>> < <http://www.jsoftware.com/forums.htm> 
>>>>>>>>>> http://www.jsoftware.com/forums.htm>

>>>>>>>>> ------------------------------**------------------------------

>>>>>>>>> *

>>>>>>>>> *

>>>>>>>>> ----------

>>>>>>>>> For information about J forums see  <http://www.jsoftware.com/**> 
>>>>>>>>> http://www.jsoftware.com/** 

>>>>>>>>> forums.htm < <http://www.jsoftware.com/forums.htm> 
>>>>>>>>> http://www.jsoftware.com/forums.htm>

>>>>>>>>> 

>>>>>>>>> 

>>>>>>>>> ------------------------------**------------------------------

>>>>>>>>> *

>>>>>>>>> *

>>>>>>>> ----------

>>>>>>>> For information about J forums see 

>>>>>>>>  <http://www.jsoftware.com/**forums.htm%3chttp:/www.jsoftware.com/> 
>>>>>>>> http://www.jsoftware.com/**forums.htm<http://www.jsoftware.com/

>>>>>>>> f

>>>>>>>> orums.htm>

>>>>>>>> 

>>>>>>>> 

>>>>>>>> ------------------------------**------------------------------*

>>>>>>>> *

>>>>>>> ----------

>>>>>>> For information about J forums see 

>>>>>>>  <http://www.jsoftware.com/**forums.htm%3chttp:/www.jsoftware.com/f> 
>>>>>>> http://www.jsoftware.com/**forums.htm<http://www.jsoftware.com/f

>>>>>>> o

>>>>>>> rums.htm>

>>>>> ------------------------------------------------------------------

>>>>> -

>>>>> --- For information about J forums see 

>>>>>  <http://www.jsoftware.com/forums.htm> http://www.jsoftware.com/forums.htm

>>>> -------------------------------------------------------------------

>>>> -

>>>> -- For information about J forums see 

>>>>  <http://www.jsoftware.com/forums.htm> http://www.jsoftware.com/forums.htm

>>> --------------------------------------------------------------------

>>> -

>>> - For information about J forums see 

>>>  <http://www.jsoftware.com/forums.htm> http://www.jsoftware.com/forums.htm

>> ---------------------------------------------------------------------

>> - For information about J forums see 

>>  <http://www.jsoftware.com/forums.htm> http://www.jsoftware.com/forums.htm

> ----------------------------------------------------------------------

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

> 

> ----------------------------------------------------------------------

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

----------------------------------------------------------------------

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

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

Reply via email to