如何在MATLAB函数中创建任意数量的变量

时间:2014-02-27 20:50:00

标签: arrays matlab matrix cells

在MATLAB中,我有一个函数,其中变量的数量变化。最好用下面的例子说明这一点。

我有一个功能:

有时会有三个输入参数,代码如下所示:

function [Y] = ffwd(X,W1,W2)

A1 = sigmf(W1*X, [1,0]);

Y = sigmf(W2*A1, [1,0]);

有时会有四个输入参数,代码如下所示:

function [Y] = ffwd(X,W1,W2,W3)

A1 = sigmf(W1*X, [1,0])

A2 = sigmf(W2*A1, [1,0])

Y = sigmf(W3*A2, [1,0])

有时会有五个输入参数,代码如下所示:

function [Y] = ffwd(X,W1,W2,W3,W4)

A1 = sigmf(W1*X, [1,0])

A2 = sigmf(W2*A1, [1,0])

A3 = sigmf(W3*A2, [1,0])

Y = sigmf(W4*A3, [1,0])

X,Y,W1,W2,W3等......都是矩阵。

我需要一个可以完成所有这些工作的功能,并且适用于任意数量的W。我曾尝试使用cell(dim)函数来创建(暗淡)变量数,但它不起作用。

这是我到目前为止所做的:

function [Y] = ffwd(X,Wcell)                  %Wcell is a cell of multiple matrices

S = size(Wcell,2);                            %this is the number of W's

A =cell(S-2,1);                               %This will create A1, A2, A3 etc

A(1) = sigmf(Wcell(1)*X, [1,0]);              %This calculates the first intermediate step  

for i=2:S-1

    A(i) = sigmf(Wcell(i)*A(i-1), [1,0]);     %This calculates all the middle intermediate steps
end

Y = sigmf(Wcell(S)*A(S-1), [1,0]);            %This calculates the last step

但它出现了一个错误:

Undefined function 'mtimes' for input arguments of type 'cell'.

Error in test (line 7)
A(1) = sigmf(Wcell(1)*X, [1,0]);

Wcell(1)是一个矩阵,因为它是Wcell中第一个是单元格的条目。 X也是一个矩阵,所以我不知道为什么这不起作用。

我还尝试使用double(Wcell(1)),但它出现了错误

无法从单元格转换为双倍

我该如何正确地做到这一点?

2 个答案:

答案 0 :(得分:4)

您的方法基本上是在轨道上,但是您的单元阵列语法不正确,而且似乎不必要地复杂。使用varargin可以使事情更简单,因为您可以简单地使用矩阵作为常规参数调用,而不必手动构造单元格数组:

function [Y] = ffwd(X, varargin)
Y = X;
for ii=1:length(varargin)
    Y = sigmf(varargin{ii}*Y, [1,0]);
end

答案 1 :(得分:0)

假设X,W1,W2等是标量的简单情况,可以使用此函数 -

function [Y] = ffwd(varargin)

IN = cell2mat(varargin{:});

Y = IN(1);
for k = 2:numel(IN)
    Y = sigmf(IN(k)*Y, [1,0]);
end

return;

调用函数/脚本看起来像这样 -

X = 2;
IN = {[X 101 102 103 104]};
out = ffwd(IN)