📄 polint.pro
字号:
pro polint, xa, ya, x, y, dy;+; NAME:; POLINT; PURPOSE:; Interpolate a set of N points by fitting a polynomial of degree N-1; EXPLANATION:; Adapted from algorithm in Numerical Recipes, Press et al. (1992), ; Section 3.1.;; CALLING SEQUENCE; POLINT, xa, ya, x, y, [ dy ]; INPUTS:; XA - X Numeric vector, all values must be distinct. The number of; values in XA should rarely exceed 10 (i.e. a 9th order polynomial); YA - Y Numeric vector, same number of elements; X - Numeric scalar specifying value to be interpolated ;; OUTPUT:; Y - Scalar, interpolated value in (XA,YA) corresponding to X;; OPTIONAL OUTPUT; DY - Error estimate on Y, scalar;; EXAMPLE:; Find sin(2.5) by polynomial interpolation on sin(indgen(10));; IDL> xa = indgen(10); IDL> ya = sin( xa ); IDL> polint, xa, ya, 2.5, y ,dy; ; The above method gives y = .5988 & dy = 3.1e-4 a close; approximation to the actual sin(2.5) = .5985;; METHOD:; Uses Neville's algorithm to iteratively build up the correct; polynomial, with each iteration containing one higher order.;; REVISION HISTORY:; Written W. Landsman January, 1992; Converted to IDL V5.0 W. Landsman September 1997;- On_error,2 if N_params() LT 4 then begin print,'Syntax - polint, xa, ya, x, y, [ dy ]' print,' xa,ya - Input vectors to be interpolated' print,' x - Scalar specifying point at which to interpolate' print,' y - Output interpolated scalar value' print,' dy - Optional error estimate on y' return endif N = N_elements( xa ) if N_elements( ya ) NE N then message, $ 'ERROR - Input X and Y vectors must have same number of elements'; Find the index of XA which is closest to X dif = min( abs(x-xa), ns ) c = ya & d = ya y = ya[ns] ns = ns - 1 for m = 1,n-1 do begin ho = xa[0:n-m-1] - x hp = xa[m:n-1] - x w = c[1:n-m] - d[0:n-m-1] den = ho - hp if min( abs(den) ) EQ 0 then message, $ 'ERROR - All input X vector values must be distinct' den = w / den d = hp * den c = ho * den if ( 2*ns LT n-m-1 ) then dy = c[ns+1] else begin dy = d[ns] ns = ns - 1 endelse y = y + dy endfor return end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -