2.24. 教中学生学编程3:函数图像

这一节我们再学习一个学习数学时也很常用的功能:画函数图像。这回我们需要两个名称空间::

from numpy import *
from matplotlib.pyplot import *

其中numpy是number python的缩写,是用来处理数字的;matplotlib是math plot library的缩写,是用来plot(打点)的。

我们主要通过numpy来准备数字,然后matplotlib绘制图像。matplotlib绘图的过程称为“打点”,就是你给出x和y的值,它在对应的位置给你打上点,所以你需要用numpy给定所有的这些点。

我们画一个最简单的二次函数的图像:

\[y=x^2\]

图如下:

../_images/%E4%BA%8C%E6%AC%A1%E5%87%BD%E6%95%B0%E7%BB%98%E5%9B%BE.jpg

我们理解一下这组命令:

命令1,2两个是引入名称空间,这个没有什么可说的。

命令3是创建一个范围(a range),其实就是一组数,它有三个参数:起始值(这个值本身算在里面),最终值(这个值本身不算在里面),步长(就是多远放一个点,这实际上创建了一个这样一组数:

../_images/ipython%E9%9B%86%E5%90%881.jpg

然后我们对这组数都计算x**2,得到y:

../_images/ipython%E9%9B%86%E5%90%882.jpg

然后我们开始打点(matplotlib默认会把这些点连起来),plot(x, y),很简单吧。(根据版本不同,如果图像显示不出来,需要下show()这个命令,图像才会显示出来,这样其实更好,因为你可以画完很多个plot,才一次显示出来。读者可以根据需要增加):

我们可以一次打多个函数进行对比,下面我们用对比两次方, 三次方,四次方,五次方的区别

../_images/%E4%BB%A3%E6%95%B0%E5%87%BD%E6%95%B0%E5%9B%BE%E5%83%8F%E5%AF%B9%E6%AF%941.jpg

这只能看到一条线,但如果你仔细看,x轴上有一些特殊的颜色——看来是我们把图拉得太开了,我们调整一下x的范围,为了让这个调整更容易一些,我们把上面的动作写成“定义”,像这样:

../_images/%E4%BB%A3%E6%95%B0%E5%87%BD%E6%95%B0%E5%9B%BE%E5%83%8F%E5%AF%B9%E6%AF%942.jpg

这个有点样子了,但还是不突出,干脆我们把范围调整到-2到2之间,用0.05做步长看看:

../_images/%E4%BB%A3%E6%95%B0%E5%87%BD%E6%95%B0%E5%9B%BE%E5%83%8F%E5%AF%B9%E6%AF%943.jpg

再往下调:

../_images/%E4%BB%A3%E6%95%B0%E5%87%BD%E6%95%B0%E5%9B%BE%E5%83%8F%E5%AF%B9%E6%AF%944.jpg

现在对比比较明显了,但哪条线是哪条线呢?我们修改一下那个定义,给每条线都加个颜色:

../_images/%E4%BB%A3%E6%95%B0%E5%87%BD%E6%95%B0%E5%9B%BE%E5%83%8F%E5%AF%B9%E6%AF%945.jpg

plot后面跟着的那些r, b, y, g分别表示red, blue, yellow, green。你可以查下面这个表决定用什么:

'b'

blue

'g'

green

'r'

red

'c'

cyan

'm'

magenta

'y'

yellow

'k'

black

'w'

white

引号里面还可以带其他字母表示线型:

'-' solid line style
'--' dashed line style
'-.' dash-dot line style
':' dotted line style
'.' point marker
',' pixel marker
'o' circle marker
'v' triangle_down marker
'^' triangle_up marker
'<' triangle_left marker
'>' triangle_right marker
'1' tri_down marker
'2' tri_up marker
'3' tri_left marker
'4' tri_right marker
's' square marker
'p' pentagon marker
'*' star marker
'h' hexagon1 marker
'H' hexagon2 marker
'+' plus marker
'x' x marker
'D' diamond marker
'd' thin_diamond marker
'|' vline marker
'_' hline marker

如果你看不懂那个英语什么意思,试一下就知道了,比如这样:

../_images/%E4%BB%A3%E6%95%B0%E5%87%BD%E6%95%B0%E5%9B%BE%E5%83%8F%E5%AF%B9%E6%AF%946.jpg

最后我们看看正弦波的美吧:

../_images/ipython%E7%94%BB%E6%AD%A3%E5%BC%A6%E6%B3%A2.jpg

我们对各种信号的“调制”,都来自三角函数这种“波”的特性,中间那个蓝色的是一个简单的正弦波,但它和其他任何函数组合起来,都会让其他信号产生波动,这个特性,几乎是我们今天整个通讯技术的学术基础。