Mathematica的基本量

数的表示及其函数

简单数值类型

Mathematica中的简单数值类型有整数、分数 、有理数(有理数)、实数和复数四种。

整数: Integer, 没有误差,任意长度的准确数.

求出 \(2^{2016}\) 的位数。

IntegerDigits[2^2016]; 
Length[%]

IntegerDigits可以取出整数的每个位数
%是上一个输出结果


计算 \(48,105,120\) 的最大公约数和最小公倍数.

{GCD[48, 105, 120], LCM[48, 105, 120]}

判断 \(11117\)\(13117\) 是否为素数.

{PrimeQ[11117], PrimeQ[13117]}

\(1\) 个和第 \(101\) 个素数是多少?

{Prime[1], Prime[101]}

有理数: Rational, 既约分数

实数: Real,有限精度的浮点数。实数的输出也既可以是小数形式,
又可以是指数形式。

计算 \(1.5\) 的整数部分和小数部分。

{IntegerPart[1.5], FractionalPart[1.5]}

复数 : Complex, x + y I , 虚数单位 I , 实部 x 和虚部 y 都可以
是整数、有理数或实数.

计算 \(z=(2+5i)^2\) 的幅角和模。

z = (2 + 5 I)^2
{Arg[z], Abs[z]}

数学常数

符号 含义
Degree 角度,45Degree 表示45度
GoldenRatio 黄金分割数 1.618
Infinity 无穷大 \(\infty\)
E 自然对数的底数,e
I 虚数单位 \(\sqrt{-1}\)
Pi 圆周率 \(\pi\)

数的转换

转为整数

函数 含义
Round[x] 四舍五入
Floor[x] 向下取整
Ceiling[x] 向上取整

转为实数
N[z, n] \(z\) 为原始数,\(n\) 为精确到的位数

实数转为分数
Rationalize[z, n] \(z\) 为实数,\(n\) 为误差

常用初等函数

函数 含义
Abs[x] 实数的绝对值或复数的模
Re[z]、Im[z]、Arg[z]、Conjugate[z] 复数的实部、虚部、幅角、共轭
Power[x, y]、Sqrt[x] 幂函数、平方根
Exp[x]、Log[x]、Log[b, x] 指数函数、自然对数函数、对数函数
Max[x1, x2, …]、Min[x1, x2, …] 最大值、最小值
Sign[x] 符号函数
Sin[x]、Cos[x]、Tan[x]、Csc[x]、Sec[x]、Cot[x] 三角函数
ArcSin[x]、ArcCos[x]、ArcTan[x]、ArcCsc[x]、ArcSec[x]、ArcCot[x] 反三角函数
Sinh[x]、Cosh[x]、Tanh[x]、Csch[x]、Sech[x]、Coth[x] 双曲函数
ArcSinh[x]、ArcCosh[x]、ArcTanh[x]、ArcCsch[x]、ArcSech[x]、ArcCoth[x] 反双曲函数
Binomial[m, n]、Multinomial[n1, n2, …] \(\Big/\)多项式组合系数\(\binom{n}{m}\Big/\binom{n}{n_1,n_2,\cdots,n_m}=\frac{n !}{n_{1} ! n_{2} ! \cdots n_{m} !}\)
Factorial[n]、Factorial2[n] 阶乘 \(!\)、双阶乘 \(!!\)
FactorInteger[n] 整数分解
GCD[n1, n2, …]、LCM[n1, n2, …] 最大公约数、最小公倍数
Mod[m, n]、Mod[m, n, d] 余数
Prime[n]、PrimeQ[n]、PrimePi[n] 素数生成、素数检验、素数计数

对于Mod函数的一些注释:

  • Mod[m,n,d] gives a result x such that d<=x<d+n and x mod n=m mod n
  • Mod[m,n,d] is equivalent to m-n Quotient[m,n,d]
  • For positive x, Mod[x,1] gives the fractional part of x

列表生成

列表表示对象: 数组 (向量)、矩阵、集合、数据库中的记录、数据结构中的树和图等。

列表形式: 用花括号围起来的有限个元素,元素之间用逗号分割。 一个列表可以包含任意多个元素,列表中的元素可以是不同类型的 任何Mathematica对象。

如果一个列表的某个元素是列表,我们称之为嵌套列表

枚举元素

用一个花括号把元素都括起来

b = {1, 2, 3}; 
d = {2, 3, 4}; 
A = {b, d}
  • 方式简单明了,列表中元素较少时使用
  • 类似于数据库中的记录
  • 可以用广义表的结构

Range

RangeWolfram 系统提供的重载函数

重载项 注释
Range[n] 生成列表
Range[m,n] 生成{m,m+1,…,n}, m为1可省略,就变成了第一种
Range[m,n,d] 以m为首项, n为尾项,以d为间隔,
In:Range[10]
Out:{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}

In:s^Range[5]
Out:{s, s^2, s^3, s^4, s^5}

In:Clear[a, b]; Range[a, b, (b - a)/4]
Out:{a, a + 1/4 (-a + b), a + 1/2 (-a + b), a + 3/4 (-a + b), b}

In:Simplify[%]
Out:{a, 1/4 (3 a + b), (a + b)/2, 1/4 (a + 3 b), b}

In:Range[{3, 4}]
Out:{{1, 2, 3}, {1, 2, 3, 4}}

In:Range[Range[5]]
Out:{{1}, {1, 2}, {1, 2, 3}, {1, 2, 3, 4}, {1, 2, 3, 4, 5}}

函数Clear[a,b,...]可以清掉工作区记录的之前赋值的变量a,b,…的值.
Simplify[%]可以化简表达式.

Table

Table使用最广泛)也是Wolfram系统提供的重载函数.

重载项 注释
Table[expr, {k, m, n, d}] 循环变量 k, 首项 m, 增量为 d,终止值是 n
Table[expr, {k, m, n}] 增量为1
Table[expr, {k, n}] 首项和增量都为1
Table[expr, n] 循环n次
expr是expression的缩写,即表达式.
In:Table[i^2, 3]
Out:{i^2, i^2, i^2}

In:Table[i^2, {i, 3}]
ut:{1, 4, 9}

In:Table[x[k], {k, 5}]
Out:{x[1], x[2], x[3], x[4], x[5]}

In:Table[Sin[i], {i, 1, 10, 3}]
Out:{Sin[1], Sin[4], Sin[7], Sin[10]}

In:B = Table[10 i + j, {i, 3}, {j, 4}]
Out:{{11, 12, 13, 14}, {21, 22, 23, 24}, {31, 32, 33, 34}}

In:MatrixForm[B]
Out:
11 12 13 14
21 22 23 24
31 32 33 34

列表的元素是函数图像,Table中的函数名为循环变量,取值枚举列表
In: Table[Plot[f[x], {x, -Pi, Pi}], {f, {Sin, Cos, Tan, Cot}}]
Out:

生成随机列表

RandomIntegerRandomReal 分别表示生成随机整数和随机实数。

重载项 注释
RandomReal[] 0~1之间的随机实数
RandomInteger[10] 0~10之间的随机整数
RandomReal[{1,2},3] 生成3个1~2之间的随机实数
RandomInteger[1,{2,3}] 生成2行3列的随机0-1矩阵

生成递归表

用系统函数RecurrenceTable[]来自定义递归调用,如下(当然Fibonacci可以直接用系统函数)

In:RecurrenceTable[{f[n] == f[n - 1] + f[n - 2], f[1] == 1, f[2] == 1}, f, {n, 8}]
Out:{1, 1, 2, 3, 5, 8, 13, 21}

In:Table[Fibonacci[n], {n, 8}]
Out:{1, 1, 2, 3, 5, 8, 13, 21}

列表元素表示

可以用大类,小类,像一个struct结构体一样,记得逐层调用.
In:Clear[A, a, B, b]; A = Table[a[k], {k, 3}]
Out:{a[1], a[2], a[3]}

In:{a[1] = 111, A[[2]] = 222, A[[-1]] = 333}; A
Out:{111, 222, 333}
A[ [-1] ] 意思是倒数第一个元素。

In:B = Table[b[i, j], {i, 3}, {j, 3}]
Out:{{b[1, 1], b[1, 2], b[1, 3]}, {b[2, 1], b[2, 2], b[2, 3]}, {b[3, 1], b[3, 2], b[3, 3]}}

In:{B[[1]], B[[1, 1]], b[1, 1]}
Out:{{b[1, 1], b[1, 2], b[1, 3]}, b[1, 1], b[1, 1]}

In:{B[[2, 1]], b[2, 2], b[2, 3]} = {21, 22, 23}; B[[2]]
Out:{21, 22, 23}

In:TableForm[B]
Out:

列表相关函数

列表元素编辑

删除列表元素
Drop函数可以直接去掉指定数目的函数,但是该删除操作并不会对原始列表产生影响,除非在Drop函数的左边对原始表进行赋值。

Delete函数也可以对列表中的指定位置的元素进行删除,删除操作同样对原始列表不产生作用。

Drop 去掉倒数 \(3\) 个元素

In:t = {a, b, c, d, e, f}; Drop[t, -3]
Out:{a, b, c}

Delete 删除倒数第 \(3\) 个元素

In:s = {2, 3, 4, 5, 6}; Delete[s, -3]
Out:{2, 3, 5, 6}

In:{t, s}
Out:{{a, b, c, d, e, f}, {2, 3, 4, 5, 6}}

In:t = Drop[t, -3]; s = Delete[s, -3]; {t, s}
Out:{{a, b, c}, {2, 3, 5, 6}}

In:Delete[s, {{-1}, {-2}, {-3}}]
Out:{2}

在列表中插入元素

可使用Insert和AppendTo命令添加元素到列表中:

Insert[原始列表,插入内容,插入位置]

AppendTo[原始列表,插入内容]。

B = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};

在 B[[3]] 之前插入

In:Insert[B, x, 3]
Out:{{1, 2, 3}, {4, 5, 6}, x, {7, 8, 9}}

在B[[3]] 之后插入

In:Insert[B, x, -1]
Out:{{1, 2, 3}, {4, 5, 6}, {7, 8, 9}, x}

除了AppendTo命令外,其他对表格的操作均不对原始列表产生影响,若需要改变原始列表的内容需要在操作命令左边赋值。

In:u = v = {1, 2, 3}; Append[u, x]
Out:{1, 2, 3, x}

In:AppendTo[v, x]; {u, v}
Out:{{1, 2, 3}, {1, 2, 3, x}}

列表元素的排序

Sort函数,Reverse函数,字符排序按照Asc码进行排序.

In:Sort[{9, 3, 1, 2, 4, 6, 3, 4, 7}]
Out:{1, 2, 3, 3, 4, 4, 6, 7, 9}

In:Reverse[%]
Out:{9, 7, 6, 4, 4, 3, 3, 2, 1}

In:Sort[{9, 3, 1, 2, 4, 6, 3, 4, 7}, Greater]
Out:{9, 7, 6, 4, 4, 3, 3, 2, 1}

In:Sort[{9, 3, 1, 2, 4, 6, 3, 4, 7}, #1 > #2 &]
Out:{9, 7, 6, 4, 4, 3, 3, 2, 1}

In:Sort[{a + b, a + c, a + b + c, a - b}]
Out:{a - b, a + b, a + c, a + b + c}

列表元素求和

Apply应用命令,替换右侧列表中的Head。

Apply[函数操作,列表]

映射关系,Map[函数操作,列表]

Apply[f, expr] 函数或算子f作用于表达式expr
Apply[Plus, list] 把list 中的所有元素加在一起
Apply[Times, list] 把list 中的所有元素乘在一起

In:b = {5, 8, 5, 7, 2, 6}; Apply[Plus, b]
Out:33

In:Apply[Times, b]
Out:16800

In:Map[Sin, b]
Out:{Sin[5], Sin[8], Sin[5], Sin[7], Sin[2], Sin[6]}

列表元素合并与拆分

Flatten函数即压平操作,

Flatten[多维列表],将多维矩阵压缩成一维向量。

Partition[列表,n],将列表拆分成长度为n的子列表。

In:a = {{1, 2, 3, 4}, {4, 5, 6, 7}}; b = Flatten[a]
Out:{1, 2, 3, 4, 4, 5, 6, 7}

In:{Partition[b, 2], Partition[b, 3]}
Out:{{{1, 2}, {3, 4}, {4, 5}, {6, 7}}, {{1, 2, 3}, {4, 4, 5}}}

列表的集合运算

Union[a1, a2, ...] 多个集合的和 (并) 集,删除重复元素并排序
Intersection[a1, a2, ...] 多个集合的交集,删除重复元素并排序
Complement[a, b1, b2, ...] 删除a中的b1, b2, ... 元素和重复元素并排序

In:a = {2, 3, 5, 1, 5, 1, 0, 2, 4}; b = {3, 1, 0, 2, 0, 3, 0, 3, 2}; c = {2, 3, 4, 3, 2, 1, 2, 4, 1};Union[a, b, c]
Out:{0, 1, 2, 3, 4, 5}

In:Intersection[a, b, c]
Out:{1, 2, 3}

In:Complement[a, b, c]
Out:{5}

符号表达式

变量和变量替换

变量
在Mathematica中,变量名通常以英文字母开头,后跟字母或数字,变量名的字符长度不限。希腊字母和中文字符也可以用在变量名中。Mathematica区分英文字母的大小写,因此A与a表示两个不同的变量。建议变量名以小写字母开头。如果用大写字母表示变量,请避免使用 C、D、E、I 等系统已用的字符.

In:a = 22; b = 77; {a, b} = {b, a}
Out:{77, 22}

变量替换
表达式 /. 规则 或 ReplaceAll[表达式,规则]
其中替换规则是一个或一组形如lhs → rhs的表达式

计算三角形的面积有以下Heron公式。 $$s=\frac12(a+b+c);A=\sqrt{s(s-a)(s-b)(s-c)}$$

In:s = (a + b + c)/2; A = Sqrt[s (s - a) (s - b) (s - c)]; A /. {a -> 1, b -> 1, c -> 1}
Out:\(\frac{\sqrt{3}}{4}\)

In:A /. {a -> 3, b -> 4, c -> 5}
Out:\(6\)

In:ReplaceAll[A, {a -> 3, b -> 4, c -> 5}]
Out:\(6\)

算术表达式

一个算术表达式通常是由数或变量经算术运算符或函数连接而成,其中变量的类型可以是数值、符号、列表等,数可以是系统内嵌函数或者是用户自定义函数.

运算优先级 运算符 说 明
1 []、{}、() 函数、列表、分隔符
2 !、!! 阶乘、双阶乘
3 ++、-- 变量自加1、自减1
4 +=、 -= 、 *= 、 /= 运算后赋值给左边变量
5 ^ 方幂
6 . 矩阵乘积或向量内积
7 *、/ 乘、除
8 +、- 加、减

在不引起误解的情况下, 算术表达式中的乘号可以忽略不写。

例如:2 a、2 a、2 * a 的意义是相同的,
(a - b) (c + d) 与 (a - b) * (c + d) 的意义也是相同的,
但是 a2 与 a 2 的意义却是不同的。

算术运算的优先级遵从数学习惯,同级运算符按照从左到右的顺序,赋值则按照从右到左的顺序。

逻辑表达式

逻辑表达式通常是由逻辑运算符或关系运算符连接而成。

逻辑表达式的值:True、False 、无法确定。

关系运算符
<、<=、==、>=、>、!=

逻辑运算符

运算符 含义
And 、 && 逻辑与
Or 、 || 逻辑或
Not 、 ! 逻辑非
Equivalent 逻辑等价

参考资料

  1. 中国科学技术大学《符号计算语言Mathematica》
  2. LaplandStark的专栏
  3. Mathematica学习笔记
posted @ 2022-06-22 15:21  梧桐鹿  阅读(541)  评论(0编辑  收藏  举报