伽玛函数(Gamma函数)C++实现

前几天做项目中的一个算法,需要用到贝塞尔函数(半整阶,复数域),网上的代码一般都要收费,索性自己撸了一个,其中涉及伽马函数值求取,下面是我的思路与实现,供大家免费使用。

第一步:首先介绍一下Gamma函数。

(1)在实数域上伽玛函数定义为:

(2)在复数域上伽玛函数定义为:

上述两个定义在百度百科上可以查到。

第二步:设计思路简介

本实现的设计思路如下:

当时,Gamma函数为采用下列极限求值:

x> 1时,Gamma函数为采用 递推至 。

x=1时, 。

当时,Gamma函数为采用 递推至 。

 

第三步:实现Gamma函数。

#include 

//伽马函数(辅助函数,用于求解贝塞尔函数,任意阶数)
//x 变量值
//setAbsRelaErr 相对误差绝对值
double gamma(const double x, const double setAbsRelaErr){
	//初始条件判断
	if (abs(1.0 - x) < 0.00001) {
		return 1.0;
	}else if (abs(x - 0.5) < 0.00001) {
		return sqrt(3.1415926);
	}

    //递归求取伽马函数值
	if (x > 1.0){
		return (x-1)*gamma(x - 1, setAbsRelaErr);
	}else if (x < 0.0) {
		return gamma(x + 1, setAbsRelaErr)/ x ;
	}

	double res = 0.0;
	double temp = 1.0;
	double check = 0.0;
	int i = 1;
	while (abs((check - temp)/ temp)> setAbsRelaErr)
	{
		check = temp;
		temp *= i / (x - 1 + i);
		i++;
	}
	res = temp * pow(i, x - 1);

	return res;
}

第四步:验证

伽玛函数(Gamma函数)C++实现_第1张图片

提示:cmath里面提供了 double tgamma(double)函数直接求取伽玛函数值(我也是做着做着了解到的,哎,知识面太窄了)

你可能感兴趣的:(分析基础)