杰瑞科技汇

matlab 程序设计教程

MATLAB 程序设计综合教程

目录

  1. MATLAB 简介
  2. 基础入门:第一个 MATLAB 程序
  3. 核心数据结构:矩阵与数组
  4. 基本运算与函数
  5. 脚本文件与函数文件
  6. 程序控制流
  7. 数据可视化
  8. 文件 I/O
  9. 高级主题:面向对象编程与工具箱
  10. 学习资源与最佳实践

MATLAB 简介

什么是 MATLAB? MATLAB(Matrix Laboratory)是一款由 MathWorks 公司开发的高性能语言和交互式环境,它主要用于:

matlab 程序设计教程-图1
(图片来源网络,侵删)
  • 数值计算:解决矩阵、线性代数、微积分等数学问题。
  • 数据可视化:绘制高质量的二维和三维图形。
  • 编程与算法开发:通过脚本和函数实现复杂的算法。
  • 数据分析、探索与可视化:处理和分析大量数据。
  • 应用程序开发:创建具有图形用户界面的应用程序。

为什么选择 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 创建变量 变量名区分大小写,必须以字母开头,可以包含字母、数字和下划线。

matlab 程序设计教程-图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 矩阵索引 访问矩阵中的元素使用 行 列 的格式。

matlab 程序设计教程-图3
(图片来源网络,侵删)
>> 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 命令的集合,它们共享同一个工作区,可以方便地重复执行一系列操作。

  1. 在 MATLAB 编辑器中新建一个文件,保存为 my_script.m

  2. 输入以下代码:

    % 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;
  3. 点击编辑器中的“运行”按钮,或在命令窗口输入 my_script 并按回车。

2 函数文件 函数文件定义了一个可以接收输入参数、执行特定操作并返回输出结果的函数,它们拥有独立的工作区,是模块化编程的基础。

  1. 在编辑器中新建一个文件,保存为 calculate_mean.m

  2. 输入以下代码:

    % 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
  3. 在命令窗口或另一个脚本中调用这个函数:

    >> 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 读取文本文件 使用 readmatrixreadtable 函数,非常方便。

% 假设有一个名为 data.txt 的文件如下:
% 1, 2, 3
% 4, 5, 6
% 7, 8, 9
% 读取为矩阵
M = readmatrix('data.txt');
% 读取为表
T = readtable('data.txt');
disp(T);

2 写入文本文件 使用 writematrixwritetable 函数。

% 创建一个新矩阵
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 最佳实践

  1. 添加注释:为你的代码和脚本添加清晰的注释,解释“做什么”和“为什么做”。
  2. 有意义的变量名:使用如 input_signal 而不是 x 这样的描述性变量名。
  3. 预分配内存:在 for 循环中,预先为输出数组分配内存(如 y = zeros(1, N)),可以显著提高性能。
  4. 模块化编程:将大任务分解为多个小函数,每个函数只做一件事。
  5. 善用版本控制:使用 Git 等工具管理你的代码,以便追踪修改和协作。
  6. 避免全局变量:尽量使用函数参数传递数据,减少对全局变量的依赖,使代码更健壮、更易于测试。

学习 MATLAB 是一个循序渐进的过程,从掌握矩阵操作和基本语法开始,然后通过编写脚本和函数来实践,逐步学习可视化和高级主题,最重要的是多动手、多思考、多查阅官方文档,祝你学习顺利!

分享:
扫描分享到社交APP
上一篇
下一篇