M文件中变量的检测与传递
可变数量的输入输出变量(varargin,vararout):
Matlab的输入输出变量数量可变,并具有以下特点:
- 可变输入输出变量必须在正常变量之后
- varargin和vararout本身为元胞数组
- 在函数调用时,会优先把变量赋予正常变量,在赋予varargin和vararout
- 可以使用vargin和varout获取实际的输入输出参数数量
例:
function varargout = spirallength2(d,n,varargin) % 画出螺旋线或螺旋条带 % d螺旋的旋距 % n:螺旋的圈数 % varargin可输入变量第一个值可改变螺旋大小,之后的参数设定属性Nin=length(varargin)+; %Nin为输入变量的长度+ if nargout> %输出参数多于一个时报错 error('Too many output arguement!'); end j=sqrt(-); phi = :pi/:n**pi; amp = :d/:n*d; spir = amp .*exp(j*phi); %准备数据 if nargout== switch Nin case %输入变量只有d,n plot(spir,'b'); case %可变输入变量varargin有一个varargin{} d1=varargin{}; amp1=(:d/:n*d)+d1; spir1=amp1.*exp(j*phi); plot(spir,'b'); hold on; %开启绘图保留,原来的绘图不会被删除 plot(spir1,'b'); hold off; %关闭绘图保留 otherwise d1=varargin{}; amp1=(:d/:n*d)+d1; spir1=amp1.*exp(j*phi); plot(spir,varargin{:end}); %使用varargin{}之后传的属性值 hold on; plot(spir1,varargin{:end}); end axis('square') %坐标轴设置,使用相同长度的坐标轴线。相应调整数据单位之间的增量 else %有一个输出参数的情况 phi0=:pi/:n**pi; amp0=:d/:n*d; spir0=amp0 .*exp(j*phi0); varargout{}=sum(abs(diff(spir0))); if Nin> d1=varargin{}; amp1=(:d/:n*d)+d1; spir1=amp1.*exp(j*phi0); varargout{}=sum(abs(diff(spir1))); end end end
- 在命令行输入:
>> spirallength2(2,2)
输入参数只有d,n,无输出参数
- 在命令行输入:
>> spirallength2(2,2,1,'Marker','o')
第三个输入参数’1’使得螺旋线直径加一,第4,5个参数使得螺旋线形状变为’o’
- 在命令行输入
>> a=spirallength2(2,2,1,'Marker','o')
有输出参数,可获得螺旋线周长