MATLAB编程-自定义函数.pdf

上传人:qwe****56 文档编号:70011253 上传时间:2023-01-14 格式:PDF 页数:39 大小:910.97KB
返回 下载 相关 举报
MATLAB编程-自定义函数.pdf_第1页
第1页 / 共39页
MATLAB编程-自定义函数.pdf_第2页
第2页 / 共39页
点击查看更多>>
资源描述

《MATLAB编程-自定义函数.pdf》由会员分享,可在线阅读,更多相关《MATLAB编程-自定义函数.pdf(39页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、目录 目录 第五章 自定义函数.1 5.1 MATLAB 函数简介.1 5.2 在 MATLAB 中传递变量:按值传递机制.6 例 5.3.7 5.3 选择性参数.14 测试 5.1.16 5.4 用全局内存分享数据.17 例 5.4.18 5.5 在函数调用两次之间本地数据的存储.22 例 5.5 运行平均数.22 5.6 函数的函数(function functions),.26 例 5.6.27 5.7 子函数和私有函数.29 5.8 总结.29 5.9 练习.30 5.1.30 5.2.30 5.3.31 5.4.31 5.5.31 5.6.31 5.7.31 5.8.31 5.9.3

2、1 5.10.31 5.11.31 5.12.32 5.13.32 5.14.32 5.15.33 5.16.33 5.17.33 5.18.34 5.19.35 5.20.35 5.21.35 5.22.35 5.23.36 5.24.36 5.25.37 5.26.37 1第五章第五章 自定义函数自定义函数 在第三章中,我们强调了好的编程习惯的重要性。我们进行开发的基本手段是自上而下的编程方法。在自上而下的编程方法中,它开始于对所要解决问题的精确陈述和定义输入量和输出量。下一步,我们在大面上进行算法的描述,然后把算法分解成一个一个的子问题。再然后,程序员把这一个个子问题进行再一次的分解,直

3、到分解成简单而且能够清晰理解的伪代码。最后把伪代码转化为 MATLAB 代码。尽管我们在前面的例子中,按照上面的步骤进行了编程。但是产生的结果在某种程度上还是受限制的。因为我们必须把每一个子问题产生的 MATLAB 代码嵌入到一个单独的大程序中。在嵌入之前我们无法对每一次子问题的代码进行独立地验证和测试。幸运的是,MATLAB 有一个专门的机制,在建立最终的程序之前用于独立地开发与调试每一个子程序。每一个子程序都可以独立函数的形式进行编程,在这个程序中,每一个函数都能独立地检测与调试,而不受其他子程序的影响。良好的函数可以大大提高编程的效率。它的好处如下:1.子程序的独立检测 每一个子程序都可

4、以当作一个独立的单元来编写。在把子程序联合成一个的大程序之前,我们必须检测每一个子程序以保证它运转的正确性。这一步就是我们熟知的单元检测。在最后的程序建立之前,它排除了大量的问题。2.代码的可复用性 在许多的情况下,一个基本的子程序可应用在程序的许多地方。例如,在一个程序的许多地方,要求对一系列按由低到高的顺序进行排序。你可以编一个函数进行排序,然后当再次需要排序时可以调用这个函数。可重用性代码有两大好处:它大大提高了整体编程效率,它更易于调试,因为上面的排序函数只需要调试一次。3.远离意外副作用 函数通过输入参数列表(input argument list)从程序中读取输入值,通过输出参数列

5、表(output argument list)给程序返回结果。程序中,只有在输入参数列表中的变量才能被函数利用。函数中,只有输出参数列表中的变量才能被程序利用。这是非常重要的,因为在一个函数中的突发性编程错误只会发生错误的函数的变量。一旦一个大程序编写并发行,它还要面临的问题就是维护。程序的维护包括修补错误,修改程序以适应新或未知的环境。作维护工作的程序员在一般情况下不会是程序的原作者。如果程序编写的不好,改动一处代码就可能对程序全局产生负面影响。这种情况的发生,可能是因为变量在其他部分被重新定义或利用。如果程序员改变这个变量,可能会导致后面的程序无法使用。好的函数的应用可以通过数据隐藏使问题

6、最小化。在主函数中的变量在函数中是不可见的(除了在输入变量列表中的变量),在主程序中的变量不能被函数任意修改。所以在函数中改变变量或发生错误不会在程序的其他部分发生意外的副作用。好的编程习惯 把大的程序分解成函数,有很多的好处,例如,程序部分的独立检测,代码的可复用性,避免意想不到的错误。5.1 MATLAB 函数简介函数简介 到目前为止,我们看到的所有的 M 文件都是脚本文件。脚本文件只是用于存储MATLAB 语句。当一个脚本文件被执行时,和直接在命令窗口中直接键入 MATLAB 语句 2所产生的结果是一样的。脚本文件分享命令窗口中的工作区,所以所有的在脚本文件运行之前定义的变量都可以在脚本

7、文件中运行,所有在脚本文件中创建的变量在脚本文件运行之后仍然存在工作区。一个脚本文件没有输入参数,也不返回结果。但是所有脚本文件可以通过存于工作区中的数据进行交互。相对地,MATLAB 函数是一种特殊形式的 M 文件,它运行在独立的工作区。它通过输入参数列表接受输入数据,它通过输出参数列表返回结果给输出参数列表。MATLAB 函数的基本形式如下:function outarg1,outarg2,.=fname(inarg1,inarg2,.)%H1 comment line%Other comment lines.(Executable code).(return)function 语句标志着

8、这个函数的开始。它指定了函数的名称和输入输出列表。输入函数列表显示在函数名后面的括号中。输出函数列表显示在等号左边的中括号中。(如果只有一个输出参数,中括号可以省略。)输入参数列表是名字的列表,这些名字代表从调用者到函数的值。这些名字被称作形参。当函数被调用时,它们只是从调用者得来实际变量的占位符而已。相似地,输出参数列表也形参组成,当函数结束运行时,这些形参是返回到调用者的值的占位符。在一个表达式中,调用一个函数需要用到实参列表。在命令窗口直接(或在脚本文件中,另一个函数中)键入函数的名字就可以调用这个函数了。当调用一个函数时,第一个实参的值用在第一个形参的位置,而且其余的形参和实参都一一对

9、应。函数的执行从函数的顶部开始,结束于 return 语句或函数的终点。因为在函数执行到结尾就会结束,所以 return 语句在大部分的程序中没有必要使用。在输出参数列表中每一个项目都必须出现在 function 语句中的左边。当函数返回时,存储于输出函数列表的值就会返回给调用者,用于下一步的运算。在一个函数中的初始注释行有特定的目的。在 function 语句的第一个行注释被称为 H1注释行注释行。它应当是对本函数功能的总结。这一行的重要性在于,通过 lookfor 命令它能被搜索到并显示出来。从 H1 注释行注释行到第一个空行或第一个可执行性语句可以通过 help 命令或帮助窗口搜索到。它

10、们则应包含如何使用这个函数的简单总结。下面是一个自定义函数的简单例子。函数 dist2 用于计算笛卡尔坐标系中点(x1,y1)与点(x2,y2)之间的距离。(把以下代码保存成 dist2.m 文件)function distance=dist2(x1,y1,x2,y2)%DIST2 Calculate the distance between two point%Function DIST2 calculates the distance between%two points(x1,y1)and(x2,y2)in a cartesian%coordinate system.%Calling s

11、equence:%res=dist2(x1,y1,x2,y2)%Define variables:%x1 -x-position of point 1%y1 -y-position of point 1%x2 -x-position of point 2%y2 -y-position of point 2%distance -Distance between points%Record of revisions:%Date Pragrammer Description of change%=%12/15/98 S.J.Chapman Original code%3%Calculate dist

12、ance.distance=sqrt(x2-x1).2+(y2-y1).2);这个函数有 4 个输入参数各和 1 个输出参数。一个简单的利用这个函数的例子显示如下:%Script file:test_dist2.m%Purpose:%This program test2 function dist2.%Record of revisions:%Date Pragrammer Description of change%=%12/15/98 S.J.Chapman Original code%Define variables:%ax-x-position of point a%ay-y-posi

13、tion of point a%bx-x-position of point b%by-x-position of point b%Get input data.disp(Calculate the distance between two points:);ax=input(Enter x value of point a:);ay=input(Enter y value of point a:);bx=input(Enter x value of point b:);by=input(Enter y value of point b:);%Evaluate function result=

14、dist2(ax,ay,bx,by);%Write out result.fprintf(The distance between points a and b is%f n,result);当脚本文件被执行时,它的结果显示如下:test_dist2 Calculate the distance between two points:Enter x value of point a:1 Enter y value of point a:1 Enter x value of point b:4 Enter y value of point b:5 The distance between poi

15、nts a and b is 5.000000 通过手动运算我们可知程序运算的结果是正确的。函数 dist2 也支持 MATLAB 帮助子系统。如果你键入“help dist2”,将会得到的结果是:help dist2 DIST2 Calculate the distance between two point Function DIST2 calculates the distance between two points(x1,y1)and(x2,y2)in a cartesian coordinate system.Calling sequence:res=dist2(x1,y1,x2,

16、y2)Define variables:x1 -x-position of point 1 y1 -y-position of point 1 4 x2 -x-position of point 2 y2 -y-position of point 2 distance -Distance between points Record of revisions:Date Pragrammer Description of change =12/15/98 S.J.Chapman Original code Calculate distance.相似地,键入“lookfor dist2”后将会产生如

17、下的结果:lookfor dist2 DIST2 Calculate the distance between two point test_dist2.m:%Script file:test_dist2.m lookfor distance DIST2 Calculate the distance between two point 为了仔细观察工作区在函数执行前后的变化,我们将在 MATLAB 调试器中加载函数dist2 和脚本文件 test_dist2。在函数加载前,加载中,加载后设置断点(如图 5.1 所示)。当程序中止在函数调用之前的断点,它的工作区如图 5.2(a)所示。注意工作区

18、中只有变量 ax,ay,bx 和 by。当程序中止在函数调用过程中的断点,它的工作区如图 5.2(b)所示。注意工作区中只有变量 x1,x2,y1,y2 和 distance。当程序中止在函数调用后的断点,它的工作区如图 5.2(c)所示。注意工作区中原来的变量又重复出现,再加上函数返回的变量 result。这些图显示了 MATLAB 调用 M 文件的过程中工作区的变化。5 图 5.1 M 文件和函数 dist2 将会被加载到调试器,在函数调用前,调用过程中,调用后设置合适断点 图 5.1 M 文件和函数 dist2 将会被加载到调试器,在函数调用前,调用过程中,调用后设置合适断点 6 图 5

19、.2(a)图 5.2(a)图 5.2(b)图 5.2(b)图 5.2(c)图 5.2(c)图 5.2(a)在函数调用之前的工作区(b)函数调用过程中的工作区(c)函数调用之后的工作区 5.2 在在 MATLAB 中传递变量:按值传递机制中传递变量:按值传递机制 maltab 程序与它们函数之间的交互用是按值传递机制。当一个函数调用发生时,MATLAB 将会复制实参生成一个副本,然后把它们传递给函数。这次复制是非常重要的,因为它意味着虽然函数修改了输入参数,但它并没有影响到调用者的原值。这个特性防止 7了因函数修改变量而导致的意想不到的严重错误。这一特性将在下面的函数中得到说明。这个函数中有两个

20、输入参数:a 和 b。在它的计算中,它修改了变量的值:function out=sample(a,b)fprintf(In Sample:a=%f,b=%f%fn,a,b);a=b(1)+2*a;b=a.*b;out=a+b(1);fprintf(In Sample:a=%f,b=%f%f n,a,b);下面是调用这个函数的检测程序:a=2;b=6 4;fprintf(Before sample:a=%f,b=%f%fn,a,b);out=sample(a,b);fprintf(After sample:a=%f,b=%f%fn,a,b);fprintf(After sample:out=%f

21、 n,out);当这个程序被执行将产生如下的结果:test_sample Before sample:a=2.000000,b=6.000000 4.000000 In Sample:a=2.000000,b=6.000000 4.000000 In Sample:a=10.000000,b=60.000000 40.000000 After sample:a=2.000000,b=6.000000 4.000000 After sample:out=70.000000 注意,a 和 b 在函数 sample 内都改变了,但这些改变对调用函数中的值并没有任何的影响。C 语言的使用者对按值传递机

22、制比较熟悉,因为 C 应用它把标量值传递给函数。尽管C 语言不能用按值传递机制传递数组,所以对在 C 语言函数中的形参数组进行意想不到的修改将会导致在调用程序时产生错误。MATLAB 改进了按值传递机制,既适于标量,又适应于数组(在 MATLAB 中参数传递过程中的执行要远比上面讨论中指出的要复杂的多。正如上面指出的,与按值传递相联系的复制将花去大量的时间,但是保护程序以至于不产生错误。实际上,MATLAB 用了两种方法,它先对函数的每一个参数进行分析,确定函数的那些参数进行了修改。如果函数没有修改这个参数,它将不会对此参数进行复制,而是简单地指向程序外面的外面的变量,如果函数修改了这个参数,

23、那么这个复制就会被执行)。图 5.3 在笛卡尔平面内的一点 P,既可以用直角坐标系来描述,又可以有极坐标来描述 图 5.3 在笛卡尔平面内的一点 P,既可以用直角坐标系来描述,又可以有极坐标来描述 例例 5.3 直角坐标与极坐标的转换 在笛卡尔平面上的一点的坐标既可以通过直角坐标(x,y)来描述,也可以通过极坐标(r,)来描述,如图 5.3 所示。两套坐标体系的关系如下式所示:x=r cos (5.1)y=r sin (5.2)22yxr+=(5.3)xyPxyrO 8xy1tan=(5.4)编写两个函数 rect2polar 和 polar2rect,用来实现两坐标体系的转换。其中 单位于为

24、度。答案:我们现在应用标准的问题解决方法来创建函数。注意 matab 的 trigonometric(三角)函数的参数的单位是弧度。所以在解决这个问题时,我们必须把度转化为弧度,反之亦然。基本的度与弧度的转换关系如下:180o=radians (5.5)1.陈述问题对这个问题的简单陈述为:编写一个函数,把直角坐标系描的笛卡尔平面内的一个坐标转化对应的极坐标,角 的单位为度。反之,把极坐标系内的一个坐标转化对直角坐标。角 的单位也为度。2.定义输入输出量 函数 rect2polar 的输入量是直角坐标系(x,y)中的一个点。这个函数的输出量是极坐标(r,)中的一个点。函数 polar2rect

25、的输入量是极坐标(r,)中的一个点。此函数的输出量是直角坐标系(x,y)中的一个点。3.定义算法 这些函数是非常简单的,所以我们能直接的写出它们的伪代码。函数 polar2rect 的伪代码如下:x r*cos(theta*pi/180)y r*sin(theta*pi/180)函数 rect2polar 的伪代码将会用到函数 atan2,因为函数的取值范围覆盖了笛卡尔平面的所有象限。(通过 MATLAB 的帮助系统查找这个函数。)4.把算法转化为 MATLAB 语句 函数 polar2rect 的 MATLAB 代码如下所示 function x,y=polar2rect(r,theta)%

26、POLAR2RECT Convert rectangular to polar coordinates%Function POLAR2RECT accepts the polar coordinates%(r,theta),where theta is expressed in degrees,%and converts them into the rectangular coordinates(x,y)%Calling sequence:%x,y=polar2rect(r,theta)%Define variables:%r -Length of polar vector%theta -An

27、gle of vector in degrees%x -x-position of point%y -y-position of point%Record of revisions:%Date Programmer Description of change%=%09/19/00 S.J.Chapman Original code x=r*cos(theta*pi/180);y=r*sin(theta*pi/180);函数 rect2polar 的 MATLAB 代码如下所示 function r,theta=rect2polar(x,y)%RECT2POLAR Convert rectang

28、ular to polar coordinates%Function RECT2POLAR accept the rectangular coordinates%(x,y)and converts them into the polar coordinates%(r,theta),where theta is expressed in degrees.%9%Calling sequence:%r,theta=rect2polar(x,y)%Define variables:%r -Length of polar vector%theta -Angle of vector in degrees%

29、x -x-position of point%y -y-position of point%Record of revisions:%Date Programmer Descriptoin of change%=%09/19/00 S.J.Chapman Original code r=sqrt(x.2+y.2);theta=180/pi*atan2(y,x);注意这两个函数中都包含了帮助信息,所以在应用 MATLAB 的帮助子系统中,或使用 lookfor 命令中它们将正常的运作。5.检测程序 为了检测这些程序,我们将在 MATLAB 命令窗口中直接运行它们。我们将用边长分别为 3,4,5

30、的三角进行检测,这个三角在初中我们就非常的熟悉了。在这个三角形中最小的角约为 36。87 度。我们将在四个象限对函数进行检测,以保证在任何情况下转换都是正确的。r,theta=rect2polar(4,3)r=5 theta=36.8699 r,theta=rect2polar(-4,3)r=5 theta=143.1301 r,theta=rect2polar(-4,-3)r=5 theta=-143.1301 r,theta=rect2polar(4,-3)r=5 theta=-36.8699 x,y=polar2rect(5,36.8699)x=4.0000 y=3.0000 x,y=p

31、olar2rect(5,-143.1301)x=-4.0000 y=-3.0000 x,y=polar2rect(5,143.1301)10 x=-4.0000 y=3.0000 x,y=polar2rect(5,-36.8699)x=4.0000 y=-3.0000 在笛卡尔坐标的四个象限内得到的结果均是正确的。例 5.2 数据排序在许多的科研和工程应用中,随机输入一组数据并对它进行由低到高排序或由高到低进行排序是十分必要的。假设你是一个动物学家,你正在研究大量的动物,并想要鉴定这些动物最大的 5%。解决这个问题的最直接的方法是对这些动物的大小按照降序进行排列,取其前 5%。对数据进行升序或

32、降序排列似乎是一件非常容易的工作。毕竟,我们经常作这样的事。有一个简单的例子,把数据(10,3,6,4,9)按升序排列成(3,4,6,9,10)。我们应当怎样做呢。我们首先应当浏览整个输入数据列表(10,3,6,4,9)找出其中的最小值(3),然后浏览剩下的输入数据(10,6,4,9)并找到下一个最小值(4),然后继续重复上面的步骤,直到所有的列表中的所有数都能排完。实际上,排序是一个非常困难的工作。当值的个数增加时,用上面简单的排序方法进行运算所消耗的时间将会迅速增加,因为每排一个数就要浏览一个遍输入值。对于大的数据集合,这个方法因太耗时,而不用。更糟糕的是,如果有大量的数据占有计算机的大部

33、分内存我们将如何排序。开发大数据集合的高效排序技术是一个相当活跃的研究领域,它已经成为了一个新的科目。在这个例子中,我们将尽可能简单的算法来说明排序的内容。这个最简单的算法叫做选择性排序(selection sort)。它只是对应上面描述方法的计算机执行。选择性排序的基本算法如下:1.浏览被排序数的列表,并找出其中的最小值。把最小值与排在最前面的数进行交换。如要排在最前面的数就是这个数表最小值,什么也不用做。2.从这个数据列表的第二个数开始浏览找到第二个最小的数。把这个数与当前排在第二个数进行交换。如果当前排在第二位的数就是下一个最小值,那么什么也不用做。3.从数据列表的第三个数开始找到第三个

34、最小的数。把这个数与当前排在第三个数进行交换。如果当前排在第三位的数就是第三个最小值,那么什么也不用做。4.重复以上步骤直至最后一位置排完。当最后一个位置排完后,排序结束。注意:如果我们要对 N 个数进行排序,这个排序算法要进行 N-1 次浏览才能完成排序。这个步骤的说明如图 5.4 所示。因为有 5 个数进行排序,所以要对数据进行 4 次浏览。首先对整个数据列表进行浏览,得到最小值 3,把 3 置于第一位,故与 10 进行交换。从第二位开始浏览,得到第二个最小值 4,与 10 交换。从第三位进行浏览,得到最小值6,6 恰在第三位上,不用交换。从第四位开始浏览,得到最小值 9,与排在第 4 位

35、的 10 交换。排序结束。性能提示性能提示 选择性编程算法是一种极易理解的编程算法,但它的效率是极低的。我们绝不能用它进行大数据集合的排序(例如含有 1000 个元素的数组)。这个几年里,计算机专家已经发展了许多高效的排序算法。内置于 MATLAB 的 sort 和 sortrows 函数是非常高效的,在实际工作中我们应当应用这些函数。选择性编程算法是一种极易理解的编程算法,但它的效率是极低的。我们绝不能用它进行大数据集合的排序(例如含有 1000 个元素的数组)。这个几年里,计算机专家已经发展了许多高效的排序算法。内置于 MATLAB 的 sort 和 sortrows 函数是非常高效的,在

36、实际工作中我们应当应用这些函数。11 图 5.4 选择性排序的一个简单例子。图 5.4 选择性排序的一个简单例子。我们将开发一个程序,读取从命令窗口读取一个数据集,对它进行升序排列,并出排序后的结果。这个排序将会由独立的自定义函数来完成。答案:这个程序必须提示使用者提供输入数据,对其进行排序,并输出排序结要。这个程序的设计过程如下:1.陈述问题我们刚才没有指定要排序的数据类型。如果数据是数字,那么问题的陈述如下。开发一个程序,它能够读取在命令窗口中输入的任意类型的数字,用独立的自定义函数对读取的值进行排序,并在命令窗口写出排序结果。2.定义输入输出量这个程序的输入值是在命令窗口键入的数字值。这

37、个程序的输出量是写在命令窗口中的排序结果。3.设计算法这个问题可以分解为三大步:Read the input data into an array Sort the data in ascending order Write the sorted data 第一大步是读取数据。我们必须提示使用者输入输入数据的个数,然后读取数据。因为我们知道所要读取的数的确切个数,所以可以用 for 循环主读取合适的数据。它的伪代码如下:Prompt user for the number of data values Read the number of data values Preallocate an

38、input array for ii=1:number of values Prompt for next value Read value end 下一步,我们必须要用独立的函数对数据进行排序。我们需要对数据进行 naval-1 次浏览,每一次找出一个最小值。我们将用一个指针来寻找每一次浏览的最小值。一量最小值被找到,如果它不在列表的顶端,它就与列表顶端的元素进行交换。伪代码如下:for ii=1:nvals-1%Find the minimum value in a(ii)through a(nvals)iptr ii for jj=ii+1 to nvals if a(jj)a(iptr

39、)iptr a(iptr)end end 12%iptr now points to the min value,so swap a(iptr)%with a(ii)if iptr=ii.if ii=iptr temp a(ii)a(ii)a(iptr)a(iptr)temp end end 最后一步是输出排序结果。这个步骤的伪代码不需要重复。最终的伪代码是这三大步伪代码的联合。4.把伪代码转化为 MATLAB 语言选择性排序的 MATLAB 代码如下所示:function out=ssort(a)%SSORT Selection sort data in ascending order%Fu

40、nction SSORT sorts a numeric data set into%ascending order.Note that the selection sort%is relatively inefficient.DO NOT USE THIS%FUNCTION FOR LARGE DATA SETS.Use MATLABs%sort function instead.%Define variables:%a -Input array to sort%ii -Index variable%iptr -Pointer to min value%jj -Index variable%

41、nvals -Number of values in a%out -Sorted output array%temp -Temp variable for swapping%Record of revisions:%Date Programmer Description of change%=%12/19/98 S.J.Chapman Original code%Get the length of the array to sort nvals=size(a,2);%Sort the input array for ii=1:nvals-1%Find the minimum value in

42、a(ii)through a(n)iptr=ii;for jj=ii+1:nvals if a(jj)test_ssort Enter number of values to sort:6 Enter value 1:-5 Enter value 2:4 Enter value 3:-2 Enter value 4:3 Enter value 5:-2 Enter value 6:0 Sorted data:-5.0000 -2.0000 -2.0000 0.0000 3.0000 4.0000 对于我们检测的数据,程序给出了正确的结果。注意从正数到负数,还有重复值,这个程序工作正常。145.

43、3 选择性参数选择性参数 许多的 MATLAB 函数都支持选择性输入参数和输出参数。例如,我们调用 plot 函数,输入参数既可以少到 2 个,也可以多到 7 个参数。从另一方面说,函数 max 既支持一个输出参数,也支持两个输出参数。如果只有一个输出参数,max 将会返回函数的最大值。如果有两个输出参数将会返回数组的最大值和最大值所在的位置。如何知道一个MATLAB 函数有几个输入输出参数呢,以及函数相应的功能呢?在 MATLAB 中有八种专门的函数用于获取关于选择性参数的信息和用于报告这些参数的错误。其中的六个函数我们在这里介绍,其余的两个我们将会在第七章讲单元数据类型时介绍。nargin

44、 这个函数返回调用这个函数时所需要的实际输入参数的个数 nargout 这个函数返回调用这个函数时所需要的实际输出参数的个数 nargchk 如要一个函数调用被调用时参数过多或过少,那么 nargchk 函数将返回一个标准错误信息 error 显示错误信息,并中止函数以免它产生这个错误。如果参数错误是致命的,这个函数将会被调用。warning 显示警告信息并继续执行函数,如果参数错误不是致命的,执行还能继续,则这个将会被调用。inputname 这个函数将会返回对于特定参数个数的实际变量名。函数 nargin 和 nargout 只用在用户自定义函数中。当他们被调用时,这些函数将会分别返回实际

45、输入、输出参数的个数。如果一个函数在被调用时含有过多或过少的参数,函数nargchk 将会产生一个包含标准错误的字符串。此函数的语法如下:message=nargchk(min_args,max_args,num_args);其中 min_args 是指参数的最小个数,max_args 是指数的最大个数,num_args 是指参数的实际个数。如果参数的个数不在允许的范围,将会产生一个标准的错误信息。如果参数的个数在允许的范围之内,那么这个函数将返回一个空字符。函数 error 是用于显示标准的错误信息和用于中止导致错误信息的自定义函数的一种标准方式。这个函数的语法是 error(msg),其中

46、 msg 是一个包含错误信息的字符串。当 error函数执行,它将会中止当前函数,并返回到键盘输入状态,在命令窗中显示出错误信息。如果这个信息字符中为空,error 函数将什么也不做,当前函数继续执行。如果当前函数与线程数 nargchk 工作良好,当有错误发生时,error 将产生一个信息字符串,当没有错误时,error 将产生一个空字符。函数 warning 是用于显示函数或线程数中的警告信息的一种标准方法。此函数的语法为 warning(msg),其中 msg 是指含有警告信息的字符串。当执行 waring 函数时,它将在命令窗口显示警告信息,和列出警告出现的函数和线程数。如果信息子符串

47、为空,warning将什么也不做。在其他情况下,函数将继续执行。当一个函数被调用时,inputname 函数将会返回实参的名字。inputname 函数的语法为 name=inputname(argno);其中 argno 是参安息的个数。如果这个参数是一个变量,那么返回将只是变量名。如果参数是一个表达式,那么这个函数将会返回空字符。例如考虑下面的函数 function myfun(x,y,z)name=inputname(2);disp(The second argument is named name);当这个函数被调用时,结果如下 myfun(dog,cat)The second arg

48、ument is named cat myfun(1,2+cat)The second argument is named 函数 inputname 用来显示警告或错误信息中的参数名非常有用。例 5.3 选择性参数的应用 15通过创建函数把直角坐标值(x,y)转化相应的极坐标值,我们向大家说选择性参数的应用。这个函数支持两个输入参数,x 和 y。但是,如果支持只有一个参数的情况,那么函数就假设 y 值为 0,并使用它进行运算。函数在一般情况下输出量为模与相角(单位为度)。但只有一个输出参数只有一个时,它只返回模。函数如下所示。function mag,angle=polar_value(x,y

49、)%POLAR_VALUE Converts(x,y)to(r,theta)%Punction POLAR_VALUE converts an input(x,y)%va1ue into(r,theta),with theta in degrees.%It illustrates the use of optional arguments.%Define variables:%angle -Angle in degrees%msg -Error message%mag -Magnitude%x -Input x value%y -Input y value(optional)%Record O

50、f revisions:%Date Programmer Description of change%=%12/16/98 S.J.Chapman Original code%Check for a legal number of input arquments msg=nargchk(1,2,nargin);error(msg);%If the y argument is missing,set it to 0.if nargin mag angle=polar_value?Error using=polar_value Not enough input arguments.mag angl

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 技术资料 > 其他杂项

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁