Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/tfs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab:将所有参数传递给函数句柄_Matlab_Arguments_Function Handle - Fatal编程技术网

Matlab:将所有参数传递给函数句柄

Matlab:将所有参数传递给函数句柄,matlab,arguments,function-handle,Matlab,Arguments,Function Handle,我在一系列文件上运行了很多函数。因此,创建一个在文件上运行函数的函数是合乎逻辑的,而不是在每个文件中重复该过程。问题是每个函数的参数数量不同! 因此,psudo代码是: function [out1, out2]=batchDo(@func,adrs,arg1,arg2,...,argn) files=ls(adrs); for i=1:length(files) raw=load([adrs files(i)]); [out1, out2]=func(raw,arg1,arg

我在一系列文件上运行了很多函数。因此,创建一个在文件上运行函数的函数是合乎逻辑的,而不是在每个文件中重复该过程。问题是每个函数的参数数量不同! 因此,psudo代码是:

function [out1, out2]=batchDo(@func,adrs,arg1,arg2,...,argn)

files=ls(adrs);
for i=1:length(files)
    raw=load([adrs files(i)]);
    [out1, out2]=func(raw,arg1,arg2,...,argn)
    out1s=out1+out1s;
    out2s=out2+out2s;
end
out1=out1s/length(files);
out2=out2s/length(files);

幸运的是,在我的例子中,输出几乎是相似的,我可以添加一些假人使它们都相似。但如果有类似的解决方法,我将不胜感激。

如果输入的顺序(或可以重新排序),例如:

  • 所有函数都采用参数1到3
  • 接受附加参数的函数按顺序接受这些参数:arg4到arg8,arg4到arg10,等等
然后,您可以非常简单地将
varargin
添加到每个不使用完整参数集的函数中,而只替换未使用的参数(就像定义可选参数一样),然后在实际函数中忽略它。因此,函数可能是:

function myfunction(raw, arg1, arg2, arg3, arg4, arg5, varargin)

实际上,这只使用arg1…arg5,其他的被忽略。

霍奇勒的答案是正确的,如果我只是将varargin作为varargin{:}传递,它会自动提供我所需要的。
如果在所有函数中使用varargin,然后尝试寻址varargin.arg1而不是arg1,则会降低代码的速度。有很多文章对性能进行了比较。

我不想使用varargin,因为我的数据太大,对字段进行寻址会使例程速度非常慢。如果您只使用
arg1
等。对于
func
,是否可以只使用
varargin
而不单独对单元格进行寻址,即
func>(raw,varargin{:})
?或者创建一个匿名函数来捕获相关参数并将其传递给其他人,例如,
func2=@(raw)func(raw,arg1,arg2,…,argn)
。我不确定任何人应该如何回答这个问题——这近乎于“不清楚你在问什么”我认为你需要解释一下你对varargin的反对。它不应该太慢,而且很明显,它是MATLAB中用于不同数量参数的明显机制。