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_func
时s
是什么?在您的代码中,这不清楚。
【参考方案1】:
试试
MYNAME_sa(2, 10000, @eval_square)
【讨论】:
要添加一些额外的细节,第三个参数需要是function handle,以便MYNAME_sa
可以根据需要使用给定的输入调用它。以上是关于MATLAB 奇怪的“输入参数过多”错误的主要内容,如果未能解决你的问题,请参考以下文章