原因:自定义函数时没有设置返回值
如果出现代码为 A = MyFuc(3)
这类的调用自定义函数并赋值,这里就会提示Too many output arguments.
,因为你自定义的函数的值并没有返回,所以无法进行赋值给A
其他变量
例如下面的式子,我需要返回数组里每一个元素的素数阶乘,自定义了函数fac可以计算每一个函数的素数阶乘,但当我要在数组里面调用fac时一直报错。
%根据输入是数还是数组的不同,分别计算
function Test16_input(A)
switch length(A)
case 1%当输入是单个的数时
fprintf('此数的素数阶乘为:\n');
fac(A)
otherwise%当输入是数组时
fprintf('此数组的素数阶乘为:\n');
B = arrayfun(@fac,A);%将函数fac应用于 A 的每一个元素并将输出串联成输出数组 B
disp(B);
end
end
%计算小于此数的素数阶乘
function fac(N)
x = 1;
for i = 1:N-1
if isprime(i)%判断数是否为素数
x = x * i;%如果是则累乘
i = i + 1;
else
i = i + 1;
end
end
end
运行:
Error using Test16_input>fac
Too many output arguments.
Error in Test16_input (line 9)
B = arrayfun(@fac,A);%将函数fac应用于 A 的每一个元素并将输出串联成输出数组 B
正确方法:修改函数定义的同时返回值到x
function [x] = fac(N)
运行:
>>A = randi(10,3,4)
A =
1 1 4 8
9 6 9 8
9 10 7 1
>>Test16_input(A)
此数组的素数阶乘为:
1 1 6 210
210 30 210 210
210 210 30 1