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

📄 chi2.c

📁 it is regression Algorithm in C/C++.
💻 C
字号:
/*----------------------------------------------------------------------  File    : chi2.c  Contents: chi^2 distribution function  Author  : Christian Borgelt  History : 2003.05.19 file created as quantile.c            2008.03.14 main programs added----------------------------------------------------------------------*/#if defined(CHI2PDF_MAIN) \ || defined(CHI2CDF_MAIN) \ || defined(CHI2QTL_MAIN)#include <stdio.h>#include <stdlib.h>#endif#ifdef CHI2QTL_MAIN#ifndef CHI2QTL#define CHI2QTL#endif#ifndef GAMMAQTL#define GAMMAQTL#endif#endif#include <assert.h>#include <math.h>#include "gamma.h"#ifdef CHI2QTL#include "normal.h"#endif#include "chi2.h"/*----------------------------------------------------------------------  Functions----------------------------------------------------------------------*/double chi2pdf (double x, double df){                               /* --- probability density function */  assert(df > 0);               /* check the function arguments */  if (x <=  0) return 0;        /* only non-zero for positive arg. */  if (df == 2) return 0.5 *exp(-0.5*x);  df *= 0.5;                    /* compute probability density */  return 0.5 *exp((df-1) *log(0.5*x) -0.5*x -logGamma(df));}  /* chi2pdf() *//*--------------------------------------------------------------------*/double chi2cdfP (double x, double df){                               /* --- cumulative distribution fn. */  assert(df > 0);               /* check the function arguments */  return GammaP(0.5*df, 0.5*x); /* compute regularized Gamma function */}  /* chi2cdfP() *//*--------------------------------------------------------------------*/double chi2cdfQ (double x, double df){                               /* --- cumulative distribution fn. */  assert(df > 0);               /* check the function arguments */  return GammaQ(0.5*df, 0.5*x); /* compute regularized Gamma function */}  /* chi2cdfQ() *//*--------------------------------------------------------------------*/#ifdef CHI2QTLdouble chi2qtlP (double prob, double df){                               /* --- quantile of chi2 distribution */  return GammaqtlP(prob, 0.5*df, 2);}  /* chi2qtlP() *//*--------------------------------------------------------------------*/double chi2qtlQ (double prob, double df){                               /* --- quantile of chi2 distribution */  return GammaqtlQ(prob, 0.5*df, 2);}  /* chi2qtlQ() */#endif/*----------------------------------------------------------------------  Main Functions----------------------------------------------------------------------*/#ifdef CHI2PDF_MAINint main (int argc, char *argv[]){                               /* --- main function */  double df = 1;                /* degrees of freedom */  double x;                     /* argument value */  if ((argc < 2) || (argc > 3)){/* if wrong number of arguments */    printf("usage: %s arg [df]\n", argv[0]);    printf("compute probability density function of the\n"           "chi^2 distribution with df degrees of freedom\n");    return 0;                   /* print a usage message */  }                             /* and abort the program */  x = atof(argv[1]);            /* get the argument value */  if (argc > 2) df = atof(argv[2]);  if (df <= 0) {                /* get the degrees of freedom */    printf("%s: invalid degrees of freedom\n", argv[0]); return -1; }  printf("chi^2: f(%.16g;%.16g) = %.16g\n", x, df, chi2pdf(x, df));  return 0;                     /* compute and print density */}  /* main() */#endif/*--------------------------------------------------------------------*/#ifdef CHI2CDF_MAINint main (int argc, char *argv[]){                               /* --- main function */  double df = 1;                /* degrees of freedom */  double x;                     /* argument value */  if ((argc < 2) || (argc > 3)){/* if wrong number of arguments */    printf("usage: %s arg [df]\n", argv[0]);    printf("compute cumulative distribution function of the\n"           "chi^2 distribution with df degrees of freedom\n");    return 0;                   /* print a usage message */  }                             /* and abort the program */  x = atof(argv[1]);            /* get the argument value */  if (argc > 2) df = atof(argv[2]);  if (df <= 0) {                /* get the degrees of freedom */    printf("%s: invalid degrees of freedom\n", argv[0]); return -1; }  printf("chi^2: F(%.16g;%.16g) = %.16g\n", x, df, chi2cdfP(x, df));  printf("   1 - F(%.16g;%.16g) = %.16g\n", x, df, chi2cdfQ(x, df));  return 0;                     /* compute and print probability */}  /* main() */#endif/*--------------------------------------------------------------------*/#ifdef CHI2QTL_MAINint main (int argc, char *argv[]){                               /* --- main function */  double df = 1;                /* degrees of freedom */  double prob;                  /* probability */  if ((argc < 2) || (argc > 3)){/* if wrong number of arguments */    printf("usage: %s prob [df]\n", argv[0]);    printf("compute quantile of the chi^2 distribution "           "with df degrees of freedom\n");    return 0;                   /* print a usage message */  }                             /* and abort the program */  prob = atof(argv[1]);         /* get the probability */  if ((prob < 0) || (prob > 1)) {    printf("%s: invalid probability\n", argv[0]); return -1; }  if (argc > 2) df = atof(argv[2]);  if (df <= 0) {                /* get the degrees of freedom */    printf("%s: invalid degrees of freedom\n", argv[0]); return -1; }  printf("chi^2: F(%.16g;%.16g) = %.16g\n",         chi2qtlP(prob, df), df, prob);  printf("   1 - F(%.16g;%.16g) = %.16g\n",         chi2qtlQ(prob, df), df, prob);  return 0;                     /* compute and print quantile */}  /* main() */#endif

⌨️ 快捷键说明

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