概述
目录
- 函数
- 定义
- 分类
- 嵌套函数
- 匿名函数
- 私有函数
- 重载函数
- 文件
- .m文件
- .fig文件
- .mat文件
- 调试
- 节调试
- 单步调试
函数
定义
MATLAB中函数的定义如下所示:
function 输出参数 = 函数名(输入参数)
函数体
end
% 输出参数格式
% 1. 无 (function 函数名(输入参数))
% 1. 单个变量(function y = 函数名(输入参数))
% 2. 数组形式(function [y1,y2,……] = 函数名(输入参数))
% 输入参数格式
% 1. 无 (function 输出参数 = 函数名())
% 1. 单个变量(function 输出参数 = 函数名(x))
% 2. 数组形式(function 输出参数 = 函数名(x1,x2,……))
在某些地方定义函数可以不加end,但有些必须加,因此建议全部加上end。
以数组形式作为输入参数或函数参数实际上也是单个变量,只不过MATLAB的单个变量也是数组,因此不必担心输出参数是数组的话怎么赋值。
分类
从被调用的角度来看,函数分为主函数和子函数,主函数是指在文件中排在最前,且与文件名同名的函数,(注意:两个条件实际上是固定的,函数文件中第一行必是与文件名同名的函数定义)在MATLAB中,只有主函数可以被其它文件调用。(也就是说调用一个函数文件中的函数,能且仅能调用主函数,而主函数名又与文件名相同)
从特殊性的角度来看,函数又可以分为四种:嵌套函数、匿名函数、私有函数和重载函数。
嵌套函数
定义:在函数内部定义的函数。
作用:感觉没什么作用。
嵌套函数可以操作父函数中的变量。(这里假设前者称为父函数)
匿名函数
匿名函数的格式如下:
函数名 = @(变量1,变量2,……) 表达式
类似于C语言中的#define 函数名(变量1,变量2,……) 表达式
,即通过该函数名以及相应的变量,返回相应表达式的值。
命令行窗口不允许使用function创建函数,但允许匿名函数存在。(至少2020版是这样)
匿名函数好像也被称为句柄函数,不过和函数句柄有点差别(注意句柄函数和函数句柄),函数句柄是指,将已存在的一个函数赋给另一个名称,以通过其它名称完成已存在函数的调用,类似#define 新名称 已存在的函数名称
,MATLAB实现函数句柄的方法如下:
% 函数BubbleSort
function y = BubbleSort(x)
len = length(x);
for m = 1 : len - 1
for n = 1 : len - m
if (x(n) > x(n + 1))
[x(n), x(n + 1)] = deal(x(n+1), x(n));
end
end
disp(['Sort step', num2str(m), ': ', num2str(x)])
end
y=x
end
% 上面进行函数的定义
fun = @BubbleSort
% 此时,可以通过fun调用函数BubbleSort
x=[6,3,7,8,5,1,2,4,9] %定义一个数组
y = fun(x) % 等效于y = BubbleSort(x)
私有函数
私有函数,即具有访问限制的函数,私有函数的函数文件位于private文件夹中,如下图所示的x.m函数即为私有函数,私有函数只能被父文件夹中的文件调用,以下图为例,x.m只能被y.m、Base.m文件调用,而哪怕被加入到文件路径中,也无法被z.m、nua.m等文件调用。
MATLAB函数访问可参考MATLAB文件路径。
重载函数
重载函数,在MATLAB中是指函数名称相同,但参数类型或个数不同的函数。当然由于同一目录下不能有名称相同的同类型文件,因此重载函数一般是位于不同文件目录下。
重载函数的定义和普通函数定义完全相同,被调用时,MATLAB会根据参数类型调用对应的函数。
文件
MATLAB中的文件按后缀可分为3种,即.m文件,.fig文件,.mat文件。
.m文件
MATLAB中的.m文件类似于C语言中的.c文件,即用于存放MATLAB代码。虽然命令行同样可以执行,但无法有效保存,并且一不小心就会输出大量信息,打乱阵型。
.m文件又可以分为脚本文件和函数文件,脚本文件中的代码可以按顺序执行(也就是一行行的代码),而函数文件中都是以关键字function开头,一般需要输入输出参数,因此哪怕点击运行也会进行报错。(如果是无输入参数的函数,哪怕有返回值,也可以运行成功)
当然脚本文件和函数文件实际上没有区分,类似C语言,一直在main函数执行,调用其它.c文件中的函数,MATLAB也相同,一直在脚本文件中执行,只不过会调用函数文件中的函数。
在MATLAB的当前文件夹窗口可以发现脚本文件和函数文件前面的图标不同,如下图所示,上面的BubbleSort.m为函数文件,下面的TestBubbleSort.m文件为脚本文件。
下面是两个文件的具体内容,如果打开BubbleSort.m文件并点击运行,此时在命令行窗口会显示缺少参数,而打开TestBubbleSort.m文件并点击运行,此时正常进行排序后输出。
(运行时应处于相应路径下,此时当前文件夹窗口应能看见相应文件)
% BubbleSort.m文件(函数文件)
function y = BubbleSort(x)
len = length(x);
for m = 1 : len - 1
for n = 1 : len - m
if (x(n) > x(n + 1))
[x(n), x(n + 1)] = deal(x(n+1), x(n));
end
end
disp(['Sort step', num2str(m), ': ', num2str(x)])
end
y=x
end
% TestBubbleSort.m(脚本文件)
clc; % 清除当前命令窗口的命令
clear; % 清除内存
x = randperm(9); % 将1到9这些数字随机打乱后赋值给x
disp([' Data before sort: x = ', num2str(x)]);
disp('--------------------------------------');
y = BubbleSort(x); % 调用冒泡排序函数对x进行排序,结果为y
disp('--------------------------------------');
disp([' Data before sort: y = ', num2str(y)]);
函数文件中可以有多个函数,而脚本文件也可以编写函数,当然脚本文件中编写的函数不能位于文件最前面(即不能用function作为文件开头),当脚本文件调用a函数,而a函数在本脚本文件已定义时,优先使用本脚本文件中的a函数而不是相同路径下函数文件中的a函数。(决定.m文件作用的是代码,根据代码才有的所谓脚本和函数的分类)
点击运行按钮后,MATLAB运行哪个脚本文件由目前编辑器窗口打开的是哪个文件决定,如果打开的是脚本文件,则执行该脚本文件,如果是函数文件,则会根据是否存在输入参数,决定报错或运行。
.fig文件
MATLAB中的.fig文件是用户界面窗口定义文件,也就是用于定义UI界面的文件,通过MATLAB打开该类型文件后会打开相应的UI界面,此时进行操作(比如通过鼠标点击其中的按钮)会调用相应的回调函数。
.fig文件的创建可以在命令行窗口中输入guide
,此时弹出以下弹窗,选择相应的模板并修改路径及文件名,再点击确定即可生成。
此时MATLAB界面如下图所示,可以看到,当前文件夹窗口出现两个文件,try.fig文件即UI界面定义文件,try.m文件中则存放相应的回调函数,比如在在UI界面中放置一个按钮,那么点击后,需要执行的代码就会放在try.m文件中的相应回调函数中。
关于.fig文件,对UI界面的使用会在其它文章撰写。(当你看到这句话时,表示我还没写完 )
时隔差不多1个月,回来修改了,UI界面的使用可参考MATLAB:GUI应用介绍一文。
.mat文件
.mat文件是MATLAB中用于保存数据的文件,通过save函数和load函数可完成.mat文件的操作,即将数据存储到.mat文件,以及从.mat文件中导出数据,函数的示例及解释如下表所示。
函数名 | 示例 | 解释 |
---|---|---|
save | save 文件名 save 文件名 变量1名 变量2名 | 将工作区的变量保存至相应文件(生成对应的.mat文件) 将工作区的变量1和变量2保存至相应文件 |
load | load 文件名 load 文件名 变量1名 变量2名 | 将相应文件(.mat)文件中的变量加载到工作区 将相应文件(.mat)文件中的变量1和变量2加载到工作区 |
调试
MATLAB进入调试的方法,似乎只能设置断点后点击运行,再开始相应调试按钮,如下图所示,单击编辑器窗口中序号旁边的“-”设置断点,点击运行后,工具栏中的编辑器标签页出现各个调试图标。
各个图标的名称、快捷键、名称如下所示。
节调试
节调试无相应图标,通过输入两个百分号“%%”将代码进行分节,此时Ctrl+Enter可单纯运行该节的内容。(从%%到另一个%%,鼠标单击相应节后,该节高亮显示,如下图的7~10行)
节的添加与运行也可以在未调试时使用,移动鼠标到相应行,点击右键并选择“执行当前节(E)”或“插入节(I)”。通过节调试可单独对某一段代码进行调试。(当然可能要注意该节使用的变量,并且似乎无法使用私有函数)
单步调试
通过断点进入调试后,即可进行单步调试,单步调试可通过表中各个按钮(或通过快捷键)逐行运行代码,查看效果。
最后
以上就是土豪鞋子为你收集整理的MATLAB(4)函数及文件函数文件调试的全部内容,希望文章能够帮你解决MATLAB(4)函数及文件函数文件调试所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复