本教程基于 MATLAB R2024b 及之前版本通用语法编写,适用于所有主流操作系统(Windows/macOS/Linux)。
一、MATLAB 简介与环境搭建
1.1 什么是 MATLAB?
- 全称:Matrix Laboratory(矩阵实验室)
- 开发公司:MathWorks
- 核心优势:
- 强大的矩阵运算能力
- 内置丰富的数学函数库
- 支持脚本化、函数化、面向对象编程
- 提供 Simulink 实现系统级建模与仿真
- 拥有超过 100 个专业工具箱(Toolbox)
1.2 安装与启动
- 可通过 MathWorks 官网申请学生版(免费)或购买商业授权。
- 启动后主界面包括:
- Command Window:执行命令
- Workspace:查看变量
- Current Folder:文件管理
- Editor:编写
.m文件 - Command History:历史命令记录
二、基础语法详解
2.1 变量与数据类型
| 类型 | 示例 | 说明 |
|---|---|---|
double | x = 3.14; | 默认浮点类型(64位) |
single | y = single(2.5); | 单精度浮点 |
int8/16/32/64 | a = int16(100); | 整型,节省内存 |
char | name = 'Tom'; | 字符数组 |
string | name = "Tom"; | 字符串对象(R2016b+) |
logical | flag = true; | 布尔值 |
cell | C = {1, 'text'; [1 2], 3.14}; | 单元数组(异构数据) |
struct | s.name = 'Alice'; s.age = 25; | 结构体 |
✅ 注意:MATLAB 是 动态类型语言,无需声明变量类型。
2.2 矩阵与数组操作(核心)
2.2.1 创建矩阵
A = [1 2 3; 4 5 6]; % 手动输入 2x3 矩阵
B = zeros(3); % 3x3 零矩阵
C = ones(2,4); % 2x4 全1矩阵
D = eye(3); % 3x3 单位矩阵
E = rand(3,2); % 3x2 均匀随机矩阵
F = magic(4); % 4x4 幻方矩阵
G = 1:0.5:5; % 步长为0.5的向量 [1,1.5,...,5]
H = linspace(0, pi, 100); % 100个点,从0到π
2.2.2 矩阵索引(Indexing)
A(2,3) % 第2行第3列元素
A(1,:) % 第1行所有列
A(:,2) % 第2列所有行
A(2:end,1:2) % 第2到末行,第1到2列
A([1 3], [2 4]) % 提取指定行列子矩阵
A(:) % 将矩阵拉成一列向量
2.2.3 矩阵操作
A' % 转置
A.' % 非共轭转置(实数相同)
A * B % 矩阵乘法(内积)
A .* B % 逐元素乘法(点乘)
A ./ B % 逐元素除法
A .^ 2 % 逐元素平方
A \ b % 解线性方程 Ax = b
[A, B] % 水平拼接(列合并)
[A; B] % 垂直拼接(行合并)
2.2.4 常用矩阵函数
size(A) % 返回维度 [m,n]
length(v) % 向量长度或最大维度
ndims(A) % 维数
sum(A) % 每列求和
mean(A) % 每列均值
max(A), min(A)% 最大/最小值
det(A) % 行列式(方阵)
rank(A) % 秩
inv(A) % 逆矩阵(慎用,推荐用 A\b)
eig(A) % 特征值与特征向量
svd(A) % 奇异值分解
2.3 流程控制语句(详细)
2.3.1 if-elseif-else
if x > 0 && y < 10
disp('条件满足');
elseif x == 0
disp('x为零');
else
disp('其他情况');
end
逻辑运算符:
&&,||:短路逻辑(推荐用于标量)&,|:逐元素逻辑(用于数组)
2.3.2 for 循环
for i = 1:5
fprintf('i = %d\n', i);
end
% 遍历数组
for val = [10, 20, 30]
disp(val);
end
⚠️ 性能提示:尽量使用向量化替代循环。
2.3.3 while 循环
count = 0;
while count < 5
count = count + 1;
if count == 3, continue; end
if count == 4, break; end
disp(count);
end
2.3.4 switch-case
switch lower(color)
case 'red'
c = [1 0 0];
case {'green','blue'}
c = [0 1 0] + [0 0 1];
otherwise
c = [0.5 0.5 0.5];
end
2.4 函数定义与调用
2.4.1 基本函数格式
% 文件名:myAdd.m
function result = myAdd(a, b)
% MYADD 两数相加
% 输入:a, b
% 输出:result = a + b
result = a + b;
end
2.4.2 多输出函数
function [sum, diff, prod] = calc(a, b)
sum = a + b;
diff = a - b;
prod = a * b;
end
% 调用
[s, d, p] = calc(10, 3);
2.4.3 局部函数(Local Functions)
一个 .m 文件中可包含多个函数,只有第一个是主函数,其余为局部函数。
function mainFunc()
x = helperFunc(5);
disp(x);
end
function y = helperFunc(n)
y = n^2;
end
2.4.4 匿名函数(Anonymous Functions)
f = @(x) x^2 + 2*x + 1;
g = @(x,y) sin(x).*cos(y);
result = f(3); % = 16
surface = fsurf(g); % 绘图使用
2.4.5 函数句柄(Function Handle)
h = @sin;
result = h(pi/2); % = 1
% 用于高阶函数
arrayfun(@sqrt, [4, 9, 16]) % 返回 [2,3,4]
三、数据可视化(绘图系统)
3.1 二维绘图
x = linspace(0, 4*pi, 100);
y = sin(x);
figure;
plot(x, y, 'r-o', 'LineWidth', 2, 'MarkerSize', 4);
title('正弦函数图像', 'FontSize', 14);
xlabel('x (弧度)'); ylabel('sin(x)');
grid on;
legend('sin(x)', 'Location', 'best');
axis([0 4*pi -1.5 1.5]);
其他常用 2D 图
bar(x(1:10), y(1:10)); % 条形图
stem(x(1:20), y(1:20)); % 火柴杆图
scatter(x, y, 20, y, 'filled'); % 散点图(颜色映射)
polarplot(theta, r); % 极坐标图
3.2 三维绘图
[X,Y] = meshgrid(-2:0.1:2, -2:0.1:2);
Z = X.*exp(-X.^2 - Y.^2);
figure;
surf(X,Y,Z);
shading interp;
colorbar;
xlabel('X'); ylabel('Y'); zlabel('Z');
title('三维曲面图');
camlight; lighting gouraud;
其他 3D 图
mesh(X,Y,Z); % 网格图
contour(X,Y,Z); % 等高线
slice(X,Y,Z,V, [], [0], []); % 体切片
3.3 子图与多图布局
figure;
subplot(2,2,1); plot(x,sin(x)); title('sin');
subplot(2,2,2); plot(x,cos(x)); title('cos');
subplot(2,2,3); plot(x,tan(x)); title('tan');
subplot(2,2,4); scatter(randn(100,1),randn(100,1));
3.4 高级绘图技巧
- 使用
yyaxis创建双Y轴图 - 使用
tiledlayout/nexttile精细排版 - 导出高清图:
exportgraphics(gcf, 'plot.png', 'Resolution', 300)
四、文件输入输出(I/O)
4.1 数据保存与加载
save('data.mat', 'A', 'b', 'x'); % 保存变量
load('data.mat'); % 加载所有变量
s = load('data.mat'); % 以结构体形式加载
4.2 文本文件读写
% 写入文本
fileID = fopen('output.txt','w');
fprintf(fileID, 'Value: %.2f\n', pi);
fclose(fileID);
% 读取文本
data = importdata('data.txt');
% 或使用 textscan
4.3 表格数据处理
T = readtable('data.csv'); % 读取CSV
writetable(T, 'result.xlsx'); % 写入Excel
head(T, 5) % 显示前5行
summary(T) % 数据摘要
4.4 图像与音频
img = imread('image.jpg');
imshow(img);
[y,fs] = audioread('sound.wav');
sound(y, fs);
五、高级编程技术
5.1 向量化编程(性能关键)
% ❌ 慢:循环
for i = 1:length(x)
y(i) = x(i)^2 + 2*x(i) + 1;
end
% ✅ 快:向量化
y = x.^2 + 2*x + 1;
5.2 预分配内存
n = 10000;
result = zeros(1, n); % 预分配
for i = 1:n
result(i) = i^2;
end
5.3 错误处理(try-catch)
try
data = load('missing_file.mat');
catch ME
disp(['错误: ', ME.message]);
data = [];
end
5.4 定时与性能分析
tic;
% 代码段
pause(1);
toc; % 显示耗时
% 使用 Profiler
profile on;
myFunction();
profile viewer;
六、面向对象编程(OOP)
6.1 类定义示例
% 文件名:Point.m
classdef Point
properties
X = 0
Y = 0
end
methods
function obj = Point(x, y)
if nargin > 0
obj.X = x;
obj.Y = y;
end
end
function d = distanceTo(obj, p)
d = sqrt((obj.X-p.X)^2 + (obj.Y-p.Y)^2);
end
end
end
6.2 使用类
p1 = Point(0,0);
p2 = Point(3,4);
dist = p1.distanceTo(p2); % = 5
七、工具箱与专业应用(精选)
| 工具箱 | 功能 |
|---|---|
| Signal Processing Toolbox | 滤波器设计、频谱分析、小波变换 |
| Image Processing Toolbox | 图像增强、分割、形态学操作 |
| Statistics and ML Toolbox | 回归、聚类、分类、假设检验 |
| Optimization Toolbox | 线性/非线性规划、最小化问题 |
| Deep Learning Toolbox | CNN、RNN、预训练网络(如ResNet) |
| Control System Toolbox | PID控制、状态空间模型、根轨迹 |
| Simulink | 图形化建模、仿真动态系统 |
八、性能优化与调试技巧
8.1 提升运行速度
- ✅ 向量化代替循环
- ✅ 预分配数组
- ✅ 使用
parfor并行循环 - ✅ 避免频繁
clear或eval - ✅ 使用
gpuArray加速(需GPU)
8.2 调试方法
- 设置断点(F12)
- 使用
dbstop if error - 查看调用栈(Call Stack)
- 使用
disp/fprintf输出中间值
九、最佳实践建议
-
命名规范:
- 变量:
snake_case或camelCase - 函数:动词开头,如
computeMean - 文件名与函数名一致
- 变量:
-
代码注释:
% 计算加权平均 % 输入:data - 数据向量,weights - 权重向量 % 输出:weighted_avg - 加权均值 -
使用实时脚本(.mlx):
- 支持 Markdown、公式、图像嵌入
- 适合教学、报告、文档化代码
-
版本控制:
- 推荐使用 Git 管理
.m文件
- 推荐使用 Git 管理
十、推荐学习路径
| 阶段 | 学习内容 | 时间建议 |
|---|---|---|
| 第1周 | 基础语法、矩阵操作、绘图 | 10-15小时 |
| 第2周 | 函数编写、流程控制、I/O | 10小时 |
| 第3周 | 向量化、调试、性能优化 | 8小时 |
| 第4周 | OOP、GUI、工具箱应用 | 12小时 |
| 持续 | 项目实战、算法实现 | 自主练习 |
附录:常用快捷键
| 快捷键 | 功能 |
|---|---|
Ctrl + Enter | 运行当前节(实时脚本) |
F5 | 运行脚本 |
F12 | 切换断点 |
Ctrl + I | 自动缩进 |
Ctrl + R / T | 注释/取消注释 |
Up/Down | 历史命令 |
总结
MATLAB 不仅是一门语言,更是一个科学计算生态系统。掌握它,意味着您拥有了:
✅ 快速原型开发能力
✅ 强大的数据分析与可视化能力
✅ 与 Simulink 联合进行系统级仿真
✅ 无缝接入 AI、控制、通信等前沿领域
1392

被折叠的 条评论
为什么被折叠?



