树莓派应用系列讲座
CICET© 2014.6
树莓派上的 MATHEMATICA 入门 什么 是 MATHEMATICA? Mathematica 是一个用于科学、数学、计算及工程中的计算编程工具,其创始人是 Steve Wolfram,首次发布于 1988 年。Wolfram 公司的另一个著名的产品是智能搜索引擎 Alpha(苹 果的 Siri 就使用了 Alpha 所提供的服务),它也部分基于 Mathematica。 从诞生之日起,Mathematica 一直都是专属商业软件,在 PC 机上有适用于 Windows、MacOS X 和 Linux 等各种不同操作系统版本。Mathematica 的数学计算及推理功能非常强大,是同类 软件的鼻祖之一,在全球都享有盛誉。但因其正式版的使用费比较贵,所以在我国的应用范 围并不算大。从 2013 年底开始,Wolfram 公司与树莓派基金会达成合作,允许将 Mathematica 的完整版绑定在官方发行包 Raspbian 和 NOOBS 中,并在树莓派上免费使用,这是在树莓派上 首次免费搭载正版的主流商业软件。当然,因为树莓派的硬件性能有限,运行 Mathematica 这样的大型专业软件有些力不从心,特别是在运行计算密集型的程序、绘制复杂 3D 图形及动 画时更是如此。
如果你的树莓派启动用 SD 卡在 2013 年底后更新过,那么 Mathematica 和 Wolfram 语言 应该已经预安装好了,在启动到 Raspbian 桌面后可以看到其对应的图标:
此外,你也可以在“应用”菜单中下的“教育”组找到这两个程序。
安装 如果程序没有安装,请键入下列命令更新你的系统: sudo apt-get update sudo apt-get install wolfram-engine 1
树莓派应用系列讲座
CICET© 2014.6
注意这要下载差不多 200MB 的内容,因此可能要花些时间。
启动 MATHEMATICA 双击桌面上的
Mathematica
图标,或者从开始中的“应用程序”菜单中打开它,装载程
序时你会看到一个带有 Mathematica 标记的跳动屏幕:
一旦装载完成,你将会看到两个窗口,一个是 Wolfram 信息对话窗口:
另一个是 Mathematica 笔记本窗口:
2
树莓派应用系列讲座
CICET© 2014.6
Wolfram 信息对话框中显示三个 Web 链接:
Wolfram Language Documentation Center(Wolfram 语言文档中心)
Wolfram + Raspberry Pi Website(Wolfram 树莓派站点)
Wolfram Community(Wolfram 社区)
只要你连接到因特网,这些链接都可以在树莓派上的浏览器中打开,但是速度很慢。
MATHEMATICA 编 程 点击笔记本窗口内并键入: Print["Hello world"]
按下
Shift + Enter ,这将运行上述命令并在屏幕上打印出"Hello
world":
你可以做各种数学计算,例如: In[2]:= 2 + 2 Out[2]= 4 In[3]:= 16254 / 32 Out[3]= 8127 / 16 In[4]:= 1024 * 32 Out[4]= 32768
笔记本窗 口中编 辑 你可以通过用鼠标点击或用键盘上的光标键移动编辑光标来重新访问以前键入过的命 令。你可以删除、编辑或附加某些东西,然后按下
Shift + Enter
来执行新的命令。你也可
以保存为一个笔记本文件供以后使用、将其发送给朋友、在线发布,甚至作为作业上交。只 需在笔记本窗口转到
File > Save As 。
当打开一个保存的笔记本时,以前的所有项目都会显示出来,包括所有的输入和输出。 你可以用
Shift + Enter
执行每个单元,或者从菜单中选择
一次性执行所有命令。
变量 你可以将计算结果存储在变量中: radius = 5; diameter = 2 * radius; circumference = 2 * Pi * radius; area = Pi * radius^2; 3
Evaluation > Evaluate Notebook
树莓派应用系列讲座
CICET© 2014.6
注意每行末尾的分号强制将输出打印出来。
符号值 注意内建符号
Pi
的使用,它包含的圆周率的符号值。这意味着如果你将其传递到一个
等式中,将保留圆周率的真正值,不会将其转换为小数并舍入: In[19]:= Pi Out[19]: π In[20]:= tau = 2 * Pi Out[20]: 2 π
为得到一个符号值的小数表示,使用
N
函数:
In[5]:= N[Pi] Out[5]: 3.14159
默认保留的小数位数为 6 位,但是通过在第二个参数中进行说明可以保留更多的位: In[6]:= N[Pi, 10] Out[6]: 3.141592654
注意这是数字位数,不是小数点后面的位数;因此 3 是包括在计数中的,小数点后面留了 9 位。
列表 你可以将成组的数据存储在列表中: nums = {1, 2, 3, 5, 8} people = {"Alice", "Bob", "Charlotte", "David"}
范围 Range
函数可用于产生数的列表: Range[5] (*The numbers 1 to 5*) Range[2, 5] (*The numbers 2 to 5*) Range[2, 5, 2] (*The numbers 2 to 5, in steps of 2*)
表 Table
函数是用函数产生列表值的一种方法: Table[i ^ 2, {i, 10}] (*Squares of the numbers 1 to 10*) Table[i ^ 2, {i, 5, 10}] (*Squares of the numbers 5 to 10*) Table[i ^ 2, {i, nums}] (*Squares of the items in the list nums*)
循环 你可以用
Do
运行特定次数的循环,或者在列表上运行循环:
Do[Print["Hello"], {10}] (*Print "Hello" 10 times*) Do[Print[i], {i, 5}] (*Print the numbers 1 to 5*) Do[Print[i], {i, 3, 5}] (*Print the numbers 3 to 5*) Do[Print[i], {i, 1, 5, 2}] (*Print the numbers 1 to 5, in steps of 2*) Do[Print[i ^ 2], {i, nums}] (*Print the square of each item in the list nums*) 4
树莓派应用系列讲座
CICET© 2014.6
函数帮助 在函数名前面加一个问号( ? )然后按下
Shift + Enter ,你可以得到关于该函数用法的帮
助:
函数搜索 你也可以键入函数名的一部分找匹配来搜索函数,只需用一个问号( ? )和末尾一个附加 的星号( * )作为通配符: In[15]:= ?Device*
你可以使用多个通配符: In[16]:= ?*Close*
注释 如前面例子中已经看到,你可以用括号( ( & ) )和星号( * )在脚本中留下注释(程序中会 忽略): Print["Hello"] (*Print "Hello" to the screen*)
WOLFRAM 命令 行访 问 你也可以从命令行访问 Wolfram 语言:在终端中键入 wolfram,或者双击 Wolfram 桌面 图标。这将会给出仅文本的(非图形的)编程环境,带有 In[x]/Out[x]风格的界面,但是没 有交互笔记本功能。如所期望,Mathematica 函数仍然正常工作:
5
树莓派应用系列讲座
CICET© 2014.6
你将会发现:在命令行界面程序运行的更快,因为无需进行笔记本的图形界面处理工作。但 是,命令行界面缺乏图形界面的交互性和漂亮的打印。退出按下
Ctrl + D 。
用 WOLFRAM 运 行脚本 你可以写一个程序,将其存为一个命名的文件(通常带有 .m 或 .wl 扩展名),然后从命 令行通过加一个 -script 标记来执行该脚本。例如,为了运行
test.m :
wolfram -script test.m
表操 作 你可以对一个列表中的所有项目作用一项操作或函数: In[21]:= 2 * {1, 2, 3, 4, 5} Out[21]: {2, 4, 6, 8, 10} In[22]:= {1, 2, 3, 4, 5} ^ 2 Out[22]: {1, 4, 9, 16, 25} In[23]:= Sqrt[{1, 2, 3, 4, 5}] Out[23]: {1, Sqrt[2], Sqrt[3], 2, Sqrt[5]}
注意在上述例子中, 和
1
和
4
的平方根精确地给出了,因为它们产生整数值,而
2、3
的平方根是无理数,因此按照符号的方式给出。
5
矩阵 数学编程语言的最有用的附加组件是做矩阵运算的能力。当然,Mathematica 具有这种 能力。为了创建一个矩阵,先作为列表的列表键入值,确保维数是矩形的,即 n
和
m
都是整数: m = {{1, 2}, {3, 4}, {5, 6}};
你可以将这个列表作为矩阵来看: m // MatrixForm
你可以实施矩阵运算,如点积: m = {{1, 2}, {3, 4}, {5, 6}}; m2 = {{10, 20, 30}, {40, 50, 60}}; m . m2 // MatrixForm
6
n x m ,其中
树莓派应用系列讲座
CICET© 2014.6
绘图 你可以使用 Mathematica 绘制有趣的事情:
例如,用下列命令画一个有 180 个面的多面体: Graphics3D[{Opacity[.8], Glow[RGBColor[1,0,0]], EdgeForm[White], Lighting -> None, PolyhedronData["Echidnahedron", "Faces"]}]
使用 MATHEMATICA 访问 GPIO 你可以从 Mathematica 访问树莓派的 GPIO 针脚,这需要使用
DeviceWrite
和
函数。为了访问 GPIO 针脚,你需要根级运行权限。做到这一点只需从终端运行 (这会启动命令行模式),或者
DeviceRead
sudo wolfram
sudo mathematica & 运行根级权限的笔记本模式。
下列命令打开 GPIO pin 14(使用 BCM 针脚编号): DeviceWrite["GPIO", 14 -> 1]
下列命令则关闭 GPIO pin 14: DeviceWrite["GPIO", 14 -> 0] 7
树莓派应用系列讲座
CICET© 2014.6
类似地,你也可以用
DeviceRead
读出一个 GPIO 输入设备的状态(例如:检查是否有按
钮被按下): button = DeviceRead["GPIO", 14]
变量
button
现在对于关闭含有
0 ,对于打开则含有 1 。
使用 MATHEMATICA 访问 照相 机 你可以使用
DeviceRead
函数完成照相机拍照。首先如常将照相机连接好,要拍摄静止照
片,键入下列命令: img = DeviceRead["RaspiCam"]
然后使用
Export
将图像存为文件: Export["/home/pi/img.jpg", img]
8