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.

Reply via email to