Python math 模块提供了许多对浮点数的数学运算函数。
Python cmath 模块包含了一些用于复数运算的函数。
cmath 模块的函数跟 math 模块函数基本一致,区别是 cmath 模块运算的是复数,math 模块运算的是数学运算。
要使用 math 或 cmath 函数必须先导入:
import math
1、math 模块
查看 math 查看包中的内容:
>>> import math
>>> dir(math)
['__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', 'acos', 'acosh', 'asin', 'asinh', 'atan', 'atan2', 'atanh', 'ceil', 'copysign', 'cos', 'cosh', 'degrees', 'e', 'erf', 'erfc', 'exp', 'expm1', 'fabs', 'factorial', 'floor', 'fmod', 'frexp', 'fsum', 'gamma', 'gcd', 'hypot', 'inf', 'isclose', 'isfinite', 'isinf', 'isnan', 'ldexp', 'lgamma', 'log', 'log10', 'log1p', 'log2', 'modf', 'nan', 'pi', 'pow', 'radians', 'sin', 'sinh', 'sqrt', 'tan', 'tanh', 'tau', 'trunc']
>>>
math模块常用函数:
pi 数字常量,圆周率
e 表示一个常量
sqrt(x) 求x的平方根
fabs(x) 返回x的绝对值
factorial(x) 取x的阶乘的值
fmod(x) 得到x/y的余数,其值是一个浮点数
pow(x, y) 返回x的y次方,即x**y
isfinite(x) 如果x是正无穷大或负无穷大,则返回True,否则返回False
isinf(x) 如果x是正无穷大或负无穷大,则返回True,否则返回False
hypot(x) 如果x是不是无穷大的数字,则返回True,否则返回False
isnan(x) 如果x不是数字,则返回True,否则返回False
ldexp(x) 返回x*(2**i)的值////
log(x, a) 返回x的自然对数,以a为基数(不写则默认以e为基数),a参数给定时,将x的对数返回给定的a,计算式为:log(x)/log(a)
log10(x) 返回x的以10为底的对数
log1p(x) 返回x+1的自然对数(基数为e)的值
log2(x) 返回x的基2对数
modf(x) 返回由x的小数部分和整数部分组成的元组
trunc(x) 返回x的整数部分
ceil(x) 取大于等于x的最小的整数值,如果x是一个整数,则返回x
floor(x) 取小于等于x的最大的整数值,如果x是一个整数,则返回自身
radians(x) 把角度x转换成弧度,与degrees 为反函数
degrees(x) 把x从弧度转换成角度
sin(x) 求x(x为弧度)的正弦值
sinh(x) 求x(x为弧度)的双曲正弦值
cos(x) 求x的余弦,x必须是弧度
tan(x) 返回x(x为弧度)的正切值
tanh(x) 返回x(x为弧度)的双曲正切值
copysign(x, y)把y的正负号加到x前面,可以使用0
exp(x) 返回math.e,也就是2.71828的x次方
expm1(x) 返回math.e的x(其值为2.71828)次方的值减1
frexp(x) 返回一个元组(m,e),其计算方式为:x分别除0.5和1,得到一个值的范围
fsum(x) 对迭代器里的每个元素进行求和操作
gcd(x) 返回x和y的最大公约数
2、cmath模块
Python 提供对于复数运算的支持,复数在 Python 中的表达式为 C==c.real+c.imag*j,复数 C 由他的实部和虚部组成。
对于复数,Python 支持它的加减乘除运算,同时提供了 cmath 模块对其他复杂运算进行支持。cmath 模块和 Python 中的 math 模块对应, math提供对于实数的支持, 在这里主要讨论 cmath 模块中的几个函数的用法。
查看 cmath 查看包中的内容
>>> import cmath
>>> dir(cmath)
['__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', 'acos', 'acosh', 'asin', 'asinh', 'atan', 'atanh', 'cos', 'cosh', 'e', 'exp', 'inf', 'infj', 'isclose', 'isfinite', 'isinf', 'isnan', 'log', 'log10', 'nan', 'nanj', 'phase', 'pi', 'polar', 'rect', 'sin', 'sinh', 'sqrt', 'tan', 'tanh', 'tau']
>>>
1).极坐标和笛卡尔坐标表示的转换。
C==c.real+c.imag*j 的复数表示方法为复数的笛卡尔表示法, cmath 模块中的 polar() 方法和 rect() 方法可以对复数进行极坐标表示和笛卡尔表示方法的转换。 例:
>>> import cmath
>>> Z=1+2j
>>> print cmath.polar(Z)
(2.23606797749979, 1.1071487177940904)
>>> a,b=cmath.polar(Z)
>>> print cmath.rect(a,b)
(1+2j)
>>>
polar 函数对一个输入的笛卡尔形势的复数进行计算,输出为一个二元组,第一个值为Z的模值, 第二个为幅度值。 rect() 函数对输入的模和幅度值进行计算输出笛卡尔表示。
如果需要单独对一个复数进行幅度值的求解,可以调用 cmath.phrase(x) 函数,返回幅度值。
2).复数的幂指数与对数函数
复数的指数函数为 cmath.exp(x), 用来求解 e^x 表达式。
cmath.log(x[,base]) 用来求以 Base 为底的 x 的对数。
cmath.log10(x) 用来求以 10 为底 x 的对数
cmath.sqrt(x) 用来求 x 的平方根。
3).复数的三角函数方程
包括所有的三角函数计算 acos(x) asin(x) atan(x) sin(x) cos(x) tan(x)。
4). 参数类判断
cmath.isinf(x) 如果x的实部或者虚部为无穷大,则返回true。
cmath.isnan(x)如果x的实部或者虚步不是数字则返回true。
5). 常量支持
cmat.pi 浮点值, 表示圆周率的大小
cmat.e 浮点值, 表示自然对数的底
3、math常用函数用法
ceil(x) 取整数值(向上取);如果x是一个整数,则返回x
>>> math.ceil(4.01)
5
>>> math.ceil(4.99)
5
>>> math.ceil(-3.99)
-3
>>> math.ceil(-3.01)
-3
copysign(x, y) 把y的正负号加到x前面。可以使用0,即copysign(1.0, -0.0)返回 -1.0
>>> math.copysign(2,3)
2.0
>>> math.copysign(2,-3)
-2.0
>>> math.copysign(3,8)
3.0
>>> math.copysign(3,-8)
-3.0
cos(x) 求x的余弦,x必须是弧度
>>> math.cos(math.pi/4) #math.pi/4 表示弧度,转换成角度为45度
0.7071067811865476
>>> math.cos(math.pi/3) #math.pi/3表示弧度,转换成角度为60度
0.5000000000000001
>>> math.cos(math.pi/6) #math.pi/6表示弧度,转换成角度为30度
0.8660254037844387
degrees(x) 把x从弧度转换成角度
>>> math.degrees(math.pi/4)
45.0
>>> math.degrees(math.pi)
180.0
>>> math.degrees(math.pi/6)
29.999999999999996
>>> math.degrees(math.pi/3)
59.99999999999999
e 表示一个常量
>>> math.e
2.718281828459045
exp(x) 返回math.e,即 2.71828的x次方
>>> math.exp(1)
2.718281828459045
>>> math.exp(2)
7.38905609893065
>>> math.exp(3)
20.085536923187668
expm1(x) 返回exp(x)-1,即 math.e 的x(其值为2.71828)次方的值减 1
>>> math.expm1(1)
1.718281828459045
>>> math.expm1(2)
6.38905609893065
>>> math.expm1(3)
19.085536923187668
fabs(x) 返回x的绝对值
>>> math.fabs(-0.003)
0.003
>>> math.fabs(-110)
110.0
>>> math.fabs(100)
100.0
factorial(x) 取x的阶乘的值 x!
>>> math.factorial(1)
1
>>> math.factorial(2)
2
>>> math.factorial(3)
6
>>> math.factorial(5)
120
>>> math.factorial(10)
3628800
floor(x) 取 ≤ x 的最大的整数值,如果x是一个整数,则返回自身
>>> math.floor(4.1)
4
>>> math.floor(4.999)
4
>>> math.floor(-4.999)
-5
>>> math.floor(-4.01)
-5
fmod(x, y) 得到x/y的余数,其值是一个浮点数
>>> math.fmod(20,3)
2.0
>>> math.fmod(20,7)
6.0
frexp(x)
#返回一个元组(m,e),其计算方式为:x分别除0.5和1,得到一个值的范围,
#2**e的值在这个范围内,e取符合要求的最大整数值,然后x/(2**e),得到m的值
#如果x等于0,则m和e的值都为0,m的绝对值的范围为(0.5,1)之间,不包括0.5和1
frexp(x)
Return the mantissa and exponent of x, as pair (m, e).
m is a float and e is an int, such that x = m * 2.**e.
If x is 0, m and e are both 0. Else 0.5 <= abs(m) < 1.0.
>>> math.frexp(10)
(0.625, 4)
>>> math.frexp(75)
(0.5859375, 7)
>>> math.frexp(-40)
(-0.625, 6)
>>> math.frexp(-100)
(-0.78125, 7)
>>> math.frexp(100)
(0.78125, 7)
fsum(iterable) 对迭代器里的每个元素进行求和操作
>>> math.fsum([1,2,3,4])
10.0
>>> math.fsum((1,2,3,4))
10.0
>>> math.fsum((-1,-2,-3,-4))
-10.0
>>> math.fsum([-1,-2,-3,-4])
-10.0
gcd(x, y) 返回x和y的最大公约数
>>> math.gcd(8,6)
2
>>> math.gcd(40,20)
20
>>> math.gcd(8,12)
4
hypot(x, y) 返回(x**2+y**2)平方根,即 sqrt(x*x + y*y)
>>> math.hypot(3,4)
5.0
>>> math.hypot(6,8)
10.0
isfinite(x) 如果x是不是无穷大的数字,则返回True,否则返回False
>>> math.isfinite(100)
True
>>> math.isfinite(0)
True
>>> math.isfinite(0.1)
True
>>> math.isfinite("a")
>>> math.isfinite(0.0001)
True
isinf(x) 如果x是正无穷大或负无穷大,则返回True,否则返回False
>>> math.isinf(234)
False
>>> math.isinf(0.1)
False
isnan(x) 如果x不是数字True,否则返回False
>>> math.isnan(23)
False
>>> math.isnan(0.01)
False
ldexp(x, i) 返回值x*(2**i)
>>> math.ldexp(5,5)
160.0
>>> math.ldexp(3,5)
96.0
log(x[, base]) 返回x的自然对数,默认以e为基数,base参数给定时,将x的对数返回给定的base,计算式为:log(x)/log(base)
>>> math.log(10)
2.302585092994046
>>> math.log(11)
2.3978952727983707
>>> math.log(20)
2.995732273553991
log10(x) 返回x的以10为基数的对数
>>> math.log10(10)
1.0
>>> math.log10(100)
2.0
#即10的1.3次方的结果为20
>>> math.log10(20)
1.3010299956639813
log1p(x) 返回x+1的自然对数(基数为e)的值
>>> math.log(10)
2.302585092994046
>>> math.log1p(10)
2.3978952727983707
>>> math.log(11)
2.3978952727983707
log2(x) 返回x的基2对数
>>> math.log2(32)
5.0
>>> math.log2(20)
4.321928094887363
>>> math.log2(16)
4.0
modf(x) 返回由x的小数部分和整数部分组成的元组
>>> math.modf(math.pi)
(0.14159265358979312, 3.0)
>>> math.modf(12.34)
(0.33999999999999986, 12.0)
pi 数字常量,圆周率
>>> print(math.pi)
3.141592653589793
pow(x, y) 返回x的y次方,即x**y
>>> math.pow(3,4)
81.0
>>>
>>> math.pow(2,7)
128.0
radians(x) 把角度x转换成弧度
>>> math.radians(45)
0.7853981633974483
>>> math.radians(60)
1.0471975511965976
sin(x) 求x(x为弧度)的正弦值
>>> math.sin(math.pi/4)
0.7071067811865475
>>> math.sin(math.pi/2)
1.0
>>> math.sin(math.pi/3)
0.8660254037844386
sqrt(x) 求x的平方根
>>> math.sqrt(100)
10.0
>>> math.sqrt(16)
4.0
>>> math.sqrt(20)
4.47213595499958
tan(x) 返回x(x为弧度)的正切值
>>> math.tan(math.pi/4)
0.9999999999999999
>>> math.tan(math.pi/6)
0.5773502691896257
>>> math.tan(math.pi/3)
1.7320508075688767
trunc(x:Real) 返回x的整数部分
>>> math.trunc(6.789)
6
>>> math.trunc(math.pi)
3
>>> math.trunc(2.567)
2