What is described above has worked well for me. But there is a further simplification step that I need help with.
I have some long expressions containing terms contain terms which look like this example: sqrt(4*a**2 + 1)*sqrt(1/(4*a**6 - 15*a**4 + 12*a**2 + 4)) How can I instruct sympy to combine such square roots and factor the arguments? In this example that would lead to: sqrt(factor((4*a**2 + 1)/(4*a**6 - 15*a**4 + 12*a**2 + 4))) = 1/Abs(a**2 - 2) On Wednesday, March 31, 2021 at 9:03:08 AM UTC+2 B A wrote: > Dear Chris, > > On 31.03.21 05:48, Chris Smith wrote: > > Oscar posted code at issue https://github.com/sympy/sympy/issues/19164 > > for a interva-based Newton solver. > > Thank you, that's very useful. I didn't know about interval arithmetic. > > I just implemented the following, which works very well and helps to > increase my confidence that problems will be caught: > > d_abs={} > d_problems={} > > def MyAbs(x): > # check if this argument is already in dictionary > if x in d_abs: > return d_abs[x] > # see if there are any roots nearby > soln_list = nsolve_interval(x, 0.563, 0.583) > # nearby roots provide a warning message and get saved > if len(soln_list) > 0: > print('WARNING: ambiguous case found, argument of Abs() is', x) > d_problems[x]=soln_list > # Check sign, determine correct output > x1 = x.evalf(subs={a:0.573}) > if x1 < 0.0: > out = -x > else: > out = x > # save into dictionary and return > d_abs[x] = out > return out > > Cheers, > Bruce > -- 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/44ef5b14-ea0a-45ca-a978-3b09f1cf82ddn%40googlegroups.com.
