概述
3. 其他例子2
Matlab有非常多的内嵌函数和工具箱函数用到了varargin。比如最常见的plot函数,除了x,y是数据意外,剩下的都需指定 属性名称(PropertyName)及其 属性值(PropertyValue)。例如:
x = -pi:pi/10:pi;
y = tan(sin(x)) -sin(tan(x));
Plot(x,y,'--rs','LineWidth',2,'MarkerEdgeColor','k',…
'MarkerFaceColor','g','MarkerSize',10);
当函数形参过多的时候,使用varargin定义函数形参的形式是非常必要的。但是帮助文件言之不详,而且普通的调用方法无法实现报错功能。在查阅众多内嵌函数后,这里给大家以一个例子说明各种数据类型:字符串、数值、变量的用法。
本文最有价值的在于两个内嵌函数(help都help不到哦)的使用:
internal.stats.parseArgs internal.stats.getParamVal
对每个属性赋值,若调用lrh函数时没有添加某个属性,则自动为默认值这个函数的意义就在于不需要对着varargin元胞一个一个对比、赋值了。报错功能:凡是属性值包含字符串的属性,都需要用此函数检查是否用户输入的属性值不包含在属性全部属性值中。
函数调用脚本
X=1:20;
Y=60:-1:41;
result=lrh(x,y,'Algorithm','+','U',4,'Sqornot','false');
function result=lrh(x,y,varargin)
%% varargin示例函数
% x,y为长度为l的两个数值向量
% 用于计算result=f(x,y)
% Algorithm包含加、减、乘、除四种运算
% a为x前系数,b为y前系数,如result=ax+by默认为1.
% u为截距项,默认为长度为l的零向量
% sqornot为是否开方,属性值为true 或者 false
%% 设置默认属性、属性值
paramNames ={'Algorithm','A','B','U','Sqornot'};
vU=zeros(length(x),1);
defaultsValue ={'+',1,1,vU,'false'};
%% 对每个属性赋值,若调用lrh函数时没有添加某个属性,则自动为默认值
[vAlgorithm, vA,vB, vUU, vSqornot]...
=internal.stats.parseArgs(paramNames,defaultsValue,varargin{:});
%% 报错功能:凡是属性值包含字符串的属性,都需要用internal.stats.getParamVal检查是否用户输入的属性值不包含在属性全部属性值中
AlgorithmNames ={'+','-','*','/'};
vAlgorithm =internal.stats.getParamVal(vAlgorithm,AlgorithmNames,...
'''Algorithm''');
SqornotNames ={'true','false'};
vSqornot =internal.stats.getParamVal(vSqornot,SqornotNames,...
'''Sqornot''');
%% 主函数
vUU=zeros(length(x),1)+vUU;
switch vAlgorithm
case'+'
switch vSqornot
case 'true'
result=sqrt(vA*x+vB*y+vUU);
case 'false'
result=vA*x+vB*y+vUU;
end
case '-'
switch vSqornot
case 'true'
result=sqrt(vA*x-vB*y-vUU);
case 'false'
result=vA*x-vB*y-vUU;
end
case '*'
switch vSqornot
case 'true'
result=sqrt((vA*x).*(vB*y).*vUU);
case 'false'
result=(vA*x).*(vB*y).*vUU;
end
case '/'
switch vSqornot
case 'true'
result=sqrt((vA*x)./(vB*y)./vUU);
case 'false'
result=(vA*x)./(vB*y)./vUU;
end
end
4. 其他例子3
C语言中可以通过参数的个数和数据类型来区分同名函数,实现函数的重载。matlab的函数重载是通过检查函数调用时输入输出的项数来实现。
nargin和nargout分别返回它所在函数当前被调用时实际输入的项数
nargchk()检查输入的参数个数是否符合指定的范围:
msgstr=nargchk(minargs,maxargs,numargs)
msgstr=nargchk(minargs,maxargs,numargs,'string')
其中,minargs和maxargs合法的最大值最小值,numargs为求得的输入项的项数,可直接为函数nargin。如果输入变量个数超出范围,则返回错误信息;如果变量个数在范围内则返回空矩阵。
例:实现两个数相加或者三个数相乘
function B =addd(varargin)
% varargin是matlab内部变量,cell型,依次存储函数的所有输入变量
% 如add(A1, A2, A3), 则 varargin{1} = A1,varargin{2} = A2, varargin{3} = A3
% nargin同样也是matlab内部变量, 为函数输入变量的个数
%如果变量个数小于2大于3,则报错
error(nargchk(2,3,nargin));
if nargin == 2
A1= varargin{1};
A2= varargin{2};
B=A1+A2;
else
A1= varargin{1};A2=varargin{2};
A3=varargin{3};
B=A1*A2*A3;
end ;
>> addd(1)
Error using addd(line 2)
Not enough inputarguments.
>> addd(1,2,3,4)
Error using addd(line 2)
Too many inputarguments.
>>addd(7,2,3)
ans =
42
最后
以上就是欣喜煎饼为你收集整理的matlab 句柄函数 varargin,Varargin的用法及其例子总结的全部内容,希望文章能够帮你解决matlab 句柄函数 varargin,Varargin的用法及其例子总结所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复