人工智能之数学基础----三角学论证
本章主要讲解三角函数基本应用
- 用弧度度量的角与三角函数的基本知识
- 三角函数图像应用
- 三角恒等式
三角函数常用表
名称 | 表达式 | |||||
---|---|---|---|---|---|---|
正弦函数 | 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弧度)、红色( )、蓝色( )、黄色( )、绿色( )。其实没必要记住这些,可以通过两个简单的计算公式,
- 通过弧度计算出角度
- 通过角度计算出弧度。
名称 | 公式 | 案例 |
角度转弧度 | 角度 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坐标轴的时候 是一个非常小的数,分母越小 变得越大。所以 将会有下面左图的效果; 关于原点 对称
三角函数恒等式
- 点赞
- 收藏
- 分享
- 文章举报
- 人工智能数学基础-概率论与数理统计
- 向AI转行——人工智能工程师必学的数学基础
- 编程和数学基础不佳如何入门人工智能?
- 人工智能之数学基础----求解微分问题
- ML之math:人工智能之机器学习/深度学习的数学基础知识图谱(最全)
- 编程和数学基础不佳如何入门人工智能?
- 人工智能数学基础之线性代数
- A. 人工智能 --- 数学基础
- 人工智能需要具备哪些数学基础?
- 人工智能/5G笔记(Day17)-人工智能数学基础(1)微积分
- 人工智能之数学基础----连续性和可导性
- 人工智能课程总结(一)数学基础 一些值得看的博客链接
- 人工智能数学基础之数理统计
- 编程和数学基础不佳如何入门人工智能
- 学习人工智能需要哪些必备的数学基础?
- 学习人工智能需要哪些必备的数学基础?
- 人工智能数学基础之概率论
- 人工智能数学基础--极大似然估计
- 2019最新网易云课堂人工智能数学基础(同步更新)
- (四)从零开始学人工智能—数学基础:导数