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.23259516440783e-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.23259516440783e-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.23259516440783e-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.23259516440783e-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.23259516440783e-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.23259516440783e-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.23259516440783e-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.23259516440783e-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/CAKgW%3D6L8A0vE2AUhhF%3DfP6%3D9MJ3tSuD9YpZHjaNU7et550A0Gw%40mail.gmail.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to