function transform_coeff, coeff, alpha, beta ;+ ; NAME: ; TRANSFORM_COEFF() ; PURPOSE: ; Compute new polynomial coefficients under a linear transformation ; EXPLANATION: ; Suppose one has a (nonlinear) polynomial (similar to the POLY() function) ; y = C[0] + C[1]*x + C[2]*x^2 + C[3]*x^3 + ... ; ; and one has a linear transformation in X ; ; x = alpha*x' + beta ; This function computes the new polynomial coefficients under the linear ; transformation. ; ; CALLING SEQUENCE: ; newcoeff = TRANSFORM_COEFF( coeff, alpha, beta) ; INPUTS: ; Coeff - vector of polynomial coefficients (as with POLY()). The ; degree of the polynomial is N_elements(coeff) - 1 ; Alpha, Beta - numeric scalars defining the linear transformation in X ; OUTPUTS: ; NewCoeff - Vector (same size as Coeff) giving the new polynomial ; coefficients ; EXAMPLE: ; Suppose one has polynomial mapping a nonlinear distortion in the X ; direction of a spectrum ; ; y = 0.2 + 1.1*x + 0.1*x^2 ; ; if one rebins the spectrum to half the size then the linear transformation ; is x = 2.*x' ; so alpha = 2 and beta = 0 ; The new coefficients are ; IDL> print, transform_coeff([0.2,1.1,0.1],2.,0) ; ==> [0.2, 2.2, 0.4] ; METHOD: ; Performs a binomial expansion of the polynomial and collect like terms ; groups.google.com/group/comp.lang.idl-pvwave/msg/11132d96d9c0f93d?hl=en& ; REVISION HISTORY: ; Written W. Landsman December 2007 ;- compile_opt idl2 if N_Params() LT 3 then begin print,'Syntax - newcoeff = TRANSFORM_COEFF( coeff, alpha, beta) ' if N_elements(coeff) GT 0 then return,coeff else return,-1 endif degree=n_elements(coeff)-1 newarray=coeff*0 FOR i=0,degree DO BEGIN FOR j=0,i DO BEGIN newarray[j] = newarray[j] + $ coeff[i]*factorial(i)*alpha^j*beta^(i-j)/factorial(j)/factorial(i-j) ENDFOR ENDFOR return, newarray end