Previous SAXO Documentation Assistant: Overview Next

Interpolation/

spl_keep_mean.pro

Given the arrays X and Y, which tabulate a function (with the X[i] AND Y[i] in ascending order), and given an input value X2, the spl_incr function returns an interpolated value for the given values of X2. The interpolation method is based on cubic spline, corrected in a way that integral of the interpolated values is the same as the integral of the input values. (-> for example to build daily data from monthly mean and keep the monthly mean of the computed daily data equal to the original values)

spl_keep_mean

result = spl_keep_mean(x, yin, x2, YP0=YP0, YPN_1=YPN_1, GE0=GE0)

Return value

y2: the mean value between two consecutive values of x2. This array has one element less than y2. y2 has double precision.

Parameters

x        in required

An n-elements (at least 2) input vector that specifies the tabulate points in a strict ascending order.

yin        in required type: array

an array with one element less than x. y[i] represents the mean value between x[i] and x[i+1]. if /GE0 is activated, y must have positive values.

x2        in required

The input values for which the interpolated values are desired. Its values must be strictly monotonically increasing.

Keywords

YP0       

The first derivative of the interpolating function at the point X0. If YP0 is omitted, the second derivative at the boundary is set to zero, resulting in a "natural spline."

YPN_1       

The first derivative of the interpolating function at the point Xn-1. If YPN_1 is omitted, the second derivative at the boundary is set to zero, resulting in a "natural spline."

GE0       

to force that y2 is always GE than 0. In that case, y must also be GE than 0.

Examples


    12 monthly values of precipitations into daily values:

 IDL> yr1 = 1990
 IDL> yr2 = 1992
 IDL> nyr = yr2-yr1+1
 IDL> n1 = 12*nyr+1
 IDL> x = julday(1+findgen(n1), replicate(1, n1) $
 IDL>        , replicate(yr1, n1), fltarr(n1))
 IDL> n2 = 365*nyr + total(leapyr(yr1+indgen(nyr))) + 1
 IDL> x2 = julday(replicate(1, n2), 1+findgen(n2) $
 IDL>            , replicate(yr1, n2), fltarr(n2))
 IDL> y = abs(randomn(0, n1-1))
 IDL> y2 = spl_keep_mean(x, y, x2, /ge0)

 IDL> print, min(x, max = ma), ma
 IDL> print, min(x2, max = ma), ma
 IDL> print, vairdate([min(x, max = ma), ma])
 IDL> print, total(y*(x[1:n1-1]-x[0:n1-2]))
 IDL> print, total(y2*(x2[1:n2-1]-x2[0:n2-2]))

    

Version history

Version

$Id: spl_keep_mean.pro 327 2007-12-13 16:22:35Z pinsard $

History

Sebastien Masson (smasson@lodyc.jussieu.fr): May 2005

Known issues

Restrictions

It might be possible that y2 has very small negative values (amplitude smaller than 1.e-6)...

 


  Produced by IDLdoc 2.0.