学习matlab(⼗)——函数和脚本
(1)函数⼊门
MATLAB是⼀种解释性语⾔,本⾝不能完成任何事情,只是对⽤户的程序进⾏解释执⾏。MATLAB语⾔是采⽤C语⾔编写的,因此语法与C语⾔⾮常相似。对于熟悉C语⾔的⽤户,学习MATLAB编程会⾮常容易。M写的程序⽂件有两种:脚本M⽂件和函数M⽂件。
在MATLAB中,M⽂件有两种类型:函数( Functions)和脚本(Scripts),都是以.m作为⽂件的扩展名。M⽂件为普通的ASCII⽂本⽂件,可以采⽤⽂字编辑和处理软件来建⽴。脚本是⼀系列命令、语句的简单组合。脚本⽂件中的变量都为全局变量,程序运⾏后,这些变量保存在MATLAB的基本⼯作空间内,⼀般采⽤函数clear清除这些变量。为了避免因为变量名相同引起冲突,⼀般在脚本⽂件的开始,都采⽤函数clear all,清除所有基本空间中的变量。函数M⽂件在执⾏的过程中,所产⽣的变量⼀般都是局部变量,存放在函数⾃⾝的函数⼯作空间中,不会和基本⼯作空间中的变量产⽣冲突。对⽤户来说,函数M⽂件就像⼀个⿊匣⼦,只有输⼊和输出。采⽤函数M⽂件,⾮常易于实现程序的模块化,可以实现程序的分⼯合作、共同开发,适合⼤型程序开发。例如:在MATLAB的命令⾏窗⼝输⼊:edit std.m,利⽤MATLAB⽂本编辑器打开函数M⽂件。函数std()⽤于求样本数据的标准差,程序⾮常简单,但是包含了函数M⽂件的全部内容。
在MATLAB中,函数的参数传递是值传递,将变量或常量的值传递给函数的形式参数指定的变量,函数的计算在在MATLAB中,出汉1书参数指定的变量,函数的计算在函数空间中进⾏,计算结束后,函数空间的变量被清除,函数的返回值返回到MATLAB的基本⼯作空间中。在MATLABT中,函数nargin的值为输⼊参数个数,函数natgout的值为输出参数的个数。
function y = mymax(x1,x2,x3)
if nargin==0
y=NaN;
return;
elseif nargin==1
y=max(x1);
elseif nargin==2
y=max(max(x1),max(x2));
else
y=max([max(x1),max(x2),max(x3)]);
end
>> b=23;
>> c=[3 8 9 12];
>> mymax(b,c)
(2)函数类型
在MATLAB中,函数M⽂件可以分为:主函数、⼦函数、嵌套函数、私有函数、重载函数和匿名函数。下⾯分别进⾏介绍。
每个函数M⽂件中第⼀⾏定义的函数是主函数,⼀个函数M⽂件只有⼀个主函数。主函数的名字通常和函数的名字相同。除了主函数,在函数M⽂件中,还有嵌套函数或⼦函数。主函数对嵌套函数或⼦函数进⾏调⽤。
在主函数之后编写的函数为⼦函数。在函数M⽂件中,只有⼀个主函数,但是可以有多个⼦函数。所有的⼦函数也采⽤function进⾏定义。如果主函数中包含⼦函数,则每个采⽤function定义的函数必须采⽤end结束。各个⼦函数的先后顺序和调⽤的先后顺序⽆关。在主函数进⾏函数调⽤时,⾸先查该函数⽂件中的⼦函数,如果有同名的⼦函数,则调⽤该⼦函数。因此,可以编写同名的⼦函数实现函数重载。⼦函数只能被同⼀⽂件的主函数或其它⼦函数调⽤。
在函数的内部,还可以定义⼀个或多个函数,称为函数的嵌套。在函数内部定义的函数称为嵌套函数。MATLAB中,可以进⾏多层嵌套,⼀个函数的内部可以嵌套多个函数,这些嵌套函数内部⼜可以嵌套其它函数。
私有函数要保存在该⽬录的private⽂件夹下,具有有限的访问权限。私有函数的编写和普通函数的编写没有什么区别,可以是⼀个主函数和多个⼦函数,可以是⼀个主函数和多个⼦函数,以及嵌套函数等。函数M⽂件可以直接调⽤私有函数。该函数M⽂件所在的⽬录下直接有⼀个private⽬录,私有函数就保存在该⽬录下。私有函数只能被其⽗⽬录内的脚本或函数调⽤。脚本M⽂件不能直接调⽤私有函数,必须通过调⽤⼀个在私有函数的⽗⽬录中的函数来间接调⽤私有函数。如要获取私有函数myfun()的帮助信息,需要通过如下的命令:help
private/myfun.
在MATLAB中很多函数都有重载函数,重载函数具有相同的函数名,但是参数类型或个数不同。当⽤户在调⽤函数时,MATLAB会根据实际的参数类型和个数来选择其中的⼀个。在MATLAB中,重载函数保存在不同的⽬录下,通常⽬录的名字以符号@开头,然后跟⼀个代表MATLAB数据类型的字符。例如int8⽬录下存放的重载函数的输⼊参数类型为int8,即8位有符号整数。
匿名函数的定义格式如下:fhandle=@(arglist) expr其中arglist是匿名函数的输⼊参数列表,采⽤逗号分割expr为是具体的函数表达式,执⾏该匿名函数要完成的功能。@是MATLAB的操作符,⽤来建⽴函数句柄。
匿名函数的返回值fhandle为函数句柄,可以采⽤函数句柄来调⽤该函数。
f=@(x) 2*x^2+3*x+4;
a1=f(2);
(3)其他⽂件
在MATLAB中,可以将M⽂件转换为P码⽂件。P码⽂件可以直接执⾏,速度⽐M⽂件要快。此外,在MATLAB的编程过程中,还会产⽣临时保存的ASV⽂件。下⾯分别进⾏详细介绍。
P码⽂件是对应M⽂件的源代码不可见,但是可以执⾏的版本。P码⽂件的后缀为.p,采⽤函数pcode()⽣成脚本或函数M⽂件的p码⽂件。第⼀次执⾏M⽂件时,MATLAB需要将其解析( parse)⼀次(第⼀次执⾏后的已解析内容会放⼊内存作第⼆次执⾏时使⽤,即第⼆次执⾏时⽆需再解析),这增加了程序的执⾏时间。产⽣P码⽂件之后,如果再调⽤M⽂件时,便会直接执⾏其P码⽂件。MATLAB的解析速度⾮常快,⼀般不⽤产⽣P码⽂件。只有当⼀些程序要调⽤到⾮常多的M⽂件时,如GUI应⽤程序时,才会作预解析,以增加以后的调⽤速度。matlab学好了有什么用
dir *.p  %%error
pcode file
dir *.p
在该⽬录内有很多的.asv⽂件。可以采⽤dir进⾏查询,也可以采⽤Is进⾏查询。可以⽤记事本打开看⼀下,为正在编写的MATLAB源程序⾃动保存。如果matlab正常关闭的话,删除这些.asv⽂件没有任何影响。在M⽂本编辑器中,单击菜单,会弹出⼀个窗⼝,选择Editorldebugger下的Autosave,可以修改asv⽂件的设置,可以选择是否⾃动保存。如果选择⾃动保存,⼏分钟后进⾏⾃动保存,保存的临时⽂件的后缀是什么等等。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。