Chris@0: /*
Chris@0: copyright (C) 2012 I. Irigaray, M. Rocamora
Chris@0:
Chris@0: This program is free software: you can redistribute it and/or modify
Chris@0: it under the terms of the GNU General Public License as published by
Chris@0: the Free Software Foundation, either version 3 of the License, or
Chris@0: (at your option) any later version.
Chris@0:
Chris@0: This program is distributed in the hope that it will be useful,
Chris@0: but WITHOUT ANY WARRANTY; without even the implied warranty of
Chris@0: MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
Chris@0: GNU General Public License for more details.
Chris@0:
Chris@0: You should have received a copy of the GNU General Public License
Chris@0: along with this program. If not, see .
Chris@0: */
Chris@0:
Chris@0:
Chris@0: #include "FChTransformUtils.h"
Chris@0: #include
Chris@0:
Chris@0: void cumtrapz(const double *x, const double *y, size_t N, double *accum)
Chris@0: /*Trapezoidal Integrator: 1/2(b-a)(F(a)+F(b))*/
Chris@0: {
Chris@0:
Chris@0: accum[0]=0.0;
Chris@0: for (size_t i = 1; i < N; i++) {
Chris@0: accum[i]=accum[i-1]+0.5*(x[i]-x[i-1])*(y[i]+y[i-1]);
Chris@0: }
Chris@0:
Chris@0: }
Chris@0:
Chris@0:
Chris@0: void interp1(const double *x1, const double *y1, size_t N1, const double *x2, double *y2, size_t N2){
Chris@0: /*1-D linear interpolation*/
Chris@0:
Chris@0: for (size_t i = 0; i < N2; i++) {
Chris@0: /*Smaller or equal than the smallest, or larger or equal than the largest.*/
Chris@0: if ( x2[i] <= x1[0] ) {
Chris@0: y2[i] = y1[0];
Chris@0: } else if ( x2[i] >= x1[N1-1] ) {
Chris@0: y2[i] = y1[N1-1];
Chris@0: } else {
Chris@0: /*Search every value of x2 in x1*/
Chris@0: size_t j = 1;
Chris@0: size_t salir = 0;
Chris@0: while ((j