I've been trying to solve this integral:
sage: integrate(sqrt(sec(x)-1),x,pi/2,pi)
integrate(sqrt(sec(x) - 1), x, 1/2*pi, pi)
Since sage failed to produce a symbolic result, I tried with
numerical_integral
sage: numerical_integral(sqrt(sec(x)-1),pi/2,pi)
(nan, nan)
But that failed also... So I tried with mathematica:
sage: mathematica_console()
Mathematica 7.0 for Linux x86 (32-bit)
Copyright 1988-2008 Wolfram Research, Inc.
In[1]:= Integrate[Sqrt[Sec[x]-1],{x,Pi/2,Pi}]
Out[1]= I Pi
So mathematica says it's a pure imaginary number, which I know to be true.
I know that symbolic integration is quite complicated to develop, but
numerical integration should be fairly easy to extend to complex
numbers. Am I missing something? Why does numerical_integral return NaN?
Perhaps i'ts not because of the complex result, in which case how could
I solve the integral without recurring to mathematica?
thanks!
Oscar.
A workaround seems to be to integrate the real and imaginary parts
separately:
sage: numerical_integral(real(sqrt(sec(x)-1)),pi/2, pi)
(1.9175999157365625e-16, 5.0010185963949996e-17)
sage: numerical_integral(imag(sqrt(sec(x)-1)),pi/2, pi)
(3.1415926269162875, 2.3498999460392589e-06)
... giving the same result as Mathematica (although numerically).
It seems to me that the integration is performed by gsl, and the gsl
integration routine seems only to take real-valued functions as
arguments, but I have not looked at this previously, so I may be missing
something as well.
Regards
Johan
+1, I've had to do that manually myself before.
On Oct 14, 2010 2:40 PM, "Oscar Lazo" <estadist...@gmail.com> wrote:
On Oct 14, 4:54 am, Johan Grönqvist <johan.gronqv...@gmail.com> wrote:
> A workaround seems to be ...
I think it would be enough to add an option to numerical_integral on
the likes of:
sage: numerical_integral(sqrt(sec(x)-1),pi/2, pi,complex=True)
so that it would do the following internally:
rea=numerical_integral(rea(sqrt(sec(x)-1)),pi/2, pi)
ima=numerical_integral(imag(sqrt(sec(x)-1)),pi/2, pi)
return ( rea[0]+I*ima[0], rea[1], ima[1])
what do you think? I could do this myself very easily if we agree that
this is a good idea.
Oscar
--
To post to this group, send an email to sage-...@googlegroups.com
To unsubscribe from this gr...
IMHO, it would be sensible to make that the default method, which is
what happens in Mathematica's NIntegrate command. You don't need to
specify Nintegrate to return both the real and imaginary parts - it
does that automatically. In this case, you can see it gets a small
real part too, which you know is just rounding errors.
In[1]:= NIntegrate[Sqrt[Sec[x]-1],{x,Pi/2,Pi}]
Out[1]= 3.45315 10^-10 + 3.14159 I
Dave
> IMHO, it would be sensible to make that the default method, which is
> what happens in Mathematica's NIntegrate command. You don't need to
> specify Nintegrate to return both the real and imaginary parts - it
> does that automatically. In this case, you can see it gets a small
> real part too, which you know is just rounding errors.
>
> In[1]:= NIntegrate[Sqrt[Sec[x]-1],{x,Pi/2,Pi}]
>
> Out[1]= 3.45315 10^-10 + 3.14159 I
>
> Dave
>
On second thoughts, this is not "rounding errors" but likely to be a
combination of both rounding errors and errors introduced as a result
of a fact one breaks the integral into a finite number of sections.
It's probably the latter effect which dominates the actual rounding
errors.
Dave