M文件变量检测与传递

M文件中变量的检测与传递

可变数量的输入输出变量(varargin,vararout):

Matlab的输入输出变量数量可变,并具有以下特点:

  1. 可变输入输出变量必须在正常变量之后
  2. varargin和vararout本身为元胞数组
  3. 在函数调用时,会优先把变量赋予正常变量,在赋予varargin和vararout
  4. 可以使用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

 

 

  1. 在命令行输入:

>> spirallength2(2,2)

 M文件变量检测与传递

 

 

输入参数只有d,n,无输出参数

 

  1. 在命令行输入:

>> spirallength2(2,2,1,'Marker','o')

 M文件变量检测与传递

 

 

第三个输入参数’1’使得螺旋线直径加一,第4,5个参数使得螺旋线形状变为’o’

 

  1. 在命令行输入

>> a=spirallength2(2,2,1,'Marker','o')

 M文件变量检测与传递

 

 

 

 

 

有输出参数,可获得螺旋线周长

 

上一篇:【图像处理】基于matlab GUI自动报靶系统【含Matlab源码 814期】


下一篇:【TSP】基于matlab模拟退火算法求解旅行商问题【含Matlab源码 1129期】