您的位置:首页 > 大数据 > 人工智能

人工智能之数学基础----三角学论证

2020-02-08 02:12 483 查看

本章主要讲解三角函数基本应用

  1. 用弧度度量的角与三角函数的基本知识
  2. 三角函数图像应用
  3. 三角恒等式

 三角函数常用表

                名称                  表达式                                   
正弦函数 0 1
余弦函数 1 0
正切函数 0 1 无定义
余切函数 无定义 1 0
余割函数 无定义 2 1
正割函数 1 2 无定义

通过上面的三角函数,大家可能会疑惑为什么 代表什么? 代表什么?为什么有的无定义?等一系列的疑惑。

下面我们将会通过大量的篇幅来讲解在坐标系中绘制一个圆,然后在圆内绘制一个直角三角形,通过这个直角三角形来讲解上面的三角函数,以便大家深刻理解三角函数,并会学会运用

  • 绘制坐标系,并标注各个象限位置
  • 在坐标系中绘制一个单位圆(半径长度为1的圆)
  • 角度和弧度转换
  • 在单位圆内使用三角函数绘制三角形

我们使用python绘制一个坐标系,并标注坐标系中四个象限

  • 首先绘制一个坐标系,X和Y坐标轴只显示-2~2的范围

 

代码如下:

[code]def coor():
plt.figure(figsize=(3,3)) #缩放整个图像大小为3x3

ax = plt.gca() #获取当前图对象
ax.spines['right'].set_color('none')  # 设置右边框为无色
ax.spines['top'].set_color('none')  # 设置顶部边框为无色
ax.spines["bottom"].set_position(('data', 0))  # 设置底边框从数轴0开始
ax.spines["left"].set_position(('data', 0))  # 设置左边框从数轴0开始

plt.xticks([-2,-1,1,2],['-2',"-1",'1','2']) #X轴显示-2~2 及其对应的可视化坐标
plt.yticks([-2,-1,1,2],['-2',"-1","1",'2']) #Y轴显示-2~2 及其对应的可视化坐标

plt.show()

if __name__ == "__main__":
coor()
  • 其次在坐标系中标注第一、二、三、四象限(顺序为逆时针旋转)

代码如下:

        在上面代码plt.show()前面插入如下代码

[code]    #第一个参数为标注的起始x坐标,第二个参数为起始y坐标
plt.text(0.5, 1.5, u'第一象限', fontdict={'size': 10, 'color': 'r'}, fontproperties='Microsoft YaHei')
plt.text(-1.5, 1.5, u'第二象限', fontdict={'size': 10, 'color': 'r'}, fontproperties='Microsoft YaHei')
plt.text(-1.5, -1.5, u'第三象限', fontdict={'size': 10, 'color': 'r'}, fontproperties='Microsoft YaHei')
plt.text(0.5, -1.5, u'第四象限', fontdict={'size': 10, 'color': 'r'}, fontproperties='Microsoft YaHei')

然后在坐标系中绘制一个单位圆(单位圆指的是半径长度为1的圆);

这里大家需要理解什么是弧度、什么是角度及其弧度和角度的转换,一个圆的角度是 ,弧度为2 ;也就是说 =2 。左图中绘制4个点(绿、红、蓝、黄)其中绿点作为起始点逆时针旋转一周最终回到起点位置;经过绿点( =0弧度)、红色( )、蓝色( )、黄色( )、绿色( )。其实没必要记住这些,可以通过两个简单的计算公式,

  1. 通过弧度计算出角度
  2. 通过角度计算出弧度。

 

 

名称 公式 案例
角度转弧度 角度  X  = 弧度
弧度转角度 弧度  X  = 角度

前面已经讲解了python绘制坐标系;圆的角度和弧度的关系及其转换;接下来将会深入讲解三角函数在圆中的应用,为了讲解更清晰,这里绘制了四个图分别讲解

代码实现:

这里绘制了四个坐标系,采用分格绘制在一张图上,代码有详细注释,在这里不做介绍

[code]def _sanjiao():
plt.figure(figsize=(9,2))  #宽、高比例为9:2

ax1 = plt.subplot2grid((1,4),(0,0))  #将当前窗口分为1行4列  当前位置第0行第0列
setting(ax1)    #基本配置
# img1()
ax2 = plt.subplot2grid((1, 4), (0, 1))  # 将当前窗口分为1行4列  当前位置第0行第1列
setting(ax2)  # 基本配置
# img2()
ax3 = plt.subplot2grid((1, 4), (0, 2))  # 将当前窗口分为1行4列  当前位置第0行第2列
setting(ax3)  # 基本配置
# img3()
ax4 = plt.subplot2grid((1, 4), (0, 3))  # 将当前窗口分为1行4列  当前位置第0行第3列
setting(ax4)  # 基本配置
# img4()
plt.show()

def setting(ax):
ax.spines['right'].set_color('none')  # 设置右边框为无色
ax.spines['top'].set_color('none')  # 设置顶部边框为无色
ax.spines["bottom"].set_position(('data', 0))  # 设置底边框从数轴0开始
ax.spines["left"].set_position(('data', 0))  # 设置左边框从数轴0开始
# 在这里设置坐标刻度,否则将被覆盖
plt.xticks([-1, 1], ["-1", '1'])  # X轴显示-1~1 及其对应的可视化坐标
plt.yticks([-1, 1], ["-1", "1"])  # Y轴显示-1~1 及其对应的可视化坐标

if __name__ == "__main__":
_sanjiao()

 

我们通过上面4张图来讲解三角函数和圆的关系,学会灵活应用三角函数;首先看“图一”在坐标系中绘制一个圆,把上面代码第六行【img1()】注释取消掉,img1()函数代码如下;我们暂且不对三角函数做解释,这里你只要知道是在绘制一个半径r=1并且弧度从0~ 即可;而0~ 刚好就是一个圆的弧度,这里的参数100表示从0~ 之间均匀的取出100个数,然后用三角函数的cos和sin求出这100个弧度在坐标系中(x,y)的坐标位置,最后通过plot将这100个坐标点连接起来就是一个圆。

[code]def img1():
# 绘制圆
r = 1  # 半径=1
radian = np.linspace(0, 2 * np.pi, 100, np.float32)
x1 = np.cos(radian) * r
y1 = np.sin(radian) * r

plt.plot(x1, y1, zorder=1)

为了证明我们上面说的圆是把100个坐标点连接起来的圆,下面我们采用散点图绘制法,绘制出上面100个坐标点的位置,不用线连接,如“图二”所示,代码如下【img2()】

img2()函数的代码和img1()几乎完全一样,唯一的区别是img2绘制采用散点图,每个坐标绘制一个点,如“图二”所示

[code]def img2():
# 绘制圆
r = 1  # 半径=1
radian = np.linspace(0, 2 * np.pi, 100, np.float32)
x1 = np.cos(radian) * r
y1 = np.sin(radian) * r

plt.scatter(x1, y1, s=2, zorder=1)

 现在我们把注意力其中在“图三”,如果我们从坐标中心位置画一条线 交于圆点,设 轴的夹角 等于 等于半径长度为1;我们只要计算点的坐标( , )就可以绘制出“图三”的三角形; 因为 =1, = ,所以 =sin 因为 =1, =30,所以 =cos ;最终得到( , )坐标,即: ;角度转弧度 。代码如下:从第10~13行计算出( , ),第15行绘制一个红点,如“图三”所示,红点恰好落在圆上,说明我们上面的推理是正确的

 

[code]def img3():
# 绘制圆
radian = np.linspace(0, 2 * np.pi, 100, np.float32)
x1 = np.cos(radian)
y1 = np.sin(radian)

plt.plot(x1, y1, zorder=1)

#30°角对应的点落在圆的位置
hd = np.pi/6
r = 1  # 半径=1
x2 = np.cos(hd) * r
y2 = np.sin(hd) * r
#在坐标系[x2,y2]位置绘制一个红点,大小30
plt.scatter([x2],[y2] ,color="r",s=30)
#绘制一条直线起点[0,0];终点[x2,y2]
plt.plot([0,x2],[0,y2])
#绘制一条直线起点[x2,0];终点[x2,y2]
plt.plot([x2,x2],[0,y2])

plt.plot([0.2, 0.18], [0, 0.08])

plt.text(0.22, 0.008, r'$\theta $', fontdict={'size': 8, 'color': 'r'})

plt.text(0.4, 0.28, r'$\mathit{r}$', fontdict={'size': 10, 'color': 'r'})
plt.text(0.48, -0.15, r'$\mathit{x}$', fontdict={'size': 10, 'color': 'r'})
plt.text(0.88, 0.20, r'$\mathit{y}$', fontdict={'size': 10, 'color': 'r'})

上面我们已经采用三角函数在圆上绘制一个点了,大家试用一下我们是否可以在坐标系中绘制5个、10个、100个点。然后再把这些点用散点图绘制出来是不是如“图二”所示?再试想一下把这些点用线连接起来是不是如“图一”所示?为了证明我们所想是正确的,我们绘制“图四”,大家可以采用同样的方式绘制更多的点

第一步:我们在0~ 弧度之间取出8个弧度[0, np.pi/4, np.pi/2, np.pi*3/4, np.pi, np.pi*5/4, 3*np.pi/2, np.pi*7/4, 2*np.pi]

第二步:采用三角函数计算出这8个弧度对应的坐标系为( ,

第三步:采用散点图把这8个( , )绘制在坐标系中

代码如下:

[code]def img4():
hd = [0,np.pi/4,np.pi/2,np.pi*3/4,np.pi,np.pi * 5/4,3*np.pi/2,np.pi * 7/4,2*np.pi]
for value in hd:
x = np.cos(value)
y = np.sin(value)
plt.scatter(x, y)

通过上面的讲解大家应该清楚三角函数的 分别代表什么(当然你可以用其他符号替换);这对我们后面内容的讲解很重要。

接下来我们来解释一下为什么正切函数tan在 无定义,首先大家要明白 ,大家试想一下如果叫 慢慢扩大,三角形上蓝色的点将会逆时针沿着圆轨迹运动,当运动到 轴重合,即: = ;可怕的是此时 =0;而根据正切函数公式: 可以看出 是被除数不能为零。所以正切函数 无定义;其余无定义大家可以自己画图证明。

三角函数图像与应用

下图“图一”为正弦函数 在0~ 的图像;从“图二”可以看出正弦为奇函数;因为图像关于原点 对象;代码如下;其中setting2(ax,name,x,y)为抽离出来的公共函数,对函数图像美化和坐标设置

[code]def sin():
plt.figure(figsize=(9, 2))  # 可视化图像的宽高比例
ax1 = plt.subplot2grid((1,4),(0,0))
setting2(ax1, "图一",(-2,2,5),(-1,1,3))
x = np.linspace(0,2*np.pi,100,np.float32) #在x轴0~2*np.pi之间取出100个等分的数据
y = np.sin(x)                             #通过三角函数计算出y的值;即:y = sin(x)
plt.plot(x,y,zorder=1)

ax2 = plt.subplot2grid((1,4),(0,1),colspan=3)
setting2(ax2, "图二",(-4,4,9),(-1,1,3))
x = np.linspace(-4*np.pi,4*np.pi,100,np.float32) #在x轴-4*np.pi,4*np.pi之间取出100个等分的数据
y = np.sin(x)                             #通过三角函数计算出y的值;即:y = sin(x)
plt.plot(x,y,zorder=1)

plt.show()
'''
图像参数设置
'''
def setting2(ax,name,x,y):
ax.set_title(name, fontproperties='Microsoft YaHei')
ax.spines['right'].set_color('none')  # 设置右边框为无色
ax.spines['top'].set_color('none')  # 设置顶部边框为无色
ax.spines["bottom"].set_position(('data', 0))  # 设置底边框从数轴0开始
ax.spines["left"].set_position(('data', 0))  # 设置左边框从数轴0开始

hd_title =[]
hd = []
for num in np.linspace(x[0], x[1], x[2]):
if num != 0:  #中心位置不用标注
hd_title.append("$%s \pi$" % Fraction(num)) #Fraction将小数转为分数
hd.append(num * np.pi)
plt.xticks(hd,hd_title, fontsize=8)

hd.clear()
hd_title.clear()
for num in np.linspace(y[0], y[1], y[2]):
if num != 0:    #中心位置不用标注
hd_title.append(Fraction(num))  #Fraction将小数转为分数
hd.append(num)
plt.yticks(hd, hd_title, fontsize=8)

if __name__ == "__main__":
sin()

 下图“图一”为正弦函数 在0~ 的图像;从“图二”可以看出正弦为偶函数;因为图像关于原点 对象;代码和正弦函数一样,唯一的需要的是上面代码的第6行和第12行的 改为 即可,对函数图像美化和坐标设置

左图为正切函数 ,大家是否注意分母为 ,分母不能为0,大家可以试想一下面的右图如果 靠近y轴,那么x将会变小,当 或者 三角形的斜边 将会和Y轴重合, 这时候为0是无定义的,所以 只能无限的接近Y坐标轴,但是不能重合,而当 很靠近Y坐标轴的时候 是一个非常小的数,分母越小 变得越大。所以 将会有下面左图的效果; 关于原点 对称

三角函数恒等式

   

 

  • 点赞
  • 收藏
  • 分享
  • 文章举报
yileming 发布了10 篇原创文章 · 获赞 2 · 访问量 238 私信 关注
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: