Aha, thanks so much!

-Andy S.

On Mon, Nov 10, 2014 at 5:00 PM, Aaron Meurer <[email protected]> wrote:

> nsimplify tries to convert floating point numbers into exact numbers, like
> sqrt(2) or pi + 1. The tolerance flag specifies how close the exact number
> needs to be to the floating point number. For example:
>
> In [8]: nsimplify(pi.evalf(), tolerance=0.1)
> Out[8]: 22/7
>
> In [9]: nsimplify(pi.evalf(), tolerance=0.01)
> Out[9]: 22/7
>
> In [10]: nsimplify(pi.evalf(), tolerance=0.001)
> Out[10]:
> 355
> ───
> 113
>
> In [11]: nsimplify(pi.evalf(), tolerance=0.0001)
> Out[11]:
> 355
> ───
> 113
>
> Aaron Meurer
>
> On Mon, Nov 10, 2014 at 3:52 PM, Andrew Spielberg <[email protected]>
> wrote:
>
>> Thanks a ton - yes, using N and then specifying a tolerance with N worked.
>>
>> Out of curiosity then, what is the point of the nsimplify tolerance?
>> What does that do?  I appear to be misunderstanding it.
>>
>> -Andy S.
>>
>> On Sunday, November 9, 2014 8:38:00 PM UTC-5, Aaron Meurer wrote:
>>>
>>> I think you want the chop option, like expr.eval(chop=True) or N(expr,
>>> chop=True).
>>>
>>> Aaron Meurer
>>>
>>> On Thu, Nov 6, 2014 at 9:52 PM, Andrew Spielberg <[email protected]>
>>> wrote:
>>>
>>>> Hi all,
>>>>
>>>> Recent adopter, first time caller, bear with me if I have some newbish
>>>> misunderstandings about sympy.
>>>>
>>>> I am working on a project where we are trying to use sympy to do a lot
>>>> of symbolic geometric computation.  The project predates sympy, so I cannot
>>>> really change too much code to accomodate it.
>>>>
>>>> Our calculations create matrices, and sometimes, the expressions can
>>>> seem large, like the one seen below.  I know that this is actually supposed
>>>> to be a linear expression, and I need to get it into a linear form.
>>>>
>>>> *Matrix([*
>>>> *[
>>>>  1.0*leg1.beamwidth - (2.05432527401305e-33*leg1.beamwidth**3 +
>>>> 0.166666666666667*leg1.beamwidth**2*total_length +
>>>> 0.166666666666667*leg1.beamwidth**2*(1.23259516440783e-32*leg1.beamwidth +
>>>> total_length/2))/(6.16297582203915e-33*leg1.beamwidth**2 +
>>>> 0.25*leg1.beamwidth*total_length + 0.5*leg1.beamwidth*(1.23259516
>>>> <23259516>440783e-32*leg1.beamwidth + total_length/2)),
>>>>
>>>> 1.0*leg1.beamwidth - (2.05432527401305e-33*leg1.beamwidth**3 +
>>>> 0.166666666666667*leg1.beamwidth**2*total_length +
>>>> 0.166666666666667*leg1.beamwidth**2*(1.23259516440783e-32*leg1.beamwidth +
>>>> total_length/2))/(6.16297582203915e-33*leg1.beamwidth**2 +
>>>> 0.25*leg1.beamwidth*total_length + 0.5*leg1.beamwidth*(1.23259516
>>>> <23259516>440783e-32*leg1.beamwidth + total_length/2)),
>>>>                             1.0*leg1.beamwidth -
>>>> (2.05432527401305e-33*leg1.beamwidth**3 +
>>>> 0.166666666666667*leg1.beamwidth**2*total_length +
>>>> 0.166666666666667*leg1.beamwidth**2*(1.23259516440783e-32*leg1.beamwidth +
>>>> total_length/2))/(6.16297582203915e-33*leg1.beamwidth**2 +
>>>> 0.25*leg1.beamwidth*total_length + 0.5*leg1.beamwidth*(1.23259516
>>>> <23259516>440783e-32*leg1.beamwidth + total_length/2)),
>>>>             1.0*leg1.beamwidth - (2.05432527401305e-33*leg1.beamwidth**3 +
>>>> 0.166666666666667*leg1.beamwidth**2*total_length +
>>>> 0.166666666666667*leg1.beamwidth**2*(1.23259516440783e-32*leg1.beamwidth +
>>>> total_length/2))/(6.16297582203915e-33*leg1.beamwidth**2 +
>>>> 0.25*leg1.beamwidth*total_length + 0.5*leg1.beamwidth*(1.23259516
>>>> <23259516>440783e-32*leg1.beamwidth + total_length/2))],*
>>>> *[-6.12323399573677e-17*leg1.beamwidth -
>>>> (-2.53215139886928e-65*leg1.beamwidth**3 +
>>>> 0.0416666666666667*leg1.beamwidth*total_length**2 +
>>>> 0.166666666666667*leg1.beamwidth*(1.23259516440783e-32*leg1.beamwidth +
>>>> total_length/2)*(1.23259516440783e-32*leg1.beamwidth +
>>>> total_length))/(6.16297582203915e-33*leg1.beamwidth**2 +
>>>> 0.25*leg1.beamwidth*total_length + 0.5*leg1.beamwidth*(1.23259516
>>>> <23259516>440783e-32*leg1.beamwidth + total_length/2)),
>>>> 6.12323399573677e-17*leg1.beamwidth + total_length/2 -
>>>> (-2.53215139886928e-65*leg1.beamwidth**3 +
>>>> 0.0416666666666667*leg1.beamwidth*total_length**2 +
>>>> 0.166666666666667*leg1.beamwidth*(1.23259516440783e-32*leg1.beamwidth +
>>>> total_length/2)*(1.23259516440783e-32*leg1.beamwidth +
>>>> total_length))/(6.16297582203915e-33*leg1.beamwidth**2 +
>>>> 0.25*leg1.beamwidth*total_length + 0.5*leg1.beamwidth*(1.23259516
>>>> <23259516>440783e-32*leg1.beamwidth + total_length/2)), total_length/2 -
>>>> (-2.53215139886928e-65*leg1.beamwidth**3 +
>>>> 0.0416666666666667*leg1.beamwidth*total_length**2 +
>>>> 0.166666666666667*leg1.beamwidth*(1.23259516440783e-32*leg1.beamwidth +
>>>> total_length/2)*(1.23259516440783e-32*leg1.beamwidth +
>>>> total_length))/(6.16297582203915e-33*leg1.beamwidth**2 +
>>>> 0.25*leg1.beamwidth*total_length + 0.5*leg1.beamwidth*(1.23259516
>>>> <23259516>440783e-32*leg1.beamwidth + total_length/2)),
>>>> -(-2.53215139886928e-65*leg1.beamwidth**3 +
>>>> 0.0416666666666667*leg1.beamwidth*total_length**2 +
>>>> 0.166666666666667*leg1.beamwidth*(1.23259516440783e-32*leg1.beamwidth +
>>>> total_length/2)*(1.23259516440783e-32*leg1.beamwidth +
>>>> total_length))/(6.16297582203915e-33*leg1.beamwidth**2 +
>>>> 0.25*leg1.beamwidth*total_length + 0.5*leg1.beamwidth*(1.23259516
>>>> <23259516>440783e-32*leg1.beamwidth + total_length/2))],*
>>>> *[
>>>>
>>>>
>>>>
>>>>
>>>>                                    -1.0*leg1.beamwidth,
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>                         -1.0*leg1.beamwidth,
>>>>
>>>>
>>>>
>>>>
>>>>                                                                       0,
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>       0]])*
>>>>
>>>> If I perform nsimplify on this with a tolerance = 1e-5, I get something
>>>> reasonable:
>>>>
>>>> *Matrix([*
>>>> *[
>>>> leg1.beamwidth/2,
>>>>       leg1.beamwidth/2, leg1.beamwidth/2, leg1.beamwidth/2],*
>>>> *[-612323399573677*leg1.beamwidth/10000000000000000000000000000000 -
>>>> total_length/4,
>>>> 612323399573677*leg1.beamwidth/10000000000000000000000000000000 +
>>>> total_length/4,   total_length/4,  -total_length/4],*
>>>> *[
>>>>  -leg1.beamwidth,
>>>>        -leg1.beamwidth,                0,                0]])*
>>>>
>>>> But I can't simplify it further for some reason.  Even though 
>>>> *-612323399573677*leg1.beamwidth/10000000000000000000000000000000
>>>>  = -6e-17, *I can't seem to make that term disappear.
>>>>
>>>> This was a simple case, but in more complex cases, sympy fails to
>>>> cancel out terms and the solution becomes highly nonlinear.  As an example,
>>>> this won't simplify with nsimplify for some reason, even though certain
>>>> terms clearly dominate others:
>>>>
>>>> *(leg1.beamwidth*total_length*(24492935982947*leg2.beamwidth/200000000000000000000000000000
>>>> + total_length/2)**2/2 -
>>>> 306161699786839*leg2.beamwidth*total_length**2*(24492935982947*leg2.beamwidth/200000000000000000000000000000
>>>> + total_length/2)/10000000000000000000000000000000 +
>>>> 153080849893419*total_length**3*(24492935982947*leg2.beamwidth/200000000000000000000000000000
>>>> +
>>>> total_length/2)/10000000000000000000000000000000)/(total_length*(24492935982947*leg2.beamwidth/200000000000000000000000000000
>>>> + total_length/2)**2)*
>>>>
>>>> Lastly, things sometimes get worse.  If I try to play around with
>>>> simplify, N, and nsimplify to try to "force" it to simplify things, I
>>>> sometimes get the error attached.
>>>>
>>>> Is there a proper way to get do the simplifications I need?  And, why
>>>> would I get that value error I displayed attached.
>>>>
>>>> Thanks for any and all help,
>>>> Andy S.
>>>>
>>>> --
>>>> 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/c94c3d7f-623e-4a3c-9ff4-f19515598a2b%40googlegroups.com
>>>> <https://groups.google.com/d/msgid/sympy/c94c3d7f-623e-4a3c-9ff4-f19515598a2b%40googlegroups.com?utm_medium=email&utm_source=footer>
>>>> .
>>>> 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/d8685eaf-c936-4c6e-8a3d-ea8c101e8245%40googlegroups.com
>> <https://groups.google.com/d/msgid/sympy/d8685eaf-c936-4c6e-8a3d-ea8c101e8245%40googlegroups.com?utm_medium=email&utm_source=footer>
>> .
>>
>> 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%3D6KHSA7h%3DC_cT_oC93h9JhqcnCiD3WhXweZ7Ntq7fvNFiw%40mail.gmail.com
> <https://groups.google.com/d/msgid/sympy/CAKgW%3D6KHSA7h%3DC_cT_oC93h9JhqcnCiD3WhXweZ7Ntq7fvNFiw%40mail.gmail.com?utm_medium=email&utm_source=footer>
> .
>
> 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/CAM6e1JcfB0A_QMvEDdwVYxo%2BNpX4XcWWnNjkRP1-ivybo5eT2Q%40mail.gmail.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to