Matlab varargin-varargout函数

Matlab varargin-varargout函数,matlab,matrix,Matlab,Matrix,我有一个简单的任务要在MATLAB中使用矩阵的varargin/out 我必须返回行数和列数相同的乘法元素的结果,如下所示: tab(1,1)*tab(2,2)等等 我写了一些代码,但它只返回第一个矩阵的结果。乘法有效,因为我在乘法后使用disp(result)进行了检查 这是我的代码,我应该如何更改它以返回所有矩阵的结果 function varargout = test(varargin) n = length(varargin); disp(n); for k=1:n [ro

我有一个简单的任务要在MATLAB中使用矩阵的
varargin
/
out

我必须返回行数和列数相同的乘法元素的结果,如下所示:

tab(1,1)*tab(2,2)
等等

我写了一些代码,但它只返回第一个矩阵的结果。乘法有效,因为我在乘法后使用
disp(result)
进行了检查

这是我的代码,我应该如何更改它以返回所有矩阵的结果

function varargout = test(varargin)

n = length(varargin);
disp(n); 
for k=1:n
    [row, col] = size(varargin{k});
    result = 1;
    for i=1:row
        for j=1:col
            if i == j
            result = result * varargin{k}(i,i);
            end
        end
    varargout{k} = result;
    end
end

返回的参数数量将由调用函数的方式定义。例如,如果您编写了:

a = test(x, y, z);
只返回第一个输出参数。相比之下

[a, b] = test(x,y,z);

将返回第一个和第二个输出。如果只想返回带有结果的单元格数组,请将输出参数命名为除
varargout
以外的其他名称,这样您将得到一个输出,每个输入的结果都在一个单元格中。

不是对您的问题的回答,但您的函数可以作为一行重新编写:

function varargout = test2(varargin) 

    varargout = cellfun(@(x) prod(diag(x)), ...
                        varargin,...
                        'UniformOutput', false);

end

您可以(最初)将其作为一个函数来验证您自己的函数,然后(稍后)通过了解它的工作原理从中学习很多东西

与你的问题无关,但如果你想乘以对角线元素,你可以使用:
prod(diag(M))
I add r1=(one(1,n));在第一个循环之前,r1(1,i)=结果;而不是varargout{k}=result;现在,即使我创建了1x3数组,我也有4个输出参数。输入大小的迭代索引是
k
,因此在分配输出变量时,您可能不想使用
I
。。。