matlab 句柄函数 varargin,Varargin的用法及其例子总结

matlab 句柄函数 varargin,Varargin的用法及其例子总结3 其他例子 2Matlab 有非常多的内嵌函数和工具箱函数用到了 varargin 比如最常见的 plot 函数 除了 x y 是数据意外 剩下的都需指定属性名称 PropertyName 及其属性值 PropertyValu 例如 x pi pi 10 pi y tan sin x sin tan x Plot x y rs LineWidth 2 MarkerE

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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/208084.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月19日 下午12:23
下一篇 2026年3月19日 下午12:24


相关推荐

  • 灰度测试或 AB 测试

    灰度测试或 AB 测试灰度测试 就是指如果软件要在不久的将来推出一个全新的功能 或者做一次比较重大的改版的话 要先进行一个小范围的尝试工作 然后再慢慢放量 直到这个全新的功能覆盖到所有的系统用户 也就是说在新功能上线的黑白之间有一个灰 所以这种方法也通常被称为灰度测试 AB 测试 就是指把少部分用户分成平均的两组 其中一组用户体验网站改版的 A 版本 另外一组用户体验网站改版的 B 版本 分别记录清楚相关的所有用户操作数据以后再进行精确的比对 最后分析得出哪一个版本是用户最喜爱的

    2026年3月17日
    3
  • 富文本编辑器Ueditor实战(一)

    富文本编辑器Ueditor实战(一)本文简单说明如何在 tomcat 中部署 ueditor 并举例介绍了他的 api 以及相关工具栏 用户可以根据需要进行调整

    2026年3月18日
    2
  • 八数码问题c语言,八数码问题的可解性

    八数码问题c语言,八数码问题的可解性对于给定八数码棋局的初始状态,我们的目标是通过交换空格与其相邻棋子使棋盘达到目标状态。其中,游戏规则是只能交换空格与其上下左右四个方向的相邻棋子。假设棋局目标状态为如下形式:(A、B、C、D、E、F、G、H表示棋子)ABCDEFGH而初始状态就是A、B、C、D、E、F、G、H这八个棋子在这九个棋格上的任意分布。并且我们对棋盘中每个棋格进行如下形式的编号:12345…

    2022年7月26日
    13
  • Tcp是什么?_跟你说完了

    Tcp是什么?_跟你说完了之前受到Wireshark——从此我就喜欢上了它,就像是学武之人得到了一把称手好剑的启发,带着回顾、深入TCP的目标,回顾了《TCP-IP协议卷1》《图解TCP/IP协议》,受益匪浅。写这篇文章,希望自己能对TCP形成一个系统性的知识沉淀,也希望能给初学者一个基本概念的认识,读完本文再深入书籍,应该也是不错滴。学习路径:1、阅读《TCP-IP协议卷1》的TCP章节(相关知识非常全面,各种算法…

    2025年9月17日
    10
  • cache数据库基本介绍

    cache数据库基本介绍Cach 是新一代高性能数据库技术 被誉为创新的 后关系型 数据库 Postrelation 作为后关系型数据库 它整合了对象数据库访问 高性能的 SQL 访问 强大的多维数据访问 这三种方法能够天衣无缝地同时访问相同的数据 数据只要在单一的整合数据字典中描述一次 就可被这三种方法访问 Cach 提供了比关系型技术更加高效的性能 更大的扩展性 更快速的编程能力和更

    2026年3月18日
    2
  • 微信公众平台 获取用户openid

    微信公众平台 获取用户openid今天做微信公众号获取用户的openid,圆满成功,特此来一发。 第一步:理解逻辑。 1:获取openid的逻辑获得微信的openid,需要先访问微信提供的一个网址:这个网址名为url1,下面有赋值。通过这个网址,微信用来识别appid信息,在这个网址中,有一个属性redirect_uri,是微识别完appid后,进行跳转的操作,可以是网页,也可以是servlet,我这里用的是…

    2022年6月26日
    88

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号