在日常生活中编写程序时,通常会遇到需要使用一些数学知识才能完成任务的情况。 像其他编程语言一样,Python提供了各种运算符来执行基本计算,例如*
表示乘法, %
表示模数和//
表示底数除法。
如果要编写程序来执行特定任务,例如研究周期性运动或模拟电路,则需要使用三角函数以及复数。 虽然您不能直接使用这些功能,但是可以通过首先包含两个数学模块来访问它们。 这些模块是math和cmath 。
第一个使您可以访问实数的双曲,三角和对数函数,而后一个则使您可以处理复数。 在本教程中,我将介绍这些模块提供的所有重要功能。 除非明确说明,否则所有返回的值都是浮点数。
算术函数
这些函数执行各种算术运算,例如分别使用floor(x)
, ceil(x)
和fabs(x)
函数来计算数字的底数,上限或绝对值。 函数ceil(x)
将返回大于或等于x的最小整数。 同样, floor(x)
返回小于或等于x的最大整数。 该fabs(x)
函数返回x的绝对值。
您还可以执行非平凡的操作,例如使用factorial(x)
计算数字的factorial(x)
。 阶乘是整数与所有小于它的正整数的乘积。 在处理组合和排列时,它被广泛使用。 它也可以用于计算正弦和余弦函数的值。
import math
def getsin(x):
multiplier = 1
result = 0
for i in range(1,20,2):
result += multiplier*pow(x,i)/math.factorial(i)
multiplier *= -1
return result
getsin(math.pi/2) # returns 1.0
getsin(math.pi/4) # returns 0.7071067811865475
数学模块中的另一个有用函数是gcd(x,y)
,它为您提供了两个数字x和y的最大公约数(GCD)。 当x和y都不为零时,此函数返回将x和y均除的最大正整数。 您可以使用以下公式间接使用它来计算两个数字的最小公倍数:
gcd(a, b) x lcm(a, b) = a x b
以下是Python提供的一些算术函数:
import math
math.ceil(1.001) # returns 2
math.floor(1.001) # returns 1
math.factorial(10) # returns 3628800
math.gcd(10,125) # returns 5
math.trunc(1.001) # returns 1
math.trunc(1.999) # returns 1
三角函数
这些功能将三角形的角度与其边相关联。 它们具有许多应用,包括三角形的研究以及诸如声波和光波之类的周期性现象的建模。 请记住,您提供的角度以弧度为单位。
您可以使用此模块直接计算sin(x)
, cos(x)
和tan(x)
。 但是,没有直接公式可以计算cosec(x)
, sec(x)
和cot(x)
,但是它们的值等于sin(x)
, cos(x)
和tan(x)
返回的值的倒数tan(x)
。
您也可以通过使用asin(x)
, acos(x)
和atan(x)
进行逆运算,并计算具有给定值的角度,而不用计算某个角度的三角函数的值。
您熟悉勾股定理吗? 它指出,斜边的平方(与直角相对的一侧)等于其他两侧的平方之和。 斜边也是直角三角形的最大边。 数学模块提供hypot(a, b)
函数来计算斜边的长度。
import math
math.sin(math.pi/4) # returns 0.7071067811865476
math.cos(math.pi) # returns -1.0
math.tan(math.pi/6) # returns 0.5773502691896257
math.hypot(12,5) # returns 13.0
math.atan(0.5773502691896257) # returns 0.5235987755982988
math.asin(0.7071067811865476) # returns 0.7853981633974484
双曲函数
双曲函数是基于双曲线而不是圆的三角函数的类似物。 在三角学中,点(cos b ,sin b )表示单位圆的点。 在双曲函数的情况下,点(cosh b ,sinh b )代表形成等边双曲线的右半部分的点。
就像三角函数一样,您可以直接计算sinh(x)
, cosh(x)
和tanh(x)
。 可以使用这三个值之间的各种关系来计算其余的值。 还有其他函数,如asinh(x)
, acosh(x)
和atanh(x)
,可用于计算相应双曲线值的反函数。
import math
math.sinh(math.pi) # returns 11.548739357257746
math.cosh(math.pi) # returns 11.591953275521519
math.cosh(math.pi) # returns 0.99627207622075
math.asinh(11.548739357257746) # returns 3.141592653589793
math.acosh(11.591953275521519) # returns 3.141592653589793
math.atanh(0.99627207622075) # returns 3.141592653589798
由于math.pi
大约等于3.141592653589793,因此当我们对sinh(math.pi)
返回的值使用asinh()
时,我们又得到了π。
幂和对数函数
与双曲线或三角函数相比,您可能会更频繁地处理幂和对数。 幸运的是, 数学模块提供了许多功能来帮助我们计算对数。
您可以使用log(x,[base])
计算给定基数的给定x的对数。 如果省略了可选的基本参数,则x的对数将以e为底。 这里, e是一个数学常数,其值为2.71828182 ....,可以使用math.e
对其进行访问。 顺便说一句,Python还允许您使用math.pi
访问另一个常数π。
如果要计算以2为底或以10为底的对数值,则使用log2(x)
和log10(x)
将返回比log(x, 2)
和log(x, 10)
更准确的结果。 请记住,没有log3(x)
函数,因此必须继续使用log(x, 3)
来计算以3为底的对数值。 其他所有基地也是如此。
如果您要计算其对数的值非常接近1,则可以使用log1p(x)
。 log1p
的1p
表示加号1。 因此, log1p(x)
计算log(1+x)
,其中x接近零。 但是,使用log1p(x)
可以得到更准确的结果。
您还可以通过使用pow(x, y)
计算升到y的数字x的值。 在计算幂之前,此函数将两个参数都转换为float类型。 如果要以精确的整数幂计算最终结果,则应使用内置的pow()
函数或**
运算符。
您也可以使用sqrt(x)
计算任何给定数x的sqrt(x)
,但是也可以通过使用pow(x, 0.5)
来完成相同的事情。
import math
math.exp(5) # returns 148.4131591025766
math.e**5 # returns 148.4131591025765
math.log(148.41315910257657) # returns 5.0
math.log(148.41315910257657, 2) # returns 7.213475204444817
math.log(148.41315910257657, 10) # returns 2.171472409516258
math.log(1.0000025) # returns 2.4999968749105643e-06
math.log1p(0.0000025) # returns 2.4999968750052084e-06
math.pow(12.5, 2.8) # returns 1178.5500657314767
math.pow(144, 0.5) # returns 12.0
math.sqrt(144) # returns 12.0
复数
复数在内部使用直角坐标或直角坐标存储。 复数z将在笛卡尔坐标中表示为z = x + iy
,其中x表示实部, y表示虚部。 表示它们的另一种方法是使用极坐标。
在这种情况下,复数z将由模数r和相角phi的组合定义。 模量r是复数z与原点之间的距离。 角度phi是从正x轴到连接z和原点的线段的弧度,以弧度为单位。
在处理复数时, cmath模块可以提供很大的帮助。 可以使用内置的abs()
函数来计算复数的模数,并且可以使用cmath模块中可用的phase(z)
函数来计算其相位。 您可以使用polar(z)
将矩形形式的复数转换为极性形式,这将返回一对(r, phi)
,其中r为abs(z)
且phi为phase(z)
。
同样,您可以使用rect(r, phi)
将极性形式的复数转换为矩形形式。 此函数返回的复数为r * (math.cos(phi) + math.sin(phi)*1j)
。
import cmath
cmath.polar(complex(1.0, 1.0))
# returns (1.4142135623730951, 0.7853981633974483)
cmath.phase(complex(1.0, 1.0))
# returns 0.7853981633974483
abs(complex(1.0, 1.0))
# returns 1.4142135623730951
cmath模块还允许我们使用带有复数的常规数学函数。 例如,您可以使用sqrt(z)
计算复数的平方根,或者使用cos(z)
其余弦。
import cmath
cmath.sqrt(complex(25.0, 25.0))
# returns (5.49342056733905+2.2754493028111367j)
cmath.cos(complex(25.0, 25.0))
# returns (35685729345.58163+4764987221.458499j)
复数具有许多应用,例如对电路建模,流体动力学和信号分析。 如果您需要做任何事情, cmath模块都不会令您失望。
最后的想法
我们上面讨论的所有这些功能都有其特定的应用程序。 例如,您可以使用factorial(x)
函数来解决排列和组合问题。 您可以使用三角函数将向量解析为笛卡尔坐标。 您还可以使用三角函数来模拟诸如声波和光波之类的周期性函数。
类似地,可以使用双曲函数确定悬挂在两个极点之间的绳索的曲线。 由于所有这些功能都可以直接在math模块中使用,因此创建执行所有这些任务的小程序非常容易。
希望您喜欢本教程。 如果您有任何疑问,请在评论中告诉我。
翻译自: https://code.tutsplus.com/tutorials/mathematical-modules-in-python-math-and-cmath--cms-26913