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

📄 airy.c

📁 开放gsl矩阵运算
💻 C
📖 第 1 页 / 共 2 页
字号:
/* specfunc/airy.c *  * 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 */#include <config.h>#include <gsl/gsl_math.h>#include <gsl/gsl_errno.h>#include "gsl_sf_trig.h"#include "gsl_sf_airy.h"#include "error.h"#include "check.h"#include "chebyshev.h"#include "cheb_eval_mode.c"/*-*-*-*-*-*-*-*-*-*-*-* Private Section *-*-*-*-*-*-*-*-*-*-*-*//* chebyshev expansions for Airy modulus and phase   based on SLATEC r9aimp() Series for AM21       on the interval -1.25000D-01 to  0.                                        with weighted error   2.89E-17                                         log weighted error  16.54                               significant figures required  14.15                                    decimal places required  17.34 Series for ATH1       on the interval -1.25000D-01 to  0.                                        with weighted error   2.53E-17                                         log weighted error  16.60                               significant figures required  15.15                                    decimal places required  17.38 Series for AM22       on the interval -1.00000D+00 to -1.25000D-01                                        with weighted error   2.99E-17                                         log weighted error  16.52                               significant figures required  14.57                                    decimal places required  17.28 Series for ATH2       on the interval -1.00000D+00 to -1.25000D-01                                        with weighted error   2.57E-17                                         log weighted error  16.59                               significant figures required  15.07                                    decimal places required  17.34*/static double am21_data[37] = {  0.0065809191761485,  0.0023675984685722,  0.0001324741670371,  0.0000157600904043,  0.0000027529702663,  0.0000006102679017,  0.0000001595088468,  0.0000000471033947,  0.0000000152933871,  0.0000000053590722,  0.0000000020000910,  0.0000000007872292,  0.0000000003243103,  0.0000000001390106,  0.0000000000617011,  0.0000000000282491,  0.0000000000132979,  0.0000000000064188,  0.0000000000031697,  0.0000000000015981,  0.0000000000008213,  0.0000000000004296,  0.0000000000002284,  0.0000000000001232,  0.0000000000000675,  0.0000000000000374,  0.0000000000000210,  0.0000000000000119,  0.0000000000000068,  0.0000000000000039,  0.0000000000000023,  0.0000000000000013,  0.0000000000000008,  0.0000000000000005,  0.0000000000000003,  0.0000000000000001,  0.0000000000000001};static cheb_series am21_cs = {  am21_data,  36,  -1, 1,  20};static double ath1_data[36] = {  -0.07125837815669365,  -0.00590471979831451,  -0.00012114544069499,  -0.00000988608542270,  -0.00000138084097352,  -0.00000026142640172,  -0.00000006050432589,  -0.00000001618436223,  -0.00000000483464911,  -0.00000000157655272,  -0.00000000055231518,  -0.00000000020545441,  -0.00000000008043412,  -0.00000000003291252,  -0.00000000001399875,  -0.00000000000616151,  -0.00000000000279614,  -0.00000000000130428,  -0.00000000000062373,  -0.00000000000030512,  -0.00000000000015239,  -0.00000000000007758,  -0.00000000000004020,  -0.00000000000002117,  -0.00000000000001132,  -0.00000000000000614,  -0.00000000000000337,  -0.00000000000000188,  -0.00000000000000105,  -0.00000000000000060,  -0.00000000000000034,  -0.00000000000000020,  -0.00000000000000011,  -0.00000000000000007,  -0.00000000000000004,  -0.00000000000000002};static cheb_series ath1_cs = {  ath1_data,  35,  -1, 1,  15};static double am22_data[33] = { -0.01562844480625341,  0.00778336445239681,  0.00086705777047718,  0.00015696627315611,  0.00003563962571432,  0.00000924598335425,  0.00000262110161850,  0.00000079188221651,  0.00000025104152792,  0.00000008265223206,  0.00000002805711662,  0.00000000976821090,  0.00000000347407923,  0.00000000125828132,  0.00000000046298826,  0.00000000017272825,  0.00000000006523192,  0.00000000002490471,  0.00000000000960156,  0.00000000000373448,  0.00000000000146417,  0.00000000000057826,  0.00000000000022991,  0.00000000000009197,  0.00000000000003700,  0.00000000000001496,  0.00000000000000608,  0.00000000000000248,  0.00000000000000101,  0.00000000000000041,  0.00000000000000017,  0.00000000000000007,  0.00000000000000002};static cheb_series am22_cs = {  am22_data,  32,  -1, 1,  15};static double ath2_data[32] = {   0.00440527345871877,  -0.03042919452318455,  -0.00138565328377179,  -0.00018044439089549,  -0.00003380847108327,  -0.00000767818353522,  -0.00000196783944371,  -0.00000054837271158,  -0.00000016254615505,  -0.00000005053049981,  -0.00000001631580701,  -0.00000000543420411,  -0.00000000185739855,  -0.00000000064895120,  -0.00000000023105948,  -0.00000000008363282,  -0.00000000003071196,  -0.00000000001142367,  -0.00000000000429811,  -0.00000000000163389,  -0.00000000000062693,  -0.00000000000024260,  -0.00000000000009461,  -0.00000000000003716,  -0.00000000000001469,  -0.00000000000000584,  -0.00000000000000233,  -0.00000000000000093,  -0.00000000000000037,  -0.00000000000000015,  -0.00000000000000006,  -0.00000000000000002};static cheb_series ath2_cs = {  ath2_data,  31,  -1, 1,  16};/* Airy modulus and phase for x < -1 */staticintairy_mod_phase(const double x, gsl_mode_t mode, gsl_sf_result * mod, gsl_sf_result * phase){  gsl_sf_result result_m;  gsl_sf_result result_p;  double m, p;  double sqx;  if(x < -2.0) {    double z = 16.0/(x*x*x) + 1.0;    cheb_eval_mode_e(&am21_cs, z, mode, &result_m);    cheb_eval_mode_e(&ath1_cs, z, mode, &result_p);  }  else if(x <= -1.0) {    double z = (16.0/(x*x*x) + 9.0)/7.0;    cheb_eval_mode_e(&am22_cs, z, mode, &result_m);    cheb_eval_mode_e(&ath2_cs, z, mode, &result_p);  }  else {    mod->val = 0.0;    mod->err = 0.0;    phase->val = 0.0;    phase->err = 0.0;    GSL_ERROR ("x is greater than 1.0", GSL_EDOM);  }  m =  0.3125 + result_m.val;  p = -0.625  + result_p.val;  sqx = sqrt(-x);  mod->val   = sqrt(m/sqx);  mod->err  = fabs(mod->val) * (GSL_DBL_EPSILON + fabs(result_m.err/result_m.val));  phase->val = M_PI_4 - x*sqx * p;  phase->err = fabs(phase->val) * (GSL_DBL_EPSILON + fabs(result_p.err/result_p.val));  return GSL_SUCCESS;}/* Chebyshev series for Ai(x) with x in [-1,1]   based on SLATEC ai(x) series for aif        on the interval -1.00000d+00 to  1.00000d+00                                   with weighted error   1.09e-19                                    log weighted error  18.96                          significant figures required  17.76                               decimal places required  19.44 series for aig        on the interval -1.00000d+00 to  1.00000d+00                                   with weighted error   1.51e-17                                    log weighted error  16.82                          significant figures required  15.19                               decimal places required  17.27 */static double ai_data_f[9] = {  -0.03797135849666999750,   0.05919188853726363857,   0.00098629280577279975,   0.00000684884381907656,   0.00000002594202596219,   0.00000000006176612774,   0.00000000000010092454,   0.00000000000000012014,   0.00000000000000000010};static cheb_series aif_cs = {  ai_data_f,  8,  -1, 1,  8};static double ai_data_g[8] = {   0.01815236558116127,   0.02157256316601076,   0.00025678356987483,   0.00000142652141197,   0.00000000457211492,   0.00000000000952517,   0.00000000000001392,   0.00000000000000001};static cheb_series aig_cs = {  ai_data_g,  7,  -1, 1,  7};/* Chebvyshev series for Bi(x) with x in [-1,1]   based on SLATEC bi(x) series for bif        on the interval -1.00000d+00 to  1.00000d+00                                        with weighted error   1.88e-19                                         log weighted error  18.72                               significant figures required  17.74                                    decimal places required  19.20 series for big        on the interval -1.00000d+00 to  1.00000d+00                                        with weighted error   2.61e-17                                         log weighted error  16.58                               significant figures required  15.17                                    decimal places required  17.03 */static double data_bif[9] = {  -0.01673021647198664948,   0.10252335834249445610,   0.00170830925073815165,   0.00001186254546774468,   0.00000004493290701779,   0.00000000010698207143,   0.00000000000017480643,   0.00000000000000020810,   0.00000000000000000018};static cheb_series bif_cs = {  data_bif,  8,  -1, 1,  8};static double data_big[8] = {   0.02246622324857452,   0.03736477545301955,   0.00044476218957212,   0.00000247080756363,   0.00000000791913533,   0.00000000001649807,   0.00000000000002411,   0.00000000000000002};static cheb_series big_cs = {  data_big,  7,  -1, 1,  7};/* Chebyshev series for Bi(x) with x in [1,8]   based on SLATEC bi(x) */static double data_bif2[10] = {  0.0998457269381604100,  0.4786249778630055380,  0.0251552119604330118,  0.0005820693885232645,  0.0000074997659644377,  0.0000000613460287034,  0.0000000003462753885,  0.0000000000014288910,  0.0000000000000044962,  0.0000000000000000111};static cheb_series bif2_cs = {  data_bif2,  9,  -1, 1,  9};static double data_big2[10] = {  0.033305662145514340,  0.161309215123197068,  0.0063190073096134286,  0.0001187904568162517,  0.0000013045345886200,  0.0000000093741259955,  0.0000000000474580188,  0.0000000000001783107,  0.0000000000000005167,  0.0000000000000000011};static cheb_series big2_cs = {  data_big2,  9,  -1, 1,  9};/* chebyshev for Ai(x) asymptotic factor    based on SLATEC aie() Series for AIP        on the interval  0.          to  1.00000D+00                   with weighted error   5.10E-17                    log weighted error  16.29          significant figures required  14.41               decimal places required  17.06	       

⌨️ 快捷键说明

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