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.