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

📄 utils.c

📁 latent dirichlet allocation的C实现代码
💻 C
字号:
#include "utils.h"/* * given log(a) and log(b), return log(a + b) * */double log_sum(double log_a, double log_b){  double v;  if (log_a < log_b)  {      v = log_b+log(1 + exp(log_a-log_b));  }  else  {      v = log_a+log(1 + exp(log_b-log_a));  }  return(v);} /**   * Proc to calculate the value of the trigamma, the second   * derivative of the loggamma function. Accepts positive matrices.   * From Abromowitz and Stegun.  Uses formulas 6.4.11 and 6.4.12 with   * recurrence formula 6.4.6.  Each requires workspace at least 5   * times the size of X.   *   **/double trigamma(double x){    double p;    int i;    x=x+6;    p=1/(x*x);    p=(((((0.075757575757576*p-0.033333333333333)*p+0.0238095238095238)         *p-0.033333333333333)*p+0.166666666666667)*p+1)/x+0.5*p;    for (i=0; i<6 ;i++)    {        x=x-1;        p=1/(x*x)+p;    }    return(p);}/* * taylor approximation of first derivative of the log gamma function * */double digamma(double x){    double p;    x=x+6;    p=1/(x*x);    p=(((0.004166666666667*p-0.003968253986254)*p+	0.008333333333333)*p-0.083333333333333)*p;    p=p+log(x)-0.5/x-1/(x-1)-1/(x-2)-1/(x-3)-1/(x-4)-1/(x-5)-1/(x-6);    return p;}double log_gamma(double x){     double z=1/(x*x);    x=x+6;    z=(((-0.000595238095238*z+0.000793650793651)	*z-0.002777777777778)*z+0.083333333333333)/x;    z=(x-0.5)*log(x)-x+0.918938533204673+z-log(x-1)-	log(x-2)-log(x-3)-log(x-4)-log(x-5)-log(x-6);    return z;}/* * make directory * */void make_directory(char* name){    mkdir(name, S_IRUSR|S_IWUSR|S_IXUSR);}/* * argmax * */int argmax(double* x, int n){    int i;    double max = x[0];    int argmax = 0;    for (i = 1; i < n; i++)    {        if (x[i] > max)        {            max = x[i];            argmax = i;        }    }    return(argmax);}

⌨️ 快捷键说明

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