第六章 MATLAB程序语句
6.1 m文件及M函数
在MATLAB命令窗口中,键入一行命令,回车后,系统会立刻执行该命令,这种人机交互的工作方式称为命令行运行模式。当运行的命令较多时,如果采用命令行运行模式,直接从键盘上逐行输入命令显然比较麻烦,并且程序可读性差、难以存储,也不便于及时编辑修改。此时应该采用M程序运行模式。M程序运行模式,是指由MATLAB语句构成程序、以ASCII码文本文件的形式存储、用m作为文件扩展名的MATLAB程序在命令窗口中的自动运行。MATLAB程序可分成M文件和M函数两种,M文件即命令文件(script file),是用户为解决问题自己编制的程序,M函数即函数文件(function file),是一种子程序,一般可由其他程序调用,当然也可调用其他程序。在MATLAB中,有上千个内带的M函数。
6.1.1 M文件
MATLAB向用户提供了一个自主编写程序的环境,用户可以根据自己的需要,灵活运用MATLAB的函数(M函数)或者命令编程。
单击MATLAB主窗口工具条上的New File图标
,就可弹出如图1所示的MATLAB
文件编辑调试器MATLAB Editor/Debugger。其窗口名为untitled ,用户即可在空白窗口中编写程序。
图6.1
例如,输入如下一段程序: t=-10:0.1:10; ft=1/2*sin(t); ft1=ft.*cos(10*t); plot(t,ft,'r') hold on
plot(t,ft1,'g')
写完文件用tu.m文件名保存(save)后,在命令窗口中键入文件名tu,回车后即可显示出运行该文件的结果。
0.50.40.30.20.10-0.1-0.2-0.3-0.4-0.5-10-8-6-4-20246810
图6.2
特别提醒:所保存的m文件一定要放在搜索路径之下。
编写M文件的一般格式是:用clear、clc、clf等语句开头,其目的是为了清除掉工作空间中原有的变量和图形,以免其他已执行过的程序残留数据对本程序的影响;文件名长度一般不要超过8个字符(英文字母、数字和下划线),文件扩展名要用.m,另外,文件名要方便记忆和区分,不要太简单,也不要太复杂。
6.1.2 M 函数
M函数是MATLAB程序的一种形式,可以以函数调用的方式调用。它和M文件之间的差别是:由function开头,后跟的函数名与文件名相同;有输入输出变量,可进行变量传递;除非用global声明,程序中的变量均为局部变量,不保存在工作空间中,而M文件中运行得到的变量将会保存在工作空间中,这点一定要注意。
函数文件的基本结构
函数文件由function语句引导,基本结构如下: function [输出形参表]=函数名(输入形参表) 注释说明部分 函数体部分
其中以function开头的一行为引导行,表示该M文件是一个函数文件,函数名的命名规则和变量名相同,当输出形参多于一个时,应用[]括起来,多个参数之间用逗号分隔。
以下是一个M函数示例。 function [he cha]=hecha(x,y) he=x+y; cha=x-y;
M函数编写完成后,要用M函数名作为文件名来保存文件。实际上,在保存M函数时,对话框出现的默认文件名就是函数名。
【例6.1】:编写函数文件,求半径为r的圆的面积和周长. 在新建窗口下键入如下命令: function [S,L]=yuan(r) S=pi*r*r; L=2*pi*r;
然后保存在搜索路径之下,函数名和文件名都将为yuan.m此时,就像调用MATLAB内带的函数一样去调用它。例如,在命令窗口输入:
>> [s,t]=yuan(3) s = 28.2743 t = 18.8496
此时可以得出,当圆的半径为3时,面积为28.2743,周长为18.8496 【例6.2】编写函数文件,实现直角坐标(x,y)与极坐标(rho,theta)之间的转换. 建立函数文件tran.m
function [rho,theta]=tran(x,y) rho=sqrt(x*x+y*y) theta=atan(y/x)
在matlab中,函数可以嵌套调用,即一个函数可以调用别的函数,甚至调用本身,一个函数调用其自身称为函数的递归调用.
【例6.3】 利用函数的递归调用,求n! function f=digui(n) if n==1 f=1; else
f=digui(n-1)*n; end
编写完后保存在搜索路径之下,即可调用: >> digui(4) ans = 24
即:4*3*2*1=24
在函数的调用时,matlab有两个永久变量nargin和nargout分别记录调用该函数时的输入实参和输出实参.
【例6.4】 nargin用法示例: function fout=shican(a,b,c) if nargin==1 fout=a; elseif nargin==2 fout=a+b; else
fout=(a*b*c)/2; end
编写完后保存在搜索路径之下,即可调用: >> shican(2,4) ans = 6 >> shican(4) ans = 4
>> shican(1,2,3) ans = 3
【例6.5】:自己编写输入变量函数fenzu,用于生成均等分组的数据
function y=fenzu(a,b,n) % 如果缺少n,则令n=b-a
% 函数将a,b之间的数据n等分输出 if nargin==2 n=b-a; end
y=a:(b-a)/n:b; 保存好程序后,调用如下:
>> fenzu(1,10) ans =
1 2 3 4 5 6 7 8 9 10 >> fenzu(1,10,3) ans =
1 4 7 10
6.2 MATLAB语句
MATLAB语句有表达式语句、输入输出语句、控制语句、绘图语句和显示语句等等。表达式语句已经介绍过了,下面将简单介绍其他几个语句。
6.2.1 控制语句 1 for-end循环语句
for-end循环语句的一般格式是:
for 循环变量= 循环参数表达式 end
运算式
for-end循环语句的功能是,循环允许一组命令以固定的和预定的次数重复。
循环参数表达式通常是“标量(循环开始参数):标量(循环终止参数)”或者“标量(循环开始参数):标量(递增或递减参数):标量(循环终止参数)”的形式。 【例6.6】在M程序窗口编写如下程序:
for i=1:11
end
y(i)=sin(i);