Dear Aaron, Thank you for your message and explanation! I opened an issue: https://github.com/sympy/sympy/issues/13805 and pasted your comments there; best wishes, gosia
2017-12-23 4:46 GMT+01:00 Aaron Meurer <[email protected]>: > I would consider this to be a bug in det(). It should try to compute > it in such a way that it returns a polynomial. This is somewhat > related to this issue https://github.com/sympy/sympy/issues/11082. > > cancel() would normally be what you'd use to do this, but doesn't help > here either because it only cancels things if they cancel out exactly, > but because of the floating point coefficients, this does not happen. > > apart() actually might work, if it didn't have its own issues > (https://github.com/sympy/sympy/issues/11795). > > Can you open an issue for this in the issue tracker? > > Unfortunately, I can't think of a good workaround for this right now. > > Aaron Meurer > > > On Fri, Dec 22, 2017 at 8:50 AM, gosia <[email protected]> wrote: > > Dear SymPy users, > > > > I'm new to SymPy and i'm struggling for some time now with expressing a > > polynomial fraction as a polynomial. > > > > I try to calculate: > > w(x) = f(x^10)/g(x^2) > > which should be a function of x (of the order 8) > > > > what i get (using various sympy functions) is: > > w(x) = a_8 * x^8 + ... + a_0 + p(x)/q(x^2) > > or > > w(x) = a_8 * x^8 + ... + a_0 + p(x^0)/q(x^2) > > > > instead of: > > w(x) = a_8 * x^8 + ... + a_0 > > > > > > below is the full story with a part of a script i'm using (i installed > sympy > > 1.1.1 with python 3.6 in anaconda environment; i'm using linux ubuntu > 16.04) > > > > any hints will be extremely helpful! > > best, > > gosia > > > > > > ------------------------------------------------------------------------ > > import sympy as sp > > > > # 1. i start with defining elements of 4x4 matrix: each element is a > > function of x (more precisely: f(x^2)): > > > > x = sp.Symbol(x) > > s1_14 = s1_21 = s1_34 = s1_41 = 0.0 > > s1_11 = A1*(x**2) + B1*x + C1 > > s1_12 = A2*(x**2) + B2*x + C2 > > s1_13 = A3*(x**2) + B3*x + C3 > > s1_22 = A1*(x**2) + B1*x + C1 > > s1_23 = A2*(x**2) + B2*x + C2 > > s1_24 = A3*(x**2) + B3*x + C3 > > s1_31 = A4*(x**2) + B4*x + C4 > > s1_32 = A5*(x**2) + B5*x + C5 > > s1_33 = A6*(x**2) + B6*x + C6 > > s1_42 = A4*(x**2) + B4*x + C4 > > s1_43 = A5*(x**2) + B5*x + C5 > > s1_44 = A6*(x**2) + B6*x + C6 > > s1 = sp.Matrix([[s1_11, s1_12, s1_13, s1_14], [s1_21, s1_22, s1_23, > > s1_24], [s1_31, s1_32, s1_33, s1_34], [s1_41, s1_42, s1_43, s1_44]]) > > > > # where A1,..., B1, ..., C1, ... are floats (computed in the same script > > before; all checked) > > # for instance (they are small...): > > # A1 = -8.832920000001262e-20 > > # A2 = 1.23393935e-16 > > # A3 = -1.841680000001036e-20 > > # A4 = 1.5494922020000018e-18 > > # A5 = 7.434205120000009e-19 > > # A6 = 5.154697260000002e-19 > > # B1 = -2.4092100000002057e-19 > > # B2 = -2.4352230000004432e-19 > > # B3 = -6.06127000000108e-20 > > # B4 = 3.555121236000002e-18 > > # B5 = 4.224810150000003e-18 > > # B6 = 1.2527727940000004e-18 > > # C1 = -1.5992580000002828e-19 > > # C2 = -1.656777000000101e-19 > > # C3 = -4.2327499999991735e-20 > > # C4 = 1.9217166420000004e-18 > > # C5 = 2.3215129980000005e-18 > > # C6 = 6.981400700000001e-19 > > > > > > # 2. calculate a determinant of that matrix and write it as a polynomial > of > > x (the maximum order of that polynomial is then 8): > > > > det = sp.simplify(s1.det()) > > > > # we can print the results; for coefficients A1...C6 above it is: > > # det = (1.07479861449248e-87*x**10 + 8.00921385801962e-87*x**9 + > > 2.45757883595634e-86*x**8 + 3.97197994040761e-86*x**7 + > > 3.56434445101232e-86*x**6 + 1.68328171836074e-86*x**5 + > > 3.26853998044205e-87*x**4 + 4.42042971009037e-91*x**3 + > > 6.87690887243217e-92*x**2 - 1.67739461567147e-96*x - > > 2.66764671309489e-97)/(8.83292000000126e-20*x**2 + > 2.40921000000021e-19*x + > > 1.59925800000028e-19) > > > > # now for instance i do: > > > > if det.is_rational_function(): > > det_poly = sp.apart(det, x) > > else: > > break > > > > # what for the given coefficients gives: > > # det_poly = 1.21681008601044e-68*x**8 + 5.74856653371868e-68*x**7 + > > 9.94041734367267e-68*x**6 + 7.44692074414804e-68*x**5 + > > 2.04344273909691e-68*x**4 + 2.1162503508103e-72*x**3 + > > 4.30019156172244e-73*x**2 - 7.97549194718549e-78*x + > > 1.0*(7.19921945884898e-101*x + > > 7.35103305249383e-101)/(8.83292000000126e-20*x**2 + > 2.40921000000021e-19*x + > > 1.59925800000028e-19) - 1.66851240787895e-78 > > > > > > # combining sp.apart() with factor() or collect() does not change > > anything... > > > > -- > > You received this message because you are subscribed to the Google Groups > > "sympy" group. > > To unsubscribe from this group and stop receiving emails from it, send an > > email to [email protected]. > > To post to this group, send email to [email protected]. > > Visit this group at https://groups.google.com/group/sympy. > > To view this discussion on the web visit > > https://groups.google.com/d/msgid/sympy/ce698f69-2f11- > 40ae-a13c-b7194603ee3a%40googlegroups.com. > > For more options, visit https://groups.google.com/d/optout. > > -- > You received this message because you are subscribed to the Google Groups > "sympy" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to [email protected]. > To post to this group, send email to [email protected]. > Visit this group at https://groups.google.com/group/sympy. > To view this discussion on the web visit https://groups.google.com/d/ > msgid/sympy/CAKgW%3D6%2B7iXHPkEXzEU-S2xe6P86JJ% > 2BrVe3fr9gEpzd2HYG7g9g%40mail.gmail.com. > For more options, visit https://groups.google.com/d/optout. > -- You received this message because you are subscribed to the Google Groups "sympy" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To post to this group, send email to [email protected]. Visit this group at https://groups.google.com/group/sympy. To view this discussion on the web visit https://groups.google.com/d/msgid/sympy/CAF%3DkMud2CBT01VCJh45hKbwXJzxEGT%2BhcPVCEROeMTi9Gf%2BQTA%40mail.gmail.com. For more options, visit https://groups.google.com/d/optout.
