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

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

相关文章

Pandas中统计汇总可视化函数plot()的使用

《Pandas中统计汇总可视化函数plot()的使用》Pandas提供了许多强大的数据处理和分析功能,其中plot()函数就是其可视化功能的一个重要组成部分,本文主要介绍了Pandas中统计汇总可视化... 目录一、plot()函数简介二、plot()函数的基本用法三、plot()函数的参数详解四、使用pl

Python的time模块一些常用功能(各种与时间相关的函数)

《Python的time模块一些常用功能(各种与时间相关的函数)》Python的time模块提供了各种与时间相关的函数,包括获取当前时间、处理时间间隔、执行时间测量等,:本文主要介绍Python的... 目录1. 获取当前时间2. 时间格式化3. 延时执行4. 时间戳运算5. 计算代码执行时间6. 转换为指

Python正则表达式语法及re模块中的常用函数详解

《Python正则表达式语法及re模块中的常用函数详解》这篇文章主要给大家介绍了关于Python正则表达式语法及re模块中常用函数的相关资料,正则表达式是一种强大的字符串处理工具,可以用于匹配、切分、... 目录概念、作用和步骤语法re模块中的常用函数总结 概念、作用和步骤概念: 本身也是一个字符串,其中

shell编程之函数与数组的使用详解

《shell编程之函数与数组的使用详解》:本文主要介绍shell编程之函数与数组的使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录shell函数函数的用法俩个数求和系统资源监控并报警函数函数变量的作用范围函数的参数递归函数shell数组获取数组的长度读取某下的

MySQL高级查询之JOIN、子查询、窗口函数实际案例

《MySQL高级查询之JOIN、子查询、窗口函数实际案例》:本文主要介绍MySQL高级查询之JOIN、子查询、窗口函数实际案例的相关资料,JOIN用于多表关联查询,子查询用于数据筛选和过滤,窗口函... 目录前言1. JOIN(连接查询)1.1 内连接(INNER JOIN)1.2 左连接(LEFT JOI

MySQL中FIND_IN_SET函数与INSTR函数用法解析

《MySQL中FIND_IN_SET函数与INSTR函数用法解析》:本文主要介绍MySQL中FIND_IN_SET函数与INSTR函数用法解析,本文通过实例代码给大家介绍的非常详细,感兴趣的朋友一... 目录一、功能定义与语法1、FIND_IN_SET函数2、INSTR函数二、本质区别对比三、实际场景案例分

C++ Sort函数使用场景分析

《C++Sort函数使用场景分析》sort函数是algorithm库下的一个函数,sort函数是不稳定的,即大小相同的元素在排序后相对顺序可能发生改变,如果某些场景需要保持相同元素间的相对顺序,可使... 目录C++ Sort函数详解一、sort函数调用的两种方式二、sort函数使用场景三、sort函数排序

C语言函数递归实际应用举例详解

《C语言函数递归实际应用举例详解》程序调用自身的编程技巧称为递归,递归做为一种算法在程序设计语言中广泛应用,:本文主要介绍C语言函数递归实际应用举例的相关资料,文中通过代码介绍的非常详细,需要的朋... 目录前言一、递归的概念与思想二、递归的限制条件 三、递归的实际应用举例(一)求 n 的阶乘(二)顺序打印

C/C++错误信息处理的常见方法及函数

《C/C++错误信息处理的常见方法及函数》C/C++是两种广泛使用的编程语言,特别是在系统编程、嵌入式开发以及高性能计算领域,:本文主要介绍C/C++错误信息处理的常见方法及函数,文中通过代码介绍... 目录前言1. errno 和 perror()示例:2. strerror()示例:3. perror(

Kotlin 作用域函数apply、let、run、with、also使用指南

《Kotlin作用域函数apply、let、run、with、also使用指南》在Kotlin开发中,作用域函数(ScopeFunctions)是一组能让代码更简洁、更函数式的高阶函数,本文将... 目录一、引言:为什么需要作用域函数?二、作用域函China编程数详解1. apply:对象配置的 “流式构建器”最