Re: Fun with Int_tabulated.pro [message #68485 is a reply to message #68472] |
Sat, 31 October 2009 08:12  |
Jeremy Bailin
Messages: 618 Registered: April 2008
|
Senior Member |
|
|
On Oct 30, 1:20 pm, wlandsman <wlands...@gmail.com> wrote:
> I ran into a couple of gotchas with int_tabulated.pro this
> morning, It performs numerical integration for the simple case:
>
> IDL> x = findgen(5)
> IDL> y = x^2
> IDL> print,int_tabulated(x,y)
> 21.3333
>
> But if one has flipped both vectors (say while converting wavelength
> to frequency), then -- even though a plot of the two vectors looks
> exactly the same -- int_tabulated gives a different answer.
>
> IDL> x = reverse(x) & y = reverse(y)
> IDL> print,int_tabulated(x,y)
> 42.3619
>
> A closer look at the int_tabulated documentation tells us that if X if
> not monotonic increasing, then one needs to set the /SORT keyword.
> So now we follow the documentation:
>
> IDL> print,int_tabulated(x,y,/sort)
> 21.3333
>
> and get the right answer again. But as the documentation also "sort"
> of warns
> you, setting the /SORT keyword reorders the input X and Y variables.
> This is
> probably not a problem unless one has modified the Y vector on the fly
> by
> some factor f
>
> f = findgen(5) + 0.5
> print,int_tabulated(x, y*f,/sort)
>
> Upon output, the X vector has been sorted, but the Y vector has not,
> since it
> was passed as part of a temporary variable y*f. So one has lost
> the one to
> one correspondence between X and Y, screwing up all subsequent
> processing.
>
> --Wayne
It looks ridiculous, but here's a workaround:
print, int_tabulated(x+0, y*f, /sort)
-Jeremy.
|
|
|