计算给定数字自然对数伽玛的Python程序
在数学中, 伽玛函数 被称为是任何给定数字的阶乘的扩展。然而,由于阶乘仅对实数有定义,伽玛函数扩展到为所有复数定义阶乘,除了负整数。它由-表示
Γ(x) = (x-1)!
由于伽玛函数仅在较大数字上迅速增长,因此将对伽玛应用对数会大大减慢它。它也被称为给定数字的 自然对数伽玛 。
log(Γ(x)) = log((x-1)!)
在Python编程语言中,像一些其他编程语言一样,对数伽玛函数是使用 math.lgamma() 函数计算的。但是,在本文中我们还将看到几种其他计算数字对数伽玛的方法。
输入输出方案
让我们看一些输入输出方案,使用math.lgamma()方法找到对数伽玛函数。
假设对数伽玛函数的输入为正整数 –
输入:12
结果:17.502307845873887
假设对数伽玛函数的输入为负整数 –
输入:-12
结果:“ValueError: math domain error”
假设对数伽玛函数的输入为零 –
输入:0
结果:“ValueError: math domain error”
假设对数伽玛函数的输入为靠近零的负十进制值 –
输入:-0.2
结果:1.761497590833938
使用lgamma()方法时会出现域错误,因为该函数是为除负“整数”之外的所有复数定义的。让我们看一下找到给定数字的对数伽玛的各种方法。
使用 math.lgamma() 函数
lgamma()方法在math库中被定义,并返回给定数字的自然对数伽玛值。该方法的语法为-
math.lgamma(x)
其中x是除负整数之外的任何复数。
示例
使用math.lgamma()函数找到对数伽玛的Python示例如下 –
#导入math库
import math
#正整数的log gamma
x1 = 10
print(math.lgamma(x1))
#负复数数字的log gamma
x2 = -1.2
print(math.lgamma(x2))
#正复数数字的log gamma
x3 = 3.4
print(math.lgamma(x3))
输出
上面python代码的输出如下 –
12.801827480081467
1.5791760340399836
1.0923280598027416
使用 math.gamma() 和 math.log() 函数
在另一种方法中,可以通过先使用 math.gamma() 函数找到数字的伽玛,然后再使用 math.log() 函数对伽玛值应用对数。在这里,我们只是将lgamma()函数拆分成多个步骤。
示例
具有所述过程的Python实现如下 –
# 导入数学库
import math
#正整数的对数伽玛函数
x1 = math.gamma(10)
print(math.log(x1))
#负复数的对数伽玛函数
x2 = math.gamma(-1.2)
print(math.log(x2))
#正复数的对数伽玛函数
x3 = math.gamma(3.4)
print(math.log(x3))
输出
得到的输出为 −
12.801827480081469
1.5791760340399839
1.0923280598027414
应用对数到一个数字的阶乘
更简单的方法是找到给定数字的阶乘,因为伽玛函数被定义为复数的阶乘,并使用 math.log() 方法计算该阶乘的对数。
示例
在此python示例中,我们使用阶乘和math.log() 方法查找数字的对数伽玛函数。使用此方法的唯一缺点是它仅适用于正整数。
# 导入数学库
import math
def factorial(n):
if n == 1:
return 1
else:
return n*factorial(n-1)
#正整数的对数伽玛函数
x1 = 10
y1 = factorial(x1-1)
print(math.log(y1))
x2 = 3
y2 = factorial(x2-1)
print(math.log(y2))
#正复数的对数伽玛函数
x3 = 3.4
y3 = factorial(x3-1)
print(math.log(y3))
输出
得到的输出为 −
12.801827480081469
0.6931471805599453
RecursionError: maximum recursion depth exceeded in comparison