引言

斯特林公式(Stirling’s Approximation)是一种用来近似计算阶乘的数学公式。它是数学分析中非常重要的近似公式之一,尤其在概率论、统计学、物理学等领域中广泛应用。本文将使用 Python 中的数学符号计算库 SymPy 推导斯特林公式,帮助大家更好地理解它的推导过程。

1.阶乘的定义

阶乘是一个常见的数学概念,表示一个正整数的连乘积。通常用感叹号表示,如下所示:

\[n! = n \times (n-1) \times (n-2) \times \dots \times 1
\]

例如,5! 就是 \(5 \times 4 \times 3 \times 2 \times 1 = 120\)

然而,当 n 很大时,计算阶乘变得非常困难。因此,我们需要一个近似方法来简化计算,这就是斯特林公式的作用所在。

2.斯特林公式

斯特林公式给出了 n! 的一个近似表达式。公式如下:$$n! \approx \sqrt{2 \pi n} \left(\frac{n}{e}\right)^n$$

其中:

  • n 是阶乘的数值。
  • e 是自然对数的底数(大约等于 2.71828)。
  • \(\pi\) 是圆周率。

使用 SymPy 推导斯特林公式

SymPy 是一个强大的 Python 库,可以进行符号计算(即精确计算),它可以帮助我们推导数学公式。我们通过它来推导斯特林公式,并理解每一步的过程。

# coding=utf-8
import sympy as sp
import numpy as np
import matplotlib matplotlib.use('Agg')
import matplotlib.pyplot as plt
import math # 定义变量
n = sp.symbols('n') # 定义阶乘的符号表示
factorial_n = sp.factorial(n) # 定义斯特林公式的近似表达式
stirling_approximation = sp.sqrt(2 * sp.pi * n) * (n / sp.exp(1)) ** n # 打印斯特林公式的推导
print(stirling_approximation) # 比较阶乘和打印斯特林公式
error = sp.limit(factorial_n / stirling_approximation, n, sp.oo)
print(error) n_values = np.arange(1, 50)
factorial_values = [math.factorial(n) for n in n_values] # 使用 math.factorial 计算阶乘
stirling_values = [np.sqrt(2 * np.pi * n) * (n / np.exp(1)) ** n for n in n_values] errors = np.abs(np.array(factorial_values) - np.array(stirling_values)) # 绘图
plt.plot(n_values, errors)
plt.xlabel('n')
plt.ylabel('Error')
plt.title('Error Between Factorial and Stirling\'s Approximation')
plt.savefig('stirling_error_plot.png')

输出结果

sqrt(2)*sqrt(pi)*sqrt(n)*(n*exp(-1))**n
1

总结

斯特林公式为我们提供了一个有效的计算阶乘的近似方法,尤其在 n 很大的情况下,计算阶乘变得更加高效。通过 Python 和 SymPy,我们能够轻松推导和验证斯特林公式,并能够通过图形展示其精度。

希望这篇文章能够帮助你更好地理解斯特林公式的推导过程及其应用。如果你对数学公式的推导或 Python 编程感兴趣,可以继续深入学习更多内容!

使用Python和SymPy推导斯特林公式的更多相关文章

  1. python基础——列表推导式

    python基础--列表推导式 1 列表推导式定义 列表推导式能非常简洁的构造一个新列表:只用一条简洁的表达式即可对得到的元素进行转换变形 2 列表推导式语法 基本格式如下: [expr for va ...

  2. Python生成器、推导式之前襟后裾

    生成器 函数体内有yield选项的就是生成器,生成器的本质是迭代器,由于函数结构和生成器结构类似,可以通过调用来判断是函数还是生成器,如下: def fun(): yield "我是生成器& ...

  3. python的各种推导式

    python的各种推导式(列表推导式.字典推导式.集合推导式) 推导式comprehensions(又称解析式),是Python的一种独有特性.推导式是可以从一个数据序列构建另一个新的数据序列的结构体 ...

  4. Python算法:推导、递归和规约

    Python算法:推导.递归和规约 注:本节中我给定下面三个重要词汇的中文翻译分别是:Induction(推导).Recursion(递归)和Reduction(规约) 本节主要介绍算法设计的三个核心 ...

  5. Python基础-列表推导式

    python中列表推导式有三种数据类型可用:列表,字典,集合 列表推导式书写形式: [表达式 for 变量 in 列表]    或者  [表达式 for 变量 in 列表 if 条件] 1,列表推导式 ...

  6. python 3列表推导式的的一点理解!

    python 3列表推导式的的一点理解! Python的列表推导式对于新手来说一般都难以理解,简单看个例子: [x * x for x in range(1,100)] 上面是一个很简单的列表推导式, ...

  7. Python 入门之 推导式

    Python 入门之 推导式 推导式就是构建比较有规律的列表,生成器,字典等一种简便的方式 1.推导式 (1)列表推导式 : <1> 普通循环: [变量 for循环] print([i f ...

  8. 『无为则无心』Python序列 — 24、Python序列的推导式

    目录 1.列表推导式 (1)快速体验 (2)带if的列表推导式 (3)多个for循环实现列表推导式 2.字典推导式 (1)创建一个字典 (2)将两个列表合并为一个字典 (3)提取字典中目标数据 3.集 ...

  9. Python的列表推导式

    1.列表推导式书写形式: [表达式 for 变量 in 列表]    或者  [表达式 for 变量 in 列表 if 条件] 2.举例说明: #!/usr/bin/python # -*- codi ...

  10. python的各种推导式(列表推导式、字典推导式、集合推导式)

    推导式comprehensions(又称解析式),是Python的一种独有特性.推导式是可以从一个数据序列构建另一个新的数据序列的结构体. 共有三种推导,在Python2和3中都有支持: 列表(lis ...

随机推荐

  1. JVM堆内存分析,分析工具jmap heap

    一.查看堆信息 jmap -heap 33146 Debugger attached successfully. Server compiler detected. JVM version is 25 ...

  2. SpringBoot使用Log4J2

    一.常用日志框架 Log4j:Apache的一个开源项目,可以控制日志信息输送的目的地是控制台.文件.GUI组件等,可以控制每一条日志的输出格式,这些可以通过一个配置文件来灵活地进行配置,而不需要修改 ...

  3. TV盒子常用的影视APP和直播软件分享合集

    最近自己也在倒腾机顶盒,少不了直播.影视APP,当然只会收集无广告和无会员的版本,文章介绍部分APP,链接里面我会放目前收集的合集,一直会更新. 本文资源下载: 2025.2.18号更新: 包含直播. ...

  4. Ansible - [03] Ansible ad-hoc模式

    Ansible ad-hoc是一种通过命令行批量管理的方式 格式:ansible 主机集合 -m 模块名 -a "参数" 其他参数: -k 使用密码远程.-i 指定主机列表文件 以 ...

  5. 盒马新零售基于DataWorks搭建数据中台的实践(转载自阿里云的计算平台负责人--许日花名欢伯)

    简介:大家好,我叫许日花名欢伯,在2016年盒马早期的时候,我就转到了盒马的事业部作为在线数据平台的研发负责人,现在阿里云的计算平台负责DataWorks的建模引擎团队.今天的分享内容也来源于另一位嘉 ...

  6. Flink学习(十三) Flink 常见核心概念分析

    分布式缓存熟悉 Hadoop 的你应该知道,分布式缓存最初的思想诞生于 Hadoop 框架,Hadoop 会将一些数据或者文件缓存在 HDFS 上,在分布式环境中让所有的计算节点调用同一个配置文件.在 ...

  7. ubuntu更换国内镜像源备忘

    源的路径: /etc/apt/sources.list 更换前备份一下: sudo cp /etc/apt/sources.list /etc/apt/sources_init.list 打开文档,修 ...

  8. AI时代的灵魂拷问:我们真正的核心竞争力到底是什么?

    "当所有人都在谈论AI+的时候,今天我想聊一点不一样的..." 上周,朋友看着我用Cursor在30分钟内完成了他过去需要两天才能完成的工作. 那一刻,一种强烈的危机感涌上心头,他 ...

  9. 【Matlab】基于KDtree的最近邻搜索和范围搜索

    摘要:介绍Matlab的rangesearch()函数和knnsearch()函数. rangesearch() -- 根据给定k-维数据集,返回指定距离范围内的所有数据点 knnsearch() - ...

  10. 【Python】转载一个python 爬虫的帖子

    原帖地址 原帖标题:爬取图网的4K图片自动保存本地 https://www.52pojie.cn/thread-1809600-1-1.html (出处: 吾爱破解论坛) python 代码 impo ...