使用Python和SymPy推导斯特林公式
引言
斯特林公式(Stirling’s Approximation)是一种用来近似计算阶乘的数学公式。它是数学分析中非常重要的近似公式之一,尤其在概率论、统计学、物理学等领域中广泛应用。本文将使用 Python 中的数学符号计算库 SymPy 推导斯特林公式,帮助大家更好地理解它的推导过程。
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推导斯特林公式的更多相关文章
- python基础——列表推导式
python基础--列表推导式 1 列表推导式定义 列表推导式能非常简洁的构造一个新列表:只用一条简洁的表达式即可对得到的元素进行转换变形 2 列表推导式语法 基本格式如下: [expr for va ...
- Python生成器、推导式之前襟后裾
生成器 函数体内有yield选项的就是生成器,生成器的本质是迭代器,由于函数结构和生成器结构类似,可以通过调用来判断是函数还是生成器,如下: def fun(): yield "我是生成器& ...
- python的各种推导式
python的各种推导式(列表推导式.字典推导式.集合推导式) 推导式comprehensions(又称解析式),是Python的一种独有特性.推导式是可以从一个数据序列构建另一个新的数据序列的结构体 ...
- Python算法:推导、递归和规约
Python算法:推导.递归和规约 注:本节中我给定下面三个重要词汇的中文翻译分别是:Induction(推导).Recursion(递归)和Reduction(规约) 本节主要介绍算法设计的三个核心 ...
- Python基础-列表推导式
python中列表推导式有三种数据类型可用:列表,字典,集合 列表推导式书写形式: [表达式 for 变量 in 列表] 或者 [表达式 for 变量 in 列表 if 条件] 1,列表推导式 ...
- python 3列表推导式的的一点理解!
python 3列表推导式的的一点理解! Python的列表推导式对于新手来说一般都难以理解,简单看个例子: [x * x for x in range(1,100)] 上面是一个很简单的列表推导式, ...
- Python 入门之 推导式
Python 入门之 推导式 推导式就是构建比较有规律的列表,生成器,字典等一种简便的方式 1.推导式 (1)列表推导式 : <1> 普通循环: [变量 for循环] print([i f ...
- 『无为则无心』Python序列 — 24、Python序列的推导式
目录 1.列表推导式 (1)快速体验 (2)带if的列表推导式 (3)多个for循环实现列表推导式 2.字典推导式 (1)创建一个字典 (2)将两个列表合并为一个字典 (3)提取字典中目标数据 3.集 ...
- Python的列表推导式
1.列表推导式书写形式: [表达式 for 变量 in 列表] 或者 [表达式 for 变量 in 列表 if 条件] 2.举例说明: #!/usr/bin/python # -*- codi ...
- python的各种推导式(列表推导式、字典推导式、集合推导式)
推导式comprehensions(又称解析式),是Python的一种独有特性.推导式是可以从一个数据序列构建另一个新的数据序列的结构体. 共有三种推导,在Python2和3中都有支持: 列表(lis ...
随机推荐
- w3cschool-Hibernate 教程
什么是 ORM? ORM 表示 Object-Relational Mapping (ORM),是一个方便在关系数据库和类似于 Java, C# 等面向对象的编程语言中转换数据的技术.一个 ORM 系 ...
- ABC224
ABC224 D 题目大意 有一个九个点的无向图棋盘,上面有八个棋子,一次操作能将一个棋子沿边移到空点上,问将每个棋子移到与它编号相同的点最少几步. 解题思路 考虑使用 BFS. 用 string 存 ...
- IDEA测试Flink程序
一.导入项目,添加jar包 右键项目=>open module setting 选择Flink1.9的lib目录下flink-dist_2.11-1.9.2.jar包(对应运行版本) 保存即可. ...
- 在线客服的独立产品之路:如何将复杂的 .NET 系统打包到 Docker 镜像,使之能一键上线
我在业余时间开发了一款自己的独立产品:升讯威在线客服与营销系统.陆陆续续开发了几年,从一开始的偶有用户尝试,到如今线上环境和私有化部署均有了越来越多的稳定用户,在这个过程中,我也积累了不少如何开发运营 ...
- P4774 [NOI2018] 屠龙勇士 题解
传送门 题解 思路 由题目可知,一条龙被攻击 \(x\) 次并回复若干次后生命值恰好为 \(0\) 则死亡,可以得出如下式子: \[\large ATK_i \cdot x \equiv a_i(\m ...
- 从 14 秒到 1 秒:MySQL DDL 性能优化实战
1. 问题背景 MySQL版本:8.0.30 测试表数据量:200万 在 MySQL 中,研发人员最初执行了以下 SQL 语句,向表 t_email 中添加了一个允许为 NULL 的列 id3,并设置 ...
- C51基础知识总览
- 【Spring Boot】我的第一个Spring Boot练习
背景 Spring 在 Java 生态的企业级开发项目中极其常用,通常我们为项目引入一项新技术时,不得不考虑如何将新技术与 Spring 整合在一起. 我们知道,预研一项新技术,我们基于 MVP(最简 ...
- 异步导入导出Excel方案
一.异步导出Excel文件 1.设计思想 用户无需在当前页面等待导出结果,点击导出按钮后服务端即可返回前端提示用户导出处理中请到下载中心查看结果. 具体业务文件导出实现由后台异步处理导出文件到腾讯CO ...
- php的token管理类(AI生成)
当然,以下是一个简单的 PHP 类,用于生成和管理令牌(token).这个类可以生成一个随机的令牌.验证令牌是否有效,并允许设置一个令牌的过期时间. <?php class Token { pr ...