; docformat = 'idl'
;+
; NAME:
; ajs_linspace
;
;
; PURPOSE:
; This function returns an array of points equally (linearly)
; spaced between two extremes (as Python's numpy.linspace or Matlab).
;
;
; CATEGORY:
;
;
;
; CALLING SEQUENCE:
; Result = ajs_linspace(start, stop)
;
;
; INPUTS:
; start First point in output array
; stop Last point in output array
;
; OPTIONAL INPUTS:
; num Number of points in output array (default 51, or 50 bincentres)
;
;
; KEYWORD PARAMETERS:
; bincentres Set /bincentres to return centres of bins
; bounded by start and stop
;
;
; OUTPUTS:
; Returns array of floating point numbers, or double-precision if
; either start or stop is double precision
;
;
; OPTIONAL OUTPUTS:
; step Step size used
;
;
; COMMON BLOCKS:
;
;
;
; SIDE EFFECTS:
;
;
;
; RESTRICTIONS:
;
;
;
; PROCEDURE:
;
;
;
; EXAMPLE:
; Result = ajs_linspace(10, 20)
;
;
; MODIFICATION HISTORY:
; 17 Jan 2008 Created, Anthony Smith
;-
FUNCTION ajs_linspace, start, stop, num, step=step, bincentres=bincentres
compile_opt idl2
IF n_elements(num) EQ 0 THEN $
IF keyword_set(bincentres) THEN $
num = 50 $
ELSE $
num = 51
IF (size(start, /type) EQ 5) OR (size(stop, /type) EQ 5) THEN BEGIN
integers = dindgen(num) ; Double precision
num = double(num)
ENDIF ELSE BEGIN
integers = findgen(num) ; Floating point
num = float(num)
ENDELSE
IF keyword_set(bincentres) THEN BEGIN
step = (stop - start) / num
start = start + step / 2
stop = stop - step / 2
ENDIF ELSE $
step = (stop - start) / (num - 1.)
linspace_array = start + integers * step
return, linspace_array
END