Skip to content

MATLAB - M 文件

虽然 MATLAB 命令窗口非常适合交互式计算,但真正的强大之处在于创建可重用的程序。在 MATLAB 中,这是通过将代码写入文件来实现的。这使您能够构建复杂、自动化和可共享的工作流程。

本章将介绍 MATLAB 编程的基本构建块:脚本文件和函数文件。

MATLAB 支持多种程序文件类型,每种都有特定用途:

  • 脚本(.m 文件):脚本是 MATLAB 命令的简单列表。当您运行脚本时,就像将这些命令逐个输入到命令窗口一样。脚本在主工作区(‘base’ workspace)中操作数据。
  • 函数(.m 文件):函数更具结构化和强大。它们接受特定的输入并产生特定的输出。关键是,它们有自己的私有工作区,这可以防止它们意外修改主工作区中的变量。这使得它们健壮且可重用。
  • 实时脚本(.mlx 文件):一种现代格式,将代码、格式化文本、公式和可视化内容组合在一个单一的交互式文档中。非常适合探索、教学和创建报告。
  • 类(.m 文件):用于高级面向对象编程,创建自定义数据类型和复杂应用程序。
  • 应用程序(.mlapp 文件):使用 App Designer 创建,这些文件包含用于构建交互式图形用户界面(GUI)的代码。

我们将重点介绍两种最常见的类型:脚本和函数。

要创建脚本,您可以使用 MATLAB 编辑器。您可以通过输入以下命令打开编辑器并创建名为 my_script.m 的新脚本文件:

edit my_script.m

如果文件不存在,MATLAB 会提示您创建它。这将打开编辑器窗口。或者,您可以点击 MATLAB 工具栏 HOME 选项卡上的 New Script 按钮。

让我们创建一个脚本,用于生成正弦波,计算其平均值并绘制结果。

将以下代码输入到编辑器中,并将文件保存为 analyze_wave.m:

% analyze_wave.m
% 该脚本生成并分析一个简单的正弦波。
% 1. 定义参数
Fs = 1000; % 采样频率(赫兹)
T = 1/Fs; % 采样周期(秒)
L = 1500; % 信号长度
t = (0:L-1)*T; % 时间向量
frequency = 50; % 正弦波频率(赫兹)
% 2. 生成信号
signal = sin(2 * pi * frequency * t);
% 3. 执行分析
mean_val = mean(signal);
% 4. 显示结果并绘图
figure; % 创建一个新的图形窗口
plot(t(1:100), signal(1:100)); % 仅绘制前 100 个点
title('正弦波信号');
xlabel('时间 (s)');
ylabel('幅度');
fprintf('信号的平均值是:%.4f\n', mean_val);

要运行脚本,可以在编辑器中点击 运行 按钮,或者在命令窗口中输入脚本名称(不带 .m 扩展名):

analyze_wave
% --- 命令窗口输出 ---
% 信号的平均值是:-0.0000
% 一个绘图窗口也将出现。

重要提示:脚本创建的所有变量(Fs、t、signal 等)现在都存在于您的基础工作区中。运行另一个脚本可能会意外覆盖它们。

函数是编写清晰、可重用和可维护代码的关键。它们是执行特定任务的独立模块。

函数必须保存到与函数同名的文件中。对于名为 myFunction 的函数,文件必须是 myFunction.m。

function [outputArg1, outputArg2] = myFunction(inputArg1, inputArg2)
%MYFUNCTION 函数功能的一行摘要(H1 行)。
% 此处可放置对函数、其输入及其输出的更详细解释。
% 当您键入 'help myFunction' 时,将显示此文本。
% 函数体:根据输入计算输出的代码
outputArg1 = ...;
outputArg2 = ...;
end % 函数文件需要 'end' 关键字。

让我们创建一个函数来将温度从摄氏度转换为华氏度。创建一个名为 celsiusToFahrenheit.m 的新文件并输入以下代码:

% 在文件 celsiusToFahrenheit.m 中
function fahrenheit = celsiusToFahrenheit(celsius)
%CELSIUSTOFAHRENHEIT 将温度从摄氏度转换为华氏度。
% F = CELSIUSTOFAHRENHEIT(C) 将摄氏度 C 的温度转换为华氏度 F。
% 应用转换公式
fahrenheit = (celsius * 9/5) + 32;
end

现在您可以像调用任何内置 MATLAB 函数一样从命令窗口调用此函数:

boiling_point_F = celsiusToFahrenheit(100)
boiling_point_F =
212
freezing_point_F = celsiusToFahrenheit(0)
freezing_point_F =
32

请注意,函数内部的变量 celsius 和 fahrenheit 不会出现在您的基础工作区中。它们的作用域仅限于函数内部。

  • MATLAB 项目 (Projects):对于任何非简单的任务,请使用 MATLAB 项目(.prj)。项目可以帮助您组织文件、管理所需路径、与源代码管理集成,并轻松与他人共享您的工作。
  • 源代码管理 (Source Control):MATLAB 编辑器内置了与 Git 和 Subversion (SVN) 的集成。您可以直接从 MATLAB IDE 中提交、拉取、推送和管理分支,这对于协作工作和跟踪更改至关重要。