当前位置:首页 > matlab4
新疆大学重点课程·电子教案 17 页 共 41 页
调用 tran.m 的命令文件 main1.m: x=input('Please input x=:'); y=input('Please input y=:'); [rho,the]=tran(x,y); rho the
例 利用函数的递归调用,求 n!。 递归调用函数文件 factor.m: function f=factor(n) if n<=1 f=1; else
f=factor(n-1)*n; end
在 命 令 文 件 main2.m 中 调 用 函 数 文 件 factor.m 求s=1!+2!+3!+4!+5!。
当在 Matlab 命令行或其他 M 文件调用函数时,应当包括所有必须 的参数。
在 Matlab 中遇到一个新名字时,在把它解释为一个函数之前要进行以下检查工作:
? 检查是否是一个变量的名字;
? 检查是否是一个子函数的名字,子函数在调用函数内部; ? 检查是否是一个私有函数;
? 检查是否是一个在 Matlab 搜索路径下的函数,如果有几个相同名字的函数,Matlab 将使用第一个。
3、函数所传递参数的可调性(检查输入输出参数的数目) 在调用函数时,MATLAB 用两个永久变量 nargin 和 nargout 分别记录调用该函数时的输入实参和输出实参的个数。只要在函数文件 中
新疆大学重点课程·电子教案 18 页 共 41 页
包含这两个变量,就可以准确地知道该函数文件被调用时的输入 输出参数个数,从而决定函数如何进行处理。 n=nargin 返回函数指定的输入参数
n=nargin('fun') 返回指定函数声明的输入参数的数目,如果返回 为-1,表明具有可变数目的输入参数
n=nargout 返回函数指定的输出参数 n=nargout('fun') 返回指定函数声明的输出参数的数目 例 nargin 用法示例。 函数文件 examp.m: function fout=charray(a,b,c) if nargin==1 fout=a; elseif nargin==2 fout=a+b; elseif nargin==3 fout=(a*b*c)/2; end
命令文件 mydemo.m: x=[1:3];y=[1;2;3]; examp(x) examp(x,y') examp(x,y,3)
4、传递可变数目的输入输出参数
varargin 和 varargout 变量可以让函数文件传递任意数量的输入输 出参数,Matlab 将所有指定的输入输出打包成细胞数组,每个细胞(cell)可以包含任意大小和类型的数据。 (1)传递可变数目的输入参数
新疆大学重点课程·电子教案 19 页 共 41 页
例:函数接收任意数量的两单元矢量输入参数,并画一条线来连接它们:
function testvar(varargin) %取出 varargin 中的所有输入值 for i = length(varargin) x(i) = varargin{i}(1);
%第一个下标表示细胞数组的第 i 个 cell, %第二个下标表示指定 cell 的第 1 个成员 y(i)= varargin{i}(2); end
%设定坐标并画 varargin 图 xmin = min(0,min(x)); ymin = min(0,min(y));
axis([xmin fix(max(x)) + 3 ymin fix(max(y)) + 3]) plot(x,y)
这样函数 testvar 就可以处理可变的输入列表,如 testvar([2 3],[1 5],[4 8],[6 5],[4 2],[2 3]) testvar([-1 0],[3 –5],[4 2],[1 1]) (2)传递可变数目的输出参数
要传递任意数量的输出参数,就要把全部输出打包到 varargout 细 胞数组,这里可以用 nargout 来确定调用函数时输出列表中项的数 目。 例:
function [varargout]=mysize(x)
s=size(x); for i=1: nargout varargout(i) = {s(i)};
新疆大学重点课程·电子教案 20 页 共 41 页
end
在命令窗口中输入: [rows,cols]=mysize(rand(4,5)) (3)在参数列表中应用
如果在参数列表中使用 varargin 和 varargout,必须把 varargin 和 varargout 放在参数列表的最后面。在调用函数时,必须指定需要 的参数,使用形式为:
function [out1,out2]=example1(a,b,varargin) function [i,j,varargout]=example2(x1,y1,x2,y2,flag) 例:输入参数列表函数: function myplot(x,varargin) plot(x,varargin{:}) 调用函数:
myplot(sin(0:.1:1),'color',[.5,.7,.3],'linestyle',':') 例:输出参数列表 函数:
function [s,varargout]=mysize(x) nout=max(nargout,1) –1; s=size(x); for i=1: nout
varargout(i) = {s(i)}; end 调用函数:
[s, rows, cols]= mysize(rand(4,5));
5、全局变量和局部变量
全局变量用命令 global 定义。函数文件的内部变量是局部的,与其 他函数文件及 MATLAB 工作空间相互隔离。
共分享92篇相关文档