MATLAB自定义函数调用赋值时提示“Too many output arguments.”

原因:自定义函数时没有设置返回值

如果出现代码为 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
发布了70 篇原创文章 · 获赞 5 · 访问量 3508

猜你喜欢

转载自blog.csdn.net/qq_42647903/article/details/103456327