Login  Register

Re: Roots

Posted by Stan Gorodenski on Nov 17, 2019; 6:04pm
URL: http://spssx-discussion.165.s1.nabble.com/Roots-tp5738554p5738575.html

Here is another solution someone in the SAS discussion group came up
with. Again, I know nothing about Python and so do not know if it is
doing what it is supposed to.
Stan

%utl_submit_py64("
from sympy import *;
x, y, z = symbols('x y z', real=True);
z=-1;
sol = solve((x+I*y)**3 + 1, (x, y));
print(sol);
");
                                                                             
Three roots of (-1)**3
                                                                             
[(-1, 0), (1/2, -sqrt(3)/2), (1/2, sqrt(3)/2)]
                                                                             
  Lets check root (1/2, -sqrt(3)/2)
                                                                             
  In the complex plane the vector length for (1/2, -sqrt(3)/2)
                                                                             
    1/2 * y, -sqr(3)/2 * i = (1/2)**2 + (-sqr(3)/2)**2 = .25 + .75 = 1



On 11/17/2019 8:46 AM, Stan Gorodenski wrote:

> Jon,
> Here is someone in the SAS discussion group how appears to have done
> it with Python. I don't know anything about Python, yet. Would you
> agree with his solution?
> Stan
>
> %let x=-1;
>
> %utl_submit_py64("
> from sympy import *;
> import pyperclip;
> x = symbols('x');
> x=&x;
> r=x^(1/3);
> pyperclip.copy(r);
> print r;
> ",return=fromPy);
>
> %put Cube root of -1 is &=frompy;
>
> LOG
>
> Cube root of -1 is FROMPY=-1
>
>
>
>
>
> On 11/16/2019 7:32 AM, Jon Peck wrote:
>> I thought it would  be interesting to explore negative numbers
>> exponentiated to fractional powers in other systems.  Here is what I
>> found.  (NaN is a value for not a number.  Equivalent to SYSMIS.)
>>
>>
>> SPSS Statistics
>> compute z = (-1)**(1/3).
>> SYSMIS
>> Warning # 523
>> >During the execution of the indicated command, an attempt was made
>> to raise a
>> >non-positive number to a fractional power, e.g.  (-3)**2.5.
>>
>> golang
>> output := math.Pow(-1, 1./3.)
>> NaN
>> No warning
>>
>> Python
>> (-1)**(1./3.)
>> no result - calculation is stopped
>> ValueError: negative number cannot be raised to a fractional power
>>
>> R
>>  (-1)^(1/3)
>>  NaN
>> No warning
>>
>> Although I have not seen the SPSS internal transformation code, I
>> expect that it uses logs to calculate exponentiation with a
>> fractional power, hence the error.
>>
>> The expression could be refactored to get a result in the case where
>> the denominator of the exponent is odd but not as a general
>> solution.  Since Statistics, as with most statistical packages, does
>> not support complex numbers in expressions, that solution is not
>> available.
>>
>> From Wikpedia...
>>
>> The powers of negative real numbers are not always defined and are
>> discontinuous even where defined. In fact, they are only defined when
>> the exponent is a rational number with the denominator being an odd
>> integer.
>>
>> If the definition of exponentiation of real numbers is extended to
>> allow negative results then the result is no longer well-behaved.
>>
>> Neither the logarithm method nor the rational exponent method can be
>> used to define /b/^/r/  as a real number for a negative real number
>> /b/ and an arbitrary real number /r/. Indeed, /e/^/r/  is positive
>> for every real number /r/, so ln(/b/) is not defined as a real number
>> for /b/ ≤ 0.
>>
>> The rational exponent method cannot be used for negative values of
>> /b/ because it relies on continuity
>> <https://en.wikipedia.org/wiki/Continuous_function>. The function
>> /f/(/r/) = /b/^/r/  has a unique continuous extension^[15]
>> <https://en.wikipedia.org/wiki/Exponentiation#cite_note-Denlinger-15>
>>  from the rational numbers to the real numbers for each /b/ > 0. But
>> when /b/ < 0, the function /f/ is not even continuous on the set of
>> rational numbers /r/ for which it is defined.
>>
>> For example, consider /b/ = −1. The /n/th root of −1 is −1 for every
>> odd natural number /n/. So if /n/ is an odd positive integer,
>> (−1)^(/m///n/)  = −1 if /m/ is odd, and (−1)^(/m///n/)  = 1 if /m/ is
>> even. Thus the set of rational numbers /q/ for which (−1)^/q/  = 1 is
>> dense <https://en.wikipedia.org/wiki/Dense_set> in the rational
>> numbers, as is the set of /q/ for which (−1)^/q/  = −1. This means
>> that the function (−1)^/q/  is not continuous at any rational number
>> /q/ where it is defined.
>>
>> On the other hand, arbitrary complex powers
>> <https://en.wikipedia.org/wiki/Exponentiation#Powers_of_complex_numbers> of
>> negative numbers /b/ can be defined by choosing a /complex/ logarithm
>> <https://en.wikipedia.org/wiki/Complex_logarithm> of /b/.
>>
>>
>>
>>
>> On Fri, Nov 15, 2019 at 10:26 AM Stan Gorodenski
>> <[hidden email] <mailto:[hidden email]>> wrote:
>>
>>     I don't know if there is any demand, but I think the square root
>>     of -1
>>     is used in electronics. I'm not into this so I really don't know.
>>     I did
>>     not pose this question because I have an application for it. I was
>>     just
>>     curious since it seems that sophisticated software packages like
>> SPSS
>>     and SAS should be able to do it. I just sent an email to join the
>> SAS
>>     discussion group and will ask them if SAS can do it. I suppose one
>>     could
>>     write a routine to return a -1 if the the denominator of the
>>     exponent is
>>     an odd number.
>>     Stan
>>
>>     On 11/15/2019 10:05 AM, Rich Ulrich wrote:
>>     > I wonder - Is there any demand for the exception-coding
>>     > that would be necessary?  How many people write code
>>     > where they want to take the fractional root of a negative
>>     > number, where the fraction is the reciprocal of an odd integer?
>>     > ( Note, the fraction cannot be expressed EXACTLY on a binary
>>     > computer. How is that accommodated?)
>>     >
>>     > The natural programming solution to non-integer roots is
>>     > to use logs.  I suppose if there is an area where the problem
>>     > comes up, specialized programs for that area might do it.
>>     > I suspect the efficient solution might use a special subroutine
>>     > call rather than an in-line expression.
>>     >
>>     > --
>>     > Rich Ulrich
>>     >
>>     >
>> ------------------------------------------------------------------------
>>     > *From:* SPSSX(r) Discussion <[hidden email]
>>     <mailto:[hidden email]>> on behalf of
>>     > Bruce Weaver <[hidden email]
>>     <mailto:[hidden email]>>
>>     > *Sent:* Friday, November 15, 2019 11:35 AM
>>     > *To:* [hidden email] <mailto:[hidden email]>
>>     <[hidden email] <mailto:[hidden email]>>
>>     > *Subject:* Re: Roots
>>     >
>> https://www.ibm.com/support/knowledgecenter/en/SSLVMB_26.0.0/statistics_reference_project_ddita/spss/base/syn_transformation_expressions_domain_errors.html
>>     >
>>     >
>>     >
>>     > Kirill Orlov wrote
>>     > > See DOMAIN ERRORS paragraph in Command Syntax Reference.
>>     > >
>>     > >
>>     > > 15.11.2019 4:53, Stan Gorodenski пишет:
>>     > >> compute z = (-1)**(1/3).
>>     > >
>>     > > =====================
>>     > > To manage your subscription to SPSSX-L, send a message to
>>     >
>>     > > LISTSERV@.UGA
>>     >
>>     > >  (not to SPSSX-L), with no body text except the
>>     > > command. To leave the list, send the command
>>     > > SIGNOFF SPSSX-L
>>     > > For a list of commands to manage subscriptions, send the command
>>     > > INFO REFCARD
>>     >
>>     >
>>     >
>>     >
>>     >
>>     > -----
>>     > --
>>     > Bruce Weaver
>>     > [hidden email] <mailto:[hidden email]>
>>     > http://sites.google.com/a/lakeheadu.ca/bweaver/
>>     >
>>     > "When all else fails, RTFM."
>>     >
>>     > NOTE: My Hotmail account is not monitored regularly.
>>     > To send me an e-mail, please use the address shown above.
>>     >
>>     > --
>>     > Sent from: http://spssx-discussion.1045642.n5.nabble.com/
>>     >
>>     > =====================
>>     > To manage your subscription to SPSSX-L, send a message to
>>     > [hidden email] <mailto:[hidden email]>
>>     (not to SPSSX-L), with no body text except the
>>     > command. To leave the list, send the command
>>     > SIGNOFF SPSSX-L
>>     > For a list of commands to manage subscriptions, send the command
>>     > INFO REFCARD
>>     > ===================== To manage your subscription to SPSSX-L,
>>     send a
>>     > message to [hidden email]
>>     <mailto:[hidden email]>
>>     > <mailto:[hidden email]
>>     <mailto:[hidden email]>> (not to SPSSX-L), with no body
>>     text
>>     > except the command. To leave the list, send the command SIGNOFF
>>     > SPSSX-L For a list of commands to manage subscriptions, send the
>>     > command INFO REFCARD
>>
>>     =====================
>>     To manage your subscription to SPSSX-L, send a message to
>>     [hidden email] <mailto:[hidden email]> (not
>>     to SPSSX-L), with no body text except the
>>     command. To leave the list, send the command
>>     SIGNOFF SPSSX-L
>>     For a list of commands to manage subscriptions, send the command
>>     INFO REFCARD
>>
>>
>>
>> --
>> Jon K Peck
>> [hidden email] <mailto:[hidden email]>
>>
>> ===================== To manage your subscription to SPSSX-L, send a
>> message to [hidden email]
>> <mailto:[hidden email]> (not to SPSSX-L), with no body
>> text except the command. To leave the list, send the command SIGNOFF
>> SPSSX-L For a list of commands to manage subscriptions, send the
>> command INFO REFCARD
>
> =====================
> To manage your subscription to SPSSX-L, send a message to
> [hidden email] (not to SPSSX-L), with no body text except the
> command. To leave the list, send the command
> SIGNOFF SPSSX-L
> For a list of commands to manage subscriptions, send the command
> INFO REFCARD
>
>

=====================
To manage your subscription to SPSSX-L, send a message to
[hidden email] (not to SPSSX-L), with no body text except the
command. To leave the list, send the command
SIGNOFF SPSSX-L
For a list of commands to manage subscriptions, send the command
INFO REFCARD