2013-11-28 70 views
2

我有一个匿名函数匿名函数:Matlab的与阵列输入

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(A * X)。* C)* B

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

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

+0

你肯定是说'C1 * EXP(A1 * X)* B11 + C2 * EXP(A2 * X)* B21 + ...'? –

+0

是的,对不起,我会纠正我的问题 –

+0

你的结果应该是多少(对于给定的示例值)? –

回答

1

这个怎么样:

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

这似乎工作得很好,谢谢。 '{:}'做什么?因为用第一个命令,我得到'[1x2 double]' –

+1

@DavidWinchester'arrayfun'返回一个单元格。 'results {:}'只会输出结果。 – Marcin

+0

我可以将结果存储在新阵列中吗?做结果=结果{:}'只给我第一个值 –

1

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

+0

是的,有人在以前指出,我纠正了我的问题。谢谢。 –