Mathematica的常用操作和常用函数

本文介绍了Mathematica的常用操作和常用函数。

常用命令

  • 运行代码 Shift+Enter

  • 中止运行 Alt+.

  • 输入下标 Ctrl+_

  • 输入上标 Ctrl+^

  • 插入根式 Ctrl+2

  • 插入分数 Ctrl+/

  • 输入特殊字符 Esc

语法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
(* 使用最近的输出 *)
% (* 使用上次计算结果 *)
%% (* 使用上上次计算结果 *)

(* 定义变量 *)
element = 1; position = 2;

(* 创建列表 *)
list = {1, 2, 3}

(* 访问列表元素,从1开始 *)
list[[1]] (* 第一个 *)
list[[-1]] (* 最后一个 *)
list[[2;;3]] (* 切片,第二至三个 *)

(* 修改表元素,不直接修改,返回修改后的表 *)
Length[list] (* 返回第一层长度 *)
Append[list, element] (* 在最后插入 *)
Prepend[list, element] (* 在最前插入 *)
Delete[list, position] (* 删除第position个元素 *)
Insert[list, element, position] (* 在第position个元素前插入element *)
Union[list, list] (* 并集,删除重复元素 *)
Join[list, list] (* 连接,不删除重复元素 *)

(* 关联 *)
association = <|"a"->1, "b"->2|>
association = Association[{"a"->1, "b"->2}]
association["a"]
Keys[association]
Values[association]

(* 迭代器形式 *)
Table[x, {x, 5}] (* 变量名,最大值 *)
Table[x, {x, 1, 5}] (* 变量名,最小值,最大值 *)
Table[x, {x, 1, 5, 2}] (* 变量名,最小值,最大值,步长 *)
Table[x, {x, {2, 3, 5}}] (* 变量名,值的列表 *)
Table[{x,y}, {x,1,3}, {y,5,7}] (* 嵌套,第一个是外索引 *)

(* 赋值和延迟赋值 *)
a = RandomReal[] (* 立即赋值,每次访问a的值相同 *)
b := RandomReal[] (* 延迟赋值,每次访问b时才计算,不同 *)

(* 创建规则,用a替换b *)
rule = a->b

(* 应用规则(替换) *)
3 b /. rule
x + y /. {x->1, y->2}

(* 定义函数,下划线表示接受任意类型,输出最后一个值 *)
add[x_, y_] := (c = x + 2; d = y + 2; c + d)

(* 定义分段函数 *)
f[x_] := x /; x>0
f[x_] := -x /; x<=0

(* 纯函数 *)
(#+1)& (* 只有一个变量,使用时可为(#+1)&[5] *)
(#1+#2)& (* 多个变量,使用时可为(#1+#2)&[5,6] *)

(* 应用函数 *)
f@x (* 普通函数应用,等价于f[x] *)
x//f (* 普通函数应用,等价于f[x] *)
f@{{a,b}, {c,d}} (* 普通应用,等价于f[{{a,b},{c,d}}] *)

f@@{{a,b}, {c,d}} (* 去括号(1)的应用,等价于f[{a,b},{c,d}] *)
Apply[f,{{a,b}, {c,d}}] (* 去括号(1)的应用,等价于f[{a,b},{c,d}],不直接修改原列表,而是返回新列表 *)

f/@{{a,b}, {c,d}} (* 在括号(1)应用,等价于{f[{a,b}],f[{c,d}]} *)
Map[f,{{a,b}, {c,d}}] (* 在括号(1)应用,等价于{f[{a,b}],f[{c,d}]} *)

f@@@{{a,b}, {c,d}} (* 在括号(1)内去括号(2)应用,等价于{f[a,b],f[c,d]} *)

(* 函数操作 *)
Select[{1, -1, 2, -2, 3}, # > 0 &]
Cases[{1, 1, f[a], 2, 3, y, f[8], 9, f[10]}, _Integer]
Cases[{1, 1, f[a], 2, 3, y, f[8], 9, f[10]}, Except[_Integer]]
Cases[{1, 1, f[a], 2, 3, y, f[8], 9, f[10]}, f[x_] -> x]

(* 过程式编程 *)
Module[{x, y}, x=2; y=3; x+y] (* 定义和使用局部变量 *)
x=1; If[x!=0, Print["Not zero"], Print["Zero"]] (* 使用if *)
For[k = 0, k < 5, k++, Print[k]] (* 使用for循环,有多条循环体语句时,使用;分隔 *)
n = 17; While[n++ < 20, Print[n]] (* 使用while循环 *)
Do[Print[{i, j}], {i, 4}, {j, i - 1}] (* 使用do循环 *)
Break[] (* 退出最接近的内循环 *)
Continue[] (* 进行本循环的下一步 *)
Return[expr] (* 返回函数中的值expr *)

(* 查看选项 *)
Options[Plot]

(* 清除变量 *)
Clear[list, association](* 清除指定变量 *)
Clear["Global`*"] (* 清除所有变量 *)

常量

1
2
3
I	(* 单位虚数 *)
Pi (* 圆周率 *)
E (* 自然常数 *)

数学

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
order = 3

(* 复数 *)
Re[1+2 I] (* 取实部 *)
Im[1+2 I] (* 取虚部 *)

(* 方程求解 *)
Solve[a+b==2 && a-b==0, {a, b}] (* 求解方程组 *)
Solve[{a+b==2, a-b==0}, {a, b}] (* 求解方程组 *)
NSolve[{a+b==2, a-b==0}, {a, b}] (* 数值求解方程组 *)
FindRoot[Cos[x] == x, N{x, 0}] (* 给定初值求解数值解 *)
Eliminate[{a x + y == 0, 2 x + (1 - a) y == 1}, y] (* 消去变量 *)

(* 表达式化简 *)
Numerator[a/b] (* 获得分子 *)
Denominator[a/b] (* 获得分母 *)
Coefficient[x^2+2 x+1, x] (* 取得某一项的系数 *)
Collect[(x+1)^2,x] (* 合并同类项 *)
Expand[(x+1)^2] (* 展开 *)
Together[1/(x+1)+1/(x+2)] (* 归并,通分 *)
Apart[1/((x+1) (x+2))] (* 分解 *)
Factor[x^2+2 x+1] (* 因式分解 *)
Simplify[x^2+2 x+1] (* 化简 *)
Simplify[Sqrt[x^2], x>0] (* 带条件的化简 *)
Simplify[Re[3 x + 4 y I], {x, y} \[Element] Reals] (* 带条件的化简 *)
ComplexExpand[(x+I)^2] (* 复数展开 *)

(* 微积分 *)
Limit[x/Sin[x], x->0] (* 求导数 *)
D[x^n, x] (* 求导数 *)
D[x^n, {x,order]] (* 求高阶导数 *)
Integrate[f, x] (* 求不定积分 *)
Integrate[f, {x, xmin, xmax}] (* 求定积分 *)
NIntegrate[f, {x, xmin, xmax}] (* 求数值定积分 *)

(* 傅里叶变换 *)
f[x_] := Piecewise[{{1, -t < x < t}, {0, true}}] (* 定义分段函数 *)
FourierCoefficient[f[x], x, 0] (* 复数形式的傅里叶级数,积分范围为-Pi至Pi *)
FourierCosCoefficient[f[x], x, 0] (* Cos形式的傅里叶级数,积分范围为0至Pi,直流值为2倍 *)
FourierSinCoefficient[f[x], x, 0] (* Sin形式的傅里叶级数,积分范围为0至Pi,直流值为2倍 *)

(* 级数 *)
Series[1/(1+x), {x,0,3}] (* 级数展开 *)

矩阵计算

1
2
3
4
5
6
7
8
9
10
11
matrix = { {1, 0}, {0, 1} }
order = 3

Det[matrix] (* 求矩阵的行列式 *)
Inverse[matrix] (* 求矩阵的逆 *)
Transpose[matrix] (* 求矩阵的转置 *)
ConjugateTranspose[matrix] (* 求矩阵的共轭转置 *)
IdentityMatrix[order] (* 给出单位矩阵 *)
Dot[matrix, matrix] (* 矩阵点积,或用. *)
DiagonalMatrix[{50,50}] (* 对角阵 *)
IdentityMatrix[3] (* 单位阵 *)

输出

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
matrix = { {1, 0}, {0, 1} }
expression = x^2/Sqrt[y]
f[x_] := Sin[x]
g[x_] := Cos[x]
xmin := -Pi
xmax := Pi

(* 输出控制,适合使用//运算符 *)
N[Pi] (* 以数值形式输出 *)
MatrixForm[matrix] (* 以矩阵形式输出 *)
TraditionalForm[expression] (* 以传统形式输出 *)
FullForm[expression] (* 以函数记号形式输出 *)

(* 绘图 *)
Plot[{f[x], g[x]}, {x, xmin, xmax}] (* 自动绘图 *)
Plot3D[]
ContourPlot[]

x = {1,3,5,7,9}; y = x^2;
example = Flatten[Table[{x, y, x+y}, {x,20}, {y,20}],1];

ListPlot[Table[{x[[k]], y[[k]]}, {k, Length[x]}]] (* 散点图 *)
ListLinePlot[Table[{x[[k]], y[[k]]}, {k, Length[x]}]] (* 折线图 *)
ListPlot3D[example] (* 3D折线图 *)
ListContourPlot[example] (* 等高线图 *)

(* 导出数据 *)
Export["dest.dat", matrix]

实例

S、Y、Z参数的转换

定义了N端口的S、Y、Z参数转换的几个函数,各端口阻抗要求相同

1
2
3
4
5
6
7
8
9
10
11
12
13
14
Y2S[Y_, Zc_] := Module[{E0, G0, Z0},
E0 = IdentityMatrix[Length[Y]]; G0 = (1/Zc) E0; Z0 = Zc E0;
G0.(E0 - ConjugateTranspose[Z0].Y).Inverse[(E0 + Z0.Y)].Inverse[G0]]
Z2S[Z_, Zc_] := Module[{E0, G0, Z0},
E0 = IdentityMatrix[Length[Z]]; G0 = (1/Zc) E0; Z0 = Zc E0;
G0.(Z - ConjugateTranspose[Z0]).Inverse[(Z + Z0)].Inverse[G0]]
S2Y[S_, Zc_] := Module[{E0, G0, Z0},
E0 = IdentityMatrix[Length[S]]; G0 = (1/Zc) E0; Z0 = Zc E0;
Inverse[G0].Inverse[S.Z0 + ConjugateTranspose[Z0]].(E0 - S).G0]
S2Z[S_, Zc_] := Module[{E0, G0, Z0},
E0 = IdentityMatrix[Length[S]]; G0 = (1/Zc) E0; Z0 = Zc E0;
Inverse[G0].Inverse[E0 - S].(S.Z0 + ConjugateTranspose[Z0]).G0]
Z2Y[Z_] := Inverse[Z]
Y2Z[Z_] := Inverse[Y]

参考

  1. Wolfram Language - Fast Introduction for Programmers, https://www.wolfram.com/language/fast-introduction-for-programmers/.
  2. Wolfram Language & System Documentation Center, https://reference.wolfram.com/language/index.html.
  3. Qucs Technical Papers, http://qucs.sourceforge.net/tech/technical.html.
0%