在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))
,但它出现了错误
无法从单元格转换为双倍
我该如何正确地做到这一点?
答案 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)