Thank you for sharing your code and explaining your challenge. It seems 
like you have put a lot of effort into trying to print a shorter version of 
your power series. Your approach of converting the expression to a list and 
sorting it by the values of t**n is clever. 
Have you considered using the built-in round function to round the 
coefficients to 5 significant digits instead of 5 decimal places?
That way, you could achieve the desired rounding without losing significant 
digits. Try it i think this should work
On Sunday, 5 March 2023 at 14:01:58 UTC+5:30 [email protected] wrote:

> I have a lot of power series that look like this (but going up to t**12):
> exp1 = -2867.70035529489*t**5 + 147.938724526848*t**3 - 2.56500070531002*t
> While trying to gain some insight into the mathematics that creates them, 
> I want to print a shorter version, such as
> - 2.565 t + 147.93872 t**3- 2867.70036 t**5
> but the best I have achieved is
> - 2867.70036 t^{5} + \left(147.93872 t^{3} - 2.565 t\right)
> Rounding the numbers was easy, but I would prefer to round to 5 digits 
> total, not 5 digits after the decimal point. I was able to convert the 
> expression to a list and sort the list, but when I converted the list back 
> to an expression, I didn't succeed in producing the order I wanted.
> Here is the code:
> global t
> t = symbols('t')
> def sortSeries(valIn):
>     valOut = valIn
>     for num in (valOut.atoms(sympy.Float)):
>         valOut = valOut.xreplace({num: 1}) # remove coefficient
>     if valOut == 1:
>         return 1 # set t**0 to 1
>     else:
>         valOut = valOut.subs(t, 2) # change t**n to 2**n, which is a 
> sortable number
>     return valOut
>
> def printSeries(expIn):
>     expOut = expIn
>     expOut = collect(expOut, t)
>     for num in (expOut.atoms(Number)):
>         expOut = expOut.xreplace({num: num.round(5)})
>     expList = expOut.as_ordered_terms() # convert expression to list
>     expList.sort(key=sortSeries) # sort list by values of t**n
>     for ind in range(0, len(expList)): # convert list to expression
>         term = expList[ind]
>         if ind == 0:
>             exp = term
>         else:
>             # exp = exp + term
>             exp = Add(exp, term, evaluate=False)
>             #exp = Add(term, exp, evaluate=False)
>     expOut = exp
>     print(latex(expOut))
>     #return expOut
>
> def test():
>     #exp1 = 6.14979599379575*t**3 - 1.69088473154467*t
>     #exp2 = 0.331732200302894 - 2.35512815419867*t**2
>     exp1 = -2867.70035529489*t**5 + 147.938724526848*t**3 - 
> 2.56500070531002*t
>     exp2 = 701.066644698213*t**4 - 23.5908063706474*t**2 + 0.13771861708229
>     printSeries(exp1)
>     printSeries(exp2)
>     print('end of test')
>

-- 
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 view this discussion on the web visit 
https://groups.google.com/d/msgid/sympy/65a465c4-cd88-4308-990e-60897b373114n%40googlegroups.com.

Reply via email to