MATLAB 从入门到精通

2025-12-20 20:59:55      新服速递

本教程基于 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 变量与数据类型

类型示例说明doublex = 3.14;默认浮点类型(64位)singley = single(2.5);单精度浮点int8/16/32/64a = int16(100);整型,节省内存charname = 'Tom';字符数组stringname = "Tom";字符串对象(R2016b+)logicalflag = true;布尔值cellC = {1, 'text'; [1 2], 3.14};单元数组(异构数据)structs.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 ToolboxCNN、RNN、预训练网络(如ResNet)Control System ToolboxPID控制、状态空间模型、根轨迹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 文件

十、推荐学习路径

阶段学习内容时间建议第1周基础语法、矩阵操作、绘图10-15小时第2周函数编写、流程控制、I/O10小时第3周向量化、调试、性能优化8小时第4周OOP、GUI、工具箱应用12小时持续项目实战、算法实现自主练习

附录:常用快捷键

快捷键功能Ctrl + Enter运行当前节(实时脚本)F5运行脚本F12切换断点Ctrl + I自动缩进Ctrl + R / T注释/取消注释Up/Down历史命令

总结

MATLAB 不仅是一门语言,更是一个科学计算生态系统。掌握它,意味着您拥有了:

✅ 快速原型开发能力

✅ 强大的数据分析与可视化能力

✅ 与 Simulink 联合进行系统级仿真

✅ 无缝接入 AI、控制、通信等前沿领域

冯提莫官宣停播消息,三年合约期满,各大平台纷纷哄抢!
朋友圈文字怎么发出去