函数与程序

定义函数
Wolfram 语言有许多内置函数. 本教程讨论如何将自定义的简单函数添加到 Wolfram 语言.
作为第一个示例,我们来添加一个名为 f 的函数,该函数将其自变量进行平方. 用于定义此函数的 Wolfram 语言命令为 f[x_]:=x^2. 左侧的 _(称为空白)非常重要;它的意义将在这一节讨论. 现在,只需记住 _ 位于定义的左侧而不是右侧即可.
定义函数 f. 注意左侧的 _
f 对其自变量进行平方:
自变量可以是数字:
或者是更复杂的表达式:
可以在计算中使用 f
这里显示对 f 作的定义:
f[x_]:=x^2
定义函数 f
?f
显示 f 的定义
Clear[f]
清除 f 的所有定义
在 Wolfram 语言中定义函数.
在 Wolfram 语言中用于函数的名称(如 f)只是符号. 因此必须避免使用以大写字母开头的名称,以免与内置的Wolfram 语言函数混淆,还应该确保在早期的会话中没有使用过其他名称.
Wolfram 语言函数可以有任意个自变量:
使用 hump 函数,就像使用任何内置函数一样:
重新定义 hump,该定义将覆盖前面的定义:
显示新定义:
这将清除所有关于 hump 的定义:
当自定义函数的使命完成之后,最好清除对它所作的定义. 否则,在随后的 Wolfram 语言会话中,如果想要将同一函数用于其他目的,就会遇到麻烦. 对符号 f 所做的所有定义可以使用 Clear[f] 清除.
清除 f 的所有定义:
此时 f 没有定义可供显示:
作为过程的函数
在很多类型的计算中,您可能需要一遍遍地向 Wolfram 语言输入相同的输入. 通过定义一个包含这些输入命令的函数,可以节省很多输入时间.
构造三个项的乘积,并展开结果:
这里做的是同一个事情,但是有四个项:
定义一个函数 exprod,该函数构造 n 个项的乘积,然后将其展开:
每次使用该函数时,它将执行 ProductExpand 运算:
在 Wolfram 语言中定义的函数本质上就是过程(Procedure),执行所提供的命令. 过程可以包含多个步骤,并以分号分隔.
从整个函数获得的结果只是过程中的最后一个表达式. 请注意,在这样定义过程时,必须给过程加上括号:
运行过程:
expr1;expr2;
要运算的表达式系列
Module[{a,b,},proc]
具有局部变量 a, b, 的过程
构造过程.
在使用 Wolfram 语言编写过程时,最好把过程内部使用的变量设置为局部变量,以免它们干扰过程的外部. 这可以通过将过程设置为模块来实现,其中将列出要视为局部变量的变量.
上面定义的函数 cex 不是模块,因此 t 的值可以逃逸,并且在函数返回后仍存在:
清除变量 t
该函数定义为一个模块,其中变量 t 变为本地变量:
该函数给出的结果与前面相同:
但是,现在 t 的值不会从函数中逸出:
操纵选项
Wolfram 语言中的许多内置函数(如 Plot)可以设置各种选项. Wolfram 语言提供了一些通用机制来处理此类选项.
如果函数(如 Plot)的选项未经特定设置,Wolfram 语言将自动使用该选项的默认值. 函数 Options[function,option] 可以得到特定选项的默认值. 使用 SetOptions[function,option->value] 可以重置默认值. 请注意,如果执行此操作,则给定的默认值将保持不变,直到再次明确更改它为止.
Options[function]
列出所有选项的当前默认设置
Options[function,option]
给出特定选项的默认设置
SetOptions[function,option->value,]
重置默认值
操纵选项的默认设置.
这是 PlotPlotRange 选项的默认设置:
这将重置 PlotRange 选项的默认值. 分号阻止了 Wolfram 语言打印出 Plot 的长选项列表:
在明确重置它之前,PlotRange 选项的默认值现在为 All
PlotShow 中获得的图形对象将信息存储在它们使用的选项上. 可以通过将 Options 函数应用于这些图形对象来获取此信息.
Options[plot]
显示用于特定图的所有选项
Options[plot,option]
显示特定选项的设置
AbsoluteOptions[plot,option]
显示用于特定选项的绝对格式,即使该选项的设置为 AutomaticAll
获取绘图中所用选项的信息.
这是一个所有选项为默认设置的图:
用于 PlotRange 选项的设置为 All:
AbsoluteOptions 给出用于 PlotRange绝对自动选择的值:
尽管用变量表示图形通常很方便,如上面例子中所示,但图形自身也可以直接被运算. 在笔记本界面中执行此操作的典型方法是,复制并粘贴图形,或者在图形输出单元中键入内容,这时输出单元将转换为新的输入单元.
如果创建的图没有显式的 ImageSize,则当其被放入输入单元时,将自动缩小尺寸以便能更轻松地容纳输入.
复制和粘贴上一个示例中创建的图形输出,创建以下输入单元:
Plot 恢复为默认选项设置:
重复操作
使用 Wolfram 语言时,有时一个操作需要重复多次. 这可以通过很多方法实现. 通常最自然的做法是建立一个结构,例如包含许多元素的列表,然后将操作应用于每个元素.
另一种方法是使用 Wolfram 语言函数 Do,该函数的工作方式与 C 和 Fortran 等语言的迭代结构非常相似. Do 使用与 SumProduct 相同的 Wolfram 语言迭代器符号,如和与乘积中所述.
Do[expr,{i,imax}]
运算 expr,其中 i 从 1 到 imax 变化
Do[expr,{i,imin,imax,di}]
运算 expr,其中 iiminimaxdi 为步长变化
Print[expr]
打印 expr
Table[expr,{i,imax}]
列出 expr 的值列表,其中 i 1 到 imax 变化
执行重复操作.
这将输出前五个阶乘的值:
将结果用列表表示通常会更有用,可以进一步操作:
如果不提供迭代变量,Wolfram 语言将简单地重复指定操作,而不进行任何更改:
函数变换规则
符号的值讨论了如何使用 x->value 形式的变换规则将符号替换为值. 但是,Wolfram 系统中的变换规则概念非常笼统. 不仅可以为符号设置变换规则,还可以为任何 Wolfram 系统表达式设置变换规则.
应用变换规则 x->3x3 替换:
也可以对 f[x] 使用变换规则. 该规则不影响 f[y]
f[t_] 是一个模式,表示带有任意参数的 f
Wolfram 系统变换规则不仅可以包含文字表达式,还可以包含模式,这大概是变换规则的最强大之处. 模式是一个含有空白(下划线)的表达式,如 f[t_]. 空白可以代表任何表达式. f[t_] 的变换规则指定如何变换具有任何参数的函数 f . 请注意,如果 f[x] 的变换规则没有空白,则指定的仅是应如何变换字面上的表达式 f[x],而不能说明 f[y] 应如何变换.
当给出函数定义时,如 f[t_]:=t^2,您所做的就是告诉 Wolfram 系统尽可能自动应用变换规则 f[t_]->t^2.
可以给任何形式的表达式设置转换规则:
x^p_ 使用转换规则:
模式变换规则和定义对如何为任何类型的表达式设置模式和转换规则进行了详细说明. Wolfram 系统中的所有表达式都具有确定的符号式结构;变换规则使您可以转换结构的某些部分.