本节摘要:Matlab 起源于 1970 年代末 Cleve Moler 为数值分析课程编写的交互式矩阵计算工具,让 不写 Fortran 也能调用 LINPACK 与 EISPACK。本节按时间线梳理它从课堂原型到仿真平台的五个阶段,并对照认识当前版本的工作界面。
1976 年前后,Moler 在课堂上反复看到同一幕:学生线性代数的思路没问题,却把大量时间耗在 Fortran 的编译报错和作业提交流程上。他的回应是写一个用 BASIC 起家、后改用 Fortran 实现的解释器,学生敲一行、得一行的结果。1984 年,Moler 与 Jack Little、Steve Bangert 合创 MathWorks,推出第一个商业版 Matlab——那一年它只有 81 个函数,全部围绕矩阵计算。

早期的 Matlab 只有一个命令行窗口。今天安装完 R2023 之后打开,你会看到四个区域,它们各自对应一段演化历史:
| 界面区域 | 出现动机 | 典型用法 |
|---|---|---|
| 命令行窗口 | 最初的形态,逐行解释执行 | 试算、查看变量 |
| 工作区 | 变量多了以后需要可视化管理 | 双击矩阵查看元素 |
| 编辑器 | 脚本出现后的必然产物 | 写函数、断点调试 |
| 当前文件夹 | 项目复杂后的文件管理 | 管理脚本与数据 |
第一次启动时建议做的两件事:在主页设置里把工作目录改到自己的项目文件夹;敲 ver 看版本与已装工具箱清单——后续章节的不少功能依赖特定工具箱。
体会 1984 年那 81 个函数的核心体验,只需要三行:
A = [4 1; 2 3]; % 一对方括号就是矩阵 b = [1; 2]; x = A\b % 反斜杠:解线性方程组
输出 x 为列向量,没有编译、没有 main 函数。这五行体验,就是 Matlab 能在四十年里从课堂教具长成工程平台的原始资本:把数学表达式到可运行代码的距离压缩到最短。
💡 关键直觉:Matlab 的每次大版本演进,几乎都在"缩短想法与结果之间的距离"——JIT 让你不必刻意向量化也能跑得不慢,实时脚本让你把文字、公式、代码放进同一篇文档,App 设计器让你不写界面代码也能交付工具。
再看一次带输出对照的完整会话,顺便熟悉命令行窗口的"问即答"节奏。先查环境,再算一个小例子,每一步都立刻有反馈:
ver % 列出当前版本与全部已装工具箱,先确认"手头有什么枪" % 输出形如: % MATLAB Version: 23.2.x.xxx (R2023b) % MATLAB Version 23.2 (R2023b) % Simulink Version 23.2 (R2023b) % Signal Processing Toolbox Version 23.2 (R2023b) ... A = magic(3) % 3 阶魔方阵,元素与行列和都相等;语句不带分号会直接回显 % A = % 8 1 6 % 3 5 7 % 4 9 2 sum(A) % 默认按列求和,得到 1x3 行向量 % ans = % 15 15 15
这段会话里有两个值得注意的细节:语句末尾加分号抑制回显、不加分号立即打印,这是命令行交互的第一开关;magic(3) 这类"自带示例数据"的构造函数(还有 hilb、gallery)是快速验证想法的燃料,历史课上 Moler 演示用的正是这类矩阵。对照 1984 年的 81 个函数清单,magic、hilb 都在册——四十年后我们敲的演示代码,和当年的课堂几乎一样。
用表格把五个阶段的关键节点钉住,读旧文献或接手遗留代码时能快速定位"这份代码大概写于什么年代":
| 阶段 | 代表版本 | 标志性变化 | 今天还能感知到的痕迹 |
|---|---|---|---|
| 课堂原型 | 1970 年代末 | 解释器包裹 LINPACK/EISPACK | 命令行窗口是默认交互方式 |
| 商业化 | 1984 v1.0 | 81 个函数、公司成立 | A\b 仍是核心语法 |
| 生态化 | 1990 年代 | 工具箱体系、Simulink 问世 | ver 能列出长长一串产品清单 |
| 性能化 | R2006 前后 | JIT 加速、向量化文化成型 | 老代码里大量 vectorize 风格写法 |
| 平台化 | R2016 之后 | 实时脚本、App 设计器、云版本 | Live Editor 里代码与文字混排 |
给代码"验年代"有个实用技巧:看到全篇字符数组拼接、没有一行 string,基本可以判断写于 R2016b 之前;看到 arguments 校验块,则是 R2019b 之后的作品。这种判断力在接手实验室传承代码时很值钱——你能预判它会在哪些新版行为变化上出问题。
新装环境最常撞见的三个报错,原因和解法各不相同。第一类是"未定义函数或变量",多半是当前文件夹不对,脚本不在搜索路径上,把工作目录切到脚本所在位置即可。第二类是许可证问题,启动时提示授权文件无效,需要检查许可证是否过期、是否绑定了错误的机器。第三类与中文环境有关:早期版本脚本里含中文注释、而系统区域设置不支持时会出现乱码甚至解析错误,R2017b 起默认以 UTF-8 保存脚本,问题大幅缓解,但打开别人发来的老脚本仍可能撞上,编辑器里用"另存为"重新指定编码就能救回来。
命令行里敲过的命令默认不落盘,关掉会话就消失。想把探索过程留下来,有两个办法:按上方向键翻历史逐条复制,或者从一开始就在脚本里写。更稳妥的做法是开历史记录文件,会话结束时自动把本次敲过的所有命令存成文本,回头整理成脚本的原料就有了。这个习惯的价值在第 2 章会显形——脚本的原始素材,往往就是命令行里被验证过的那十几行。
ver 查环境,功能依赖工具箱时先确认授权。