A problem that arose in a recent calculus class involved practical methods for finding a numerical estimate of the arc length of the curve y = x^3 from (0,0) to (2,8). So, one might ask, could one use SAGE to perform this computation, say, to 10000 decimal places? (By the way, I don't think this is such an unreasonable request. On a computer with 8 GB of RAM, one can easily compute the arc length of a circle to one billion decimal places, for example, using Hanhong Xue's implementation of the Chudnovsky algorithm in GMP.)
Here is how not to do it: sage: %time n(1/sqrt(3)*integrate(sqrt(1+x^4), x, 0, 2*sqrt(3)), > digits=10000) > CPU times: user 1.53 s, sys: 0.07 s, total: 1.60 s > Wall time: 1.60 s > 8.630329222227694 > Well, at least it didn't take very long. Pretend you didn't know how to antidifferentiate the integrand using special functions. We could proceed as follows: sage: from sympy import integrate, sqrt, var > sage: x=var('x') > sage: f=sqrt(1+x**4) > sage: f.integrate(x) > x*gamma(1/4)*hyper((-1/2, 1/4), (5/4,), > x**4*exp_polar(I*pi))/(4*gamma(5/4)) > Performing the obvious simplifications in our heads, we now use this antiderivative to evaluate our definite integral: sage: from mpmath import mp, hyp2f1 > sage: mp.dps = 10001 > sage: %time arclength=2*hyp2f1(-1/2,1/4,5/4,-144) > CPU times: user 144.20 s, sys: 0.20 s, total: 144.40 s > Wall time: 144.55 s > sage: place = file('/tmp/arclength.txt','w') > sage: place.write(str(arclength)) > sage: place.close() > The file /tmp/arclength.txt now contains the value of the definite integral to 10000 decimal places. (I haven't tested it, but I'm pretty sure the alternatives sage: mpmath.quadts(lambda x: 1/sqrt(3)*sqrt(1+x^4), (0, 2*sqrt(3))) > and sage: new_prec=gp.set_precision(10000) sage: gp('intnum(x = 0, 2*sqrt(3), 1/sqrt(3)*sqrt(1+x^4))') > would take much too long.) The good news is that this problem can be solved in SAGE. There was a time when one of the few areas in which Maple and Mathematica could claim superiority to SAGE was in this sort of integration problem. The procedure given above at least provides evidence, if not proof, that this is no longer the case. The bad news is that the commands I used were highly unintuitive! I had to know to use sympy. I had to know which of its routines to import. I had to know the syntax sympy would accept in defining the function (e.g. for exponentiation). Then I had to know to call mpmath. I had to know the name mpmath uses for the hypergeometric function, which is different from the name sympy uses. It would be great if all of this were seamlessly integrated together in SAGE, so that if a newcomer simply types in the obvious thing (such as "how not to do it" above), he or she gets the desired result. Short of that, is there anything simpler than the somewhat tortuous path that I followed? -- You received this message because you are subscribed to the Google Groups "sage-support" group. To unsubscribe from this group and stop receiving emails from it, send an email to sage-support+unsubscr...@googlegroups.com. To post to this group, send email to sage-support@googlegroups.com. Visit this group at http://groups.google.com/group/sage-support. For more options, visit https://groups.google.com/d/optout.