Arrays 如何在MATLAB函数中创建任意数量的变量
在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
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是一种更好的方法