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

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
时间: 2024-08-05 13:37:18

《MATLAB/Simulink系统仿真超级学习手册》——2.5 文件的编写的相关文章

《MATLAB/Simulink系统仿真超级学习手册》——2.7 MATLAB编程实例

2.7 MATLAB编程实例 MATLAB/Simulink系统仿真超级学习手册 MATLAB强大的运算功能和图形功能,是实现各领域的编程仿真的有力工具.本节将综合本章所讲的内容介绍MATLAB的一些编程实例,使读者对MATLAB语言的应用有一些基本的了解. 2.7.1 汉诺塔问题 Hanoi(汉诺)塔问题,是一个古典的数学问题,是一个用递归方法解题的典型例子.问题是这样的:古代有一个梵塔,塔内有3个座A.B.C,开始时A座上有n个盘子,盘子大小不等,大的在上,小的在下如图2-35所示. 现在,

《MATLAB/Simulink系统仿真超级学习手册》——1.2 MATLAB简介

1.2 MATLAB简介 MATLAB/Simulink系统仿真超级学习手册 MATLAB是MATRIX LABORATORY的简称,它是美国MathWorks公司出品的商业数学软件,用于算法开发.数据可视化.数据分析以及数值计算的高级技术计算语言和交互式环境,主要包括MATLAB和Simulink两大部分. 1.2.1 MATLAB发展史 20世纪70年代,美国新墨西哥大学计算机科学系主任Cleve Moler为了减轻学生编程的负担,用FORTRAN编写了最早的MATLAB. 1.正式走向市场

《MATLAB/Simulink系统仿真超级学习手册》——2.3 MATLAB下矩阵的运算

2.3 MATLAB下矩阵的运算 MATLAB/Simulink系统仿真超级学习手册 矩阵运算是MATLAB最重要的运算,因为MATLAB的运算大部分都建立在矩阵运算的基础之上.MATLAB有三种矩阵运算类型:矩阵的代数运算.矩阵的关系运算和矩阵的逻辑运算.其中,矩阵的代数运算应用最广泛. 根据不同的应用目的,矩阵的代数运算又包含两种重要的运算形式:按矩阵整体进行运算,按矩阵单个元素进行运算的元素群运算. 2.3.1 矩阵的代数运算 1.矩阵的算术运算 矩阵算术运算的书写格式与普通算术运算相同,

《MATLAB/Simulink系统仿真超级学习手册》——第2章 MATLAB编程基础 2.1 MATLAB工作环境

第2章 MATLAB编程基础 本书使用的MATLAB版本为MATLAB R.本章将较全面地介绍MATLAB正常运行的基本流程以及编程基础与技巧,帮助读者在领略MATLAB非凡能力的同时比较轻松地跨过MATLAB门槛,为后面学习MATLAB工具箱Simulink打下坚实的基础. 2.1 MATLAB工作环境 MATLAB/Simulink系统仿真超级学习手册 MATLAB提供了全新的工作环境,了解并熟悉该环境是使用MATLAB的基础.下面将介绍MATLAB主界面(包括工具栏.命令窗口等).文本编辑

《MATLAB/Simulink系统仿真超级学习手册》——1.3 MATLAB/Simulink应用示例

1.3 MATLAB/Simulink应用示例 MATLAB/Simulink系统仿真超级学习手册 本节将介绍几个例子来展示MATLAB/Simulink在系统仿真中的应用,希望读者通过这些例子对MATLB/Simulink有一个初步的认识. [例1-1]微分方程求解.一个非线性刚体系统可用如下方程进行描述: 试求出在初始条件y 1(0)=0.y 2(0)=1.y 3(0)=1下系统的解. 编写如下MATLAB程序: function ep1_1 options = odeset('RelTol

《MATLAB/Simulink系统仿真超级学习手册》——2.8 本章小结

2.8 本章小结 MATLAB/Simulink系统仿真超级学习手册 本章主要介绍了MATLAB的编程基础,为后面学习Simulink做准备.首先是MATLAB的工作环境,通过对MATLAB主界面.文本编辑器以及帮助文档的介绍,读者可以了解今后是在怎样一个平台上进行编程.仿真工作. 其次,MATLAB语言也是需要读者掌握的,如MATLAB的矩阵.程序流程控制等,都是十分重要的.MATLAB是矩阵实验室的意思,所以矩阵的运算在MATLAB语言中有着举足轻重的地位.M文件是读者施展编程才能的地方.利

《MATLAB/Simulink系统仿真超级学习手册》——2.4 MATLAB的程序流程控制

2.4 MATLAB的程序流程控制 MATLAB/Simulink系统仿真超级学习手册 作为一种程序设计语言,MATLAB同一般高级程序语言一样,为用户提供了丰富的程序结构语言来实现用户对程序流程的控制. MATLAB的程序路程控制主要包括循环控制和条件选择控制. 2.4.1 循环控制结构 1.for循环结构 for循环结构的格式为 for 循环变量=向量表达式 循环体语句组 end 该循环结构的执行方式为:从向量表达式的第一列开始,依次将向量表达式各列的值赋值给循环变量,然后执行循环体语句组中

《MATLAB/Simulink系统仿真超级学习手册》——2.2 MATLAB语言基本元素

2.2 MATLAB语言基本元素 MATLAB/Simulink系统仿真超级学习手册 MATLAB语言提供了丰富的数据类型,如实数.复数.向量.矩阵.字符串.多维数组.结构体.类和对象等,还提供了丰富的内置功能函数.这些功能使得MATLAB的编程功能非常强大.本节介绍变量和矩阵这两种最基本且常用的数据类型以及赋值语句的基本形式. 2.2.1 变量 变量是保存数据信息的一种最基本的数据类型.变量的命名应遵循如下规则: (1)变量名必须以字母开头: (2)变量名可以由字母.数字和下划线混合组成: (

《MATLAB/Simulink系统仿真超级学习手册》——2.6 MATLAB的图形绘制

2.6 MATLAB的图形绘制 MATLAB/Simulink系统仿真超级学习手册MATLAB除了强大的数值分析功能外,还具有方便的绘图功能.利用MATLAB丰富的二维.三维图形函数和多种修饰方法,只要指定绘图方式并提供绘图数据,就可以绘制出理想的图形.由于MATLAB的图形系统是建立在诸如线.面等图形对象的集合基础之上,因此用户可以对任何一个图形元素进行单独的修改,而不影响图形的其他部分. 2.6.1 二维图形的绘制1.基本绘图命名MATLAB中最常用的绘图函数为plot(),它是用于绘制二维