《MATLABSimulink系统仿真超级学习手册》——2.5 文件的编写

    xiaoxiao2023-08-13  168

    本节书摘来自异步社区《MATLAB/Simulink系统仿真超级学习手册》一书中的第2章,第2.5节,作者:MATLAB技术联盟 , 石良臣著,更多章节内容可以访问云栖社区“异步社区”公众号查看

    2.5 文件的编写

    MATLAB/Simulink系统仿真超级学习手册M文件可分为脚本M文件(简称脚本文件)和函数M文件(简称函数文件)两大类,其特点和适用领域均不同。

    2.5.1 脚本文件脚本文件是由MATLAB语句构成的文本文件,以.m为扩展名。运行命令文件的效果等价于从MATLAB命令窗口中按顺序逐条输入并运行文件中的指令,类似于DOS下的批处理文件。

    脚本文件运行过程所产生的变量保留在MATLAB的工作空间中,脚本文件也可以访问MATLAB当前工作空间的变量,其他脚本文件和函数可以共享这些变量。因此,脚本文件常用于主程序的设计。

    【例2-17】编写脚本文件,对数a、b、c进行排序,并按从大到小的顺序输出。

    (1)在MATLAB窗口中输入a、b、c的数值,即下面语句:

    >> a=1;b=0;c=3;

    (2)新建一个文本文件,在该文本编辑窗口中输入对数a、b、c进行排序的命令,并以文件名ep2_17.m保存,如图2-17所示。

    注意:sort是MATLAB的内置函数,用于对矩阵进行排序,descend表示降序。

    (3)在MATLAB命令窗口中输入M文件名,即ep2_17,得到下面结果。

    >> ep2_17 ans =     3  1  0

    注意:文本文件ep2_17执行过程中,成功地访问了MATLAB工作空间的变量和数据a、b、c。

    2.5.2 函数文件函数文件是M文件的另一种类型,它也是由MATLAB语句构成的文本文件,并以.m为扩展名。MATLAB的函数文件必须以关键字function语句引导,其基本结构如下:

    function [返回参数1,返回参数2,…]=函数名(输入参数1,输入参数2,…)     % 注释说明语句段,由%引导   输入、返回变量格式的检测语句   函数体语句

    函数文件具有如下特点。

    (1)函数名由读者自定义,与变量的命名规则相同。

    (2)保存的文件名必须与定义的函数名一致。

    (3)读者可通过返回参数及输入参数来实现函数参数的传递,但返回参数和输入参数并不是必须的。返回参数如果多于1个,则应该用中括号“[]”将它们括起来;输入参数列表必须用小括号“()”括起来,即使只有一个输入参数。

    (4)注释语句段的每行语句都应该用%引导,%后面的内容不执行。用户可用help命令显示出注释语句的内容,用于函数使用前的信息参考。

    (5)如果函数较复杂,则正规的参数格式检测是必要的。如果输入或返回参数格式不正确,则应该给出相应的提示。

    (6)函数中输入和返回参数的实际个数分别有MATLAB内部保留变量nargin和nargour给出,只要运行了该函数,MATLAB将自动生成这两个变量,因此用户编程时可直接使用。

    (7)与一般高级语言不同的是,函数文件末尾处不需要使用end命令。

    【例2-18】编写函数文件,以数a、b、c为函数参数,对数a、b、c进行排序,并按从大到小的顺序输出。

    (1)新建一个文本文件,在该文本编辑窗口中输入下面的命令,并以文件名ep2_18保存在当前工作目录中;

    function out=ep2_18(a,b,c) % This function is used to sort a, b and c. if nargin==3   out=sort([a,b,c],'descend'); end

    注意:这里有对参数个数的检测,参数个数等于3时排序命令才会执行。

    (2)在MATLAB命令窗口中调用该函数文件,得到下面的结果。

    >> out = e2_17(1,0,3) out =   3  1  0

    注意:调用函数文件时,运行结果可保存在任意名称的变量下,不必与函数文件中的返回变量相同。

    与脚本文件相比,函数文件的优点之一是实现了参数的传递,这极大地提高了文件的通用性。例如,在分别用脚本文件和函数文件实现对数a、b、c的排序程序中,所用的命令几乎一样,但脚本文件ep2_16只能在当前工作窗口中使用,参数必须在工作空间中给定,而函数文件ep2_17则可以被任何主程序或其他函数调用,参数可以任意设定。

    【例2-19】编写函数文件,实现一个n行m列矩阵,使得该矩阵第i行第j列元素值为1/(i+j-1)。要求在编写的函数中实现如下几点:

    (1)如果只给出一个输入,则会自动生成一个方阵;

    (2)在函数中给出合适的注释信息;

    (3)检测输入和返回变量的个数,如果有错误则给出错误信息。

    编写函数文件ep2_19,在该文件中输入下面的语句:

    function A=ep2_19(n,m) % 该函数用于创建一个特殊矩阵: A(i,j)=1/(i+j-1) % A=ep2_18(n,m) 创建一个n行m列矩阵 % A=ep2_18(n) 创建一个n阶方阵 if nargout>1   error('Too many output arguments!'); end if nargin==1   m=n; elseif (nargin==0)||(nargin>2)   error('Wrong number of input arguments'); end A=zeros(n,m); for i=1:n   for j=1:m     A(i,j)=1/(i+j-1);   end end

    在MATLAB命令窗口中调用函数ep2_19,计算结果如下:

    >> A=ep2_19(2,3) A =   1.0000  0.5000  0.3333   0.5000  0.3333  0.2500 相关资源:MATLAB-SIMULINK建模与仿真实例精讲-张德丰(pdf).
    最新回复(0)