跳转到内容

Mathematica/常用结构

来自维基教科书,自由的教科书

常用结构和操作

[编辑 | 编辑源代码]

在 Mathematica 中,一个指导原则是几乎所有在 Mathematica 中表示的对象都具有统一的结构。例如,表达式 如果输入,将被表示为如果它被写为

In[8]:= x^4 + 1
Out[8]= 1+x4

如果FullForm命令用于此表达式,但是

In[9]:= FullForm[x^4 + 1]
Out[9]= Plus[1, Power[x, 4]]

Mathematica 中的所有对象,除了原子对象(如符号、数字和字符串)之外,都具有基本形式 head[e1, e2, ...](这可能以其他方式显示或输入)。例如,上述表达式的头部是Plus. 列表也具有这种结构,其中头部是List, 元素是 e1, e2 等。head 的概念也为原子对象定义(Symbol对于符号,Integer对于整数等),但它们没有可提取的子部分。

此原则允许与列表无关的普通表达式使用列表运算符进行操作

In[10]:= Expand[(Cos[x] + 2 Log[x^11])/13][[2, 1]]
Out[10]= 2/13

反之亦然——列表可以修改为表现得像普通表达式

In[11]:= Map[Apply[Log, #] &, {{2, x}, {3, x}, {4, x}}]
Out[11]= {Log[x]/Log[2], Log[x]/Log[3], Log[x]/Log[4]}

其中Apply函数将其第二个参数的头部更改为第一个参数的头部,并且Map的行为类似于在许多函数式语言中找到的 映射函数。请注意,Log[b,x]是底数b对数,它被 转换为Log[x]/Log[b]在输入时。

由于在 Mathematica 中表示的常规数学对象与简单列表结构之间的这种等价性,一些内置的 Mathematica 函数允许 线程,其中函数在列表上映射自身,而无需太多其他说明。事实上,Apply当被调用时,它本身在列表上进行线程

In[12]:= Apply[Log, {{2,x}, {3,x}, {4,x}}, 1]
Out[12]= {Log[x]/Log[2], Log[x]/Log[3], Log[x]/Log[4]}

其中第三个参数为 1 指定Apply仅在其参数的第一个级别(这是我们想要的)中替换其参数的头部,并且等效于上面的示例。

华夏公益教科书