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

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

相关文章

【操作系统】信号Signal超详解|捕捉函数

🔥博客主页: 我要成为C++领域大神🎥系列专栏:【C++核心编程】 【计算机网络】 【Linux编程】 【操作系统】 ❤️感谢大家点赞👍收藏⭐评论✍️ 本博客致力于知识分享,与更多的人进行学习交流 ​ 如何触发信号 信号是Linux下的经典技术,一般操作系统利用信号杀死违规进程,典型进程干预手段,信号除了杀死进程外也可以挂起进程 kill -l 查看系统支持的信号

java中查看函数运行时间和cpu运行时间

android开发调查性能问题中有一个现象,函数的运行时间远低于cpu执行时间,因为函数运行期间线程可能包含等待操作。native层可以查看实际的cpu执行时间和函数执行时间。在java中如何实现? 借助AI得到了答案 import java.lang.management.ManagementFactory;import java.lang.management.Threa

iptables(7)扩展模块state

简介         前面文章我们已经介绍了一些扩展模块,如iprange、string、time、connlimit、limit,还有扩展匹配条件如--tcp-flags、icmp。这篇文章我们介绍state扩展模块  state          在 iptables 的上下文中,--state 选项并不是直接关联于一个扩展模块,而是与 iptables 的 state 匹配机制相关,特

SQL Server中,isnull()函数以及null的用法

SQL Serve中的isnull()函数:          isnull(value1,value2)         1、value1与value2的数据类型必须一致。         2、如果value1的值不为null,结果返回value1。         3、如果value1为null,结果返回vaule2的值。vaule2是你设定的值。        如

tf.split()函数解析

API原型(TensorFlow 1.8.0): tf.split(     value,     num_or_size_splits,     axis=0,     num=None,     name='split' ) 这个函数是用来切割张量的。输入切割的张量和参数,返回切割的结果。  value传入的就是需要切割的张量。  这个函数有两种切割的方式: 以三个维度的张量为例,比如说一

神经网络第三篇:输出层及softmax函数

在上一篇专题中,我们以三层神经网络的实现为例,介绍了如何利用Python和Numpy编程实现神经网络的计算。其中,中间(隐藏)层和输出层的激活函数分别选择了 sigmoid函数和恒等函数。此刻,我们心中不难发问:为什么要花一个专题来介绍输出层及其激活函数?它和中间层又有什么区别?softmax函数何来何去?下面我们带着这些疑问进入本专题的知识点: 1 输出层概述 2 回归问题及恒等函数 3

神经网络第一篇:激活函数是连接感知机和神经网络的桥梁

前面发布的文章介绍了感知机,了解了感知机可以通过叠加层表示复杂的函数。遗憾的是,设定合适的、能符合预期的输入与输出的权重,是由人工进行的。从本章开始,将进入神经网络的学习,首先介绍激活函数,因为它是连接感知机和神经网络的桥梁。如果读者认知阅读了本专题知识,相信你必有收获。 感知机数学表达式的简化 前面我们介绍了用感知机接收两个输入信号的数学表示如下:

vscode python pip : 无法将“pip”项识别为 cmdlet、函数、脚本文件或可运行程序的名称

在vscode中控制台运行python文件出现:无法将"pip”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。 使用vscode开发python,需要安装python开发扩展: 本文已经安装,我们需要找的是python安装所在目录,本文实际路径如下: 如果在本文路径中没有此目录,请尝试在C盘中搜索 python,搜索到相关python目录后,点击Python 3.9进入目录,

C语言入门系列:初识函数

文章目录 一,C语言函数与数学函数的区别1,回忆杀-初中数学2,C语言中的函数 二, 函数的声明1,函数头1.1,函数名称1.2,返回值类型1.3,参数列表 2,函数体2.1,函数体2.2,return语句 三,main函数四,函数的参数与传递方式1,实参和形参1.1,函数定义(含形参)1.2,函数调用(使用实参) 2,参数传递方式2.1,值传递2.2,引用传递 五,函数原型与预声明1,

算法9—两个巨大正整数相加

两个巨大整数相加,可能会造成溢出,或者它的大小已经超出基本数据类型的范围,所以,我们对巨大整数进行相加时,可以把它们转换成字符串,然后通过字符串的处理进行整数相加。 这里有两种做法:第一种,把整数存在一个字符数组里进行处理。代码如下: [java]  view plain copy public static String addThroughArray(String