MATLAB 奇怪的“输入参数过多”错误

Posted

技术标签:

【中文标题】MATLAB 奇怪的“输入参数过多”错误【英文标题】:MATLAB odd 'Too many input arguments' error 【发布时间】:2017-12-04 15:13:42 【问题描述】:

对于一个项目,我正在尝试使用 matlab 调用另一个 .m 文件中的函数。但是,它显示“输入参数不足”,即使我确实传递了我相当确定的输入参数足够。

在 eval_square.m 中:

function f = eval_square(x)

%   fitness function of the magic square
%
%   Parameters
%   ----------
%       x : array, the solution vector that represents a magic square.
%           By default, the solution vector is converted to a magic square
%           columnwisely.
%   Output
%   ----------
%       f : double, the error value of the input solution vector.
%           the mean squared error (MSE) of all each row, column and
%           diagonal sum to the magic constant is computed
%

n = sqrt(length(x));

%More stuff, but error occurs at this line.

在 MYNAME_sa.m 中:

function [xopt, fopt] = MYNAME_sa(dim, eval_budget, fitness_func)

%Stuff

if dim == 2
    len = 12^2;    % length of the solution vector, shoud be 12^2 
                 % when dim == 2
elseif dim == 3
    len = 7^3;    % length of the solution vector, shoud be 7^3 when 
                 % dim == 3
end

%Stuff

s = randperm(len)         
f = fitness_func(s)

%More stuff.

它应该将长度为 12^2 的随机排列评估为一个魔方,看看它与最优值的接近程度(即它与实际魔方的接近程度),理论上对于魔方也是如此(eval_cube),但出现同样的错误。

有问题的错误:

>> MYNAME_sa(2, 10000, eval_square)
Error using eval_square (line 18) 
Not enough input arguments.

Note that line 18 is n = sqrt(length(x));

我是否将 eval_square 硬编码到函数中并不重要 - 似乎理解我想调用 eval_square 就好了,但它只是不传递 s 或什么?我不明白为什么。我也尝试将 n 硬编码为 12,但这也不起作用,当我尝试实际使用 x 时会弹出错误。将 Fitness_func 更改为 @fitness_func 也不会改变任何内容。 所以我的问题是,为什么会发生这种情况,我该如何解决?

【问题讨论】:

你没有给函数eval_square提供输入 您不需要在MYNAME_sa(2, 10000, eval_square)eval_square 输入吗?因为在你的定义中它说eval_square(x) 继续@SardarUsama:调用fitness_funcs 是什么?在您的代码中,这不清楚。 【参考方案1】:

试试

MYNAME_sa(2, 10000, @eval_square)

【讨论】:

要添加一些额外的细节,第三个参数需要是function handle,以便MYNAME_sa 可以根据需要使用给定的输入调用它。

以上是关于MATLAB 奇怪的“输入参数过多”错误的主要内容,如果未能解决你的问题,请参考以下文章

MATLAB subplot 函数 sys 输入参数过多

“输入参数过多”是啥意思?

使用“bvp4c”Matlab 函数求解微分方程组,错误 --> 错误使用 bvp4c 输入参数过多

uicontrol 回调函数输入参数过多

调用类方法 - 输入参数过多

使用 sym.int 时出错 输入参数过多