伽马函数:将阶乘函数扩展到正整数之外

2023-10-23 10:28

本文主要是介绍伽马函数:将阶乘函数扩展到正整数之外,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、说明

        ,是对阶乘这种运算的实数域拓展。属于高级的数学模型,在高级概率模型用于定义分布函数。本文将介绍这个函数的基础概念和属性。

二、gamma函数定义

        众所周知,阶乘这个运算本来是用于简化形如 n(n−1)(n−2)…3×2×1 的乘积的,但是经过几百年的发展,这个运算拓展到了复数域的,并拥有了新的名字——Gamma函数

        Gamma函数有很多定义,其中我们今天就来尝试从它的积分定义中推出其它定义:

三、Gamma函数与阶乘的关系

        倘若我们对这个函数分部积分,我们可以得到Gamma函数之间的关系:

        如果我们令z=1,则

        结合第一个结论,对于 z\in \mathbb{R}_{+}  ,存在:

于是我们得到Gamma函数与阶乘的联系 Γ(n)=(n−1)!


      

四、证明伽玛函数是阶乘的扩展

        为了做到这一点,我们需要证明方程 Γ(n) = (n - 1)!对于定义阶乘函数的所有 n 的正整数都成立。由于不可能检查每个值,我们可以利用数学归纳原理一次检查所有值。

        归纳证明的第一步是建立我们希望证明的命题:

        现在,我们需要证明我们的基本情况成立,即当 n = 1 时。将其代入 gamma 函数的表达式中并计算:

        因此,基本情况 P(1) 为真。

        归纳证明的下一步是归纳步骤,我们希望证明如果 P(k) 对某个正整数 k 成立,那么 P(+ 1) 也成立。为此,我们可以首先假设 P(k): Γ(k) = (k - 1)!是真的。考虑到这一点,我们可以尝试求解 Γ(k +1):

        这个积分要求我们通过让u = t^kdv = exp(-tdt来使用部分积分。这给出了以下内容:

        在倒数第二行中,我使用了我们的假设,即该命题适用于 P(k)。因此,我们刚刚证明,如果 P(k) 成立,那么 P(+ 1) 也会成立,并且由于我们的基本情况 P(1) 为真,根据数学归纳原理,任何正整数 n 的 P(n) 都必须为真。这表明,在正整数上,gamma 函数的行为确实与阶乘函数完全相同,如果我们考虑正整数以外的其他值,则可以证明它是阶乘的扩展。事实上,我们可以尝试使用 gamma 函数来尝试评估阶乘,例如 (1/2)!正如我将在下一节中介绍的那样。

五、计算(1/2)!

        现在,在继续之前,重要的是要清楚,我们现在使用阶乘的 gamma 函数定义来评估这一点,因为原始定义没有很好地定义非整数值,例如 1/2。考虑到这一点,我们可以将 3/2 代入 gamma 函数来计算 1/2 的阶乘:

        在第三步中,我利用了我们在归纳证明中展示的 Γ(k+1) = k Γ(k) 的事实。现在,右边的积分一开始肯定不明显,但我们可以通过使用 x = t^(1/2) 的代入将其转换为更熟悉的积分,得到 t = x² 和 dt = 2 t^(1/2)dx。将这两者代入,我们得到以下结果:

        最后一个积分是著名的积分的形式,称为高斯积分,可以通过将积分转换为极坐标中的双积分来解决。如果您不熟悉这一点,我在这篇文章中介绍了解决高斯积分的方法,所以我建议您检查一下。现在,由于从 -∞ 到 ∞ 的这个积分的解是π的平方根,因此从 0 到 ∞ 的积分必须是这个积分的一半,因为它是一个偶数函数。因此,我们可以得出以下结论:

        由于π在解决方案中,这当然是一个有趣且意想不到的结果。但是,重要的是要认识到这不是我们通常定义的阶乘,并且这仅在我们使用了扩展的伽马函数定义时才有效。此外,虽然我只研究了这个非整数有理数的例子,但 gamma 函数也是在所有复数值上定义的,其实部大于 0。事实上,我们实际上也可以使用一种称为复分析延续的技术,将域扩展到具有非正实部的(大多数)复数。如果您对这些进一步的扩展感到好奇,我绝对建议您在线对其进行进一步研究。感谢您的阅读。

六、gamma函数的python作图

########################
# f(x) = exp(-x) graph #
########################
import matplotlib.pyplot as plt
import numpy as np
# Create x and y
x = np.linspace(-2, 20, 100)
y = np.exp(-x)
# Create the plot
fig, ax = plt.subplots()
plt.plot(x, y, label='f(x) = exp(-x)', linewidth=3, color='palegreen')
# Make the x=0, y=0 thicker
ax.set_aspect('equal')
ax.grid(True, which='both')
ax.axhline(y=0, color='k')
ax.axvline(x=0, color='k')
# Add a title
plt.title('f(x) = exp(-x)', fontsize=20)
# Add X and y Label
plt.xlabel('x', fontsize=16)
plt.ylabel('f(x)', fontsize=16)
# Add a grid
plt.grid(alpha=.4, linestyle='--')
# Show the plot
plt.show()
####################
# f(x) = x^z graph #
####################
import matplotlib.pyplot as plt
import numpy as np
# Create x and y
x = np.linspace(0, 2, 100)
y1 = x**1.3
y2 = x**2.5 
y3 = x**3.8
# Create the plot
fig, ax = plt.subplots()
plt.plot(x, y1, label='f(x) = x^1.3', linewidth=3, color='palegreen')
plt.plot(x, y2, label='f(x) = x^2.5', linewidth=3, color='yellowgreen')
plt.plot(x, y3, label='f(x) = x^3.8', linewidth=3, color='olivedrab')
# Make the x=0, y=0 thicker
ax.set_aspect('equal')
ax.grid(True, which='both')
ax.axhline(y=0, color='k')
ax.axvline(x=0, color='k')
# Add a title
plt.title('f(x) = x^z', fontsize=20)
# Add X and y Label
plt.xlabel('x', fontsize=16)
plt.ylabel('f(x)', fontsize=16)
# Add a grid
plt.grid(alpha=.4, linestyle='--')
# Add a Legend
plt.legend(bbox_to_anchor=(1, 1), loc='best', borderaxespad=1, fontsize=12)
# Show the plot
plt.show()
###############################
# f(x) = x^(3.8)*e^(-x) graph #
###############################
import matplotlib.pyplot as plt
import numpy as np
# Create x and y
x = np.linspace(0, 20, 100)
y = x**3.8 * np.exp(-x)
# Create the plot
fig, ax = plt.subplots()
plt.plot(x, y, label='f(x) = x^(3.8) * np.exp(-x)', linewidth=3, color='palegreen')
ax.fill_between(x, 0, y, color='yellowgreen')
# Make the x=0, y=0 thicker
ax.set_aspect('equal')
ax.grid(True, which='both')
ax.axhline(y=0, color='k')
ax.axvline(x=0, color='k')
# Add a title
plt.title('f(x) =  x^(3.8)*e^(-x) ', fontsize=20)
# Add X and y Label
plt.xlabel('x', fontsize=16)
plt.ylabel('f(x)' ,fontsize=16)
# Add a grid
plt.grid(alpha=.4, linestyle='--')
# Add a Legend
plt.legend(bbox_to_anchor=(1, 1), loc='upper right', borderaxespad=1, fontsize=12)
# Show the plot
plt.show()

结果如下:

这篇关于伽马函数:将阶乘函数扩展到正整数之外的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/267246

相关文章

C++统计函数执行时间的最佳实践

《C++统计函数执行时间的最佳实践》在软件开发过程中,性能分析是优化程序的重要环节,了解函数的执行时间分布对于识别性能瓶颈至关重要,本文将分享一个C++函数执行时间统计工具,希望对大家有所帮助... 目录前言工具特性核心设计1. 数据结构设计2. 单例模式管理器3. RAII自动计时使用方法基本用法高级用法

GO语言中函数命名返回值的使用

《GO语言中函数命名返回值的使用》在Go语言中,函数可以为其返回值指定名称,这被称为命名返回值或命名返回参数,这种特性可以使代码更清晰,特别是在返回多个值时,感兴趣的可以了解一下... 目录基本语法函数命名返回特点代码示例命名特点基本语法func functionName(parameters) (nam

Python Counter 函数使用案例

《PythonCounter函数使用案例》Counter是collections模块中的一个类,专门用于对可迭代对象中的元素进行计数,接下来通过本文给大家介绍PythonCounter函数使用案例... 目录一、Counter函数概述二、基本使用案例(一)列表元素计数(二)字符串字符计数(三)元组计数三、C

Python中的filter() 函数的工作原理及应用技巧

《Python中的filter()函数的工作原理及应用技巧》Python的filter()函数用于筛选序列元素,返回迭代器,适合函数式编程,相比列表推导式,内存更优,尤其适用于大数据集,结合lamb... 目录前言一、基本概念基本语法二、使用方式1. 使用 lambda 函数2. 使用普通函数3. 使用 N

MySQL中REPLACE函数与语句举例详解

《MySQL中REPLACE函数与语句举例详解》在MySQL中REPLACE函数是一个用于处理字符串的强大工具,它的主要功能是替换字符串中的某些子字符串,:本文主要介绍MySQL中REPLACE函... 目录一、REPLACE()函数语法:参数说明:功能说明:示例:二、REPLACE INTO语句语法:参数

python中update()函数的用法和一些例子

《python中update()函数的用法和一些例子》update()方法是字典对象的方法,用于将一个字典中的键值对更新到另一个字典中,:本文主要介绍python中update()函数的用法和一些... 目录前言用法注意事项示例示例 1: 使用另一个字典来更新示例 2: 使用可迭代对象来更新示例 3: 使用

Python lambda函数(匿名函数)、参数类型与递归全解析

《Pythonlambda函数(匿名函数)、参数类型与递归全解析》本文详解Python中lambda匿名函数、灵活参数类型和递归函数三大进阶特性,分别介绍其定义、应用场景及注意事项,助力编写简洁高效... 目录一、lambda 匿名函数:简洁的单行函数1. lambda 的定义与基本用法2. lambda

Python 函数详解:从基础语法到高级使用技巧

《Python函数详解:从基础语法到高级使用技巧》本文基于实例代码,全面讲解Python函数的定义、参数传递、变量作用域及类型标注等知识点,帮助初学者快速掌握函数的使用技巧,感兴趣的朋友跟随小编一起... 目录一、函数的基本概念与作用二、函数的定义与调用1. 无参函数2. 带参函数3. 带返回值的函数4.

MySQL中DATE_FORMAT时间函数的使用小结

《MySQL中DATE_FORMAT时间函数的使用小结》本文主要介绍了MySQL中DATE_FORMAT时间函数的使用小结,用于格式化日期/时间字段,可提取年月、统计月份数据、精确到天,对大家的学习或... 目录前言DATE_FORMAT时间函数总结前言mysql可以使用DATE_FORMAT获取日期字段

Django中的函数视图和类视图以及路由的定义方式

《Django中的函数视图和类视图以及路由的定义方式》Django视图分函数视图和类视图,前者用函数处理请求,后者继承View类定义方法,路由使用path()、re_path()或url(),通过in... 目录函数视图类视图路由总路由函数视图的路由类视图定义路由总结Django允许接收的请求方法http