[NOTE: I mistakenly sent several replies to individuals rather than to the group. Several are moot, but I did not want to leave them off-list. So I am resending below. Sorry about that! Bruce]

Dear Chris,

THANK YOU! That's an excellent solution for me. I did not know about it and probably would not have found it on my own.

Cheers,
        Bruce


On 02.04.21 01:04, Chris Smith wrote:
You can do this by simply factoring the expression with keyword `deep`::

```
 >>> var('a')
a
>>> factor(sqrt(((4*a**2 + 1)/(4*a**6 - 15*a**4 + 12*a**2 + 4))), deep=True)
1/Abs(a**2 - 2)
```
On Thursday, April 1, 2021 at 9:43:35 AM UTC-5 balle...@googlemail.com wrote:

    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
        <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 sympy+unsubscr...@googlegroups.com <mailto:sympy+unsubscr...@googlegroups.com>. To view this discussion on the web visit https://groups.google.com/d/msgid/sympy/d417c1a4-60eb-460b-ad5d-d78ad854bf2bn%40googlegroups.com <https://groups.google.com/d/msgid/sympy/d417c1a4-60eb-460b-ad5d-d78ad854bf2bn%40googlegroups.com?utm_medium=email&utm_source=footer>.

--
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 sympy+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/sympy/df4bc442-9d52-3326-dfa4-afcd456a412d%40googlemail.com.

Reply via email to