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] > <javascript:>> 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] <javascript:>. >> To post to this group, send email to [email protected] <javascript:> >> . >> 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. For more options, visit https://groups.google.com/d/optout.
