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.

Reply via email to