三角函数
4206字,阅读需时15分钟

从三角函数开始,我们使用matplotlib绘制函数图像,matplotlib是图形绘制库,使用matplotlib可以方便的绘制函数图形,以及直方图、条形图、散点图等统计图形。matplotlib的绘图命令和matlab的绘图命令基本相似,在使用上可以互相借鉴。

安装matplotlib最简单的方法就是在操作系统的命令行窗口分别输入并执行下面的命令:

python -m pip install -U pip setuptools
python -m pip install -U matplotlib

使用matplotlib绘图,会用到Numpy库,Numpy库主要用于科学计算。编写Python程序解决数学问题,sympy库、matplotlib库、Numpy库是必然要用到,读者还需要掌握这些库的用法。

在操作系统的命令行窗口输入并执行下面的命令安装Numpy库:

pip3 install numpy

例1 绘制sin(x)函数和cos(x)函数图像

案例代码见课程资源(unit1/case13.py)

#导入numpy库
import numpy as np
#导入绘图工具库
import matplotlib.pyplot as plt
# np的linspace函数在指定的间隔范围内返回均匀间隔的一组数值
# 例如:np.linspace(start,end,n=50),在start- end,均匀的返回n个数值
# 定义了一个numpy的数组x,从-2π到2π,共200个值
x=np.linspace(-2*np.pi,2*np.pi,200,endpoint=True)
#对x进行cos计算
cos= np.cos(x)
#设置cos图像的线条颜色、线条粗细和图像标签标签
plt.plot(x,cos,color='red',linewidth=1.5,label='cos')
#对x进行sin计算
sin= np.sin(x)
#设置sin图像的线条颜色、线条粗细和图像标签标签
plt.plot(x,sin,color='blue',lw=2.5,label='sin')
#设置图例显示位置
plt.legend(loc='lower left')
 
#设定x轴范围
plt.xlim(-2*np.pi*1.1,2*np.pi*1.1)
#设定y轴范围
plt.ylim(cos.min()*1.1,cos.max()*1.1)
 
#设置X轴刻度值
plt.xticks(
    [-2*np.pi,-3*np.pi/2,-np.pi,-np.pi/2,0,np.pi/2,np.pi,3*np.pi/2,2*np.pi],
    [r'-$2\pi$',r'-$3\pi/2$',r'-$\pi$',r'-$\pi/2$','0',r'$\pi/2$',r'$\pi$',r'-$3\pi/2$',r'$2\pi$']
        )
 
#设置Y轴刻度值
plt.yticks([-1,0,1])
#通过plt.gca()获取坐标轴对象 然后设置属性
ax=plt.gca()
#隐藏top和right周
ax.spines['top'].set_color("none")
ax.spines['right'].set_color("none")
#把左下设置为0点
ax.spines['left'].set_position(('data',0))
ax.spines['bottom'].set_position(('data',0))
 
plt.show()

代码解读

使用matplotlib绘制函数图像,要比sympy麻烦一些,绘图前要创建绘图需要的数据,对坐标轴进行设置。

程序首先调用Numpy库的linspace()函数,创建绘制三角函数图像需要的数据,即三角函数变量x的取值范围。linspace()函数在指定的间隔范围内返回均匀间隔的一组数值,x的取值范围为-2π到+2π范围,在该范围内均匀取200个数值。

np.cos(x)返回x取不同值时cos的函数值,返回一个存储cos函数值的列表对象。

matplotlib库pyplot模块的plot()函数使用给出的数据在坐标轴上绘制曲线,参数x和cos是要绘制的数据点,color是曲线的颜色,lw是曲线的宽度,label是标识曲线的标签。

pyplot模块的legend()函数设置图例的位置,当需要在一个坐标轴上绘制多条曲线时,显示图例是不错的绘图方法。

pyplot模块的xlim()函数设置坐标轴的取值范围,X轴的取值范围为-2π、-3π/2、π、-π/2、0,π/2、π、3π/2、2π。Y轴的取值范围为cos列表元素的最小值和cos列表元素的最大值,即1和-1。

pyplot模块的xticks()函数设置X轴刻度的显示样式,若不设置显示样式,matplotlib会把X轴刻度显示为数值,这里希望显示为弧度。“-$\pi$”为laText排版系统的语法,在python中使用laText,需要在文本的前后加上$符号,pi是π,matplotlib会自动解析laText内容并排版输出。

最后调用pyplot模块的gca()函数获取轴对象,隐藏top和right轴,matplotlib在绘图时默认会有4个轴,两个横轴和两个竖轴。

13.png

观察函数图像,发现y=sin(x)和y=cos(x)都是以2π为周期的周期函数,它们的定义域都是区间(-∞,+∞),值域都是闭区间[-1,1],自变量x的单位是弧度。

y=sin(x)和y=cos(x)函数的最大值是1,最小值是-1。

y=sin(x)在(-π/2,π/2)上单调增加,函数的周期是2π,因此y=sin(x)在区间[2kπ-π/2,2kπ+π/2]上单调增加,k为整数。同理,y=sin(x)在区间[2kπ+π/2,2kπ+3π/2]上单调减少。

从函数图像中还发现,y=sin(x)关于原点对称,是奇函数,y=cos(x)关于Y轴对称,是偶函数。

例2 绘制tan(x)函数图像

案例代码见课程资源(unit1/case14.py)

#导入numpy库
import numpy as np
#导入绘图工具库
import matplotlib.pyplot as plt
x=np.linspace(-2*np.pi,2*np.pi,200,endpoint=True)
#对x进行tan计算
tan= np.tan(x)
#划分曲线,分别设置曲线样式
ym1 = np.ma.masked_where(tan > 0, tan)
ym2 = np.ma.masked_where(tan < 0, tan) 
#绘制曲线
lines = plt.plot(x,tan,x,ym1,x,ym2,label='tan')
#用红色虚线绘制正切函数竖直渐进线
plt.setp(lines[0], color='red',linestyle='dashed',linewidth=1)
#用蓝色线绘制曲线
plt.setp(lines[1], color='blue',linewidth=1)
plt.setp(lines[2], color='blue',linewidth=1)
#设定x轴范围
plt.xlim(-2*np.pi*1.1,2*np.pi*1.1)
#设定y轴范围
plt.ylim(-9,9)
#设置X轴刻度值
plt.xticks(
    [-2*np.pi,-3*np.pi/2,-np.pi,-np.pi/2,0,np.pi/2,np.pi,3*np.pi/2,2*np.pi],
    [r'-$2\pi$',r'-$3\pi/2$',r'-$\pi$',r'-$\pi/2$','0',r'$\pi/2$',r'$\pi$',r'$3\pi/2$',r'$2\pi$']
        )
 
#设置Y轴刻度值
plt.yticks(list(range(-9,10,1)))
#通过plt.gca()获取坐标轴对象 然后设置属性
ax=plt.gca()
#隐藏top和right周
ax.spines['top'].set_color("none")
ax.spines['right'].set_color("none")
#把左下设置为0点
ax.spines['left'].set_position(('data',0))
ax.spines['bottom'].set_position(('data',0))
plt.show()

代码解读

Numpy库ma模块的masked_where函数从给定的数据集中选取符合条件的数据并进行屏蔽,masked_where(tan > 0, tan)会从tan数据集选取值大于0的数据,对这些数据进行屏蔽,并返回没有被屏蔽的数据集。

plot()函数可以绘制多条曲线,依次传入绘制曲线的数据集即可。

pyplot模块的setp()函数可以设置每条绘制曲线的样式。

 16.png

观察函数图像,发现tan(x)函数以π为周期,向Y轴两端无限延伸,没有最大值,也没有最小值,值域为全体实数。

进一步观察发现,函数曲线在±π/2或kπ+π/2(k为整数)处没有值,曲线只是无限接近该值。因为根据定义,tan(α)=y/x,p=π/2时,x=0无意义,正切值不存在。tan(x)函数的定义域为{x|x≠(πbai/2)+kπ,k∈Z}。

观察图像还发现,函数图像关于原点对称,是奇函数。

研究三角函数时,掌握三角函数之间的关系是非常重要的,可以通过三角函数之间的关系由一个三角函数推导出其它三角函数。

例如,当函数角度相同时:

根据sin2α+cos2α=1关系,sin(a)函数可推导出cos(a)函数,cos(a)函数可推导出sin(a)函数。

根据tan(a) = sin(a)/cos(a)关系,sin(a)函数和cos(a)函数可推导出tan(a)函数。

我要评论
全部评论