设f是以如下方式定义的函数:f = @(x)( x + [x(1); 0])也就是说,函数f将列向量作为输入。定义另一个使用函数f的函数g:g = @(x)(f([x;0]))函数g取标量值作为输入。现在我想用多个参数来计算g,比如x = 0,x = 1和x = 2。写入g(0:2)不起作用:要连接的数组的维度不一致。我想要的结果是[g(0), g(1), g(2)]。我怎么能这么做
f = @(x)( x + [x(1); 0])
g = @(x)(f([x;0]))
g(0:2)
[g(0), g(1), g(2)]
mwg9r5ms1#
你可以使用arrayfun基本上是一个伪装的循环。您必须设置指定的输入'UniformOutput' = false(此处显示为'uni', 0),结果将是一个单元格数组,每个输入值包含一个数组元素
arrayfun
'UniformOutput' = false
'uni', 0
h = arrayfun( g, 0:2, 'uni', 0 ); h = 1×3 cell array {2×1 double} {2×1 double} {2×1 double}
您可以使用以下命令将它们合并到一个矩阵中
h = [h{:}] h = 0 2 4 0 0 0
或者,您可以定义f和g来处理行向量输入,因为它们只扩展了您可以以向量化的方式对每列进行计算的行数。那么输出就是一个矩阵,每个输入一列,不需要arrayfun
f
g
f2 = @(x)( x + [x(1,:); zeros(1,size(x,2))]) g2 = @(x)(f2([x;zeros(1,size(x,2))])) h2 = g2(0:2) h2 = 0 2 4 0 0 0
1条答案
按热度按时间mwg9r5ms1#
你可以使用
arrayfun
基本上是一个伪装的循环。您必须设置指定的输入'UniformOutput' = false
(此处显示为'uni', 0
),结果将是一个单元格数组,每个输入值包含一个数组元素您可以使用以下命令将它们合并到一个矩阵中
或者,您可以定义
f
和g
来处理行向量输入,因为它们只扩展了您可以以向量化的方式对每列进行计算的行数。那么输出就是一个矩阵,每个输入一列,不需要arrayfun