MATLAB基础与应用教程
第一部分:MATLAB 简介
1 什么是 MATLAB?

(图片来源网络,侵删)
MATLAB 的名字源于 MATrix LABoratory(矩阵实验室),它是一款由美国 MathWorks 公司开发的高性能语言和交互式环境,主要用于:
- 数值计算
- 算法开发
- 数据可视化
- 数据分析
- 模拟与原型设计
核心特点:
- 矩阵/数组作为基本数据单位:MATLAB 的核心是矩阵操作,这使得线性代数、信号处理等领域的计算变得异常简洁高效。
- 强大的工具箱:MATLAB 提供了大量针对不同领域的专业工具箱,如信号处理、图像处理、控制系统、神经网络、深度学习等,让你可以站在巨人的肩膀上。
- 直观的编程环境:集成了编辑器、调试器、命令窗口、工作区浏览器等,方便开发和管理。
- 丰富的图形功能:可以轻松绘制二维、三维图形,并进行高度定制。
2 MATLAB 界面初识
启动 MATLAB 后,你会看到几个主要窗口:

(图片来源网络,侵删)
- 命令窗口:这是与 MATLAB 交互的主要场所,你可以在这里直接输入命令并立即看到结果,适合简单的计算和测试。
- 编辑器:用于编写和调试脚本文件(
.m文件),语法高亮、自动缩进、调试功能等都非常完善。 - 当前文件夹:显示 MATLAB 当前正在操作的文件夹,你可以在这里查看和管理文件。
- 工作区:显示当前内存中所有变量的名称、大小、类型和值,你可以在这里查看、创建、修改变量。
第二部分:MATLAB 基础入门
1 变量与赋值
在 MATLAB 中,变量无需预先声明类型,赋值使用等号 。
% 创建一个变量 a 并赋值为 5 a = 5; % 创建一个字符串变量 name = '张三'; % 创建一个逻辑变量 is_student = true; % 在命令窗口显示变量值 disp(a); disp(name);
2 矩阵与数组创建
这是 MATLAB 的精髓。
-
创建向量(一维数组)
% 创建行向量 v1 = [1, 2, 3, 4, 5]; v2 = [1 2 3 4 5]; % 逗号可以省略 % 创建列向量 v3 = [1; 2; 3; 4; 5]; % 使用分号分隔 % 使用冒号运算符创建等差序列 v4 = 1:2:9; % 从 1 开始,到 9 结束,步长为 2,结果: [1, 3, 5, 7, 9] v5 = 1:5; % 默认步长为 1,结果: [1, 2, 3, 4, 5]
-
创建矩阵(二维数组)
% 直接用方括号和空格/逗号、分号创建 A = [1, 2, 3; 4, 5, 6; 7, 8, 9]; % 使用内置函数创建特殊矩阵 B = zeros(3, 4); % 创建一个 3x4 的全零矩阵 C = ones(2, 2); % 创建一个 2x2 的全一矩阵 D = eye(3); % 创建一个 3x3 的单位矩阵 E = rand(3, 3); % 创建一个 3x3 的随机矩阵 (0-1均匀分布) F = randn(3, 3); % 创建一个 3x3 的随机矩阵 (标准正态分布)
3 索引与切片
访问矩阵中的元素使用圆括号 。
A = [1, 2, 3; 4, 5, 6; 7, 8, 9]; % 访问单个元素 % 语法: A(行号, 列号) element = A(2, 3); % 获取第 2 行,第 3 列的元素,结果: 6 % 访问整行或整列 row2 = A(2, :); % 获取第 2 的所有列,结果: [4, 5, 6] col1 = A(:, 1); % 获取第 1 的所有行,结果: [1; 4; 7] % 使用索引列表 sub_matrix = A([1, 3], [2, 3]); % 获取第 1, 3 行和第 2, 3 列构成的子矩阵 % 结果: % 2 3 % 8 9
4 基本运算
- 算术运算符:, , , ,
^ - 点运算符:, ,
.^(对矩阵的对应元素进行运算,而非矩阵运算)
A = [1, 2; 3, 4]; B = [5, 6; 7, 8]; % 矩阵加法 C = A + B; % 结果: [6, 8; 10, 12] % 矩阵乘法 D = A * B; % 结果: [19, 22; 43, 50] % 对应元素乘法 (非常重要!) E = A .* B; % 结果: [5, 12; 21, 32] % 对应元素乘方 F = A .^ 2; % 结果: [1, 4; 9, 16]
5 常用内置函数
size(A): 返回矩阵 A 的尺寸 (行数, 列数)length(A): 返回矩阵 A 的最长维度的大小sum(A): 对矩阵 A 的列求和mean(A): 对矩阵 A 的列求平均值max(A): 找出矩阵 A 每列的最大值min(A): 找出矩阵 A 每列的最小值find(A): 找出非零元素的索引sin(x),cos(x),exp(x),log(x)等:数学函数,通常作用于数组的每个元素。
A = [1, 2, 3; 4, 5, 6]; s = size(A); % s = [3, 2] m = mean(A); % m = [2.5, 3.5] max_val = max(A); % max_val = [4, 5, 6]
第三部分:编程与脚本
1 脚本文件
当命令越来越多时,在命令窗口输入会很不方便,这时就需要脚本文件。
- 在 MATLAB 编辑器中新建一个文件(后缀为
.m,my_script.m)。 - 将命令写入文件。
- 点击“运行”按钮或在命令窗口输入
my_script即可执行。
示例 my_script.m:
% 这是一个脚本文件的示例
% 用于计算并绘制正弦波
% 清理工作区和命令窗口
clear;
clc;
% 1. 创建数据
x = 0:0.01:2*pi; % 从 0 到 2π,步长 0.01
y = sin(x);
% 2. 绘制图形
figure; % 创建一个新的图形窗口
plot(x, y);
% 3. 美化图形'正弦波函数');
xlabel('x 轴');
ylabel('y 轴');
grid on; % 显示网格
2 控制流
-
for循环% 计算 1 到 10 的和 sum_val = 0; for i = 1:10 sum_val = sum_val + i; end disp(['1到10的和为: ', num2str(sum_val)]); -
while循环% 找到小于 100 的最大的 2 的幂次方 n = 1; while n * 2 < 100 n = n * 2; end disp(['小于100的最大的2的幂次方是: ', num2str(n)]); -
if-elseif-else条件语句score = 85; if score >= 90 disp('成绩: 优秀'); elseif score >= 80 disp('成绩: 良好'); elseif score >= 60 disp('成绩: 及格'); else disp('成绩: 不及格'); end
第四部分:数据可视化
1 plot 函数
plot 是最核心的绘图函数。
x = 0:0.1:10;
y1 = sin(x);
y2 = cos(x);
% 绘制正弦曲线
figure;
plot(x, y1, 'r-', 'LineWidth', 2); % 红色实线,线宽为2
hold on; % 保持当前图形,以便在其上添加新曲线
plot(x, y2, 'b--o'); % 蓝色虚线,带圆形标记
hold off; % 释放保持状态
% 添加图例
legend('sin(x)', 'cos(x)');'正弦和余弦函数');
xlabel('x');
ylabel('y');
grid on;
2 其他常用绘图函数
scatter(x, y): 散点图bar(data): 条形图histogram(data): 直方图surf(X, Y, Z): 三维曲面图contour(X, Y, Z): 等高线图
第五部分:MATLAB 实际应用
1 应用领域示例
示例1:信号处理 - 滤波
假设我们有一个被噪声污染的正弦信号,我们想用低通滤波器去除高频噪声。
% 1. 生成信号
Fs = 1000; % 采样频率 1kHz
T = 1; % 信号时长 1秒
t = 0:1/Fs:T-1/Fs;
f_clean = 5; % 清洁信号频率 5Hz
f_noise = 50; % 噪声频率 50Hz
clean_signal = sin(2*pi*f_clean*t);
noise = 0.5 * sin(2*pi*f_noise*t);
noisy_signal = clean_signal + noise;
% 2. 设计低通滤波器
cutoff_freq = 20; % 截止频率 20Hz
order = 4; % 滤波器阶数
[b, a] = butter(order, cutoff_freq/(Fs/2), 'low'); % 设计巴特沃斯滤波器
% 3. 应用滤波器
filtered_signal = filter(b, a, noisy_signal);
% 4. 绘制结果
figure;
subplot(2,1,1);
plot(t, noisy_signal);'含噪声信号');
xlabel('时间');
ylabel('幅值');
subplot(2,1,2);
plot(t, filtered_signal);'滤波后信号');
xlabel('时间');
ylabel('幅值');
示例2:图像处理 - 灰度化与边缘检测
读取一张图片,将其转换为灰度图,并使用 Canny 算子检测边缘。
% 1. 读取并显示彩色图像
img_rgb = imread('peppers.png'); % 请确保当前文件夹有此图片
figure;
subplot(1,3,1);
imshow(img_rgb);'原始彩色图像');
% 2. 转换为灰度图像
img_gray = rgb2gray(img_rgb);
subplot(1,3,2);
imshow(img_gray);'灰度图像');
% 3. 边缘检测
edge_img = edge(img_gray, 'Canny'); % 使用Canny算子
subplot(1,3,3);
imshow(edge_img);'Canny边缘检测结果');
示例3:数据分析与拟合
有一组实验数据,我们想用一条直线(线性回归)来拟合它。
% 1. 创建模拟数据
x_data = [1, 2, 3, 4, 5, 6, 7, 8];
y_data = [2.1, 3.9, 6.2, 7.8, 10.1, 11.9, 14.3, 15.8]; % 带有噪声的数据
% 2. 使用 polyfit 进行多项式拟合 (1次多项式即线性拟合)
p = polyfit(x_data, y_data, 1); % 返回拟合多项式的系数
% 3. 生成拟合曲线
x_fit = linspace(min(x_data), max(x_data), 100); % 生成更平滑的x值
y_fit = polyval(p, x_fit); % 根据多项式系数计算y值
% 4. 绘制结果
figure;
plot(x_data, y_data, 'bo', 'MarkerSize', 8, 'DisplayName', '原始数据'); % 原始数据点
hold on;
plot(x_fit, y_fit, 'r-', 'LineWidth', 2, 'DisplayName', '拟合直线'); % 拟合直线
hold off;
legend;'线性回归拟合');
xlabel('x');
ylabel('y');
grid on;
第六部分:学习资源与进阶
1 官方资源
- MATLAB 官方文档:最权威、最全面的学习资料,几乎所有函数都有详细说明和示例,强烈建议学会查阅官方文档。 https://www.mathworks.com/help/matlab/
- MATLAB Onramp:MathWorks 官方提供的免费互动入门课程,约 2 小时,是新手入门的绝佳选择。
2 社区与课程
- MATLAB Central:包含 File Exchange(代码分享)、Answers(问答社区)、Blogs(博客)等。 https://www.mathworks.com/matlabcentral/
- 国内高校课程:许多大学(如清华大学、哈尔滨工业大学等)都开设了 MATLAB 相关的精品课程,可以在 B站、中国大学MOOC等平台找到。
- YouTube/慕课网:有大量高质量的 MATLAB 教学视频。
3 进阶学习路径
- 精通基础:熟练掌握矩阵操作、脚本编写、基本绘图。
- 学习一个核心工具箱:根据你的专业方向,深入学习一个工具箱,如 Optimization Toolbox (优化), Statistics and Machine Learning Toolbox (统计与机器学习), Control System Toolbox (控制系统)。
- 学习 Simulink:Simulink 是 MATLAB 的图形化仿真环境,特别适合系统建模、动态仿真和代码生成。
- App Designer:学习使用 App Designer 创建图形用户界面,将你的 MATLAB 算法打包成用户友好的应用程序。
