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