On Mon, Feb 9, 2015 at 5:11 PM, Ondřej Čertík <[email protected]> wrote: > On Mon, Feb 9, 2015 at 3:37 PM, Aaron Meurer <[email protected]> wrote: >> Doesn't expr.equals also do something similar to this? > > No, that uses symbolics (thus it is not able to check complex > expressions or it will be slow). > > Btw, you already asked this exact question here: > > https://github.com/sympy/sympy/pull/8036#issuecomment-55969269 > > and my answer is right below it.
Heh. But I seem to remember equals plugging in values. Maybe it used to do it, but doesn't any more? Aaron Meurer > > Ondrej > >> >> Aaron Meurer >> >> On Mon, Feb 9, 2015 at 1:42 PM, Ondřej Čertík <[email protected]> >> wrote: >>> On Mon, Feb 9, 2015 at 12:40 PM, Ondřej Čertík <[email protected]> >>> wrote: >>>> Hi Peter, >>>> >>>> On Mon, Feb 9, 2015 at 9:09 AM, Peter Chervenski <[email protected]> wrote: >>>>> I made this function to test for the equivalence of two expressions. It >>>>> doesn't really prove anything, but if the tests are many, the probability >>>>> of >>>>> it being wrong becomes negligible. Do such utility functions have a place >>>>> in >>>>> SymPy? >>>>> >>>>> def equiv(a, b, ntests=15): >>>>> """ Test if expression a is equivalent to b >>>>> by comparing the results of many random numeric tests """ >>>>> >>>>> # get the symbols >>>>> sb_a = filter(lambda x: x.is_Symbol, a.atoms()) >>>>> sb_b = filter(lambda x: x.is_Symbol, b.atoms()) >>>>> >>>>> sb = list(set(sb_a + sb_b)) >>>>> >>>>> eq = True >>>>> for i in xrange(ntests): >>>>> k = dict(zip(sb, np.random.randn(len(sb)))) >>>>> >>>>> r_a = a.subs( k ) >>>>> r_b = b.subs( k ) >>>>> >>>>> # prove there is a difference >>>>> if (r_a - r_b)**2 > 1e-30: # not the same? the expressions are >>>>> different >>>>> eq = False >>>>> break >>>>> >>>>> return eq >>>> >>>> >>>> Absolutely. I've also implemented a similar function in one PR: >>>> >>>> https://github.com/sympy/sympy/pull/8036/files?diff=unified#diff-2c9ef1ef2c82f5d5781d0d12e1fe4910R33 >>>> >>>> It was pointed out to me that we have similar machinery here already: >>>> >>>> https://github.com/sympy/sympy/blob/master/sympy/utilities/randtest.py#L43 >>>> >>>> This should be unified and put into sympy. We can call it >>>> "zero_numerical" or something like that ("test_numerically", ...). >>>> Mathematica calls this PossibleZeroQ (though I think it does both >>>> symbolic an numerical tests). >>>> >>>> Look at the implementation in my PR --- you should allow the user to >>>> specify the range (I call it [a, b]) as well as the precision. I think >>>> we can perhaps just test for 0, and then your "equiv" can just call >>>> this zero testing function for a-b. >>> >>> Actually, in my implementation I choose random integers from [-a, a] >>> and then test an interval >>> [-a/b, a/b]. That way you will get rational numbers, as opposed to >>> only integers (that could hide differences). >>> >>> Ondrej >>> >>> -- >>> 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 http://groups.google.com/group/sympy. >>> To view this discussion on the web visit >>> https://groups.google.com/d/msgid/sympy/CADDwiVDnybsk6Ke-ocGoPd%2BuB_S7v%3DDCeSgvGTR1JFTXiw5F_g%40mail.gmail.com. >>> For more options, visit https://groups.google.com/d/optout. >> >> -- >> 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 http://groups.google.com/group/sympy. >> To view this discussion on the web visit >> https://groups.google.com/d/msgid/sympy/CAKgW%3D6JV%3D_umM9hOnn446tz7Hz3bAL2g1%2B7TuqhYbdG1hmTCGg%40mail.gmail.com. >> For more options, visit https://groups.google.com/d/optout. > > -- > 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 http://groups.google.com/group/sympy. > To view this discussion on the web visit > https://groups.google.com/d/msgid/sympy/CADDwiVBH3KHccMaR1dX4Uz4jAMzXqBXaaxGHz%3D6ZmZq0XtucTA%40mail.gmail.com. > For more options, visit https://groups.google.com/d/optout. -- 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 http://groups.google.com/group/sympy. To view this discussion on the web visit https://groups.google.com/d/msgid/sympy/CAKgW%3D6LD_mLNEMZDC6hVi02iOBg4ex7KzrgN0Cp0hYq8bhURxg%40mail.gmail.com. For more options, visit https://groups.google.com/d/optout.
