On 2:59 PM, Matthew Denaburg wrote:
Hi,

        OK, so I have a question for you math people: I am trying to solve a 
quartic equation (Ax^4 + Bx^3 + Cx^2 + Dx + E) using Ferrari's Method, which I 
found on Wikipedia at this location.

        I'm using Python 3.1.2 (on Mac OS X 10.6, in case that matters).

        First, since I don't know Python very well, I was wondering if there is 
an easier way to do this, without having to install any modules. (I can't 
figure out how to put anything on my PYTHONPATH).

        If not there is not an easier way without installing a module, could 
someone recommend a module AND give me a link to detailed instructions for how 
to install it?

        I would PERFER to continue using Ferrari's Method, but am not opposed 
to trying something else.

        My only problem when using Ferrari's Method was this error:

Traceback (most recent call last):
   File "Problem309.py", line 135, in<module>
     print(main())
   File "Problem309.py", line 127, in main
     math.pow(L1, 2)-math.pow(L2, 2))
   File "Problem309.py", line 73, in sQuartic
     W = math.pow(alpha + 2 * y, 1/2)
TypeError: can't convert complex to float

        Now, your first thought is probably that I have a negative number in 
the square root, or that I should be using math.sqrt. According to this method, 
I need to use cube roots as well, and I wanted to keep my code consistent. I 
also have checked, and the only variable that could be ending up as a complex 
number is the variable y. So, here is
You don't have to guess. Once you come to that conclusion, check it. Put a print( y), or perhaps print (repr(y)) and check the value.
<snip>

        The problem I am having is that, as far as I can tell,  is that U is 
turning into a complex number, which is impossible! You can take the cube root 
of any number, positive or negative!
<snip>

I don't know in particular, but if you were to raise a negative number to the .3333 power, the answer would be complex. Perhaps you're getting hit with some roundoff/quantization error. 1/3 cannot be exactlly represented, of course. I'd be curious if that's the situation here. If so, you could finesse the problem with the expression:

  sign *  (abs(x) ** (1.0/3))

where sign is +1 or -1 representing the sign of x.

DaveA

_______________________________________________
Tutor maillist  -  Tutor@python.org
To unsubscribe or change subscription options:
http://mail.python.org/mailman/listinfo/tutor

Reply via email to