Java实现伽马函数gamma()

实习的项目里遇到了第一类贝塞尔函数,C++里有直接的贝塞尔函数可以使用,但是是实数域的而且仅C++17支持。项目里是要用到复数域的半整阶的第一类贝塞尔函数和第二类汉克尔函数,所以就直接根据原始定义实现了半整阶的第一类贝塞尔函数。贝塞尔函数定义公式可以用伽马函数求解,就顺便把伽马函数也实现了。写完了发现C++的cmath里有现成的伽马函数tgamma()有float、double、long double三种形式。
在这里插入图片描述

思路分析

几个特殊的伽马函数值
Γ(0) = 1
Γ(1) = 1
Γ(1/2) = √π
将这些特殊值作为递归结束的条件。
在x > 1时,使用递推公式Γ(x + 1) = x * Γ(x)推至0 < x < 1
在x < 0时,使用递推公式Γ(x) = Γ(x + 1) / x推至0 < x < 1
在(0,1)区间内的伽马值若无法递推到特殊值,则使用伽马函数原始定义公式实现。
在这里插入图片描述
注*:因为程序在计算时,会损失精度,导致计算的结果不精确。故在运行时设置setAbsRelaErr=0.00001相对误差绝对值来保护精度。

递归实现伽马函数
public static double gamma(double x, double setAbsRelaErr) {
   
	//setAbsRelaErr 相对误差绝对值
	//递归结束条件
	if(x < 0) {
   
		return gamma(x + 1, setAbsRelaErr) / x;
	}
	
  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值