杰瑞科技汇

matlab基础与应用教程

MATLAB基础与应用教程

第一部分:MATLAB 简介

1 什么是 MATLAB?

matlab基础与应用教程-图1
(图片来源网络,侵删)

MATLAB 的名字源于 MATrix LABoratory(矩阵实验室),它是一款由美国 MathWorks 公司开发的高性能语言和交互式环境,主要用于:

  • 数值计算
  • 算法开发
  • 数据可视化
  • 数据分析
  • 模拟与原型设计

核心特点:

  • 矩阵/数组作为基本数据单位:MATLAB 的核心是矩阵操作,这使得线性代数、信号处理等领域的计算变得异常简洁高效。
  • 强大的工具箱:MATLAB 提供了大量针对不同领域的专业工具箱,如信号处理、图像处理、控制系统、神经网络、深度学习等,让你可以站在巨人的肩膀上。
  • 直观的编程环境:集成了编辑器、调试器、命令窗口、工作区浏览器等,方便开发和管理。
  • 丰富的图形功能:可以轻松绘制二维、三维图形,并进行高度定制。

2 MATLAB 界面初识

启动 MATLAB 后,你会看到几个主要窗口:

matlab基础与应用教程-图2
(图片来源网络,侵删)
  • 命令窗口:这是与 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 脚本文件

当命令越来越多时,在命令窗口输入会很不方便,这时就需要脚本文件。

  1. 在 MATLAB 编辑器中新建一个文件(后缀为 .mmy_script.m)。
  2. 将命令写入文件。
  3. 点击“运行”按钮或在命令窗口输入 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 进阶学习路径

  1. 精通基础:熟练掌握矩阵操作、脚本编写、基本绘图。
  2. 学习一个核心工具箱:根据你的专业方向,深入学习一个工具箱,如 Optimization Toolbox (优化), Statistics and Machine Learning Toolbox (统计与机器学习), Control System Toolbox (控制系统)。
  3. 学习 Simulink:Simulink 是 MATLAB 的图形化仿真环境,特别适合系统建模、动态仿真和代码生成。
  4. App Designer:学习使用 App Designer 创建图形用户界面,将你的 MATLAB 算法打包成用户友好的应用程序。
分享:
扫描分享到社交APP
上一篇
下一篇