Mathematica中的四种括号

Standard

Mathematica中,一共有四种括号,它们有着不同的含义,熟悉它们的用法是看懂Mathematica代码的基础。

类型 示例 说明
圆括号 (term) 表示组合顺序的圆括号
方括号 f[x] 表示函数调用的方括号
花括号 {a,b,c} 表示列表数组的花括号
双括号 v[[i]] 表示下标索引的双括号 (Part[v, i]

 

一、基本用法

(圆括号)

a. 圆括号比较简单,它表示着运算的优先顺序,和数学中的圆括号意义相同:

Mathematica_TB_11a

 

[方括号]

a. 在调用函数时,参数列表会用方括号括起来,紧跟在函数名之后:

Mathematica_TB_12a

 

b. 在定义函数时,表示该函数所能接受的参数列表:

Mathematica_TB_12b

上面的 := 是函数定义符号,右边是函数要返回的结果,而允许的参数列表则由方括号括起来,于是,调用 foo[1] 得到1,调用 foo[3,4] 得到81

 

 

{花括号}

a. 花括号可以用来构建列表,这种结构可以认为是Mathematica里的“一维数组”:

Mathematica_TB_13a1

并且列表内容可以是任何事物:

Mathematica_TB_13a2

此外,还可以使用Range生成指定长度的列表,

Mathematica_TB_13a3

注意到生成的列表也是用花括号来表示的。

 

b. 也可以用来构造嵌套列表,如{1,{2,3},{4,5,6}}等;

特殊地,当嵌套的列表长度相等时,也表示一个矩阵:

Mathematica_TB_13b

上面使用了MatrixForm进行形象化的显示。注意到参数 matrix 被方括号所包含,这也就说明MatrixForm本质上是一个函数。

 

c.用作迭代器

Mathematica_TB_13c

按照前面的推断,TableLog2都是一个函数,之后的{x,1,10}实际上是个“迭代指示器”,意味着x要从1到10循环,并依次计算Log2[x]时对应产生的列表。

 

d.在一切需要把多个对象视为一个整体的时候,这里以画图函数举例:

普通的画图函数如下:

Mathematica_TB_13d1

这里的Plot是绘制函数的命令,Sin[x]是要绘制的函数,而{x, 0, 3π}实际上是一个“范围指示器”,他表示自变量x的取值范围是区间[0, 3π]。整行语句的意思便是:画出Sin[x][0, 3π]上的图像。

如果要同时画多个函数,只需将这些函数“打包”进一个列表:

Mathematica_TB_13d2

上下两幅图的关键不同在于要绘制的函数不同,前者是Sin[x],后者是{Sin[x], Tan[x], x}。一个是函数,一个是(函数组成的)列表,虽然类型不同,但是都可以绘制成功。

这在语义上是一致的,试比较“绘制一个/一些函数”。但在数据类型上却有很大差别,所幸的是,Mathematica自动帮我们处理了这种“语义和语法间的鸿沟”,这带来的好处便是语法的一致性,表意也很直观。你所需要做的只是把那些东西“捆绑”成一个东西,捆绑的方式就是使用花括号。

 

[[双括号]]

双括号类似于切片,通过下标索引的方式取出“数组”(实际上是列表)的值:

a.单下标索引

Mathematica_TB_14a

注:Mathematica中的下标是从1开始的。

更正:Mathematica中的下标是从0开始的。访问第0个元素会得到它的头部信息,例如{1,2}[[0]]=List,f[1,2][[0]]=f,(a+b+c)[[0]]=Plus等,可以通过 ...//Hold//FullForm 来查看其完整形式。感谢Clouds Flowing的指正!

 

b.连续下标索引

Mathematica_TB_14b

在双括号的语法中,两个分号(;;)表示左闭右闭连续下标,若省略一边,则表示该方向一直到底,而-N则代表是倒数第N个。

 

c. 多维度索引,可以对嵌套列表进行切片,这里就不展开细讲了。

Mathematica_TB_14c

前者是矩阵取第二行,后者是取矩阵第二列元素,matrix定义如前,是{{1,2},{3,4},{5,6}}

下例展示了如何巧妙的得到600851475143的最大质因数,此题来自EulerProject03

Mathematica_TB_14c_example

 

 

 

 

恭喜!至此你已学会Mathematica中四种括号的基本语法,并且可以进行基本的函数调用,数据操纵啦!

 

 

想了解更多?下面有官方的教学帮助哦~

How To | 正确使用括号和大括号
How To | 使用 Mathematica 的语法

  • 图标好评

    • @_@

      和你的头像一样啊:D

  • Clouds Flowing

    数组下标是从0开始的,0是列表头(类似Pascal的string),比如`{1,2}[[0]]==List`,`f[1,2][[0]]==f`,`(a+b+c)[[0]]==Plus`,更多关于列表头的信息可以通过`//Hold//FullForm`来查看。在`Thread`,`Through`,`Distribute`中都用到了列表头。

    • Clouds Flowing

      评论不支持Markdown格式简直差评

      • 这个评论区是个跨域的iframe,jQuery读不到里面的内容,于是就不支持MarkDown格式了

    • 已修改,感谢指正!