⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 trapzd.pro

📁 basic median filter simulation
💻 PRO
字号:
pro trapzd, func, a, b, s, step, _EXTRA = _EXTRA;+; NAME:;       TRAPZD; PURPOSE:;       Compute the nth stage of refinement of an extended trapezoidal rule.; EXPLANATION:;       This procedure is called by QSIMP and QTRAP.   Algorithm from Numerical;       Recipes, Section 4.2.   TRAPZD is meant to be called iteratively from;       a higher level procedure.;; CALLING SEQUENCE:;       TRAPZD, func, A, B, S, step, [ _EXTRA = ];; INPUTS:;       func - scalar string giving name of function to be integrated.   This;               must be a function of one variable.;       A,B -  scalars giving the limits of the integration;; INPUT-OUTPUT:;       S -    scalar giving the total sum from the previous iterations on ;               input and the refined sum after the current iteration on output.;;       step - LONG scalar giving the number of points at which to compute the;               function for the current iteration.   If step is not defined on;               input, then S is intialized using the average of the endpoints;               of limits of integration.;; OPTIONAL INPUT KEYWORDS:;       Any supplied keywords will be passed to the user function via the ;       _EXTRA facility. ;; NOTES:;       (1) TRAPZD will check for math errors (except for underflow) when ;       computing the function at the endpoints, but not on subsequent ;       iterations.;;       (2) TRAPZD always uses double precision to sum the function values;       but the call to the user-supplied function is double precision only if ;       one of the limits A or B is double precision.; REVISION HISTORY:;       Written         W. Landsman                 August, 1991;       Always use double precision for TOTAL       March, 1996;       Pass keyword to function via _EXTRA facility  W. Landsman July 1999;       Don't check for floating underflow  W.Landsman  April 2008;- On_error,2 compile_opt idl2 kpresent = keyword_set(_EXTRA) if N_elements(step) EQ 0 then begin          ;Initialize?;If a math error occurs, it is likely to occur at the endpoints     junk = check_math()                    ;     if kpresent then s1 = CALL_FUNCTION(func,A, _EXTRA= _EXTRA) $                 else s1 = CALL_FUNCTION(func,A)     if check_math(mask=211) NE 0 then $        message,'ERROR - Illegal lower bound of '+strtrim(A,2)+ $                ' to function ' + strupcase(func)     if kpresent then s2 = CALL_FUNCTION(func,B, _EXTRA = _EXTRA) $                 else s2 = CALL_FUNCTION(func,B)     if check_math(mask=211) NE 0 then $        message,'ERROR - Illegal upper bound of '+strtrim(B,2) + $                ' to function ' + strupcase(func)     junk= check_math()		     s = 0.5d * ( double(B)-A ) * ( s1+s2 )    ;First approx is average of endpoints     step = 1l endif else begin     tnm = float( step )                    del = ( B - A ) / tnm                    ;Spacing of the points to add     x = A + 0.5*del + findgen( step ) * del  ;Grid of points @ compute function     if kpresent then sum = CALL_FUNCTION( func, x, _EXTRA = _EXTRA) $                 else sum = CALL_FUNCTION( func, x)     S = 0.5d * ( S + (double(B)-A) * total( sum, /DOUBLE )/tnm )          step = 2*step endelse return end 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -