Mathematica 详细教程

目录

  1. Mathematica简介
  2. 安装与界面介绍
  3. 基本运算和语法
  4. 列表和矩阵操作
  5. 符号计算
  6. 函数编程
  7. 图形和可视化
  8. 数据导入导出
  9. 编程结构
  10. 模式匹配
  11. 动态交互
  12. 数值计算
  13. 高级应用
  14. 包和上下文

1. Mathematica简介

什么是Mathematica?

Mathematica是由Wolfram Research开发的现代技术计算系统,集成了符号计算、数值计算、图形可视化、编程语言等功能。

Mathematica的特点

  • 强大的符号计算能力
  • 交互式文档系统(Notebook)
  • 丰富的内置函数库
  • 优雅的函数式编程范式
  • 强大的图形和可视化功能
  • 与Wolfram语言的深度集成

Mathematica应用领域

  • 数学研究和教育
  • 工程计算和仿真
  • 数据分析和可视化
  • 科学计算
  • 算法开发
  • 技术文档生成

2. 安装与界面介绍

安装Mathematica

  1. 访问Wolfram官网:https://www.wolfram.com/
  2. 下载安装程序
  3. 激活许可证

Notebook界面

  • 输入单元格:用于输入代码
  • 输出单元格:显示计算结果
  • 文本单元格:用于文档说明
  • 标题单元格:组织文档结构

基本操作

1
2
3
(* 执行代码:Shift + Enter *)
(* 添加注释:(* 注释内容 *) *)
(* 获取帮助:?函数名 *)

3. 基本运算和语法

算术运算

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
(* 基本算术运算 *)
2 + 3 (* 加法 *)
5 - 2 (* 减法 *)
3 * 4 (* 乘法 *)
10 / 2 (* 除法 *)
2 ^ 3 (* 幂运算 *)
2 ** 3 (* 另一种幂运算表示 *)

(* 数学常数 *)
Pi (* 圆周率 *)
E (* 自然常数 *)
I (* 虚数单位 *)
Infinity (* 无穷大 *)
Degree (* 角度转弧度的系数 *)

(* 数学函数 *)
Sin[Pi/2] (* 正弦函数 *)
Cos[0] (* 余弦函数 *)
Exp[1] (* 指数函数 *)
Log[E] (* 自然对数 *)
Sqrt[4] (* 平方根 *)
Abs[-5] (* 绝对值 *)

变量和赋值

1
2
3
4
5
6
7
8
9
10
11
(* 变量赋值 *)
x = 5
y = 3
x + y

(* 延迟赋值 *)
a := RandomReal[]

(* 清除变量 *)
Clear[x, y]
x =.

比较和逻辑运算

1
2
3
4
5
6
7
8
9
10
11
12
(* 比较运算 *)
5 == 5 (* 等于 *)
5 != 3 (* 不等于 *)
5 > 3 (* 大于 *)
5 < 10 (* 小于 *)
5 >= 5 (* 大于等于 *)

(* 逻辑运算 *)
True && False (* 与 *)
True || False (* 或 *)
! True (* 非 *)
Xor[True, False] (* 异或 *)

4. 列表和矩阵操作

列表创建和操作

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
(* 创建列表 *)
list1 = {1, 2, 3, 4, 5}
list2 = Range[10] (* 1到10的列表 *)
list3 = Range[0, 1, 0.1] (* 0到1,步长0.1 *)

(* 列表操作 *)
Length[list1] (* 列表长度 *)
First[list1] (* 第一个元素 *)
Last[list1] (* 最后一个元素 *)
Part[list1, 3] (* 第三个元素 *)
list1[[3]] (* 另一种索引方式 *)

(* 列表函数 *)
Total[list1] (* 求和 *)
Mean[list1] (* 平均值 *)
Min[list1] (* 最小值 *)
Max[list1] (* 最大值 *)
Sort[list1] (* 排序 *)
Reverse[list1] (* 反转 *)

列表生成和操作

1
2
3
4
5
6
7
8
9
10
11
12
13
14
(* 列表生成 *)
Table[i^2, {i, 10}] (* 生成平方数列表 *)
Array[#^2 &, 10] (* 使用纯函数生成 *)

(* 列表操作 *)
Append[list1, 6] (* 添加元素 *)
Prepend[list1, 0] (* 在开头添加 *)
Insert[list1, 10, 3] (* 在指定位置插入 *)
Delete[list1, 3] (* 删除元素 *)

(* 列表切片 *)
list1[[2 ;; 4]] (* 第2到第4个元素 *)
list1[[;; 3]] (* 前3个元素 *)
list1[[-3 ;;]] (* 后3个元素 *)

矩阵操作

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
(* 矩阵创建 *)
matrix1 = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}}
matrix2 = IdentityMatrix[3] (* 单位矩阵 *)
matrix3 = RandomReal[1, {3, 3}] (* 随机矩阵 *)

(* 矩阵运算 *)
matrix1 + matrix1 (* 矩阵加法 *)
matrix1 . matrix1 (* 矩阵乘法 *)
Transpose[matrix1] (* 转置 *)
Inverse[matrix1] (* 逆矩阵 *)
Det[matrix1] (* 行列式 *)
MatrixForm[matrix1] (* 矩阵形式显示 *)

(* 特征值和特征向量 *)
Eigenvalues[matrix1]
Eigenvectors[matrix1]

5. 符号计算

符号表达式

1
2
3
4
5
6
7
8
9
10
11
(* 符号变量 *)
x =.
y =.
expr = x^2 + 2*x + 1

(* 表达式操作 *)
Expand[(x + y)^3] (* 展开 *)
Factor[x^2 - y^2] (* 因式分解 *)
Simplify[(x^2 - 1)/(x - 1)] (* 化简 *)
Together[1/x + 1/y] (* 通分 *)
Apart[(x + 1)/(x^2 - 1)] (* 部分分式分解 *)

方程求解

1
2
3
4
5
6
7
8
9
10
11
12
13
14
(* 代数方程 *)
Solve[x^2 - 3*x + 2 == 0, x]
Solve[{x + y == 5, x - y == 1}, {x, y}]

(* 数值解 *)
NSolve[x^5 - x - 1 == 0, x]
FindRoot[Sin[x] == x/2, {x, 1}]

(* 微分方程 *)
DSolve[y'[x] == y[x], y[x], x]
DSolve[{y'[x] == -2*y[x], y[0] == 1}, y[x], x]

(* 偏微分方程 *)
DSolve[D[u[x, t], t] == D[u[x, t], x, x], u[x, t], {x, t}]

微积分

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
(* 微分 *)
D[x^3, x] (* 一阶导数 *)
D[x^3, {x, 2}] (* 二阶导数 *)
D[Sin[x*y], x, y] (* 混合偏导 *)

(* 积分 *)
Integrate[x^2, x] (* 不定积分 *)
Integrate[x^2, {x, 0, 1}] (* 定积分 *)
Integrate[Sin[x*y], {x, 0, 1}, {y, 0, 1}] (* 多重积分 *)

(* 极限 *)
Limit[Sin[x]/x, x -> 0]
Limit[(1 + 1/x)^x, x -> Infinity]

(* 级数 *)
Series[Sin[x], {x, 0, 5}] (* 泰勒级数 *)
Sum[1/n^2, {n, 1, Infinity}] (* 级数求和 *)

6. 函数编程

函数定义

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
(* 简单函数定义 *)
f[x_] := x^2
f[5]

(* 多参数函数 *)
g[x_, y_] := x^2 + y^2
g[3, 4]

(* 条件函数 *)
h[x_] := If[x > 0, x^2, -x^2]
h[2]
h[-2]

(* 分段函数 *)
p[x_] := Piecewise[{{x^2, x < 0}, {x^3, x >= 0}}]
p[-2]
p[2]

纯函数

1
2
3
4
5
6
7
(* 纯函数 *)
#^2 & (* 平方函数 *)
#1^2 + #2^2 & (* 两个参数的函数 *)

(* 使用纯函数 *)
Map[#^2 &, {1, 2, 3, 4, 5}]
Function[x, x^2] /@ {1, 2, 3, 4, 5} (* 另一种写法 *)

函数操作

1
2
3
4
5
6
7
8
9
10
(* 函数组合 *)
f = Sin[#] &;
g = #^2 &;
Composition[f, g][x] (* f(g(x)) *)
f @* g @ x (* 另一种组合写法 *)

(* 函数应用 *)
Through[(f + g)[x]] (* f(x) + g(x) *)
Nest[f, x, 3] (* f(f(f(x))) *)
FixedPoint[Cos, 1.0] (* 不动点 *)

7. 图形和可视化

二维图形

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
(* 基本绘图 *)
Plot[Sin[x], {x, 0, 2 Pi}]

(* 多个函数 *)
Plot[{Sin[x], Cos[x]}, {x, 0, 2 Pi},
PlotLegends -> "Expressions"]

(* 参数绘图 *)
ParametricPlot[{Cos[t], Sin[t]}, {t, 0, 2 Pi}]

(* 极坐标绘图 *)
PolarPlot[1 + Cos[t], {t, 0, 2 Pi}]

(* 隐函数绘图 *)
ContourPlot[x^2 + y^2 == 1, {x, -1, 1}, {y, -1, 1}]

图形定制

1
2
3
4
5
6
7
8
9
10
11
12
13
(* 定制图形样式 *)
Plot[Sin[x], {x, 0, 2 Pi},
PlotStyle -> {Red, Thick},
AxesLabel -> {"x", "Sin[x]"},
PlotLabel -> "正弦函数",
GridLines -> Automatic,
Filling -> Axis]

(* 多个子图 *)
GraphicsGrid[{
{Plot[Sin[x], {x, 0, 2 Pi}], Plot[Cos[x], {x, 0, 2 Pi}]},
{Plot[Tan[x], {x, 0, Pi/2}], Plot[Exp[-x], {x, 0, 2}]}
}]

三维图形

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
(* 三维曲面 *)
Plot3D[Sin[x y], {x, 0, 3}, {y, 0, 3}]

(* 参数曲面 *)
ParametricPlot3D[{Cos[u], Sin[u] + Cos[v], Sin[v]},
{u, 0, 2 Pi}, {v, -Pi, Pi}]

(* 三维等高线 *)
ContourPlot3D[x^2 + y^2 - z^2 == 1,
{x, -2, 2}, {y, -2, 2}, {z, -2, 2}]

(* 三维图形样式 *)
Plot3D[Sin[x y], {x, 0, 3}, {y, 0, 3},
ColorFunction -> "TemperatureMap",
Mesh -> None,
Boxed -> False,
Axes -> False]

数据可视化

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
(* 散点图 *)
data = Table[{x, Sin[x] + RandomReal[0.1]}, {x, 0, 2 Pi, 0.1}];
ListPlot[data]

(* 直方图 *)
randomData = RandomVariate[NormalDistribution[0, 1], 1000];
Histogram[randomData]

(* 条形图 *)
BarChart[{1, 3, 4, 2, 5},
ChartLabels -> {"A", "B", "C", "D", "E"}]

(* 饼图 *)
PieChart[{1, 3, 4, 2, 5},
ChartLabels -> {"A", "B", "C", "D", "E"}]

8. 数据导入导出

文件操作

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
(* 导入数据 *)
data = Import["data.csv"] (* CSV文件 *)
Export["output.csv", data] (* 导出CSV *)

(* 文本文件 *)
text = Import["document.txt", "Text"]
Export["result.txt", "Hello Mathematica"]

(* Excel文件 *)
excelData = Import["data.xlsx"]
Export["results.xlsx", excelData]

(* 图像文件 *)
img = Import["image.jpg"]
Export["processed.png", img]

数据格式

1
2
3
4
5
6
7
8
9
10
(* JSON格式 *)
json = ImportString["{\"name\": \"Alice\", \"age\": 25}", "JSON"]
ExportString[<|"name" -> "Bob", "age" -> 30|>, "JSON"]

(* XML格式 *)
xml = ImportString["<person><name>Alice</name><age>25</age></person>", "XML"]

(* Mathematica格式 *)
Save["data.m", {x, y, data}]
Get["data.m"]

9. 编程结构

流程控制

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
(* If语句 *)
x = 5;
If[x > 0, "Positive", "Negative"]

(* Which语句 *)
Which[
x < 0, "Negative",
x == 0, "Zero",
x > 0, "Positive"
]

(* Switch语句 *)
Switch[x,
1, "One",
2, "Two",
_, "Other"
]

(* Do循环 *)
Do[Print[i], {i, 5}]

(* While循环 *)
n = 1;
While[n < 10, Print[n]; n++]

(* For循环 *)
For[i = 1, i <= 5, i++, Print[i^2]]

函数式编程结构

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
(* Map应用函数到列表 *)
Map[f, {a, b, c}]
f /@ {a, b, c} (* 简写形式 *)

(* Apply函数到参数 *)
Apply[f, {a, b, c}]
f @@ {a, b, c} (* 简写形式 *)

(* Fold累积操作 *)
Fold[f, x, {a, b, c}] (* f[f[f[x, a], b], c] *)

(* Nest重复应用 *)
Nest[f, x, 3] (* f[f[f[x]]] *)

(* Select筛选 *)
Select[{1, 2, 3, 4, 5}, # > 2 &]

(* 列表推导式 *)
Table[i^2, {i, 10}]

10. 模式匹配

模式基础

1
2
3
4
5
6
7
8
9
10
11
12
13
(* 基本模式 *)
f[x_] := x^2 (* 任何表达式 *)
f[x_Integer] := x^3 (* 整数 *)
f[x_Real] := 2*x (* 实数 *)
f[x_?EvenQ] := x/2 (* 偶数 *)
f[x_?PrimeQ] := x + 1 (* 质数 *)

(* 列表模式 *)
g[{a_, b_}] := a + b (* 两个元素的列表 *)
g[{x_, y_, z_}] := x*y*z (* 三个元素的列表 *)

(* 默认模式 *)
h[x_, y_: 1] := x^y (* y默认为1 *)

模式应用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
(* 替换规则 *)
{x, y, z} /. x -> 1 (* 单个替换 *)
{x, y, z} /. {x -> 1, y -> 2} (* 多个替换 *)

(* 条件模式 *)
f[x_ /; x > 0] := Sqrt[x]
f[x_ /; x <= 0] := 0

(* 重复模式 *)
p[a__] := Plus[a] (* 任意多个参数 *)
q[a_, b__] := {a, {b}} (* 至少一个参数 *)

(* 可选模式 *)
r[Optional[x_, 0]] := x^2

11. 动态交互

动态表达式

1
2
3
4
5
6
7
8
9
10
(* 动态变量 *)
x = 1;
Dynamic[x] (* 动态显示x的值 *)

(* 动态更新 *)
Dynamic[Plot[Sin[a x], {x, 0, 2 Pi}], TrackedSymbols :> {a}]

(* 滑块控制 *)
Manipulate[Plot[Sin[frequency x], {x, 0, 2 Pi}],
{frequency, 1, 5}]

交互式界面

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
(* 复杂的Manipulate *)
Manipulate[
Plot[A Sin[ω x + φ], {x, 0, 2 Pi},
PlotRange -> {{0, 2 Pi}, {-5, 5}}],
{A, 1, 5},
{ω, 1, 10},
{φ, 0, 2 Pi}]

(* 动态模块 *)
DynamicModule[{count = 0},
Column[{
Dynamic[count],
Button["增加", count++],
Button["减少", count--]
}]]

12. 数值计算

数值方法

1
2
3
4
5
6
7
8
9
10
11
12
13
(* 数值积分 *)
NIntegrate[Exp[-x^2], {x, 0, Infinity}]

(* 数值微分 *)
ND[Sin[x], x, 1]

(* 数值求解方程 *)
FindRoot[Cos[x] == x, {x, 0.5}]
NSolve[x^3 - 2 x + 1 == 0, x]

(* 数值优化 *)
FindMinimum[x^2 + 2 x + 1, {x, 0}]
NMinimize[x^2 + y^2, {x, y}]

数值精度

1
2
3
4
5
6
7
8
9
(* 精度控制 *)
N[Pi, 50] (* 计算Pi到50位精度 *)
Precision[1.0] (* 查看精度 *)
SetPrecision[1.0, 20] (* 设置精度 *)

(* 高精度计算 *)
x = N[1/3, 30] (* 30位精度的1/3 *)
y = N[Pi, 30] (* 30位精度的Pi *)
x * y

13. 高级应用

图像处理

1
2
3
4
5
6
7
8
9
10
(* 图像导入和处理 *)
img = Import["ExampleData/lena.tif"];
ImageDimensions[img]
ColorNegate[img] (* 颜色反转 *)
ImageEffect[img, "OilPainting"] (* 油画效果 *)

(* 图像滤波 *)
Blur[img, 5] (* 模糊 *)
Sharpen[img] (* 锐化 *)
EdgeDetect[img] (* 边缘检测 *)

信号处理

1
2
3
4
5
6
7
8
9
10
11
(* 信号生成 *)
signal = Table[Sin[2 Pi t] + 0.5 RandomReal[], {t, 0, 1, 0.01}];
ListLinePlot[signal]

(* 傅里叶变换 *)
fourier = Fourier[signal];
ListPlot[Abs[fourier], PlotRange -> All]

(* 滤波器设计 *)
filtered = LowpassFilter[signal, 0.1];
ListLinePlot[{signal, filtered}]

机器学习

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
(* 分类示例 *)
trainingData = {
{1, 2} -> "A", {2, 1} -> "A",
{4, 5} -> "B", {5, 4} -> "B"
};

classifier = Classify[trainingData]
classifier[{3, 3}]

(* 预测 *)
Predict[{{1} -> 2, {2} -> 4, {3} -> 6}][4]

(* 聚类 *)
data = RandomReal[1, {100, 2}];
clusters = FindClusters[data];
ListPlot[clusters, PlotStyle -> PointSize[0.02]]

14. 包和上下文

创建包

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
(* 简单的包文件:MyPackage.m *)

BeginPackage["MyPackage`"]

MyFunction::usage = "MyFunction[x] computes x^2."
MyConstant::usage = "MyConstant is a useful constant."

Begin["`Private`"]

MyConstant = 2.71828;
MyFunction[x_] := x^2

End[]

EndPackage[]

使用包

1
2
3
4
5
6
(* 加载包 *)
<< MyPackage.m

(* 使用包中的函数 *)
MyFunction[5]
MyConstant

上下文管理

1
2
3
4
5
6
7
8
9
10
11
(* 查看当前上下文 *)
$Context
$ContextPath

(* 创建新上下文 *)
Begin["MyContext`"]
x = 10
End[]

(* 访问上下文中的符号 *)
MyContext`x

学习资源推荐

官方资源

推荐书籍

  • 《Mathematica全书》
  • 《Mathematica编程:高级导论》
  • 《Wolfram语言入门》

实践建议

  1. 交互式学习:利用Notebook环境边学边练
  2. 查阅文档:善用F1键和?命令
  3. 从小开始:从简单计算逐步过渡到复杂编程
  4. 学习模式:掌握Mathematica特有的编程范式
  5. 参与社区:Wolfram社区有很多学习资源

调试技巧

1
2
3
4
5
6
7
8
9
10
(* 调试工具 *)
Echo[x] (* 显示中间结果 *)
Print["x = ", x] (* 打印调试信息 *)

(* 跟踪计算 *)
Trace[1 + 2 + 3] (* 跟踪计算步骤 *)

(* 性能分析 *)
AbsoluteTiming[expr] (* 计算时间 *)
MemoryConstrained[expr, 10^6] (* 内存限制 *)

这个Mathematica教程涵盖了从基础到高级的主要知识点。Mathematica的学习建议:

  1. 理解符号计算思想:与过程式编程不同,要适应符号计算范式
  2. 善用帮助系统:Mathematica有极其完善的文档系统
  3. 实践驱动学习:通过解决实际问题来掌握各种功能
  4. 学习函数式编程:这是Mathematica的核心编程范式
  5. 探索内置函数:Mathematica有数千个内置函数,很多问题都有现成解决方案

祝各位Mathematica学习顺利!