《MATLAB神经⽹络超级学习⼿册》——2.4M⽂件
本节书摘来⾃异步社区《MATLAB神经⽹络超级学习⼿册》⼀书中的第2章,第2.4节,作者:MATLAB技术联盟 , 刘冰 , 郭海霞著,更多章节内容可以访问云栖社区“异步社区”查看
2.4 M⽂件
MATLAB神经⽹络超级学习⼿册
M⽂件有两种形式:脚本⽂件(Script File)和函数⽂件(Function File)。脚本⽂件通常⽤于执⾏⼀系列简单的MATLAB命令,运⾏时只需输⼊⽂件名字,MATLAB就会⾃动按顺序执⾏⽂件中的命令。
函数⽂件和脚本⽂件不同,它可以接受参数,也可以返回参数,在⼀般情况下,⽤户不能靠单独输⼊其⽂件名来运⾏函数⽂件,⽽必须由其他语句来调⽤,MATLAB的⼤多数应⽤程序都以函数⽂件的形式给出。
2.4.1 M⽂件概述
MATLAB提供了极其丰富的内部函数,使得⽤户可以通过命令⾏调⽤就可以完成很多⼯作,但是想要更加⾼效地利⽤MATLAB,离不开MATLAB编程。
⽤户可以通过组织⼀个MATLAB命令序列完成⼀个独⽴的功能,这就是脚本M⽂件编程;⽽把M⽂件抽象封装,形成可以重复利⽤的功能块,这就是函数M⽂件编程。因此,MATLAB编程是提⾼MATLAB应⽤效率,把MATLAB基本函数扩展为实际的⽤户应⽤的必经之道。
M⽂件是包含MATLAB代码的⽂件。M⽂件按其内容和功能可以分为脚本M⽂件和函数M⽂件这两⼤类。
1.脚本M⽂件
它是许多MATLAB代码按顺序组成的命令序列集合,不接受参数的输⼊和输出,与MATLAB⼯作区共享变量空间。脚本M⽂件⼀般⽤来实现⼀个想对独⽴的功能,⽐如对某个数据集进⾏某种分析、绘图,求解某个已知条件下的微分⽅程等。⽤户可以通过在命令窗⼝直接键⼊⽂件名来运⾏脚本M⽂件。
通过脚本M⽂件,⽤户可以把为实现⼀个具体功能的⼀系列MATLAB代码书写在⼀个M⽂件中,每次只需要键⼊⽂件名即可运⾏脚本M⽂件中的所有代码。
2.函数M⽂件
它也是为了实现⼀个单独功能的代码块,但它与脚本M⽂件不同的是需要接受参数输⼊和输出,函数M
⽂件中的代码⼀般只处理输⼊参数传递的数据,并把处理结果作为函数输出参数返回给MATLAB⼯作区中指定的接受量。
因此,函数M⽂件具有独⽴的内部变量空间,在执⾏函数M⽂件时,需指定输⼊参数的实际取值,⽽且⼀般要指定接收输出结果的⼯作区变量。
MATLAB提供的许多函数就是⽤函数M⽂件编写的。尤其是各种⼯具箱中的函数,⽤户可以打开这些M⽂件查看。实际上,对应特殊应⽤领域的⽤户,如果积累了充⾜的专业领域应⽤的函数,就可以组建⾃⼰的专业领域⼯具箱。
通过函数M⽂件,⽤户可以把为实现⼀个抽象功能的MATLAB代码封装成⼀个函数接⼝,在以后的应⽤中重复调⽤。
MATLAB中的M⽂件⼀般包括以下5部分结构。
(1)函数声明⾏。
这⼀⾏只出现在M⽂件的第⼀⾏,通过function关键字表明此⽂件是⼀个M⽂件,并指定函数名、输⼊和输出参数。
(2)H1⾏。
这是帮助⽂字的第⼀⾏,给出M⽂件帮助最关键的信息。当⽤lookfor查某个单词相关的函数时,lookfor只在H1⾏中搜索是否出现指定单词。
(3)帮助⽂字。
这部分对M⽂件更加详细的说明,解释M⽂件实现的功能,M⽂件中出现的各变量、参数的意义,以及操作版权详细信息等。
(4)M⽂件正⽂。
这是M⽂件实现功能的MATLAB代码部分,通常包括运算、赋值等指令。
(5)注释部分。
这部分出现的位置⽐较灵活,主要是⽤来注释M⽂件正⽂的具体运⾏过程,⽅便阅读和修改,经常穿插在M⽂件正⽂中间。
2.4.2 局部变量与全局变量
⽆论在脚本⽂件还是在函数⽂件中,都会定义⼀些变量。函数⽂件所定义的变量是局部变量,这些变
量独⽴于其他函数的局部变量和⼯作空间的变量,即只能在该函数的⼯作空间引⽤,⽽不能在其他函数⼯作空间和命令⼯作空间引⽤。但是如果某些变量被定义成全局变量,就可以在整个MATLAB ⼯作空间进⾏存取和修改,以实现共享。因此,定义全局变量是函数间传递信息的⼀种⼿段。
⽤命令global定义全局变量,其格式如下。
global A B C
将A、B、C这3个变量定义为全局变量。
在M⽂件中定义全局变量时,如果在当前⼯作空间已经存在相同的变量,系统将会给出警告,说明由于将该变量定义为全局变量,可能会使变量的值发⽣改变。为避免发⽣这种情况,应该在使⽤变量前先将其定义为全局变量。
提⽰:
在MATLAB中对变量名是区分⼤⼩写的,因此为了在程序中分清楚⽽不⾄于误声明,习惯上可以将全局变量定义为⼤写字母。
【例2-27】全局变量的使⽤。
解:在Commond Window窗⼝输⼊以下命令。
function y=myt(x)
global a;
a=a+9;
y=cos(x);
然后在命令窗⼝声明全局变量赋值调⽤。
>> global a
>> a=2
a =
2
>> myt(pi)
ans =
-1
>> cos(pi)
ans =
-1
>> a
a =
11
通过例2-27可见,⽤global将a声明为全局变量后,函数内部对a的修改也会直接作⽤到MATLAB⼯作区中,函数调⽤⼀次后,a的值从2变为11。
2.4.3 M⽂件的编辑与运⾏
MATLAB语⾔是⼀种⾼效的编程语⾔,可以⽤普通的⽂本编辑器把⼀系列MATLAB语句写在⼀起构成MATLAB程序,然后存储在⼀个⽂件⾥,⽂件的扩展名为.m,因此称为M⽂件。这些⽂件都是由纯ASCII码字符构成的,在运⾏M⽂件时只需在MATLAB命令窗⼝下输⼊该⽂件名即可。
在MATLAB的编辑器中建⽴与编辑M⽂件的⼀般步骤如下。
1.新建⽂件
(1)最简单的⽅法是单击 MATLAB主界⾯⼯具栏上的图⽚ 13图标。
(2)在Commond Window窗⼝输⼊edit语句建⽴新⽂件,或输⼊edit filename语句,打开名为filename的M⽂件,在弹出⽂件不存在的提⽰框中,单击“Yes”按钮,则建⽴名为filename 新的M⽂件。
(3)选择MATLAB主界⾯的Home→New⼦菜单,在其下拉菜单中选择“Script”项。
(4)如果已经打开了⽂件编辑器后需要再建⽴新⽂件,可以⽤编辑器的菜单或⼯具栏上相应的图标进⾏操作。
提⽰:
还可以使⽤“Ctrl+N”的快捷⽅式打开⼀个新的M⽂件。
2.打开⽂件
(1)单击MATLAB主界⾯⼯具栏上的图⽚ 14图标,弹出Open窗⼝,选择已有的M ⽂件,单击“打开”按钮,如图2-8所⽰。
(2)输⼊edit filename语句,打开名为filename的M⽂件。
3.编辑⽂件
虽然M⽂件是普通的⽂本⽂件,在任何的⽂本编辑器中都可以编辑,但MATLAB系统提供了⼀个更⽅便的内部编辑器(Editor),如图2-9所⽰。
对于新建的M⽂件,可以在MATLAB的Editor窗⼝编写新的⽂件;对于打开的已有M⽂件,其内容显⽰在Editor窗⼝,⽤户可以对其进⾏修改。
在编辑的过程中可以使⽤类似于其他⽂本编辑器(如Word)的“复制”(Copy)菜单、⼯具栏的编辑图标和快捷键等,值得注意的是,除了注释内容外,所有MATLAB的语句都要使⽤西⽂字符。
4.保存⽂件
M⽂件在运⾏之前必须先保存。其⽅法如下。
单击编辑器⼯具栏上的图⽚ 17图标:对于新建的M⽂件,则弹出“保存⽂件”(Save file as)对话框,选择存放的路径、⽂件名和⽂件保存类型(不选择时为M ⽂件),单击“保存”按钮,即可完成保存;对于打开的已有M⽂件,则直接完成保存。
matlab学好了有什么用使⽤“Ctrl+S”的快捷⽅式。等同于单击编辑器⼯具栏上的图⽚ 18图标。
选择⼯具栏Save下拉菜单中的“Save As…”选项,可以在弹出“保存⽂件”(Select file for Save as)对话框中,重新选择存放的⽬录、⽂件名进⾏保存。
5.运⾏⽂件
脚本⽂件可直接运⾏,⽽函数⽂件还必须输⼊函数参数。
(1)在命令窗⼝输⼊要运⾏的⽂件名即可开始运⾏,需要注意的是,在运⾏前,⼀定要先保存⽂件,否则运⾏的是保存前的程序。
(2)如果在编辑器中完成编辑后需要直接运⾏,可以直接⽤⿏标单击图⽚ 19图标。
(3)按F5键则保存程序并直接运⾏;如果是新建M⽂件,则弹出“保存⽂件”对话框,⽤户保存⽂件后直接运⾏。
2.4.4 脚本⽂件
脚本⽂件是M⽂件中最简单的⼀种,不需要输⼊顿号输出参数,⽤命令语句可以控制MATLAB命令⼯作空间的所有数据。
在运⾏过程中,产⽣的所有变量均是命令⼯作空间变量,这些变量⼀旦⽣成,就⼀直保存在内存空间中,除⾮⽤户执⾏clear命令将它们清除。运⾏⼀个脚本⽂件等价于从命令窗⼝中顺序运⾏⽂件⾥的语句。由于脚本⽂件只是⼀串命令的集合,因此只需像在命令窗⼝中输⼊语句那样,依次将语句编辑在脚本⽂件中即可。
【例2-28】编程计算向量元素的平均值。
解:在MATLAB编辑窗⼝输⼊以下命令。
a=input('输⼊变量:a=');
[b,c]=size(a);
if ~((b==1)|(c==1))|(((b==1)&(c==1))) %判断输⼊是否为向量
error('必须输⼊向量')
end
average=sum(a)/length(a) %计算向量a所有元素的平均值
将其保存为pingjun.m,运⾏之,如果输⼊⾏向量[1 2 3],则运⾏结果如下。
>> pingjun
输⼊变量:a=[1 2 3]。
average =
2
如果输⼊的不是向量,如[1 2; 3 4],则运⾏结果如下。
>> pingjun
输⼊变量:a=[1 2; 3 4],则运⾏结果如下。
Error using pingjun (line 4)
这是因为必须输⼊向量。
2.4.5 函数⽂件
如果M⽂件的第⼀个可执⾏语句以function开始,该⽂件就是函数⽂件,每⼀个函数⽂件都定义⼀个函数。事实上,MATLAB 提供的函数命令⼤部分都是由函数⽂件定义的,这⾜以说明函数⽂件的重要。
从使⽤的⾓度看,函数是⼀个“⿊箱”,把⼀些数据送进去,经加⼯处理,把结果送出来。从形式上看,函数⽂件区别于脚本⽂件之处在于脚本⽂件的变量为命令⼯作空间变量,在⽂件执⾏完成后保留在命令⼯作空间中;⽽函数⽂件内定义的变量为局部变量,只在函数⽂件内部起作⽤,当函数⽂件执⾏完后,这些内部变量将被清除。
【例2-29】编写函数 average( )⽤于计算向量元素的平均值。
解:在MATLAB编辑窗⼝输⼊以下命令。
function y=average(x)
[a,b]=size(x); % 判断输⼊量的⼤⼩
if~((a==1)|(b==1))| ((a==1)& (b==1)) % 判断输⼊是否为向量
error('必须输⼊向量。')
end
y=sum(x)/length(x); %计算向量x所有元素的平均值
将⽂件存盘,默认状态下函数名为average_2.m(⽂件名与函数名相同),函数average接受⼀个输⼊参数并返回⼀个输出参数,该函数的⽤法与其他MATLAB 函数⼀样;在MATLAB 命令窗⼝中运⾏以下语句,便可求得1~9的平均值。
>> x=1:9
x =
1 2 3 4 5 6 7 8 9
>> average(x)
ans =
5
通常函数⽂件由以下⼏个基本部分组成。
(1)函数定义⾏。函数定义⾏由关键字function 引导,指明这是⼀个函数⽂件,并定义函数名、输⼊参数和输出参数,函数定义⾏必须为⽂件的第⼀个可执⾏语句,函数名与⽂件名相同,可以是MATLAB 中任何合法的字符。
函数⽂件可以带有多个输⼊和输出参数,如下。
function [x,y,z]=sphere(theta,phi,rho)
也可以没有输出参数,如下。
function printresults(x)
(2)H1⾏。H1⾏就是帮助⽂本的第⼀⾏,是函数定义⾏下的第⼀个注释⾏,是供lookfor查询时使⽤的。⼀般来说为了充分利⽤MATLAB的搜索功能,在编制M⽂件时,应在H1⾏中尽可能多地包含该函
数的特征信息。由于在搜索路径上包含average 的函数很多,因此⽤lookfor average 语句可能会查询到多个有关的命令。如下。
>> lookfor average_2
average_2.m: % 函数average_2(x)⽤以计算向量元素的平均值。
(3)帮助⽂本。在函数定义⾏后⾯,连续的注释⾏不仅可以起到解释与提⽰作⽤,更重要的是为⽤户⾃⼰的函数⽂件建⽴在线查询信息,以供help命令在线查询时使⽤。如下。
>> help average_2
函数 average_2(x)⽤以计算向量元素的平均值。
输⼊参数x为输⼊向量,输出参数y为计算的平均值。⾮向量输⼊将导致错误。
(4)函数体。函数体包含了全部的⽤于完成计算及给输出参数赋值等⼯作的语句,这些语句可以是调⽤函数、流程控制、交互式输⼊/输出、计算、赋值、注释和空⾏。
(5)注释。以%起始到⾏尾结束的部分为注释部分,MATLAB的注释可以放置在程序的任何位置,可以单独占⼀⾏,也可以在⼀个语句之后,如
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论