File indexing completed on 2024-05-12 15:27:08

0001 /***************************************************************************
0002     File                 : nsl_interp.h
0003     Project              : LabPlot
0004     Description          : NSL interpolation functions
0005     --------------------------------------------------------------------
0006     Copyright            : (C) 2016 by Stefan Gerlach (stefan.gerlach@uni.kn)
0007 
0008  ***************************************************************************/
0009 
0010 /***************************************************************************
0011  *                                                                         *
0012  *  This program is free software; you can redistribute it and/or modify   *
0013  *  it under the terms of the GNU General Public License as published by   *
0014  *  the Free Software Foundation; either version 2 of the License, or      *
0015  *  (at your option) any later version.                                    *
0016  *                                                                         *
0017  *  This program is distributed in the hope that it will be useful,        *
0018  *  but WITHOUT ANY WARRANTY; without even the implied warranty of         *
0019  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the          *
0020  *  GNU General Public License for more details.                           *
0021  *                                                                         *
0022  *   You should have received a copy of the GNU General Public License     *
0023  *   along with this program; if not, write to the Free Software           *
0024  *   Foundation, Inc., 51 Franklin Street, Fifth Floor,                    *
0025  *   Boston, MA  02110-1301  USA                                           *
0026  *                                                                         *
0027  ***************************************************************************/
0028 
0029 #ifndef NSL_INTERP_H
0030 #define NSL_INTERP_H
0031 
0032 #define NSL_INTERP_TYPE_COUNT 11
0033 typedef enum {nsl_interp_type_linear, nsl_interp_type_polynomial, nsl_interp_type_cspline, nsl_interp_type_cspline_periodic, 
0034     nsl_interp_type_akima, nsl_interp_type_akima_periodic, nsl_interp_type_steffen, nsl_interp_type_cosine,
0035     nsl_interp_type_exponential, nsl_interp_type_pch, nsl_interp_type_rational} nsl_interp_type;
0036 extern const char* nsl_interp_type_name[];
0037 
0038 #define NSL_INTERP_PCH_VARIANT_COUNT 4
0039 typedef enum {nsl_interp_pch_variant_finite_difference, nsl_interp_pch_variant_catmull_rom, nsl_interp_pch_variant_cardinal,
0040     nsl_interp_pch_variant_kochanek_bartels} nsl_interp_pch_variant;
0041 extern const char* nsl_interp_pch_variant_name[];
0042 
0043 #define NSL_INTERP_EVALUATE_COUNT 4
0044 typedef enum {nsl_interp_evaluate_function, nsl_interp_evaluate_derivative, nsl_interp_evaluate_second_derivative, 
0045     nsl_interp_evaluate_integral} nsl_interp_evaluate;
0046 extern const char* nsl_interp_evaluate_name[];
0047 
0048 /* calculates rational interpolation of n points of xy-data at xn using Burlisch-Stoer method. result in v (error dv) */
0049 int nsl_interp_ratint(double *x, double *y, int n, double xn, double *v, double *dv);
0050 
0051 #endif /* NSL_INTERP_H */