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

📄 gsl_sum.h

📁 开放gsl矩阵运算
💻 H
字号:
/* sum/gsl_sum.h *  * Copyright (C) 1996, 1997, 1998, 1999, 2000 Gerard Jungman, Brian Gough *  * 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_SUM_H__#define __GSL_SUM_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/*  Workspace for Levin U Transform with error estimation, *    *   size        = number of terms the workspace can handle *   sum_plain   = simple sum of series *   q_num       = backward diagonal of numerator; length = size *   q_den       = backward diagonal of denominator; length = size *   dq_num      = table of numerator derivatives; length = size**2 *   dq_den      = table of denominator derivatives; length = size**2 *   dsum        = derivative of sum wrt term i; length = size */typedef struct{  size_t size;  size_t i;			/* position in array */  size_t terms_used;		/* number of calls */  double sum_plain;  double *q_num;  double *q_den;  double *dq_num;  double *dq_den;  double *dsum;}gsl_sum_levin_u_workspace;gsl_sum_levin_u_workspace *gsl_sum_levin_u_alloc (size_t n);void gsl_sum_levin_u_free (gsl_sum_levin_u_workspace * w);/* Basic Levin-u acceleration method. * *   array       = array of series elements *   n           = size of array *   sum_accel   = result of summation acceleration *   err         = estimated error    * * See [Fessler et al., ACM TOMS 9, 346 (1983) and TOMS-602] */int gsl_sum_levin_u_accel (const double *array,                           const size_t n,                           gsl_sum_levin_u_workspace * w,                           double *sum_accel, double *abserr);/* Basic Levin-u acceleration method with constraints on the terms * used, * *   array       = array of series elements *   n           = size of array *   min_terms   = minimum number of terms to sum *   max_terms   = maximum number of terms to sum *   sum_accel   = result of summation acceleration *   err         = estimated error    * * See [Fessler et al., ACM TOMS 9, 346 (1983) and TOMS-602]  */int gsl_sum_levin_u_minmax (const double *array,			    const size_t n,			    const size_t min_terms,			    const size_t max_terms,			    gsl_sum_levin_u_workspace * w,			    double *sum_accel, double *abserr);/* Basic Levin-u step w/o reference to the array of terms. * We only need to specify the value of the current term * to execute the step. See TOMS-745. * * sum = t0 + ... + t_{n-1} + term;  term = t_{n} * *   term   = value of the series term to be added *   n      = position of term in series (starting from 0) *   sum_accel = result of summation acceleration *   sum_plain = simple sum of series */intgsl_sum_levin_u_step (const double term,		      const size_t n,		      const size_t nmax,		      gsl_sum_levin_u_workspace * w,                       double *sum_accel);/* The following functions perform the same calculation without   estimating the errors. They require O(N) storage instead of O(N^2).   This may be useful for summing many similar series where the size   of the error has already been estimated reliably and is not   expected to change.  */typedef struct{  size_t size;  size_t i;			/* position in array */  size_t terms_used;		/* number of calls */  double sum_plain;  double *q_num;  double *q_den;  double *dsum;}gsl_sum_levin_utrunc_workspace;gsl_sum_levin_utrunc_workspace *gsl_sum_levin_utrunc_alloc (size_t n);void gsl_sum_levin_utrunc_free (gsl_sum_levin_utrunc_workspace * w);int gsl_sum_levin_utrunc_accel (const double *array,                                const size_t n,                                gsl_sum_levin_utrunc_workspace * w,                                double *sum_accel, double *abserr_trunc);int gsl_sum_levin_utrunc_minmax (const double *array,				 const size_t n,				 const size_t min_terms,				 const size_t max_terms,				 gsl_sum_levin_utrunc_workspace * w,				 double *sum_accel, double *abserr_trunc);int gsl_sum_levin_utrunc_step (const double term,			       const size_t n,			       gsl_sum_levin_utrunc_workspace * w,                                double *sum_accel);__END_DECLS#endif /* __GSL_SUM_H__ */

⌨️ 快捷键说明

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