Logo

郎哥编程

数学库

2021-01-06 144

若要编写数学方面的程序,或在程序中使用到数学运算,可以使用Python提供的数学函数模块,数学函数库包括数论与表示函数、幂函数与对数函数、三角函数、角度转换、双曲函数、其它特殊函数。

数学常量

数学函数被封装到math模块,在程序中使用数学函数需要导入math模块,math模块内还定义了数学运算经常使用的常量。

math模块定义的常量如下表所示:

35.PNG

注释(1)

math.inf表示一个正无穷大的浮点数。其它数值与math.inf进行简单的加减运算,结果还是math.inf,若用0去乘math.inf会得到NaN值,表示不是一个数字。若用其它数值除以math.inf,结果是0。若用其它数值与math.inf进行大小比较,其它数值会永远小于math.inf。

案例代码:

>>> import math
>>> 1+math.inf
inf
>>> 1000 / math.inf
0.0
>>> 0 * math.inf
nan
>>> 1000000 < math.inf
True
>>>

注释(2)

math.nan表示非数字的浮点数,相当于NaN值,英文全称是全称是Not a Number,意思是不是一个数字,用来表示没有定义或不可表示的数值。

例如:当两个无穷大数进行运算时,就会产生NaN结果。

案例代码:

>>> import math
>>> math.inf/(-math.inf)
Nan

数论与表示函数

数论可以理解为算术运算,主要是研究整数的性质及其运算。math模块提供了基本的整数运算函数及表示函数。

基本的整数运算函数如下表所示:

表中的x为整数或浮点数

36.PNG

注释(1)

函数声明:

comb(n, k)

函数返回从n项中选取k个不重复项的组合数。当 k <= n 时取值为 n! / (k! * (n - k)!);当 k > n 时取值为零。

组合数是从n个不同元素中取出 k个不同元素,不管其顺序合成一组,称为从 n 个元素中不重复地选取k个元素的一个组合。所有这样的组合的种数称为组合数。

案例代码:

>>> import math
>>>从10个不同元素取出3个不同元素的组合数
>>> math.comb(10,3)
120
>>>

注释(2)

函数声明:

factorial(x)

返回x的阶乘,x为整数。若x不是整数或为负数时则将引发 ValueError异常。

案例代码:

>>> import math
>>> # 计算6的阶乘
>>> math.factorial(6)
720
>>> # 计算10的阶乘
>>> math.factorial(10)
3628800
>>>

注释(3)

函数声明:

frexp(x)

函数返回一个二元组(m,e), m 是一个浮点数,e 是一个整数。x的值正好是x == m * 2**e。若x 为零,则返回 (0.0, 0)。

案例代码:

>>> import math
>>> math.frexp(30)
(0.9375, 5)
>>> math.frexp(8)
(0.5, 4)
>>>

注释(4)

函数声明:

fsum(iterable)

返回可迭代对象中所有元素的和,通该函数通过跟踪多个中间部分和来避免精度损失。

案例代码:

>>> import math
>>> sum([0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1])
0.9999999999999999
>>> math.fsum([0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1])
1.0

从程序执行结果看出,fsum()函数的精度比内置函数sum()的精度要高。

注释(5)

函数声明:

isclose(a, b, *, rel_tol=1e-09, abs_tol=0.0)

该函数比较两个数的接近程度,若 a 和 b 的值比较接近则返回 True,否则返回 False。

接近程序按下式计算:

abs(a-b) <= max(rel_tol * max(abs(a), abs(b)), abs_tol) 。

参数rel_tol是a和b的相对容差,它是 a 和 b 之间允许的最大差值,默认值是1e-09(科学计数法,表示1乘10的负9次方),确保两个值在大约9位十进制数字内相同,rel_tol 必须大于零。例如:要设置a和b最大差值为5%,可以设置rel_tol的值为0.05。

参数abs_tol是a和b的最小绝对容差,abs_tol的值必须至少为0,默认值为0.

案例代码:

>>> import math
>>> math.isclose(19.109806,19.1098067)
False
>>> math.isclose(19.109806,19.1098067,rel_tol=0.00001)
True
>>>

注释(6)

函数声明:

perm(n, k=None)

返回从n中选择k项的排列数。排列数是从n个不同元素中取出k(k≤n)个元素,按照一定的顺序排成一列,叫做从n个元素中取出k个元素的一个排列(permutation),所有这样的排列的种数称为排列数。

当 k <= n 时取值为 n! / (n - k)!;当 k > n 时取值为零。

如果 k 未指定或为 None,则 k 默认值为 n 并且函数将返回 n!。

案例代码:

>>> import math
>>> #计算从10个不同元素取出3个不同元素的排列数
>>> math.perm(10,3)
720
>>> #计算从10个不同元素取出10个不同元素的排列数
>>> math.perm(10)
3628800
>>>

注释(7)

函数声明:

remainder(x, y)

返回IEEE 754 风格的x 相对于 y 的余数,该余数为x-n*y,其中n是与商 x / y 的精确值最接近的整数。

若 x / y的商恰好位于两个连续整数之间,则最接近商的偶数用于 n 。

案例代码:

>>> import math
>>> math.remainder(17,3)
-1.0
>>> math.remainder(20,2)
0.0
>>> math.remainder(19,9)
1.0
>>>

remainder(17,3)返回的结果是-1.0,函数内部的计算公式为:

x-n*y

其中n为17/3的商,17/3的商约是5.6,介于整数5和6之间,根据函数的运算规则取n为6。

17-6*3=-1

幂函数与对数函数

幂函数与对数函数用于进行幂运算和对数运算。

幂运算与对数运算的函数如下表所示:

表中的x为整数或浮点数

37.PNG

注释(1)

函数声明:

log1p(x)

返回1+x的自然对数(底为e),即log(1+x)。如果参数的值小于 -1, 则返回 NaN。

案例代码:

>>> import math
>>> math.log1p(1e-5)
9.99995000033333e-06
>>> math.log1p(1.0)
0.6931471805599453
>>> math.log1p(0)
0.0

三角函数

三角函数提供了对三角函数运算的支持。

Python提供的三角函数如下表所示:

38.PNG

注释(1)

函数声明:

atan2(y, x)

返回y与x商的反正切值,单位是弧度。返回结果在-pi 和 pi 之间,即原点至点(x,y)的方位角,即与 x 轴的夹角。

参数y表示Y轴坐标的浮点值,参数x表示X轴坐标的浮点值,它可以计算角度的正确象限。 例如:atan(1) 和 atan2(1, 1) 都是 pi/4 ,但 atan2(-1, -1) 是 -3*pi/4 。

案例代码:

>>> import math
>>> math.atan2(1,1)
0.7853981633974483
>>> math.atan2(-1,-1)
-2.356194490192345
>>>

注释(2)

函数声明:

dist(p, q)

返回数学坐标系中 p与q 两点之间的欧几里得距离,两个点必须具有相同的维度。

参数p和q表示数学坐标系中的两个点,每个点为一个可迭代对象,可迭代对象的元素为点的坐标。

例如:在二维数学坐标系中,有两个点p(1,0)和q(2,1),p和q两点间的距离可以用下面的Python代码求出:

>>> import math
>>> p = (1,0)
>>> q = (2,1)
>>> math.dist(p,q)
1.4142135623730951
>>>

注释(3)

函数声明:

hypot(*coordinates)

返回欧几里得范数,也称为L^2范数。可以简单理解为向量的模长就是范数,它表示从原点出发到向量确定的点的欧几里得距离。

假设向量V为:

39.png

则向量V的L^2范数为:

40.png

参数coordinates是可迭代对象,对象内的元素是向量的分量,也就是数学坐标系中点的坐标。例如在二维数学坐标系中,向量有两个分量,分别是x和y,在三维数学坐标系中,向量有三个分量,分别是x、y和z。

案例代码:

>>> import math
>>> math.hypot(2,1,0)
2.23606797749979
>>>

案例代码返回了在三维数学坐标系中向量(2,1,0)的模长。

代码在线纠错(通义千问 qwen-max)

支持粘贴多个代码文件,提交后由阿里云通义千问自动分析代码漏洞、语法错误、逻辑问题并给出修改建议。
您已解锁 AI 代码纠错功能,可正常使用!

评论区

登录 后发表评论
暂无评论