MIT 18.02 · MATLAB

MATLAB 使用指南 (MATLAB Instructions)

18.02 课程的 MATLAB 入门参考:矩阵与向量运算、2D/3D 绘图、等高线、数组运算。基于官方 matlab.pdf 整理,覆盖课程 Problem Sets 所需的全部基础操作。

发布:2007-09-06 性质:参考资料(无截止日期) 主题:MATLAB 基础 难度:入门

目标

本指南帮助你快速上手 MATLAB,掌握 18.02 课程 Problem Sets 所需的计算与绘图能力。学完本页,你应该能够:

核心思想:MATLAB 的变量默认是矩阵/向量。理解矩阵运算 vs 数组运算(带点号)的区别,是避免 MATLAB 编程错误的关键。分号 ; 抑制输出,也允许一行写多条命令。

覆盖范围

以下内容基于 MIT OCW 官方 matlab.pdf(Fall 2007),按"从输入到绘图"的顺序组织:

主题关键命令用途
输入矩阵/向量A = [1 2 3; 4 5 6; 7 8 9]定义矩阵;分号分隔行
特殊矩阵eye(3)、zeros()、ones()单位矩阵、零矩阵、全 1 矩阵
基本运算A+B、A*B、A^n、A'、inv(A)加、乘、幂、转置、逆
数组运算x.*y、x.^m、sin(x)逐元素乘、幂、函数
冒号算子[0:2:12]、[-2:.1:2]生成等差向量
2D 绘图plot(x,y)、hold、print画曲线、叠加、打印
3D 绘图meshgrid、mesh、surf、rotate3d网格、网格面、曲面、旋转视角
等高线contour(x,y,z,20)、contour32D/3D 等高线

核心知识要点

1. 输入矩阵与向量

MATLAB 的变量代表矩阵或向量。用 = 赋值,空格(或逗号)分隔同行元素,分号分隔行:

A = [1 2 3; 4 5 6; 7 8 9]
b = [5 2 1]          % 行向量
b'                   % 转置为列向量 [5; 2; 1]
eye(3)               % 3×3 单位矩阵 I

注意:输入矩阵时,每行的元素个数必须相同。出错时按方向键(↑↓←→)调回历史命令修改,或在文本编辑器(如 emacs)中写好再粘贴到 MATLAB 命令行。

2. 矩阵与向量运算

运算MATLAB 语法条件
加法A + B同尺寸
减法A - B同尺寸
乘法A * B尺寸兼容(内维相等)
幂A^n\(A\) 为方阵
转置A'任意矩阵
逆inv(A) 或 A^(-1)\(\det A\neq0\)
A + eye(3)      % 矩阵加单位矩阵
A * b'          % 矩阵乘列向量(内维兼容)
b * A           % 行向量乘矩阵

3. 数组运算(逐元素操作)

在 * 或 ^ 前加一个点 .,运算就变成逐元素操作。这是 MATLAB 编程中最常用的技巧:

x = [0:.1:2];
y = sin(x);         % 对每个元素求 sin
z = x.^2;           % 每个元素平方(不是矩阵平方!)
w = x .* y;         % 逐元素相乘

数组运算规则:
若 \(x=[x_1,\dots,x_n]\),则 \(\exp(x)=[\exp(x_1),\dots,\exp(x_n)]\)(同样适用于 sin, cos, log 等)。
\(x+y=[x_1+y_1,\dots]\),\(x.*y=[x_1y_1,\dots]\),\(x.^m=[x_1^m,\dots]\)。

注意:x^2 对向量会报错(矩阵幂要求方阵),必须写 x.^2。画 \(y=4x^3\) 时务必用 4*x.^3,否则 MATLAB 会尝试矩阵乘方而失败。

4. 冒号算子(Colon Operator)

生成等差向量,语法为 [start : step : end]:

[0 2 12]        % = [0 2 4 6 8 10 12]
[2 -.1 1.6]     % = [2.0 1.9 1.8 1.7 1.6]

冒号算子常用于生成绘图的自变量范围,如 x = [-2:.1:2] 生成从 -2 到 2、步长 0.1 的向量。

5. 2D 绘图

x = [0:.1:2];
plot(x, sin(x))              % 实线连接各点
plot(x, cos(x), '*')         % 用星号标记点
hold                         % 开启叠加模式
plot(x, sin(x), '--')        % 虚线叠加
hold                         % 关闭叠加模式
plot(x, 4*x.^3)              % 画 y=4x^3(注意用 .^)
print                        % 打印当前图形

绘图样式:
plot(x,y) — 实线连接
plot(x,y,'--') — 虚线连接
plot(x,y,'*') — 星号标记(也可用 'o', '.' 等)
hold — 切换叠加/覆盖模式
print — 打印当前图形

分号 ; 结尾可抑制输出,也允许一行写多条命令:

x = [2:40:400];
w = [1:1:500];
b = 10*(w.^0.5);
c = 2*(w.^(5/3));
plot(x,10*x, '*', w, b, w, c, '--');

6. 3D 绘图

画 \(z=f(x,y)\) 需要三步:生成网格 → 计算函数值 → 绘图。

x = [-2:.1:2];
y = [-2:.1:2];
[x, y] = meshgrid(x, y);     % 生成网格点 (xi, yj)
z = y.^2 - x.^2;             % 计算 f(x,y) = y² - x²
mesh(x, y, z)                % 网格线图
surf(x, y, z)                % 填充曲面(颜色 = 高度)

3D 绘图控制:
rotate3d — 切换鼠标旋转视角(再输入一次关闭)
hidden — 切换隐藏线显示
axis([xmin xmax ymin ymax zmin zmax]) — 调整坐标轴范围
contour(x, y, z, 20) — 2D 等高线(20 条)
contour3(x, y, z, 20) — 3D 等高线

视角由两个角度决定:方位角 (azimuth) — 从负 \(y\) 轴到视线的水平角;仰角 (elevation) — 从 \(xy\) 平面到视线的垂直角。

7. 18.02 中的典型应用

在 18.02 中,MATLAB 主要用于:

% 示例:画 f(x,y) = x^2 - y^2 的曲面与等高线
x = [-2:.1:2];
y = [-2:.1:2];
[x, y] = meshgrid(x, y);
z = x.^2 - y.^2;
surf(x, y, z);               % 3D 曲面(双曲抛物面 = 鞍面)
figure;                      % 新建图窗
contour(x, y, z, 15);        % 15 条等高线

典型题型与解题策略

1

画函数图形

策略:定义范围 → meshgrid → 计算 z → surf/mesh。注意用数组运算 .^, .*。

2

画等高线

策略:contour(x, y, z, N) 画 \(N\) 条等高线。结合梯度 \(\nabla f\) 可知:梯度方向垂直于等高线,且指向函数增大的方向。

3

矩阵计算验证

策略:定义矩阵 → 用 inv(), det()(det 命令)验证手算结果。解线性系统 \(A\vec{x}=\vec{b}\) 用 x = A\b 或 x = inv(A)*b。

常见错误

忘记用数组运算:x^2 对向量会报错,必须写 x.^2。这是初学者最常犯的错。

矩阵尺寸不兼容:A*B 要求 \(A\) 的列数 = \(B\) 的行数。出错时检查尺寸:size(A)。

meshgrid 的输入输出混淆:[x,y] = meshgrid(x,y) 中左右两边的 x,y 含义不同——左边是网格矩阵,右边是原始向量。

hold 状态忘记关闭:hold 是开关——第一次输入开启,第二次输入关闭。开启时新图叠加在旧图上,可能导致混乱。

知识检查

问题 1:对向量 x = [1 2 3],计算每个元素平方的正确写法是?

问题 2:要画一条虚线连接 (x,y) 数据点,应使用?

问题 3:要画 \(z=f(x,y)\) 的填充曲面(颜色表示高度),应使用?

问题 4:画 3D 曲面 \(z=f(x,y)\) 前,必须先生成网格点。正确的命令是?

一手资料