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
Range
是 Wolfram
系统提供的重载函数
重载项 | 注释 |
---|---|
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:
生成随机列表
RandomInteger
和RandomReal
分别表示生成随机整数和随机实数。
重载项 | 注释 |
---|---|
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 | 逻辑等价 |