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

Arrays 如何在MATLAB函数中创建任意数量的变量,arrays,matlab,matrix,cells,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*A

在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])
有时有四个输入参数,代码如下所示:

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])
有时有五个输入参数,代码如下所示:

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])
十、 Y,W1,W2,W3等等,都是矩阵

我需要一个功能,将所有这些工作,并为任何数量的W的工作。我曾尝试使用
cell(dim)
函数创建(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))
,但出现了错误

无法从单元格转换为双精度


如何正确执行此操作?

假设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)

假设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)

您的方法基本上是正确的,但是您的单元格数组语法不正确,并且看起来不必要地复杂。使用使事情变得更简单,因为您可以简单地将矩阵作为常规参数调用,而不必手动构造单元数组:

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

您的方法基本上是正确的,但是您的单元格数组语法不正确,并且看起来不必要地复杂。使用使事情变得更简单,因为您可以简单地将矩阵作为常规参数调用,而不必手动构造单元数组:

function [Y] = ffwd(X, varargin)
Y = X;
for ii=1:length(varargin)
    Y = sigmf(varargin{ii}*Y, [1,0]);
end
认为您需要VARARGIN-No,
Wcell(1)
是1x1单元阵列
Wcell{1}
是一个矩阵。无论如何,除非单元数组对代码的其余部分也有意义,否则varargs是一种更好的方法。我认为您需要varargn-No,
Wcell(1)
是1x1单元数组
Wcell{1}
是一个矩阵。无论如何,除非单元数组对代码的其余部分也有意义,否则varargs是一种更好的方法