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
log(x, a) 返回x的自然对数,以a为基数(不写则默认以e为基数),a参数给定时,将x的对数返回给定的a,计算式为:log(x)/log(a)
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