[comp.lang.idl-pvwave] How can I integrate?

bdb112@csc.anu.edu.au (03/20/91)

How can I efficiently do a running sum of a vector (integrate)?  The explicitly
coded version (IDL v2)  
for i=1,n-1  x(i)=x(i) + x(i-1) achieves the desired effect, but takes (VS3100)
1 second for a 2000 element array compared to .01 sec for z=x+x, a similar
number of operations.  This is such an obvious thing to do that I must be
missing something obvious - I can't find it in the userlib either (just
deriv).

bruce@nmsu.edu (Bruce Rowen) (03/22/91)

maybe you just want TOTAL(x).
--
-Bruce 
	"Just half a turn and there's your worm!"
				
				-Bob Bet Bait Box

ramesh@nevada.edu (RAMESH VISWANATHAN) (03/26/91)

In article <1991Mar20.233728.1@csc.anu.edu.au> bdb112@csc.anu.edu.au writes:
>How can I efficiently do a running sum of a vector (integrate)?  The explicitly
>coded version (IDL v2)  
>for i=1,n-1  x(i)=x(i) + x(i-1) achieves the desired effect, but takes (VS3100)
>1 second for a 2000 element array compared to .01 sec for z=x+x, a similar
>number of operations.  This is such an obvious thing to do that I must be
>missing something obvious - I can't find it in the userlib either (just
>deriv).


Assuming "i" represents the current array index value upto which you want to
sum the elements of the array "x", try:

	sum_x = total(x(0:i))

or a variation thereof.  The dimension of array "sum_x" will be automatically
dimensioned to the value contained in "i"

Note: Function "total" is a PV Wave system routine.


R.V.

bdb112@csc.anu.edu.au (03/26/91)

In article <1991Mar20.233728.1@csc.anu.edu.au>, bdb112@csc.anu.edu.au writes:
> How can I efficiently do a running sum of a vector (integrate)?  The explicitly
> coded version (IDL v2)  
> for i=1,n-1  x(i)=x(i) + x(i-1) achieves the desired effect, but takes (VS3100)
> 1 second for a 2000 element array compared to .01 sec for z=x+x, a similar
> number of operations.  This is such an obvious thing to do that I must be
> missing something obvious - I can't find it in the userlib either (just
> deriv).

Two respondents have suggested 
sum_x = total(x(0:i))      ; where i is the maximum idex of the array
When I try this, I get a scalar result, rather like a definite integral, when
what I want is a vector which is a running total, like an indefinite integral.

e.g. x = [1,1,2]   sum_x = [1,2,4]
Of course, the next step would be to allow an optional vector which contained
the abscissae, if not equally spaced, or the spacing if equally spaced, but I
would be happy with the simple result.