Looks like somewhere dsolve is converting the floats to rationals, which end up being very large (large numerator / large denominator). We should figure out where in dsolve this is happening and disable it. It is likely coming from a call to solve(), since solve(rational=True) does this.
As to it not evalfing, that looks like a separate bug. Aaron Meurer On Sun, Apr 5, 2015 at 12:34 AM, G B <[email protected]> wrote: > Thanks, Ondrej. In my case the coefficients are the result of a series of > calculations earlier in the notebook. They are symbolic up until the call > to dsolve, but I am substituting values in right before the dsolve because > it takes several minutes to return a solution otherwise (and gives a very > complicated solution over a segmented domain). > > I let it run to completion symbolically and tried substituting into the > result and I do get something that looks more reasonable. I can also run it > through lambdify and plot the result. So despite the slow computation, at > least it looks like I can continue what I'm doing. > > Any idea why the huge integers though? I seem to remember somewhere that > Sympy will try to convert floats to rationals under certain conditions. Is > that what's happening? Can I turn that behavior off? > > Any insight into why it won't evalf or lamdify if I substitute before dsolve > rather than after? > > Thanks, again! > > > On Saturday, April 4, 2015 at 9:27:07 PM UTC-7, G B wrote: >> >> Still wrestling with dsolve... Below is a call with an arbitrary >> differential equation. Any idea why dsolve is returning terms with these >> enormous integers? All of the coefficients are floats in this case. The >> expression is impervious to .n() (as mentioned in my earlier question). >> Converting to a numpy function to evaluate the results works, but throws an >> exception when called. >> >> I can't seem to get past this point in the analysis. Any idea how I can >> get this into a form I can continue working with? >> >> A=symbols(r'A',cls=Function) >> t=symbols(r't') >> Eq4=-123456.78*A(t)-9876.54*A(t).diff(t)-0.00032*A(t).diff(t,2)+1357908.64 >> soln=dsolve(Eq4) >> print(soln.n()) >> >> A(t) == C1*exp(125*t*(-33935533038108675 - >> sqrt(1151618536954453541512853661417481))/274877906944) + >> C2*exp(125*t*(-33935533038108675 + >> sqrt(1151618536954453541512853661417481))/274877906944) + 10.999060885923 >> >> >> fn=lambdify(t,soln.rhs,'numpy') >> >> >> fn(3.2) >> >> >> >> --------------------------------------------------------------------------- >> AttributeError Traceback (most recent call >> last) >> <ipython-input-42-bde0572cbbe1> in <module>() >> ----> 1 fn(3.2) >> >> //anaconda/lib/python3.4/site-packages/numpy/__init__.py in >> <lambda>(_Dummy_73) >> >> AttributeError: 'int' object has no attribute 'sqrt' > > -- > 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/6f3572d3-07dd-40b3-a3a9-7673eddf1c87%40googlegroups.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%3D6%2BBHwKkXX1vz%2BYp4NU3bbvWrqLMs_FZ5wbKJ6z5BqG-RQ%40mail.gmail.com. For more options, visit https://groups.google.com/d/optout.
