1. 课程导入与矩阵计算环境搭建

矩阵计算是科学计算、数据分析、信号处理、控制系统与机器学习共同的底层语言。本课程选择 Python(NumPy/SciPy)与 MATLAB 两条主线并行讲解,原因很直接:MATLAB 在矩阵语法、工具箱与工程仿真上成熟稳定,Python 则凭借开源生态、与通用编程语言的融合能力以及 NumPy/SciPy 的高性能数组运算,成为当前科研与工程落地的主流选择。掌握两者在矩阵层面的对应关系,就能在“快速验证”和“工程部署”之间自由切换。

一、两套环境的安装与最小可用配置

Python 侧推荐使用 Anaconda 或 Miniconda 创建独立环境,避免与系统 Python 冲突。核心依赖只有三个包:numpy 负责 ndarray 与基础线性代数,scipy 提供稀疏矩阵、分解、优化与信号处理,matplotlib 用于结果可视化。安装命令如下:

conda create -n matrix python=3.11 -y
conda activate matrix
conda install numpy scipy matplotlib -y
python -c "import numpy, scipy; print(numpy.__version__, scipy.__version__)"

最后一行用于验证:能正常打印版本号,说明解释器、包路径与依赖链均可用。若在 Jupyter 中学习,可再安装 ipykernel 并把该环境注册为内核,这样每个 notebook 都运行在隔离环境中。

MATLAB 侧安装完成后,重点确认三件事:命令行窗口可执行 ver 查看已安装工具箱;当前文件夹(Current Folder)指向自己的工作目录而非安装目录;路径中不含中文与空格,避免读写数据文件时出现编码问题。MATLAB 的矩阵运算本身不需要额外工具箱,但后续若涉及稀疏矩阵求解、优化与信号处理,应确认已安装对应的 Toolbox。

二、工作区对比:两种“看见变量”的方式

MATLAB 的工作区(Workspace)是一个常驻面板,列出所有变量的名称、值、大小、字节数与类型,双击即可进入变量编辑器查看矩阵内容。这种“变量即对象、随时可见”的交互方式非常适合教学与调试。

Python 没有内建工作区面板,但有等价手段:在 Jupyter 中,变量存在于内核内存,可用 whos 魔术命令或变量查看器观察;在脚本中则通过 print、type()、shape、dtype 主动检查。理解这一点很关键——Python 的“工作区”是解释器进程的内存空间,变量的生命周期由引用计数与作用域决定,而不是由一个可视化面板托管。

Python 与 MATLAB 矩阵计算流程对照 Python:NumPy / SciPy 导入库:import numpy as np from scipy import linalg 构造矩阵:np.array([[1,2],[3,4]]) dtype 默认 float64 / int64 运算:A @ B、np.linalg.inv(A) * 为逐元素乘,@ 为矩阵乘 检查:A.shape、A.dtype print / Jupyter 变量查看器 结果:ndarray 对象驻留内存 MATLAB 无需导入,矩阵语法内建 命令行窗口 / 脚本 .m 文件 构造矩阵:A = [1 2; 3 4] 默认 double 类型 运算:A*B、inv(A)、A\b * 即矩阵乘,.* 为逐元素乘 检查:size(A)、class(A) 工作区面板实时显示变量 结果:变量进入 Workspace 对应 关系

三、第一个矩阵运算示例:从构造到求解

下面用同一个线性方程组在两套环境中各做一遍,便于建立一一对应的直觉。设方程组为:

2x₁ + x₂ = 5,x₁ + 3x₂ = 10

Python 实现:

import numpy as np
from scipy import linalg

A = np.array([[2.0, 1.0],
              [1.0, 3.0]])
b = np.array([5.0, 10.0])

x = np.linalg.solve(A, b)      # 推荐:直接求解,不显式求逆
print(x)                        # 预期 [1. 3.]
print(np.allclose(A @ x, b))    # True 表示回代验证通过

MATLAB 实现:

A = [2 1; 1 3];
b = [5; 10];
x = A \ b;          % 左除,等价于求解 Ax=b
disp(x)             % 输出 1 和 3
disp(norm(A*x - b)) % 残差接近 0

两段代码的结果一致:x₁ = 1,x₂ = 3。这里有两个值得记住的工程习惯。第一,求解线性方程组时优先用 solve 或左除 \,而不是先算 inv(A) 再乘 b——显式求逆在数值上更不稳定,计算量也更大。第二,算完必须做回代验证,用 A @ x 与 b 比较,或用残差范数判断,而不是只看输出数字“像不像”。

四、必须尽早建立的三个差异认知

索引起点不同。Python 从 0 开始,MATLAB 从 1 开始。取 A 的第一行第一列元素,Python 写 A[0, 0],MATLAB 写 A(1,1)。这是移植代码时最高频的错误来源。

乘法语义不同。Python 中 * 是逐元素乘,矩阵乘必须用 @ 或 np.dot;MATLAB 恰好相反,* 是矩阵乘,逐元素乘要写 .*。写代码前先确认运算符语义,能避免大量“维度对不上”的报错。

默认数据类型不同。MATLAB 数值默认是双精度 double;NumPy 会根据字面量推断,[[1,2],[3,4]] 得到整型,做除法或分解时可能触发意外的类型转换。工程上建议构造矩阵时显式写 dtype=float,或至少用 A.dtype 确认一次。

建议在第一周就建立“双环境对照笔记”:每学一个矩阵操作,同时记录 NumPy 写法与 MATLAB 写法,并标注索引、乘法、类型三处差异。这份笔记会在后续章节反复派上用场。

五、矩阵计算流程的整体轮廓

无论用哪套环境,一次完整的矩阵计算任务通常包含五个环节:明确问题并写成矩阵形式(确定 A、b 的维度与含义)→ 构造或读入数据(保证 dtype 与形状正确)→ 选择合适的运算或分解方法(求解、特征分解、最小二乘、稀疏求解等)→ 数值验证(残差、条件数、与已知解对比)→ 结果解释与可视化。前两个环节决定问题是否被正确表达,中间环节决定数值稳定性,后两个环节决定结论是否可信。本课程后续章节将围绕这条主线,逐步展开矩阵构造、基本运算、线性方程组、特征值、矩阵分解、稀疏矩阵与工程案例。

现在可以做一个自检:在 Python 与 MATLAB 中分别完成上面的 2×2 方程组求解,确认输出均为 [1, 3],并打印 A.shape / size(A) 与 A.dtype / class(A)。若两边的形状、类型与解都符合预期,说明环境搭建与基本流程已经打通,可以进入下一阶段的矩阵运算学习。