Note also that your matrix will simplify without evaluation: >>> m.applyfunc(simplify) Matrix([ [ 0.5*leg1_beamwidth, 0.5*leg1_beamwidth, 0.5*leg1_beamwidth, 0.5*leg1_beamwidth], [ -0.25*total_length, 0.25*total_length, 0.25*total_length, -0.25*total_length], [-1.0*leg1_beamwidth, -1.0*leg1_beamwidth, 0, 0]])
(I replaced the .beam with _beam, but otherwise you see that it simplifies just fine.) On Monday, November 10, 2014 5:42:58 PM UTC-6, Andrew Spielberg wrote: > > Aha, thanks so much! > > -Andy S. > > On Mon, Nov 10, 2014 at 5:00 PM, Aaron Meurer <[email protected] > <javascript:>> 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] >> <javascript:>> 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.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] <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/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] <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/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/7009fdc0-d2b2-4032-a5a3-32b77a67b6d4%40googlegroups.com. For more options, visit https://groups.google.com/d/optout.
