在Python中计算三角函数(sin, cos, tan, arcsin, arccos, arctan)

商业

使用数学,Python的数学函数标准模块,你可以计算三角函数(sin、cos、tan)和反三角函数(arcsin、arccos、arctan)。

在此对以下内容进行解释,并附有示例代码。

  • Pi (3.1415926.):math.pi
  • 角度转换(弧度、度)。:math.degrees(),math.radians()
  • 正弦,反正弦:math.sin(),math.asin()
  • 余弦,反余弦:math.cos(),math.acos()
  • 正切,反切:math.tan(),math.atan(),math.atan2()
  • 下面的差异:math.atan(),math.atan2()

Pi (3.1415926.): math.pi

在数学模块中,Pi是作为一个常数提供的。它的表达方式如下。
math.pi

import math

print(math.pi)
# 3.141592653589793

角度转换(弧度、度)。: math.degrees(), math.radians()

数学模块中的三角和反三角函数使用弧度作为角度的单位。

使用math.degrees()和math.radians()在弧度(弧度法)和度数(度数法)之间转换。

Math.degree()将弧度转换为度数,而math.radians()将度数转换为弧度。

print(math.degrees(math.pi))
# 180.0

print(math.radians(180))
# 3.141592653589793

正弦,反正弦: math.sin(), math.asin()

求正弦(sin)的函数是math.sin(),求反正弦(arcsin)的函数是math.asin()。

下面是一个寻找30度正弦的例子,使用math.radians()将度数转换成弧度。

sin30 = math.sin(math.radians(30))
print(sin30)
# 0.49999999999999994

30度的正弦是0.5,但有一个误差,因为π是一个无理数,无法准确计算。

如果你想四舍五入到适当的位数,请使用round()函数或 format()方法或 format()函数。

请注意,round()的返回值是一个数字(int或float),但format()的返回值是一个字符串。如果你想在后续计算中使用它,请使用round()。

print(round(sin30, 3))
print(type(round(sin30, 3)))
# 0.5
# <class 'float'>

print('{:.3}'.format(sin30))
print(type('{:.3}'.format(sin30)))
# 0.5
# <class 'str'>

print(format(sin30, '.3'))
print(type(format(sin30, '.3')))
# 0.5
# <class 'str'>

round()函数将小数点后的数字作为其第二个参数。请注意,这不是严格意义上的四舍五入。详见以下文章。

format()方法和format()函数指定了格式化规范字符串中的小数位数。详见以下文章。

如果你想比较,你也可以使用math.isclose()。

print(math.isclose(sin30, 0.5))
# True

同样,这里有一个寻找0.5的反正弦的例子。math.asin()返回弧度,用math.degree()转换为度。

asin05 = math.degrees(math.asin(0.5))
print(asin05)
# 29.999999999999996

print(round(asin05, 3))
# 30.0

余弦,反余弦: math.cos(), math.acos()

求余弦(cos)的函数是math.cos(),求反余弦(弧形余弦,arccos)的函数是math.acos()。

下面是一个寻找60度的余弦和0.5的反余弦的例子。

print(math.cos(math.radians(60)))
# 0.5000000000000001

print(math.degrees(math.acos(0.5)))
# 59.99999999999999

如果你希望四舍五入到合适的数字,你可以像正弦一样使用round()或format()。

正切,反切: math.tan(), math.atan(), math.atan2()

求正切(tan)的函数是math.tan(),而求反切(arctan)的函数是math.atan()或math.atan2()。
Math.atan2()将在后面介绍。

下面是一个寻找45度正切和1度反切的例子。

print(math.tan(math.radians(45)))
# 0.9999999999999999

print(math.degrees(math.atan(1)))
# 45.0

math.atan()和math.atan2()的区别

math.atan()和math.atan2()都是返回反正切的函数,但它们在参数数量和返回值范围上有所不同。

math.atan(x)有一个参数,返回弧度的arctan(x)。返回值将在-pi\2和pi\2之间(-90到90度)。

print(math.degrees(math.atan(0)))
# 0.0

print(math.degrees(math.atan(1)))
# 45.0

print(math.degrees(math.atan(-1)))
# -45.0

print(math.degrees(math.atan(math.inf)))
# 90.0

print(math.degrees(math.atan(-math.inf)))
# -90.0

在上面的例子中,math.inf代表无穷大。

math.atan2(y, x)有两个参数,返回弧度的arctan(y\x)。这个角度是原点到坐标(x,y)的矢量与极坐标平面中x轴的正方向所成的角度(偏角),返回值在-pi和pi之间(-180到180度)。

由于第二和第三象限的角度也可以正确得到,所以在考虑极坐标平面时,math.atan2()比math.atan()更合适。

注意,参数的顺序是y,x,而不是x,y。

print(math.degrees(math.atan2(0, 1)))
# 0.0

print(math.degrees(math.atan2(1, 1)))
# 45.0

print(math.degrees(math.atan2(1, 0)))
# 90.0

print(math.degrees(math.atan2(1, -1)))
# 135.0

print(math.degrees(math.atan2(0, -1)))
# 180.0

print(math.degrees(math.atan2(-1, -1)))
# -135.0

print(math.degrees(math.atan2(-1, 0)))
# -90.0

print(math.degrees(math.atan2(-1, 1)))
# -45.0

如上面的例子,x轴的负方向(y为零,x为负)是pi(180度),但当y为负零时,它是-pi(-180度)。如果你想严格处理符号,请注意。

print(math.degrees(math.atan2(-0.0, -1)))
# -180.0

负零是以下操作的结果

print(-1 / math.inf)
# -0.0

print(-1.0 * 0.0)
# -0.0

整数不作为负零处理。

print(-0.0)
# -0.0

print(-0)
# 0

即使x和y都是零,结果也取决于符号。

print(math.degrees(math.atan2(0.0, 0.0)))
# 0.0

print(math.degrees(math.atan2(-0.0, 0.0)))
# -0.0

print(math.degrees(math.atan2(-0.0, -0.0)))
# -180.0

print(math.degrees(math.atan2(0.0, -0.0)))
# 180.0

还有一些例子,结果的符号会根据负零而改变,如math.atan2()以及math.sin()、math.asin()、math.tan()和math.atan()。

print(math.sin(0.0))
# 0.0

print(math.sin(-0.0))
# -0.0

print(math.asin(0.0))
# 0.0

print(math.asin(-0.0))
# -0.0

print(math.tan(0.0))
# 0.0

print(math.tan(-0.0))
# -0.0

print(math.atan(0.0))
# 0.0

print(math.atan(-0.0))
# -0.0

print(math.atan2(0.0, 1.0))
# 0.0

print(math.atan2(-0.0, 1.0))
# -0.0

注意,到目前为止的例子是在CPython中运行程序的结果。请注意,其他实现或环境可能会以不同方式处理负零。

Copied title and URL