我有一个匿名函数:
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
循环,因为它们对于更大的矩阵来说很慢。
答案 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
矩阵。