多语言展示
当前在线:210今日阅读:4今日分享:26

怎么用Mathematica进行模式匹配?

给出一个列表:A = {{b, h[x], c, 2^x, 6, {1/2, 2^c^b, 9, d}, x^6, b}, e, 12.3, 3^x, x^3, 5/6, 3, b, 5, m + n, 6, {y^7, u + 7, 2 + 3, 7, t, 1, h}}要求用Mathematica的模式匹配的方法,从A里面找出指定的元素。
工具/原料
1

电脑

2

Mathematica

基本的模式匹配方法
1

明确一下,A是由三层列表构成的。

2

匹配第一层的所有整数:Cases[A, _Integer]只得到3个整数,因为Mathematica把A里面的子列表视为A的一个元素。看,下一步。

3

找出A的第一层的子列表:Cases[A, _List]

4

找出A的第一层的浮点数:Cases[A, _Real]结果只找到12.3,不包括里面的整数和分数。原因是,Real是浮点数,不是全体实数。

5

找出A里面第一层的有理数:Cases[A, _Rational]同样,Mathematica只找到5/6这个分数,把小数和整数都排除在外。

6

找出A第一层的奇数:Cases[A, t_ /; Mod[t, 2] == 1]

7

找出A第一层的所有非偶数:Cases[A, t_ /; Mod[t, 2] != 0]

8

找出A的第一层的所有字母:Cases[A, _Symbol]m+n被视为表达式,不是字母。

9

找出A第一层的加法表达式:Cases[A, _Plus]

10

A的第一层里面,以x为指数的幂运算表达式:Cases[A, _^x]

11

Cases[A, x^_]

深入
1

深入第二层,寻找A里面幂运算表达式:Cases[A, _Power, 2]

2

寻找A里面所有的幂运算表达式:Cases[A, _Power, Infinity]

3

A里面的所有字母:Cases[A, _Symbol, Infinity]令人吃惊的是,Mathematica竟然可以深入到表达式里面寻找字母,比如m和n。

4

寻找所有的加法表达式:Cases[A, _Plus, Infinity]为什么2+3没有找出来?因为对A进行定义的时候,2+3已经被算出结果了。

注意事项

与模式匹配(Cases)用法相似的,是选择(Select)。

推荐信息