M文件中变量的检测与传递
可变数量的输入输出变量(varargin,vararout):
Matlab的输入输出变量数量可变,并具有以下特点:
- 可变输入输出变量必须在正常变量之后
- varargin和vararout本身为元胞数组
- 在函数调用时,会优先把变量赋予正常变量,在赋予varargin和vararout
- 可以使用vargin和varout获取实际的输入输出参数数量
例:
1 function varargout = spirallength2(d,n,varargin) 2 3 % 画出螺旋线或螺旋条带 4 5 % d螺旋的旋距 6 7 % n:螺旋的圈数 8 9 % varargin可输入变量第一个值可改变螺旋大小,之后的参数设定属性Nin=length(varargin)+1; %Nin为输入变量的长度+1 10 11 if nargout>1 %输出参数多于一个时报错 12 13 error('Too many output arguement!'); 14 15 end 16 17 j=sqrt(-1); 18 19 phi = 0:pi/20:n*2*pi; 20 21 amp = 0:d/40:n*d; 22 23 spir = amp .*exp(j*phi); %准备数据 24 25 if nargout==0 26 27 switch Nin 28 29 case 1 %输入变量只有d,n 30 31 plot(spir,'b'); 32 33 case 2 %可变输入变量varargin有一个varargin{1} 34 35 d1=varargin{1}; 36 37 amp1=(0:d/40:n*d)+d1; 38 39 spir1=amp1.*exp(j*phi); 40 41 plot(spir,'b'); 42 43 hold on; %开启绘图保留,原来的绘图不会被删除 44 45 plot(spir1,'b'); 46 47 hold off; %关闭绘图保留 48 49 otherwise 50 51 d1=varargin{1}; 52 53 amp1=(0:d/40:n*d)+d1; 54 55 spir1=amp1.*exp(j*phi); 56 57 plot(spir,varargin{2:end}); %使用varargin{2}之后传的属性值 58 59 hold on; 60 61 plot(spir1,varargin{2:end}); 62 63 end 64 65 axis('square') %坐标轴设置,使用相同长度的坐标轴线。相应调整数据单位之间的增量 66 67 else %有一个输出参数的情况 68 69 phi0=0:pi/1000:n*2*pi; 70 71 amp0=0:d/2000:n*d; 72 73 spir0=amp0 .*exp(j*phi0); 74 75 varargout{1}=sum(abs(diff(spir0))); 76 77 if Nin>1 78 79 d1=varargin{1}; 80 81 amp1=(0:d/2000:n*d)+d1; 82 83 spir1=amp1.*exp(j*phi0); 84 85 varargout{1}=sum(abs(diff(spir1))); 86 87 end 88 89 end 90 91 end
- 在命令行输入:
>> spirallength2(2,2)
输入参数只有d,n,无输出参数
- 在命令行输入:
>> spirallength2(2,2,1,'Marker','o')
第三个输入参数’1’使得螺旋线直径加一,第4,5个参数使得螺旋线形状变为’o’
- 在命令行输入
>> a=spirallength2(2,2,1,'Marker','o')
有输出参数,可获得螺旋线周长