MATLAB 程序设计综合教程
目录
- MATLAB 简介
- 基础入门:第一个 MATLAB 程序
- 核心数据结构:矩阵与数组
- 基本运算与函数
- 脚本文件与函数文件
- 程序控制流
- 数据可视化
- 文件 I/O
- 高级主题:面向对象编程与工具箱
- 学习资源与最佳实践
MATLAB 简介
什么是 MATLAB? MATLAB(Matrix Laboratory)是一款由 MathWorks 公司开发的高性能语言和交互式环境,它主要用于:

- 数值计算:解决矩阵、线性代数、微积分等数学问题。
- 数据可视化:绘制高质量的二维和三维图形。
- 编程与算法开发:通过脚本和函数实现复杂的算法。
- 数据分析、探索与可视化:处理和分析大量数据。
- 应用程序开发:创建具有图形用户界面的应用程序。
为什么选择 MATLAB?
- 语法简单:语言接近数学表达式,易于上手。
- 矩阵运算核心:内置强大的矩阵运算功能,代码简洁高效。
- 丰富的工具箱:拥有覆盖各个工程和科学领域的专业工具箱(如信号处理、图像处理、控制系统、深度学习等)。
- 强大的生态系统:集成开发环境、调试器、性能分析器等一应俱全。
MATLAB 开发环境 启动 MATLAB 后,你会看到几个关键窗口:
- Command Window (命令窗口):与 MATLAB 进行交互式对话,输入命令并立即看到结果,适合简单的计算和测试。
- Editor (编辑器):用于编写、保存和调试脚本(.m 文件),语法高亮、自动缩进等功能非常友好。
- Workspace (工作区):显示当前所有变量及其大小、类型和值。
- Current Folder (当前文件夹):显示和管理当前 MATLAB 的工作目录。
- Command History (命令历史记录):记录你在命令窗口中执行过的所有命令。
基础入门:第一个 MATLAB 程序
1 在命令窗口中进行简单计算 MATLAB 可以像一个强大的计算器一样使用。
% 这是注释,MATLAB 会忽略它 % 加法 >> 2 + 3 % 减法 >> 10 - 5.5 % 乘法 >> 4 * 6 % 除法 >> 15 / 4 % 幂运算 >> 2^3 % 结果会自动存入一个名为 ans 的默认变量中 >> ans * 2
2 创建变量 变量名区分大小写,必须以字母开头,可以包含字母、数字和下划线。

>> x = 10; >> y = 20; >> z = x + y; >> disp(z); % 使用 disp 函数显示变量内容 >> z % 直接输入变量名也会显示其内容
注意:MATLAB 语句结尾的分号 表示“不显示结果”,省略则会立即在命令窗口中显示结果,在脚本中,使用分号可以避免输出干扰。
核心数据结构:矩阵与数组
MATLAB 的核心是矩阵,一个标量是 1x1 的矩阵,一个向量是 1xN 或 Nx1 的矩阵。
1 创建矩阵
% 创建一个行向量 >> v = [1, 2, 3, 4] % 或者 >> v = [1 2 3 4] % 创建一个列向量 >> c = [1; 2; 3; 4] % 创建一个 2x3 的矩阵 >> A = [1, 2, 3; 4, 5, 6] % 使用冒号运算符创建向量 >> x = 1:5 % 创建 [1 2 3 4 5] >> y = 0:0.5:2 % 创建 [0 0.5 1 1.5 2] % 使用 linspace 创建线性等分向量 >> z = linspace(0, 10, 5) % 在 0 到 10 之间创建 5 个等分点
2 矩阵索引
访问矩阵中的元素使用 行 列 的格式。

>> A = [1, 2, 3; 4, 5, 6]; >> A(2, 3) % 访问第 2 行,第 3 列的元素,结果为 6 % 提取子矩阵 >> A(1, :) % 提取第 1 行的所有元素,结果为 [1 2 3] >> A(:, 2) % 提取第 2 列的所有元素,结果为 [2; 5] >> A(1:2, 1:2) % 提取一个 2x2 的子矩阵 [1 2; 4 5]
3 矩阵拼接
使用方括号 [] 和逗号 或分号 来拼接矩阵。
>> B = [7; 8; 9]; >> C = [A, B] % 水平拼接,A 和 B 必须有相同的行数 >> D = [A; B'] % 垂直拼接,A 和 B' (B的转置) 必须有相同的列数
基本运算与函数
1 矩阵运算 MATLAB 的运算符默认为矩阵运算。
>> A = [1, 2; 3, 4]; >> B = [5, 6; 7, 8]; % 矩阵乘法 >> C = A * B % 矩阵乘方 >> D = A^2 % 矩阵的逆 >> E = inv(A) % 线性方程组求解 Ax = b >> b = [9; 23]; >> x = A \ b % 这是求解线性方程组的高效方法,等同于 inv(A)*b
2 数组运算 如果要对矩阵的每个元素进行运算,需要在运算符前加上点 。
>> A = [1, 2; 3, 4]; >> B = [5, 6; 7, 8]; % 数组乘法(对应元素相乘) >> F = A .* B % 结果为 [1*5, 2*6; 3*7, 4*8] = [5, 12; 21, 32] % 数组除法(对应元素相除) >> G = A ./ B % 数组乘方(对应元素进行幂运算) >> H = A .^ 2 % 结果为 [1^2, 2^2; 3^2, 4^2] = [1, 4; 9, 16]
3 常用内置函数 MATLAB 提供了海量的内置函数。
>> a = [1, -2, 3, -4]; % 基本数学函数 >> sum(a) % 求和 >> mean(a) % 平均值 >> max(a) % 最大值 >> min(a) % 最小值 >> sort(a) % 排序 % 数学函数 >> sin(pi/2) % 正弦 >> cos(0) % 余弦 >> exp(1) % 自然指数 e >> log(10) % 自然对数 >> log10(10) % 以 10 为底的对数 % 矩阵函数 >> size(A) % 返回矩阵的尺寸 [行数, 列数] >> length(A) % 返回矩阵最长维度的长度 >> numel(A) % 返回矩阵元素的总数 >> A' % 矩阵的转置
脚本文件与函数文件
当命令变多时,在命令窗口逐行输入效率低下,这时就需要使用 .m 文件。
1 脚本文件 脚本文件是一系列 MATLAB 命令的集合,它们共享同一个工作区,可以方便地重复执行一系列操作。
-
在 MATLAB 编辑器中新建一个文件,保存为
my_script.m。 -
输入以下代码:
% my_script.m % 这是一个脚本文件示例 % 清空命令窗口和工作区 clc; clear; close all; % 创建变量 x = 0:0.1:2*pi; y = sin(x); % 绘制图形 plot(x, y);'Sine Wave'); xlabel('x'); ylabel('sin(x)'); grid on; -
点击编辑器中的“运行”按钮,或在命令窗口输入
my_script并按回车。
2 函数文件 函数文件定义了一个可以接收输入参数、执行特定操作并返回输出结果的函数,它们拥有独立的工作区,是模块化编程的基础。
-
在编辑器中新建一个文件,保存为
calculate_mean.m。 -
输入以下代码:
% calculate_mean.m % 计算一个向量的平均值 % % 输入: % data - 一个数值向量 % % 输出: % avg - 向量的平均值 function avg = calculate_mean(data) % 检查输入是否为空 if isempty(data) error('Input data cannot be empty.'); end % 计算平均值 avg = sum(data) / length(data); end -
在命令窗口或另一个脚本中调用这个函数:
>> my_data = [1, 2, 3, 4, 5]; >> my_avg = calculate_mean(my_data); >> disp(my_avg); 3
程序控制流
像其他编程语言一样,MATLAB 也支持 if-else, for, while 等控制流。
1 条件语句: if, elseif, else
score = 85;
if score >= 90
disp('Grade: A');
elseif score >= 80
disp('Grade: B');
elseif score >= 70
disp('Grade: C');
else
disp('Grade: F');
end
2 循环语句: for
% 计算 1 到 10 的和
sum = 0;
for i = 1:10
sum = sum + i;
end
disp(['The sum is: ', num2str(sum)]);
3 循环语句: while
% 找到小于 100 的最大 2 的幂
power = 1;
while power < 100
power = power * 2;
end
% 循环结束时, power 已经大于等于 100
disp(['The first power of 2 >= 100 is: ', num2str(power/2)]);
4 提前终止循环: break 和 continue
break:立即跳出当前循环。continue:跳过当前迭代的剩余部分,直接进入下一次迭代。
% 使用 break 找到第一个能被 7 整除的数
for i = 1:20
if mod(i, 7) == 0
disp(['Found it: ', num2str(i)]);
break; % 找到后就不再继续循环
end
end
% 使用 continue 跳过奇数
for i = 1:10
if mod(i, 2) ~= 0
continue; % 跳过奇数
end
disp(i); % 只打印偶数
end
数据可视化
绘图是 MATLAB 的强项。
1 基本二维绘图: plot
% 创建数据
x = 0:0.01:2*pi;
y1 = sin(x);
y2 = cos(x);
% 打开一个新的图形窗口
figure;
% 绘制正弦曲线
plot(x, y1, 'r-', 'LineWidth', 2); % 红色实线,线宽为2
hold on; % 保持当前图形,以便在其上添加新曲线
% 绘制余弦曲线
plot(x, y2, 'b--o'); % 蓝色虚线,带圆形标记
% 添加图形元素'Sine and Cosine Waves');
xlabel('x-axis');
ylabel('y-axis');
legend('sin(x)', 'cos(x)');
grid on;
hold off; % 释放图形
2 其他常用图形
- 散点图:
scatter(x, y) - 柱状图:
bar(data) - 直方图:
histogram(data) - 三维曲面图:
surf(X, Y, Z)
文件 I/O
MATLAB 可以读写各种格式的文件,如 .txt, .csv, .xlsx, .mat 等。
1 读取文本文件
使用 readmatrix 或 readtable 函数,非常方便。
% 假设有一个名为 data.txt 的文件如下:
% 1, 2, 3
% 4, 5, 6
% 7, 8, 9
% 读取为矩阵
M = readmatrix('data.txt');
% 读取为表
T = readtable('data.txt');
disp(T);
2 写入文本文件
使用 writematrix 或 writetable 函数。
% 创建一个新矩阵 new_data = [10, 11; 12, 13]; % 写入文件 writematrix(new_data, 'output.txt');
3 保存和加载工作区
使用 .mat 文件可以保存整个工作区中的变量。
% 创建一些变量
a = 100;
b = 'hello';
% 保存变量 a 和 b 到 my_vars.mat 文件
save('my_vars.mat', 'a', 'b');
% 清空工作区
clear;
disp('Workspace is cleared.');
% 从 my_vars.mat 文件加载变量
load('my_vars.mat');
% 检查变量是否已加载
disp(a);
disp(b);
高级主题
1 向量化
这是 MATLAB 编程的核心思想之一。尽量避免使用 for 循环对数组进行元素级操作,而是使用 MATLAB 内置的矩阵/数组运算,向量化代码运行速度更快,也更简洁。
反例 (低效):
x = 1:1000;
y = zeros(1, 1000); % 预分配
for i = 1:1000
y(i) = x(i)^2 + 2*x(i) + 1;
end
正例 (高效):
x = 1:1000; y = x.^2 + 2*x + 1; % 整个计算一步完成
2 面向对象编程 MATLAB 支持面向对象编程,允许你创建自定义的类和对象,这对于构建大型、复杂的程序非常有用。
3 工具箱 MATLAB 的强大之处在于其丰富的工具箱,当你需要解决特定领域的问题时,首先要查看是否有相应的工具箱。
- Signal Processing Toolbox: 信号处理与分析。
- Image Processing Toolbox: 图像处理。
- Control System Toolbox: 控制系统设计与分析。
- Statistics and Machine Learning Toolbox: 统计与机器学习。
- Deep Learning Toolbox: 深度学习。
你可以使用 ver 命令查看已安装的工具箱列表。
学习资源与最佳实践
1 官方资源
- MATLAB 官方文档: 最权威、最全面的资源,有搜索功能,遇到任何函数或概念问题,首先查阅官方文档。
- MATLAB Onramp: MathWorks 官方提供的免费互动入门课程,强烈推荐给初学者。
2 最佳实践
- 添加注释:为你的代码和脚本添加清晰的注释,解释“做什么”和“为什么做”。
- 有意义的变量名:使用如
input_signal而不是x这样的描述性变量名。 - 预分配内存:在
for循环中,预先为输出数组分配内存(如y = zeros(1, N)),可以显著提高性能。 - 模块化编程:将大任务分解为多个小函数,每个函数只做一件事。
- 善用版本控制:使用 Git 等工具管理你的代码,以便追踪修改和协作。
- 避免全局变量:尽量使用函数参数传递数据,减少对全局变量的依赖,使代码更健壮、更易于测试。
学习 MATLAB 是一个循序渐进的过程,从掌握矩阵操作和基本语法开始,然后通过编写脚本和函数来实践,逐步学习可视化和高级主题,最重要的是多动手、多思考、多查阅官方文档,祝你学习顺利!
