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

📄 gsl_interp.h

📁 开放gsl矩阵运算
💻 H
字号:
/* interpolation/gsl_interp.h *  * Copyright (C) 1996, 1997, 1998, 1999, 2000 Gerard Jungman *  * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or (at * your option) any later version. *  * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU * General Public License for more details. *  * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. *//* Author:  G. Jungman */#ifndef __GSL_INTERP_H__#define __GSL_INTERP_H__#include <stdlib.h>#undef __BEGIN_DECLS#undef __END_DECLS#ifdef __cplusplus# define __BEGIN_DECLS extern "C" {# define __END_DECLS }#else# define __BEGIN_DECLS /* empty */# define __END_DECLS /* empty */#endif__BEGIN_DECLS/* evaluation accelerator */typedef struct {  size_t  cache;        /* cache of index   */  size_t  miss_count;   /* keep statistics  */  size_t  hit_count;}gsl_interp_accel;/* interpolation object type */typedef struct {  const char * name;  unsigned int min_size;  void *  (*alloc) (size_t size);  int     (*init)    (void *, const double xa[], const double ya[], size_t size);  int     (*eval)    (const void *, const double xa[], const double ya[], size_t size, double x, gsl_interp_accel *, double * y);  int     (*eval_deriv)  (const void *, const double xa[], const double ya[], size_t size, double x, gsl_interp_accel *, double * y_p);  int     (*eval_deriv2) (const void *, const double xa[], const double ya[], size_t size, double x, gsl_interp_accel *, double * y_pp);  int     (*eval_integ)  (const void *, const double xa[], const double ya[], size_t size, gsl_interp_accel *, double a, double b, double * result);  void    (*free)         (void *);} gsl_interp_type;/* general interpolation object */typedef struct {  const gsl_interp_type * type;  double  xmin;  double  xmax;  size_t  size;  void * state;} gsl_interp;/* available types */extern const gsl_interp_type * gsl_interp_linear;extern const gsl_interp_type * gsl_interp_cspline;extern const gsl_interp_type * gsl_interp_cspline_periodic;extern const gsl_interp_type * gsl_interp_akima;extern const gsl_interp_type * gsl_interp_akima_periodic;gsl_interp_accel *gsl_interp_accel_alloc(void);size_tgsl_interp_accel_find(gsl_interp_accel * a, const double x_array[], size_t size, double x);intgsl_interp_accel_reset (gsl_interp_accel * a);voidgsl_interp_accel_free(gsl_interp_accel * a);gsl_interp *gsl_interp_alloc(const gsl_interp_type * T, size_t n);     intgsl_interp_init(gsl_interp * obj, const double xa[], const double ya[], size_t size);const char * gsl_interp_name(const gsl_interp * interp);unsigned int gsl_interp_min_size(const gsl_interp * interp);intgsl_interp_eval_e(const gsl_interp * obj,                  const double xa[], const double ya[], double x,                  gsl_interp_accel * a, double * y);doublegsl_interp_eval(const gsl_interp * obj,                const double xa[], const double ya[], double x,                gsl_interp_accel * a);intgsl_interp_eval_deriv_e(const gsl_interp * obj,                        const double xa[], const double ya[], double x,			gsl_interp_accel * a,                        double * d);doublegsl_interp_eval_deriv(const gsl_interp * obj,                      const double xa[], const double ya[], double x,		      gsl_interp_accel * a);intgsl_interp_eval_deriv2_e(const gsl_interp * obj,                         const double xa[], const double ya[], double x,			 gsl_interp_accel * a,                         double * d2);doublegsl_interp_eval_deriv2(const gsl_interp * obj,                       const double xa[], const double ya[], double x,		       gsl_interp_accel * a);intgsl_interp_eval_integ_e(const gsl_interp * obj,                        const double xa[], const double ya[],                        double a, double b,			gsl_interp_accel * acc,                        double * result);doublegsl_interp_eval_integ(const gsl_interp * obj,                      const double xa[], const double ya[],                      double a, double b,		      gsl_interp_accel * acc);voidgsl_interp_free(gsl_interp * interp);size_t gsl_interp_bsearch(const double x_array[], double x,                          size_t index_lo, size_t index_hi);#ifdef HAVE_INLINEextern inline size_tgsl_interp_bsearch(const double x_array[], double x,                   size_t index_lo, size_t index_hi);extern inline size_tgsl_interp_bsearch(const double x_array[], double x,                   size_t index_lo, size_t index_hi){  size_t ilo = index_lo;  size_t ihi = index_hi;  while(ihi > ilo + 1) {    size_t i = (ihi + ilo)/2;    if(x_array[i] > x)      ihi = i;    else      ilo = i;  }    return ilo;}#endifsize_tgsl_interp_accel_find(gsl_interp_accel * a, const double xa[], size_t len, double x);#ifdef HAVE_INLINEextern inline size_tgsl_interp_accel_find(gsl_interp_accel * a, const double xa[], size_t len, double x){  size_t x_index = a->cache;   if(x < xa[x_index]) {    a->miss_count++;    a->cache = gsl_interp_bsearch(xa, x, 0, x_index);  }  else if(x > xa[x_index + 1]) {    a->miss_count++;    a->cache = gsl_interp_bsearch(xa, x, x_index, len-1);  }  else {    a->hit_count++;  }    return a->cache;}#endif /* HAVE_INLINE */__END_DECLS#endif /* __GSL_INTERP_H__ */

⌨️ 快捷键说明

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