Matlab feval函数 nargin和varargin的用法

Matlab feval函数用法

语法

[y1,y2,...] = feval(fhandle,x1,x2,...,xn)
[y1,y2,...] = feval(fname,x1,x2,...,xn)

描述

第一种用法中的fhandle是一个函数的handle,x1,x2,…xn是该函数的参数,函数的handle怎么写,看下面的例子 
第二中用法中的fname是一个字符串表示的函数名称。注意,该名称必须是简单名称,也即不能包含路径,也不能含有.m扩展名。x1,x2,…xn是该函数参数

例子

在当前目录下新建一个M函数

function [y1,y2] = swap(x1, x2)
y1 = x2;
y2 = x1;

第一种用法:

 [a1,a2] = feval(@swap, 1,2)

第二种用法

 [a1,a2] = feval('swap',a1,a2)

不只是自定义的M函数可以这样用,内置函数也可以这样用,比如下面两种用法就是等价的

[V,D] = eig(A)
[V,D] = feval(@eig, A)

注意:
Q:第一种用法中,使用feval函数和直接调用swap函数有什么区别呢

A:这是一种回调函数的用法,在一些设计模式中非常常见。 应用场景: 假如有许多个版本的swap函数实现swap1, swap2, swap3, swap4。具体调用哪个函数需要根据某种条件进行判断,如果不使用feval,那么在每个调用swap的地方都要做判断。使用feval,你就可以把判断调用哪个函数放在一处地方,其他真正调用的都是使用feval。

Matlab nargin用法

nargin:number of function input arguments,指的是一个函数的输入变量的个数。

用法:nargin或着nargin(fx), 其中fx指的是一个函数名或着函数句柄。当一个函数的参数中含有varargin变量时,这时候返回值为负。下面举例说明:

在名为 addme.m 的文件中创建最多可接受两个输入的函数。在函数主体中使用 nargin 确定输入数目。
function c = addme(a,b)
    switch nargin
        case 2
            c = a + b;
        case 1
            c = a + a;
        otherwise
            c = 0;
    end
end

在命令提示符下使用两个输入调用 addme 函数。

c = addme(13,42)
-> c = 55
c = addme(13)
-> c = 26

fun = 'addme';
nargin(fun)
->ans = 2
确定使用 varargin 的函数可接受多少个输入。

在名为 mynewplot.m 的文件中创建一个函数,该函数接受数值输入 x 和 y,并使用 varargin 返回任意数目的其他绘图输入。
function mynewplot(x,y,varargin)
    figure
    plot(x,y,varargin{:})
    title('My New Plot')
end
查询 newplot 可以接受多少个输入。

fx = 'mynewplot';
nargin(fx)
->ans = -3
负号表示第三个输入是 varargin。mynewplot 函数可接受不定数目的附加输入参数。

Matlab varargin用法

varargin:Variable-length input arguments list. 即指的是变输入参数列表;varargin 就是一个输入 变量,它可以是任意个不定个数的输入参数。

要求:第一,指明它用小写的字母表示;第二,在函数的参数列表中,varargin放在最后面。

当函数执行时,varargin就是一个1*N的cell数组。其中 N 是函数在显式声明的输入后收到的输入项数。但是,如果该函数在显式声明的输入后未收到任何输入,则 varargin 是空元胞数组。下面我们举例说明:

在名称为 acceptVariableNumInputs.m 的文件中定义一个函数,接受个数不定的输入项,并显示每个输入项的值。
function acceptVariableNumInputs(varargin)
    disp("Number of input arguments: " + nargin)
    celldisp(varargin)
end

使用多个输入调用该函数。
acceptVariableNumInputs(ones(3),'some text',pi)

Number of input arguments: 3
 
ans{1} =
 
     1     1     1
     1     1     1
     1     1     1

 
 
ans{2} =
 
some text
 
 
ans{3} =
 
    3.1416

在名为 definedAndVariableNumInputs.m 的文件中定义一个函数,它有两个必需的输入,并且接受一定数量的附加输入。

function definedAndVariableNumInputs(X,Y,varargin)
    disp("Total number of input arguments: " + nargin)
    
    formatSpec = "Size of varargin cell array: %dx%d";
    str = compose(formatSpec,size(varargin));
    disp(str)
end

使用多个输入调用该函数。
definedAndVariableNumInputs(7,pi,rand(4),datetime('now'),'hello')
->Total number of input arguments: 5
->Size of varargin cell array: 1x3

使用两个输入调用该函数。varargin 是空元胞数组。
definedAndVariableNumInputs(13,42)
->Total number of input arguments: 2
->Size of varargin cell array: 0x0

 

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值