在进行通信系统优化过程中,遇到了这个报错,现将报错内容和解决方案记录下来,希望能给同样遇到这个问题的朋友们提供一个思路。
这个报错的含义是:传递的参数数量比函数所定义的参数数量要多。
我在遇到问题查阅资料的时候,发现有一个解决办法,就是认为报错原因是工作区有和你所用函数同名的函数(或者你的代码所在文件夹有一个同名函数),所以你在往下看之前可以先排查一下这个原因。
如果不是这个原因,你可以看一下是不是因为你在该函数中对某一个函数句柄进行了索引。
因为MATLAB中的函数句柄的参数和对数组的索引使用的都是圆括号,所以如果你的函数句柄计算出来恰好一个数组的话,就有可能出现这个问题,这里举一个例子:
f = @(x) x.^2;
其中如果最终优化的时候认为待优化变量x是一个二维矩阵,那么f可见也是一个想同维度的矩阵。
现在,你定义了一个函数,如下:
function result = f_calculate(f,a)
...
result = f(i,j)*a;
...
end
这样就会导致出现如题报错。
因为MATLAB认为f后面的圆括号里只能输入一个参数(你就是这么定义f的),但是,你又在f_calculate中对二维矩阵f进行了索引(MATLAB认为你此时给f传入了两个参数),所以报错输入参数过多。
由于我们不能对一个函数句柄直接进行索引,所以你需要这样写:
function result = f_calculate(x,a)
...
f = x.^2;
...
result = f(i,j)*a;
...
end
也就是说,你需要调用函数句柄f,传递正确的参数,获得返回的矩阵或值。然后再使用返回的矩阵进行索引。
希望对你有帮助,后续我还会更新相关内容,喜欢的话就关注我吧~