我是靠谱客的博主 玩命月饼,最近开发中收集的这篇文章主要介绍学习matlab(十)——函数和脚本(1)函数入门(2)函数类型(3)其他文件,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

(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应用程序时,才会作预解析,以增加以后的调用速度。

dir *.p  %%error

pcode file

dir *.p

在该目录内有很多的.asv文件。可以采用dir进行查询,也可以采用Is进行查询。可以用记事本打开看一下,为正在编写的MATLAB源程序自动保存。如果matlab正常关闭的话,删除这些.asv文件没有任何影响。在M文本编辑器中,单击菜单Filel Preferences...,会弹出一个窗口,选择Editorldebugger下的Autosave,可以修改asv文件的设置,可以选择是否自动保存。如果选择自动保存,几分钟后进行自动保存,保存的临时文件的后缀是什么等等。

最后

以上就是玩命月饼为你收集整理的学习matlab(十)——函数和脚本(1)函数入门(2)函数类型(3)其他文件的全部内容,希望文章能够帮你解决学习matlab(十)——函数和脚本(1)函数入门(2)函数类型(3)其他文件所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(42)

评论列表共有 0 条评论

立即
投稿
返回
顶部