Matlab匿名函数与数组输入

时间:2013-11-28 23:26:12

标签: arrays matlab anonymous-function dimensions

我有一个匿名函数:

a = [1, 2];
b = [1, 1; 3, 2];
c = [4, 2];
ff = @(x) (exp(a .* x) .* c) * b;

问题是,当我有一个数组时,比如x = [1,2,3,4],Matlab认为我正在使用数组并将其乘以指数,而不是每个元素。 错误是

  

使用时出错。*   矩阵维度必须一致。

     

错误   @(X)(EXP(一个。* X)。* C)* B

我只需要像c1 * exp(a1 *x) * b11 + c2 * exp(a2 * x) * b21 + ...

这样的东西

如果我想评估每个for元素的函数,我可以使用x循环,它给出了我想要的答案,但我认为可能有一种最简单的方法,比如我们可以简单地使用f(x)并获得一个数组,其中包含在函数中计算的每个元素。我尝试使用arrayfun,但我得到了同样的错误。我想跳过for循环,因为它们对于更大的矩阵来说很慢。

2 个答案:

答案 0 :(得分:3)

这个怎么样:

results = arrayfun(ff, x ,  'UniformOutput', false);
results{:}

答案 1 :(得分:1)

使用arrayfun(ff,x,'UniformOutput',false)返回与您的四个输出对应的4个单元格。 我认为它应该是c1 * exp(a1 *x) * b11 + c2 * exp(a2 * x) * b21 + ...否则你需要在乘法之前转置你的b矩阵。